The previous post was about UAlbertaBot, this post will be about its descendant, Steamhammer. Steamhammer is programmed by Jay Scott. Jay also writes a blog, which I definitely recommend if you enjoy mine.
One of the things I find interesting about reading Jays blog is that it gives you an insight into how he approaches programming Steamhammer. His approach is to focus on solid improvements over quick and dirty fixes. Now this might seem like an obvious approach, bot there are a lot of bot authors which like to take a shortcut, myself included. The development method for Steamhammer means that improvements will take longer to become apparent in actual playing strength.
When I am programming my bot and a tournament is coming up, I usually take the approach of picking one opponent I currently lose to and try to figure out what I might do to beat them. This approach obviously pays off for the tournament. I can now beat one more opponent and will get a better score. However, in the process, I might ignore weaknesses or bugs which do not obviously cause any of my losses. In the long term, those bugs may hold my bot back.
Due to the solid approach in building Steamhammer, it is very suitable as a starting bot. In many ways, it is a more refined and more solid version of UAlbertaBot. Because of this, there are a lot of bots that use Steamhammer as a starting bot. Here is a list:
Note that each of these was also on the list in my previous blog post, since they are also descended from UAlbertaBot. Again, there may be bots I have missed.
Here are some of the improvements in Steamhammer, compared to UAlbertaBot:
UAlbertaBot uses the SparCraft combat simulator, made by Dave Churchill, to determine whether it should take a fight or not. In Steamhammer this has been replaced by FAP, created by N00byEdge. Not all types of units are supported in SparCraft, which can be problematic. Some people use workarounds, like adding units of a different type, but this muddies the results of the simulation. FAP supports a much wider range of units. FAP is simpler, in that it uses a simple heuristic to determine the behaviour of units. SparCraft allows you to script unit behaviour. The simplicity does have the benefit of being much faster to run.
Build Order Search System
UAlbertaBot uses the Build Order Search System (BOSS) to determine what units and structures to build. You tell it what sort of army composition you want and it gives you a build order of what units and structures to build in what order. This works well enough for Terran and Protoss, however it is somewhat lacking for Zerg. One of the difficulties of Zerg is that you need to react to what the opponent is doing, much more than the other races. You usually want to be droning up to get a good economy before building up your army, but if the opponent is attacking in full force you are going to need to build your own army much faster. BOSS is not well suited for these changes in plans.
Steamhammer has some of the most sophisticated opening learning of any bot. Most bots have a form of opening learning that only takes into account wins and losses. For instance opening 1 loses a lot against this opponent, but opening 2 seems to win often, let’s stick to that one. Learning openings this way takes a lot of games. Steamhammer actually analyses what strategy the opponent is going for. If it sees greedy play in the first game it will immediately counter with a rush play in the next game. This means it needs to try a lot fewer games to find a decent opening. During tournaments you only have a limited number of games, and any game you lose while trying to figure out what opening you should be using will cost you.
There are of course many more improvements between UAlbertaBot and Steamhammer. If you want to know more about it, go check out Jay’s blog!