archive by month
Skip to content

Steamhammer is submitted

Steamhammer 2.0 is submitted for AIIDE 2018. All I have left is the waiting.

Since yesterday I fixed one bug, a newly introduced bug in the worker manager that could cause a small number of drones to temporarily go idle early in the game, when it matters a lot. I made an attempt to fix a lingering weakness related to cooperating with static defense, but had to roll it back. The fix was a 2-line change, but somehow it caused a hard-to-understand bug, and I can’t accept a risk like that so close to submission time. Also, since an entire day is too long to go without working on the openings, I added a new opening that helps Steamhammer sidestep weaknesses in ZvZ, allowing it to beat more opponents. And I ran all the tests I had time for, looking for new bugs, checking my fixes, and verifying that the new opening functions as intended and earns wins.

It’s hard to understand why, but now I feel tired....

New bot DaQin on SSCAIT matches an AIIDE entrant. It may be the AIIDE entry, or it may be a test version shortly before the entry is made. It looks like a Locutus fork. The .dll is larger than the Locutus .dll by about 24K out of 2.5M—a fair amount of code but no drastic rewrite. The play I’ve seen so far looks similar, lots of dragoons with strong Locutus micro, so without digging deeper I’m not sure what the changes are.

As one of my tests today, I ran a short match Steamhammer 2.0 - DaQin. Steamhammer took several games to find a way to win (not long at all), and after that it won every game, though I didn’t play many and one of the games was excitingly close. I didn’t try the old version Steamhammer 1.4.7, but with Locutus skills I expect that DaQin would have won every game. I don’t think Steamhammer 1.4.x has a way to beat DaQin. It was satisfying to see Steamhammer 2.0 score convincingly, and it helped my confidence.

We’ll see how much Locutus has improved since August!

CIG 2018 results and discussion

CIG 2018 results are announced. See CIG 2018 maps and entrants for my preview of the tournament. Rankings and win rates are included; replays and source are being held back until the AIIDE 2018 submission deadline of 1 October. They did not say what the release policy is for detailed results (game by game results). So far, they have published a slide show and a 2-minute highlight video with short clips from games by the top 3 winners.

I expect they'll put the result table on the website before long. In the meantime, since the slideshow is inconvenient for looking up basic data, I'll reproduce the results here, copying only the minimum information.

#bot%
1Locutus92.06%
2PurpleWave91.14%
3McRave82.09%
4tscmoo random81.29%
5ISAMind80.31%
6Iron74.31%
7ZZZKBot69.08%
8Microwave64.83%
9LetaBot63.60%
10MegaBot61.17%
11UAlbertaBot60.58%
12Tyr57.23%
13Ecgberht52.80%
14AIUR51.54%
15TitanIron51.45%
16Ziabot51.08%
17Steamhammer34.83%
18Overkill34.68%
19TerranUAB34.40%
20CUNYbot29.51%
21OpprimoBot27.11%
22Sling26.52%
23SRbotOne24.37%
24Bonjwa23.57%
25Stormbreaker21.23%
26Korean7.69%
27Salsa1.54%

There are no surprises in the top 4. #1 Locutus nosed out #2 PurpleWave. The win percentage over time graph after the results in the slide show says that PurpleWave was ahead of Locutus for the first third of the tournament, but then fell slightly behind: Locutus's learning (based on Steamhammer's opponent model with some changes) was a little more effective. #3 McRave did well but could not keep up with the top 2. #4 Tscmoo is a perennial high finisher. #7 ZZZKBot in past years has generally found a way to push into the top ranks, but perhaps it has reached its cheesy limits this year (or maybe it had less work done).

Unfamiliar protoss #5 ISAMind finished impressively high. To outscore #6 Iron in your first tournament, even a year-old Iron that has not been updated, is a big achievement. I look forward to learning more about ISAMind.

#15 TitanIron appeared to have a large and talented team behind it and showed signs of being based on Iron, so its even score is a surprise. It finished behind #13 Ecgberht and #14 AIUR, both of which have good skills but are only middling overall.

Also noticeable is that no protoss scored under 50%. In this tournament, playing protoss got you a plus score, no further questions asked! It truly is an era of protoss ascendancy. It's up to us zerg and terran to see if we can break that in AIIDE.

#17 Steamhammer was not disqualified, but performed poorly as expected due to its fatal bug—notice the giant gap in win rate between Steamhammer and #16 Ziabot just above it.

roundup of events

In SSCAIT news, Locutus is back on top at #1. The commit log shows a large number of relatively minor changes that were apparently enough. For a day or so, Locutus won every single game, including a good number voted in against Krasi0. As usual, Krasi0 was updated quickly and is winning games against Locutus again, but Locutus is still #1 in elo. (Being #1 for a long time is an advantage in itself for staying #1, because generally only one opponent at a time is able to surpass you, and then it’s relatively easy to patch the right weaknesses.)

In pro news, the KSL is underway; see the round of 16 preview on Team Liquid.

The ASL6 maps have been announced (in Korean; see the Team Liquid thread for ongoing discussion). Contrary to predictions, Transistor was carried over (in a new version) rather than Third World.

Just like last season, the map pool is remarkable: There are no 4 player maps! Of the 4 maps, 1 is 2 player, 2 are 3 player, and 1 is 5 player. All the maps have unusual features. The strangest may be the 5 player map Labyrinth, which has 2 geysers in each main base and 2 entrances to the base, each special: One is blocked by a gate that can only be passed by workers using mineral walk (and it’s a ramp, so an enemy worker without vision of your minerals cannot pass), the other by a flag that apparently must be picked up by a worker before other units can enter or leave. Early game scouting will be tricky!

Update: Apparently this is not the final ASL6 map pool? I’m not sure how it works, but it seems that these are candidate new maps. I guess some new maps will be chosen and some old maps will be carried over. If that is true, then we will probably see Third World after all.

CIG 2018 maps and entrants

CIG 2018’s info is updated with the latest. The “was this bot submitted?” column in the table of registered entrants is on the far right.

maps

CIG 2018 has cranked the random number generator and chosen their 5 maps from the pool of 20:

  • (2)Destination
  • (3)Tau Cross
  • (3)Great Barrier Reef
  • (4)Andromeda
  • (4)Python

None of the difficult maps was chosen. 5 maps are too few to even out any imbalances that might exist, but except for that it seems like a fine map pool. The maps have some special features: Destination has a mineral-blocked back door to each main. Great Barrier Reef has mineral line blocks around the edge of the map. Andromeda and Python have island bases. None of the special features causes severe problems for bots which are unprepared (Destination’s mineral block is the worst), and bots which are prepared can show off their skills and gain an advantage.

race balance

I count 16 submisions and 11 old bots carried over from last year, for 27 participants. For the submissions:

terran3
protoss6
zerg6
random1
total16

The total:

terran8
protoss7
zerg10
random2
total27

Zerg and protoss are equally popular this year, and terran is in a slump. Among the bots carried over from last year, protoss was the unpopular race, so the overall numbers are not too uneven, with a bit of a bump for zerg. All in all, a pretty good range of challenges for everyone.

unknowns and favorites

The unknowns are terran TitanIron, protoss ISAMind, and zerg Stormbreaker. ISAMind and Stormbreaker are both “independent” affiliation, lone wolves, and a quick look did not turn up more about them. TitanIron I can guess more about: It is from the Chinese Academy of Sciences, the same larger organization under which Casiabot and NLPRBot were made, and it is credited to a large team that includes some of the same authors. It looks as though serious effort and expertise went into it. To generalize, the past bots from CAS were Steamhammer forks with either ambitious and not too successful, or quick-and-dirty but strong changes—none had staying power, but some placed high in the tournament they were tuned for. Playing terran and having a name that includes “iron” suggests that TitanIron may be a fork of Iron. Putting together the whole picture, I think TitanIron has the shape of a strong contender.

The familiar favorites are PurpleWave which we know from experience does better in tournaments that it was put in shape for, McRave which has been maturing in secret, new Locutus which is strong but which other bots may have prepared specifically against, and the perennials Tscmoo and ZZZKBot, which can never be counted out. You might think you can count out ZZZKBot because this year everyone will be ready for its rush, but so far it always has something new and successful.

the CIG map pool

Steamhammer 1.4.5 is submitted to CIG. Because of an obscure CIG rule, the version for SSCAIT will be slightly different (the rules curiously require Steamhammer to comment out a couple of minor configuration features, which is not how I want to distribute it). But in any case, it’s done. Working right up to the deadline (around midday tomorrow in my time zone) is an algorithm for causing more problems than it solves.

CIG rules also say that they will choose 5 maps pseudo-randomly (one 2-player, two 3-player, two 4-player) from a pool of 20. Since starting out on CIG work, I’ve been playing test games exclusively on CIG maps. The SSCAIT maps have been feeling stale, so it was a welcome break. Here are my thoughts on the CIG map pool.

7 maps are familiar from SSCAIT. SSCAIT doesn’t include version numbers in its map names (except La Mancha for some reason), so I’m not sure which of these are the exact same version. In any case, they are all close.

(2)Destination1.1.scx
(2)NeoHeartbreakerRidge.scx (Heartbreak Ridge)
(3)TauCross1.1.scx
(4)Andromeda1.0.scx
(4)CircuitBreakers1.0.scx
(4)FightingSpirit1.3.scx
(4)Python1.3.scx

9 maps are different from SSCAIT maps but provide no special features that challenge bots (at least not that I noticed). I enjoyed all these maps. My favorites are Chupung Ryeong and Arcadia II.

(2)MatchPoint1.3.scx. Sometimes compared to Benzine, because the main bases and expansions are laid out similarly. But the middle is not nearly so open.

(2)NeoChupungRyeong2.1.scx. Multiple narrow paths between bases. Played properly, I think the map leads to complicated and interesting games.

(2)RideofValkyries1.0.scx. The main bases are across from each other, relatively close with the naturals pointing toward each other, and expansions beyond the natural are away from the direct path.

(3)GreatBarrierReef1.0.scx (originally named El Niño, then revised). The map has blocking mineral lines in between bases. Humans can push units through the minerals, or drop behind them if you dare to mine them. Since the blocking mineral paths run around the edge of the map, all bots that I have tried ignore them, and they don’t cause a problem.

(3)NeoAztec2.1.scx. Low ground main and high ground natural (compare Jade). Bases beyond the natural are a little farther away than on some maps.

(3)Pathfinder1.0.scx. The looping layout of the bases seems intuitive when I look at the picture, but for some reason in following games I can’t get my head around it. Bots ought to pay more attention to attacking around the back way.

(4)ArcadiaII2.02.scx. The natural base and mineral-only are near each other, both inside the natural entrance. Compare Andromeda, where the mineral-only is above the ramp but can be attacked from outside.

(4)LunaTheFinal2.3.scx. A classic macro map, sometimes accused of making the game boring.

(4)NeoSniperRidge2.0.scx. Ridges all through the center of the map, somewhat like Heartbreak Ridge. Bots don’t really understand how to use the ridges, except that I think Locutus is starting to get the idea.

The remaining 4 maps have features that bots struggle with. I didn’t enjoy them as much. I vividly remember the struggle to play on Sparkle, and I did not adapt Steamhammer to play on any of these maps. Since they’re selecting 5 of the 20 maps, any given map is unlikely to end up in the tournament. I thought effort was best spent elsewhere.

(2)BlueStorm1.2.scx. The closest exit to the center is a narrow one that larger units can’t fit through. Steamhammer gets lurkers and ultralisks trapped behind it, not realizing it could take a longer path to the center. Iron breaks down severely, because vultures can’t fit through.

(2)Hitchhiker1.1.SCX. This map has a narrow direct path between the 2 mains, a ravine. It also has numerous destructible neutral buildings that open other paths. Steamhammer sometimes plays OK on this map, and sometimes gets a large army stuck trying to pass through neutral buildings.

(3)Alchemist1.0.scm. Each base has 2 entrances, and map is laid out in a loop so that the enemy might approach from either direction. Many bots cannot cope. Also, the map is poorly made and looks ugly.

(3)Plasma1.0.scx. An awesomely difficult map. The main bases are small, so not many buildings fit. The ramp down from each is narrow, so not all units can pass. The map is divided into sections which are separated by blocks of neutral zerg eggs. Workers can mineral walk through the eggs in either direction using handy minerals placed just beyond. Other units can be pushed through one at a time; otherwise, you have to destroy enough eggs to open a path. For the icing on the cake, the left-side egg block between the 2 left bases leaves an open path 1 walk tile wide, not wide enough for any unit to pass, but wide enough for Steamhammer to conclude that the bases are reachable from each other. “Oh, hey, this is not an island map!” it thinks. My hope is that Steamhammer will learn to go air and opponents will be even less able than it to come to grips with the map.

Steamhammer is about ready for CIG 2018

I have wrapped up work on the last feature for the CIG version of Steamhammer. No more changes unless testing turns up a last-minute critical bug.

I’m pleased with how much I got done in a short time. With perfect planning I could have done more, but hindsight is like that. Looking through my change log, I feel I’ve done a good job improving play as much as I could with small changes. I also found a few good bug fixes. Steamhammer should do well enough in CIG.

Zerg got more work than the other races, of course, but most of the changes are not specific to zerg. The changes were intended to help zerg and were only tested with zerg, but the other races should benefit too. I even added a strong new protoss opening versus zerg (which I used in testing zerg).

Expect the SSCAIT upload of this version on Wednesday, more or less. I’ll test with terran and protoss first, and make any necessary tweaks (so it might be a slightly different version). In recent releases most of the important work has been on the opponent model and points of strategy. Those changes made Steamhammer smarter, but to a stream watcher, the play looked as though it had hardly changed. This release will be different. Plenty of familiar old weaknesses remain, because there was only so much I could do, but some very visible problems are reduced and I have changed long-standing patterns of play. Watchers should notice. Steamhammer’s play should look different.

PurpleSwarm vs human show match

Two short posts today.

The human-machine show match from AIST S1 was streamed today, showing PurpleSwarm against a protoss.

On Sparkle, PurpleSwarm was able to take the crystal gas, unlike Steamhammer. Except for that, the two bots seemed to have similar skills and play styles on the map. One extra gas is a big difference, though.

2 games were on Third World. PurpleSwarm showed no sign that it knew how to mineral walk through the gates on the map. Steamhammer doesn’t know either. From past comments, it sounds like McRave is ignorant too, but Tscmoo has the skill. Does anyone know about MadMix? Just curious.

AIST S1 results announced early

The AIST S1 results are out far ahead of schedule. I called the favorites as #1 McRave and #2 Tscmoo protoss. The winners turned out to be #1 PurpleSwarm and #2 McRave. Go zerg! But Steamhammer, the other zerg competitor, was the first to be eliminated.

AIST S1 bracket with results

We don’t get to see the games themselves until later. We do know the match results and the map order, so we can infer some of the specific game results.

The rules said that maps would be chosen randomly. I assumed that meant that the map order for each match would be chosen randomly, and games would cycle through the maps. But no, it was literal: For each game, a map was chosen at random. Some matches had repeated maps. For example, in the match McRave 2-0 Tscmoo, both games were played on Third World.

5 is an awkward number for an elimination tournament, as I said before. I expected 1 bye in the first round and 1 in the second, giving an advantage to the bye players. The bracket software instead gave 3 byes, so that the first winners round consisted of only 1 match, MadMix versus Steamhammer. These 2 players started at a disadvantage; if one of them was to come out on top of the winners bracket, it would have to win 1 more match than the 3 bye players. With 1 player in the losers bracket after 1 round, and 3 after 2 rounds, the losers bracket also needed to be split into 2 rounds, disadvantaging another player. MadMix could not be given another disadvantage, so Tscmoo got it.

The rules call for random seeding, so at least it’s fair on average—nobody has an advantage before seeding (only after). But there is no fair way to pair an elimination tournament with 5 players. Some competitors will always have an easier path than others. It’s hard to know when the byes make a difference in practice, but I notice that the 2 winners were the 2 players who were given no disadvantages.

AIST S1 prospects

AIST S1 registration has closed, and the participant list has been announced. In alphabetical order:

protossMadMix
protossMcRave
zerg PurpleSwarm
zergSteamhammer
protossTscmoo

I expected McRave and PurpleWave, because their authors said they’d play. Instead of protoss PurpleWave we got zerg PurpleSwarm. I wonder why? Is it because of Sparkle? Is it because Purple Dan foresaw the protoss overload we would have gotten? Tscmoo has always been an ambitious bot, so it is not a surprise to see it. I was surprised by MadMix, and maybe I shouldn’t have been. These are bots that implement, or in Steamhammer’s case at least aspire to implement, a large number of skills for different situations. MadMix has been of that mold since its beginning. The challenging AIST maps demand those skills.

There are no terrans. That’s unfortunate.

The tournament format is double elimination, so we get a #1 and #2 finisher. I think the favorites are McRave for #1 and Tscmoo for #2. But if we knew the outcome ahead of time, we wouldn’t have to play the tournament.

5 participants is an awkward number for an elimination tournament. With an odd number in the first round, 1 player will get a bye and move on to the second round of the winner’s bracket without having to play a game. 2 players will drop to the loser’s bracket, and the second winner’s bracket round will again have an odd number of players. It’s no good to give the same player a bye twice, so this time one of the winners in the first round will get a bye to the third round of the winner’s bracket. With only 5 participants, the players that get byes have a significant advantage. The rules call for random seeding, so the choice should be purely the luck of the draw.

Nothing is perfect, but so far AIST seems to be thoughtfully and skillfully run. Decisions make sense and events are happening on time—not a given, organizing a tournament is no walk in the park. Keep up the good work!

Next: Expect the Steamhammer 1.4.3 change list on Monday, followed by posts about how I approached the tournament.

Steamhammer and AIST S1

Steamhammer is registered for AIST S1. It is almost done; I am working on final testing and fixes. After submission closes, I’ll release the new version as 1.4.3 and upload it on SSCAIT. Features that I formerly planned for 1.4.3 will be pushed to 1.4.4, and so on down the line. Expect the usual change list et cetera, plus discussions of the map features and how I chose to cope with them.

On SSCAIT, it will probably be hard to notice a difference from version 1.4.2, because most of the changes are to support the difficult maps of AIST. There are about 7 bug fixes and improvements that affect play on all maps, but in such subtle ways that neither stream viewers nor Steamhammer’s elo should see a change. Even so, there are a lot of changes, including entirely new features like MapPartitions. Judging the change bars by eye, I’d say I touched about 15% of the lines of StrategyBossZerg. There are also changes to tactics, micro, map exploration, the Recon squad, and scouting.

Steamhammer is not remotely ready for the tournament. The impossible is impossible. I took shortcuts to get as far as I did. But it can play games on the AIST maps without looking like a moth flying into a windowpane (“I see the light, it’s that way.” Wham! “Oh... I see the light again, it’s that way.” Wham!), and it can defeat some opponents. It’s a huge step up from crashing, or throwing endless exceptions, or playing a mass zergling opening on an island map. And I’ve made more progress toward removing BWTA, though it’s haphazard—I removed the parts that were in the way.

Next: The new bot Proxy.

Steamhammer priorities in light of AIST

Should Steamhammer compete in the AIST competition? I’m still thinking about it. It’s not an easy decision. On the one hand, I love the idea behind the competition. It places demands on bots that I have always intended to meet eventually. On the other hand, “eventually” is a key word. The skills a bot needs to compete in AIST are not needed in any other competition, and working on them now will delay other things that I want to do.

Progress so far: I fixed the crash on Transistor. Crashes first! At the top center expansion, some mineral patches overlap the terrain in a way that fooled Steamhammer’s map analysis into believing that they are inaccessible, which indirectly caused a “should never happen” condition because of how base placement works, which caused the fatal bug, a use-after-free error. It’s good now, and Steamhammer can play games on Transistor. I fixed the endless stream of exceptions on Sparkle and Third World caused by the bot’s inability to figure out how to move a scout around the enemy base. I diagnosed Steamhammer’s inability to expand on Third World. The bot believes that the narrow ramp from the main is not passable, because the path analysis is simplified. I’m testing the fix now. It is a feature that will also be necessary on Sparkle, a partition map at walk tile resolution which says which ground areas are connected.

The topic is priorities. So:

What will improve Steamhammer the most in the short run? Tactics and micro. Steamhammer is not well-rounded. I’ve been concentrating on strategy and macro, and by now Steamhammer’s strategy and macro skills are relatively much stronger than its tactics and micro. There are weaknesses everywhere, but tactical blunders and awkward micro lose a lot more games. Throwing away overlords like they’re free, ignoring cloaked units, running an army into the enemy forces without fighting—there’s all kinds of horrible stuff.

What does my plan call for? More work on the opponent model, for multiple reasons. One, I feel the need to make at least basic progress on the machine learning part. It helps keep the goal in sight. Two, it will give Steamhammer a kind of adaptivity that bots desperately need. Three, it fits with my overall top-down development plan: Strategy first, then tactics, then micro.

What needs doing for the AIST? Mostly map skills.

  • Sparkle: Basic island skills. Choose an island build order, take island bases, defend them, transfer workers, scout for enemy islands. Many regular skills need to work differently on islands.
  • Sparkle: Fix the bug that prevented Steamhammer from expanding on its own starting island.
  • Sparkle: Destroy the neutral building on the low-ground expansion geyser. This is the only map I know with that feature, so it’s a very specialized skill (though simple enough).
  • Third World: Pathing. Understand the narrow ramp from the main. Understand the gate between the “first world” and the “third world,” which workers can mineral-walk through though it is impassible to other ground units.
  • Third World: Semi-island skills. Not quite the same as island skills, though maybe I can find a way to treat them as the same.
  • Transistor: Place defenses at the twin ramps, not at the natural hatchery.

I think I can probably get everything working in time, at least at a basic level. If I spend the time to do that, Steamhammer will definitely perform worse in AIIDE. Also, some of these features I was planning to delay until more infrastructure was in place, and there won’t be time to add that infrastructure for AIST. There is a risk of having to redo work later, slowing down overall progress.

So far I’m proceeding on the assumption that Steamhammer will compete. But I haven’t decided firmly.

AIST competition

Two big posts today! Antiga announced the AI Starcraft Tournament (AIST), Season 1, to be held next month. The tournament is to be played on the same professional maps as the ongoing Afreeca Starleague season 5, aka ASL5: The old map Gladiator and the new maps Sparkle, Third World, and Transistor.

I’m in favor of tournaments like this. The new maps present difficult challenges that Brood War bots have not faced before, and confronting them should force bots to become more robust and capable. The competition is labeled Season 1, so the intention is to hold more competitions in the same vein, with further tough maps. Over time, that should also impel bots to become more general and flexible. It’s good.

The deadline is soon! The submission deadline is 10 June, less than a month away. The new maps are ambitious targets for current bots, and I believe it will not be possible for authors to fully adapt their bots in time. I expect that participants will be taking shortcuts or accepting poor play.

trying out the maps

Should Steamhammer participate? The first part of the question is, can Steamhammer participate? Can it be adapted to the demanding professional maps before the deadline, or is the amount of work infeasible? I imagine I could do it if I rely on map-specific hacks (“if the map is named Sparkle, use this build order, kill this neutral building at this time, ...”), but I see hacks as wasted work that will have to be redone properly later. I want more general techniques to cope naturally with particular map features wherever they come up.

I tried the maps in test games to see what happens. In alphabetical order:

Gladiator was fine. Steamhammer played normally. It’s a classic map from 2010, and that is what I expected.

Sparkle, the island map, caused less trouble than I expected. Well, I expected a lot. I gave Steamhammer a game against the built-in AI (which can cope with islands), and made it ZvZ to be sure that it would go air. Drone scouting failed, obviously. The bot was unable to expand, even on its own island, and played the game with 1 base. It made a ton of zerglings (“it’s ZvZ, I know how to play this”) which had little use since they could not get off the island. The Recon squad is ground-only, so Steamhammer didn’t find enemy island expansions until after it reduced the enemy main. Steamhammer did finally win, though; the broken stuff was not absolutely essential. The problems are likely solvable by adding basic island skills, plus some map feature skills so it can recognize and take its own expansions.

Third World caused more trouble than I expected. I thought that play would ignore the “third world” upper left part of the map, since it is reachable only by drone mineral-walking tricks, and proceed normally on the resource-poor “first world” remainder. But no, again Steamhammer was unable to expand beyond its starting base. I don’t know why. Drone scouting again failed, apparently because BWTA failed to calculate regions, or did it in some way differently than Steamhammer expects (I didn’t dig into the cause). It’s hard to say how long it might take to debug and fix or work around the issues. Every use of BWTA has to be removed eventually, but this one was going to wait....

Transistor crashed Steamhammer’s new map analysis. I’ve tested the code on dozens of maps, from irregular Blizzard maps to intricate pro maps, and this is the first crash. The map doesn’t look technically difficult except for the weird crystals at the starting locations, and I had expected it would be OK. Likely it will turn out fine once I fix the crash.

My preliminary conclusion is that Steamhammer can play, but it will not be well adapted to the maps. I will have to spend time surviving tricky map features and won’t have much for thriving with the important play features like mineral-walking drones into the third world, or linking up island bases with nydus canals. The play features are what make it worthwhile, so I’m feeling hesitant. I’ll look into it more, though. This is only a first look, and there is more to find out.

How many participants will there be? How ready will they be? If people are saying “I suffer on these maps too, but it is still worth it” then it becomes self-fulfilling, it is still worth it.

SAIL map balance

Here’s a new table I haven’t generated before, at least not in this form: Map balance for each race, from the 20000 SAIL games. The left-side columns give win rates for the 3 matchups. The right-side columns give game counts and win rates for each race in all non-mirror matchups. (A mirror matchup always has 50% win rate, one winner and one loser of the same race, so including those would only pull the numbers closer to 50%.)

mapTvZZvPPvTT gamesT %P gamesP %Z gamesZ %R gamesR %
Benzene50%54%48%51651%65448%65751%23150%
Destination46%49%50%49849%65250%62752%20545%
HeartbreakRidge43%55%41%53350%58844%63756%22250%
NeoMoonGlaive40%51%48%54646%65249%65653%23253%
TauCross47%48%48%52949%66851%67851%22947%
Andromeda44%49%51%50647%62752%64652%22347%
CircuitBreaker43%51%52%55046%69351%69252%23349%
EmpireoftheSun47%52%48%49250%61249%61352%22749%
FightingSpirit45%52%57%53545%67652%69452%21749%
Icarus42%54%47%54348%60047%65054%20753%
Jade44%55%50%51949%61148%65554%21146%
LaMancha48%51%43%50152%61947%61352%21347%
Python44%49%50%52147%62450%64252%19751%
Roadrunner47%46%50%55749%64852%71651%23142%
overall45%51%49%734648%892449%917652%307848%

Compare this to the race balance tables posted a couple days ago. Overall, there are no giant imbalances; the largest imbalance is 40%-60%, a 3:2 win rate for zerg over terran on Neo Moon Glaive. Terran has a small but consistent disadvantage against zerg on all but one map (Benzene came out even). That is a genuine race imbalance in current bot play: Z > T. But averaged across all the maps, the imbalance is only 55% zerg to 45% terran, 11:9, not a value to complain about. You can look back at the older tables to see which bots are responsible for the imbalance. By no means are all terran bots worse against zerg, or all zerg better against terran, but Krasi0 and Iron do show the pattern, and so does Steamhammer.

The other matchups have some pink and some blue, but tend to approximately balance out on average. Past investigation showed that the map race balance for pro players and bot bot players were pretty much uncorrelated in AIIDE 2015: See comparing pro and bot balance. I expect that it is still true. Bots have not gotten much better at exploiting map features.

SAIL bots and maps

More SAIL data: How well each bot performed on each map.

gamesoverallBenzenDestinHeartbNeoMooTauCroAndromCircuiEmpireFightiIcarusJadeLaMancPythonRoadru
100382319400.00%0%0%0%0%0%0%0%0%0%0%0%-0%0%
AILien48466.32%50%52%66%70%64%69%76%62%76%61%73%69%64%71%
Alice23319.31%20%7%16%24%24%40%9%24%19%14%23%13%15%28%
AndrewSmith47966.81%56%67%74%62%69%68%77%79%51%79%61%59%64%71%
AndreyKurdiumov46469.83%61%54%71%79%75%67%69%71%67%71%74%76%77%70%
Antiga47270.97%73%74%69%70%66%60%72%86%74%69%57%62%78%86%
Arrakhammer46765.31%62%56%68%70%73%59%64%64%61%62%75%65%66%73%
AurelienLermant47231.36%38%45%35%18%35%24%18%25%32%37%31%32%38%36%
BananaBrain46973.99%61%66%71%67%85%70%79%78%76%78%70%78%81%70%
Bereaver50171.06%88%75%66%85%62%74%79%63%78%80%56%51%56%80%
BlackCrow45962.09%62%45%63%75%52%56%59%74%56%63%73%62%55%73%
BryanWeber46013.48%19%3%18%14%8%16%17%8%12%19%17%30%8%7%
CarstenNielsen46756.32%37%55%58%44%63%58%50%70%56%51%50%56%70%68%
CasiaBot45851.31%55%58%52%50%48%48%41%55%51%48%62%52%50%46%
CherryPi48276.56%84%88%74%73%83%82%67%85%78%76%69%83%70%67%
ChrisCoxe47670.38%56%64%80%83%62%67%66%55%61%80%79%69%88%72%
Cimex4117.07%0%20%0%-50%0%0%0%50%0%33%33%0%33%
cpac666.67%100%-67%----100%--0%---
CruzBot47619.12%18%26%18%26%18%26%14%19%11%26%10%12%17%24%
DAIDOES47727.25%21%26%12%8%32%37%33%27%40%26%29%26%30%37%
DaveChurchill47460.97%63%59%64%69%59%65%58%65%63%63%63%49%48%63%
DawidLoranc45843.01%49%57%34%57%33%54%27%57%39%44%42%38%44%32%
Ecgberht47261.23%57%66%52%64%56%65%62%60%74%55%65%71%48%67%
Flash49260.37%63%61%48%63%68%78%50%50%70%62%53%53%61%61%
FlorianRichoux46236.36%58%25%43%31%26%41%36%31%32%34%45%30%41%40%
ForceBot40348.88%55%57%40%41%43%52%45%56%49%37%58%55%42%55%
GaoyuanChen48144.49%29%46%40%51%42%45%50%53%51%48%41%39%44%39%
Goliat4311.63%0%0%0%25%20%0%33%0%0%14%0%0%100%0%
GuiBot5032.00%0%0%50%50%33%33%20%43%100%20%40%67%0%50%
HannesBredberg44331.15%32%40%44%37%22%33%32%23%28%29%35%45%21%19%
HOLDZ34020.00%6%12%18%30%20%9%33%17%24%24%24%15%35%14%
ICELab48164.03%52%67%56%59%57%78%57%71%65%72%76%73%53%61%
Ironbot48589.48%94%81%92%91%91%95%88%95%81%90%87%84%94%89%
JakubTrancik48134.93%54%35%37%38%35%48%38%9%21%39%40%42%25%26%
JohanKayser48617.28%14%14%10%36%21%29%21%15%11%14%16%4%24%6%
Juno450.00%----50%0%100%-------
KaonBot46031.30%39%28%34%32%44%15%29%33%40%24%30%38%22%31%
KillAlll48153.01%45%63%55%57%52%44%56%64%59%45%56%59%39%45%
Korean47820.50%22%18%32%27%25%0%31%0%26%33%21%21%0%31%
krasi049594.34%95%94%94%89%95%90%90%97%97%94%97%100%93%97%
Kruecke4124.39%0%0%0%33%0%33%67%50%0%33%0%50%0%50%
Locutus32173.21%80%82%77%59%78%74%71%68%85%60%81%61%77%76%
LukasMoravec47231.99%45%26%20%38%28%32%38%30%29%30%37%23%39%29%
MadMixP48448.35%45%58%48%46%41%36%52%38%42%50%59%61%53%46%
MadMixT45230.75%29%29%28%24%31%32%25%31%33%28%28%46%34%28%
MadMixZ47132.06%40%23%26%27%38%39%46%26%41%33%19%19%31%29%
MarekKadek47220.13%12%21%17%12%25%21%26%29%10%24%26%15%19%30%
MarianDevecka46383.59%85%85%82%91%77%78%77%84%87%89%93%86%76%84%
MarineHell48323.60%25%15%25%21%23%35%19%21%28%16%14%31%33%21%
MartinRooijackers45567.91%67%70%71%69%72%77%64%66%64%66%69%72%68%59%
MatejIstenik46531.61%32%39%29%31%50%33%25%38%23%42%16%25%36%26%
MegaBot201744249.32%42%58%41%47%56%53%45%63%61%45%26%57%43%57%
Microwave46676.82%86%72%69%78%78%87%88%68%80%66%79%84%71%70%
MiddleSchoolStrats28848.96%39%67%67%50%55%43%54%39%39%41%43%43%59%38%
Myscbot47334.04%57%60%31%25%27%24%34%36%46%6%35%29%27%44%
NeoEdmundZerg47573.05%80%74%64%76%69%81%66%70%69%75%78%81%80%57%
NielsJustesen31531.43%19%22%22%50%24%46%32%30%32%30%39%36%25%40%
NiteKatP45833.84%29%36%41%27%45%24%34%41%36%18%27%55%28%29%
NiteKatT45856.11%50%80%55%45%62%53%58%48%58%60%61%35%62%63%
NLPRbot46062.83%66%70%63%56%65%57%85%70%54%63%67%48%63%59%
NUSBot50023.60%23%34%0%34%27%31%21%22%31%11%37%23%29%8%
OpprimoBot30813.31%12%6%11%9%12%8%22%13%21%19%10%19%13%14%
PeregrineBot47145.01%39%48%34%48%52%52%47%50%35%50%47%36%49%45%
PineappleCactus49038.78%21%27%46%31%45%40%39%45%27%40%43%55%36%48%
PurpleSpirit44150.34%48%48%53%50%47%51%44%60%41%61%35%57%68%44%
PurpleSwarm45169.84%79%59%70%65%67%69%84%70%74%76%69%60%76%57%
PurpleWave45680.04%69%78%75%85%87%82%82%74%82%85%81%80%82%74%
Randomhammer49655.65%59%68%64%69%53%57%45%56%50%59%50%42%74%42%
RomanDanielis48932.92%24%29%17%33%39%42%30%25%38%32%42%21%47%36%
SijiaXu47957.83%57%51%56%61%59%54%53%60%57%53%61%54%64%68%
SimonPrins44672.20%79%79%61%69%57%70%82%64%74%63%76%73%73%84%
Sling50926.52%32%22%29%28%17%33%25%22%40%11%22%30%25%33%
SoerenKlett45549.01%55%38%49%39%44%47%55%50%42%61%53%27%56%58%
Sparks47435.23%35%28%37%45%42%38%33%41%32%26%31%33%32%42%
SRbotOne425.00%-0%-0%0%-------100%-
Steamhammer46676.18%84%72%81%65%70%86%67%81%81%82%73%71%76%78%
Stone48153.22%68%64%69%40%44%39%45%57%55%59%56%48%63%51%
SunggukCha46335.42%38%31%37%35%28%36%31%38%41%36%38%39%29%38%
TomasCere48536.91%38%30%19%31%28%34%53%39%30%34%56%45%44%31%
TomasVajda45972.11%55%90%74%71%65%72%78%79%69%74%73%73%73%63%
TravisShelton53612.50%19%10%5%13%9%17%12%17%5%18%14%18%16%7%
tscmoo48972.39%80%77%74%63%77%69%73%68%82%76%63%79%68%67%
tscmoop46875.64%82%73%76%79%81%73%83%66%78%75%57%76%69%86%
tscmoor48574.85%84%77%76%80%72%71%78%76%84%67%68%66%87%61%
tscmooz44654.48%46%57%53%45%61%61%62%59%52%59%50%57%48%54%
TyrProtoss47767.51%82%43%57%62%75%67%72%86%72%71%68%63%57%70%
UC3ManoloBot362.78%0%0%0%0%0%0%0%50%0%0%0%0%0%0%
UPStarCraftAI201645139.25%35%37%52%39%54%33%31%33%50%50%30%36%32%45%
WillBot52144.53%49%43%39%50%40%38%57%43%52%49%38%45%33%50%
WillyT14042.86%60%45%29%60%100%43%0%22%21%50%50%78%31%50%
WuliBot48672.02%65%72%79%78%76%79%67%57%73%66%74%78%66%74%
Xelnaga45632.24%26%43%40%31%32%18%24%38%42%25%33%28%44%20%
YuanhengZhu48837.91%28%24%28%40%38%36%46%37%41%60%46%24%36%46%
Zercgberht47135.03%32%48%32%40%31%29%23%37%31%28%28%49%40%39%
Ziabot47853.97%50%46%70%39%65%53%57%51%57%50%52%48%62%65%
ZurZurZur48361.08%61%60%73%73%58%61%55%61%62%67%67%53%58%52%

Many bots show dramatic performance differences between maps. The differences definitely mean something, even though I often find it hard to say what. What in your bot’s play interacts well or poorly with the map features? If your bot performs poorly on a given map, maybe it should choose a different strategy there. But it’s possible that the reason has to do with specific opponents, and you have to dig into details to find the answer.

Steamhammer’s results surprised me. I think of Heartbreak Ridge as Steamhammer’s worst map, but these numbers say it is a good map. After I fix the map block issues on the map, which will probably be in the version after next, maybe Heartbreak Ridge will become Steamhammer’s best map. In any case, the next version will try to adjust its play for each opponent according to the map, once it accumulates enough data from experience. It will be interesting to see whether that successfully evens out the performance across maps.

Next: Map balance.

SAIL race balance tables

SAIL is still down. I decided to analyze the game data anyway. I grabbed their file of the last 20,000 game results and modified my tournament result analyzer to handle it.

Here is the overall race balance. It’s nice and even. Terran has a little trouble against zerg, and random has a little trouble against protoss, but it’s all within expectations. Of course this averages together bots of all skill levels (at first I typed “kill levels,” which I guess means the same thing). We know that there’s a good mix of participants of each race, so these numbers mean that none of the races is finding its job much easier or harder than the others.

vTvPvZvR
terran51%45%52%
protoss49%49%54%
zerg55%51%50%
random48%46%50%

The table of how each bot performs against the different races is more interesting. This is in alphabetical order, so the number of the left is just to show how many there are. There are few random players, so that column is less informative. (Of course on SAIL, “random” only means that both players learn the bot’s race when the game starts.)

#botracegamesoverallvTvPvZvR
1100382319terran400.00%0%0%0%0%
2AILienzerg48466.32%64%65%66%80%
3Alicezerg23319.31%18%22%14%32%
4AndrewSmithprotoss47966.81%65%72%63%71%
5AndreyKurdiumovrandom46469.83%65%70%74%69%
6Antigaprotoss47270.97%60%62%83%79%
7Arrakhammerzerg46765.31%69%59%71%53%
8AurelienLermantzerg47231.36%36%38%16%48%
9BananaBrainprotoss46973.99%69%68%82%80%
10Bereaverprotoss50171.06%73%77%64%72%
11BlackCrowzerg45962.09%59%61%68%55%
12BryanWeberzerg46013.48%19%14%9%14%
13CarstenNielsenprotoss46756.32%50%57%58%65%
14CasiaBotzerg45851.31%62%39%61%24%
15CherryPizerg48276.56%75%74%85%57%
16ChrisCoxezerg47670.38%79%69%64%79%
17Cimexzerg4117.07%8%21%17%33%
18cpaczerg666.67%100%33%--
19CruzBotprotoss47619.12%24%26%8%18%
20DAIDOESprotoss47727.25%17%29%33%25%
21DaveChurchillrandom47460.97%57%54%67%76%
22DawidLoranczerg45843.01%46%43%39%46%
23Ecgberhtterran47261.23%59%68%55%68%
24Flashprotoss49260.37%45%64%67%61%
25FlorianRichouxprotoss46236.36%43%38%26%54%
26ForceBotzerg40348.88%44%52%50%46%
27GaoyuanChenprotoss48144.49%50%46%39%45%
28Goliatterran4311.63%12%18%0%0%
29GuiBotprotoss5032.00%36%28%45%0%
30HannesBredbergterran44331.15%37%31%21%53%
31HOLDZzerg34020.00%33%22%7%26%
32ICELabterran48164.03%73%79%43%71%
33Ironbotterran48589.48%88%96%85%88%
34JakubTrancikprotoss48134.93%43%41%22%46%
35JohanKayserterran48617.28%12%23%17%12%
36Junoprotoss450.00%-100%0%100%
37KaonBotterran46031.30%37%38%22%32%
38KillAlllzerg48153.01%59%64%37%54%
39Koreanzerg47820.50%25%30%7%29%
40krasi0terran49594.34%95%98%91%91%
41Kruecketerran4124.39%43%31%0%0%
42Locutusprotoss32173.21%79%66%77%73%
43LukasMoravecprotoss47231.99%40%29%29%40%
44MadMixPprotoss48448.35%50%46%47%62%
45MadMixTterran45230.75%46%28%22%29%
46MadMixZzerg47132.06%36%32%31%24%
47MarekKadekterran47220.13%12%17%29%22%
48MarianDeveckazerg46383.59%87%85%85%69%
49MarineHellterran48323.60%13%29%22%29%
50MartinRooijackersterran45567.91%52%81%69%61%
51MatejIstenikterran46531.61%33%31%29%41%
52MegaBot2017protoss44249.32%60%53%38%47%
53Microwavezerg46676.82%76%77%76%84%
54MiddleSchoolStratszerg28848.96%62%42%47%56%
55Myscbotprotoss47334.04%22%31%44%34%
56NeoEdmundZergzerg47573.05%74%68%74%83%
57NielsJustesenprotoss31531.43%35%30%29%34%
58NiteKatPprotoss45833.84%33%19%49%34%
59NiteKatTterran45856.11%63%56%51%62%
60NLPRbotzerg46062.83%82%45%61%70%
61NUSBotprotoss50023.60%40%18%16%25%
62OpprimoBotrandom30813.31%14%18%7%13%
63PeregrineBotzerg47145.01%55%48%39%28%
64PineappleCactuszerg49038.78%40%34%41%42%
65PurpleSpiritterran44150.34%58%47%50%46%
66PurpleSwarmzerg45169.84%60%69%79%61%
67PurpleWaveprotoss45680.04%73%84%82%74%
68Randomhammerrandom49655.65%62%42%66%33%
69RomanDanielisprotoss48932.92%27%33%34%42%
70SijiaXuzerg47957.83%56%59%60%49%
71SimonPrinsterran44672.20%61%79%74%74%
72Slingzerg50926.52%15%34%25%37%
73SoerenKlettterran45549.01%58%55%36%56%
74Sparksterran47435.23%42%38%28%38%
75SRbotOneterran425.00%100%0%0%-
76Steamhammerzerg46676.18%85%70%80%58%
77Stoneterran48153.22%34%65%55%53%
78SunggukChaterran46335.42%54%31%25%42%
79TomasCereprotoss48536.91%47%38%29%37%
80TomasVajdaprotoss45972.11%62%81%72%74%
81TravisSheltonrandom53612.50%13%11%13%10%
82tscmooterran48972.39%83%58%80%72%
83tscmoopprotoss46875.64%78%76%73%78%
84tscmoorrandom48574.85%81%74%68%91%
85tscmoozzerg44654.48%71%53%42%61%
86TyrProtossprotoss47767.51%53%63%78%97%
87UC3ManoloBotterran362.78%10%0%0%0%
88UPStarCraftAI2016zerg45139.25%49%46%27%34%
89WillBotrandom52144.53%39%50%45%38%
90WillyTterran14042.86%37%44%48%33%
91WuliBotprotoss48672.02%58%77%76%78%
92Xelnagaprotoss45632.24%38%36%25%30%
93YuanhengZhuprotoss48837.91%44%41%28%51%
94Zercgberhtzerg47135.03%37%39%31%30%
95Ziabotzerg47853.97%51%51%60%50%
96ZurZurZurzerg48361.08%63%53%68%59%

A lot of interesting details can be seen in which bot is better against which race. Iron does well against all races, but smashes protoss into the ground. I find it surprising that MarineHell scores better against protoss. Zerg KillAlll has a striking pattern in that it does well against terran and protoss, and can’t cope with another zerg. Zerg NLPRbot does much better against terran.

I’m pleased with Steamhammer’s numbers. In the last AIIDE tournament, Steamhammer played well against zerg, but unconvincingly against terran and protoss. This version looks good against all races, though still weaker against protoss.

Next: Data broken down by map.

unnamed ladder now named SAIL

The unnamed ladder has gotten an official name: SAIL, the Starcraft AI Ladder. That will make it easier to talk about!

Another update since my last mention is a line on the web page giving the last time SAIL was updated by copying bots over from SSCAIT. It says they do it weekly. From the point of view of a bot author, SAIL can be treated as an annex of SSCAIT: Submit your bot in one place and get the advantages of both. It would be nice of SSCAIT to advertise that, so that authors know what they are getting into.