<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Blogs on schneiderbox</title>
    <link>https://schneiderbox.net/blog/</link>
    <description>Recent content in Blogs on schneiderbox</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>en-us</language>
    <lastBuildDate>Sun, 29 Jan 2023 19:50:42 -0600</lastBuildDate><atom:link href="https://schneiderbox.net/blog/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Zoé: Crawl (Creepily) Before You Walk</title>
      <link>https://schneiderbox.net/blog/zoe-crawl-creepily-before-you-walk/</link>
      <pubDate>Sun, 29 Jan 2023 19:50:42 -0600</pubDate>
      
      <guid>https://schneiderbox.net/blog/zoe-crawl-creepily-before-you-walk/</guid>
      <description>(It is a game about bugs, after all.) In my first post on Hive, I wrote that Hive &amp;ldquo;requires careful design of data structures and algorithms to implement its movement rules efficiently.&amp;rdquo; Constraints like the one hive rule and the freedom to move rule, and even some of the piece movements themselves, require some thought.
However, it&amp;rsquo;s also easy to get lost in too much thought, especially at the beginning of a project.</description>
    </item>
    
    <item>
      <title>Zoé: Seeing the State</title>
      <link>https://schneiderbox.net/blog/zoe-seeing-the-state/</link>
      <pubDate>Wed, 25 Jan 2023 00:00:00 +0000</pubDate>
      
      <guid>https://schneiderbox.net/blog/zoe-seeing-the-state/</guid>
      <description>Work continues on my Hive AI, now christened Zoé. I&amp;rsquo;ve got the first draft of the data structures used to store the state done. That&amp;rsquo;s an important first step. The next step is to code the transitions between those states, i.e. the actions that can be taken from a state, i.e. the moves a player can make. Depending on the game, that can be simple or somewhat involved.
Colloquially, all the things needed to encode the game rules&amp;ndash;the state and transitions between states&amp;ndash;can be called the game core.</description>
    </item>
    
    <item>
      <title>Hive Talkin&#39;</title>
      <link>https://schneiderbox.net/blog/hive-talkin/</link>
      <pubDate>Sun, 15 Jan 2023 15:37:00 +0000</pubDate>
      
      <guid>https://schneiderbox.net/blog/hive-talkin/</guid>
      <description>wubba wub wub wub wub
The game for this year&amp;rsquo;s capstone AI project is Hive.
We on the AI testing team are actually well-familiar with the game. We started playing it in 2016. Three of us own a set (both the original and the pocket edition are great). We enjoy it and play occasionally, but none of us have studied the game in depth. I&amp;rsquo;m happy to now have the opportunity!</description>
    </item>
    
    <item>
      <title>Erastus CLAGS</title>
      <link>https://schneiderbox.net/blog/erastus-clags/</link>
      <pubDate>Sat, 14 Jan 2023 21:46:22 -0600</pubDate>
      
      <guid>https://schneiderbox.net/blog/erastus-clags/</guid>
      <description>I was checking something in Erastus&#39; Makefile when I noticed an error:
CLAGS=-std=c99 -Wall -O3 LDFLAGS=-lm That&amp;rsquo;s supposed to be CFLAGS. But&amp;hellip; doesn&amp;rsquo;t that mean the -O3 (optimize) flag was never used?
Before:
[richard@gliderii src]$ ./benchmark Playing games... .......... State_act:	0.614969 Renames CLAGS to CFLAGS&amp;hellip;
[richard@gliderii src]$ ./benchmark Playing games... .......... State_act:	0.276077 &amp;hellip;oh. That more than doubles the speed. Throughout the whole bulk of development, Erastus was running at half speed.</description>
    </item>
    
    <item>
      <title>Erastus on Fly</title>
      <link>https://schneiderbox.net/blog/erastus-on-fly/</link>
      <pubDate>Sun, 27 Nov 2022 16:44:31 -0600</pubDate>
      
      <guid>https://schneiderbox.net/blog/erastus-on-fly/</guid>
      <description>I deployed Erastus to Fly. You can play it at https://erastus-ai.fly.dev.
It&amp;rsquo;s running on a single shared-cpu-1x, their smallest compute VM. Erastus seems to run with 40K iterations and 1 worker without issue.
The process was pretty simple. Here&amp;rsquo;s my fly.toml:
app = &amp;#34;erastus-ai&amp;#34; [build] dockerfile = &amp;#34;Dockerfile-fly&amp;#34; [env] MAX_ITERATIONS = 40000 MAX_WORKERS = 1 UI_PATH = &amp;#34;/ui/index.html&amp;#34; GUNICORN_WORKERS = 1 [[statics]] guest_path = &amp;#34;/opt/erastus/ui&amp;#34; url_prefix = &amp;#34;/ui&amp;#34; [[services]] internal_port = 5000 protocol = &amp;#34;tcp&amp;#34; [[services.</description>
    </item>
    
    <item>
      <title>Glicko Testbeds</title>
      <link>https://schneiderbox.net/blog/glicko-testbeds/</link>
      <pubDate>Sun, 13 Nov 2022 21:23:16 -0600</pubDate>
      
      <guid>https://schneiderbox.net/blog/glicko-testbeds/</guid>
      <description>I read Mark Glickman&amp;rsquo;s quite accessible paper on his Glicko rating system. To help me better understand how it works, I built a couple testbeds to play around with. They simulate games using players with strengths possessing known statistical properties, so I can measure how accurately the calculated ratings reflect the actual player strength. This also gave me an excuse to write an implementation of the not-trivial rating calculation (the derivation of which is explained in a different paper that I have not yet read and that I&amp;rsquo;d bet is a tad more involved).</description>
    </item>
    
    <item>
      <title>Early Work on Rating Systems</title>
      <link>https://schneiderbox.net/blog/early-work-on-rating-systems/</link>
      <pubDate>Wed, 09 Nov 2022 21:41:00 -0500</pubDate>
      
      <guid>https://schneiderbox.net/blog/early-work-on-rating-systems/</guid>
      <description>Every capstone AI season I intend to implement a proper rating system, in order to more rigorously assess the playing strength of my engines (and us human testers), and every time I never get around to it. I figure it&amp;rsquo;s time to get ahead of the game.
Naturally I started with the well-known Elo rating system. The Wikipedia article led me to Mark Glickman&amp;rsquo;s site. Glickman has created his own Glicko rating system that offers several advantages over the Elo system (namely, a measure of rating uncertainty in addition to strength), and he also has published multiple papers on the broader subject.</description>
    </item>
    
    <item>
      <title>Erastus: 1.0 Release</title>
      <link>https://schneiderbox.net/blog/erastus-1.0-release/</link>
      <pubDate>Thu, 28 Apr 2022 17:25:56 -0500</pubDate>
      
      <guid>https://schneiderbox.net/blog/erastus-1.0-release/</guid>
      <description>Erastus is now publicly available. After experimenting with Docker and Kelvandor last year, Docker was a main part of my workflow this year, particularly in deployment. If you have Docker and Docker Compose set up, all you need to do is:
git clone https://github.com/richardjs/erastus cd erastus docker compose build docker compose up Browse to http://localhost:9000 (Or docker-compose if you&amp;rsquo;re not using Compose V2.)
I developed on Arch Linux and our production server was running Ubuntu.</description>
    </item>
    
    <item>
      <title>Erastus: Introduction</title>
      <link>https://schneiderbox.net/blog/erastus-introduction/</link>
      <pubDate>Sat, 15 Jan 2022 00:00:00 +0000</pubDate>
      
      <guid>https://schneiderbox.net/blog/erastus-introduction/</guid>
      <description>It&amp;rsquo;s January, which means it&amp;rsquo;s time for a new Harding computer science senior capstone class, and it&amp;rsquo;s time for me to write a new game-playing AI.
This year the game is Santorini (rules), specifically the base 2-player game without the added god powers. My nascent AI is named Erastus.
Unfortunately, that GitHub link won&amp;rsquo;t work at the moment. I typically open-source my AIs, but since the students are writing their own for the class, I keep the source restricted until the class is over.</description>
    </item>
    
    <item>
      <title>Docker Compose and Terraform</title>
      <link>https://schneiderbox.net/blog/docker-compose-and-terraform/</link>
      <pubDate>Mon, 22 Nov 2021 00:00:00 +0000</pubDate>
      
      <guid>https://schneiderbox.net/blog/docker-compose-and-terraform/</guid>
      <description>Since I set up Kelvandor with Docker Compose, I was curious how a similar configuration with Terraform would compare.
Both Docker Compose and Terraform are infrastructure as code (IaC) tools. With them, you define an environment (servers, networking, storage, etc.) in a structured configuration, and the tool automatically creates and manages it for you.
A useful way to think of this is to compare IaC tools to normal written documentation. To set up Kelvandor, I could write docs telling you that you need to compile the kelvandor binary, install Flask, run make httpapi, and serve the html/ directory with a suitable web server.</description>
    </item>
    
    <item>
      <title>Kelvandor on Docker: Two Problems, and Fixes</title>
      <link>https://schneiderbox.net/blog/kelvandor-on-docker-two-problems-and-fixes/</link>
      <pubDate>Sun, 21 Nov 2021 00:00:00 +0000</pubDate>
      
      <guid>https://schneiderbox.net/blog/kelvandor-on-docker-two-problems-and-fixes/</guid>
      <description>While I was discussing running Kelvandor on Docker with Glen, he wondered what sort of performance penalty the setup incurs.
This should be a straightforward question to answer: running the code&amp;rsquo;s benchmark suite inside and outside the container should give a good idea of the performance hit. There are additional questions that could be answered—such as how different hardware might respond, or if particular flags could improve performance—but that should give us a basic idea.</description>
    </item>
    
    <item>
      <title>Kelvandor on Docker</title>
      <link>https://schneiderbox.net/blog/kelvandor-on-docker/</link>
      <pubDate>Sun, 14 Nov 2021 00:00:00 +0000</pubDate>
      
      <guid>https://schneiderbox.net/blog/kelvandor-on-docker/</guid>
      <description>Text Mode Historically, I&amp;rsquo;ve considered the game-playings AIs that I write a bit of a pain to share with others.
The AI engine itself is typically a native command-line program that implements something akin to the Universal Chess Interface. The program gets passed a serialized game state, and it returns the move it thinks strongest.
For example, a serialized game state for Kelvandor (which plays the game Node) looks like this:</description>
    </item>
    
  </channel>
</rss>
