archive by month
Skip to content

Steamhammer 3.6 uploaded

I uploaded Steamhammer 3.6 to SSCAIT. It turns out that Steamhammer terran needs a bug fix, so no Randomhammer for now. It will have to wait for my traditional post-AIIDE bugfix version.

As I mentioned earlier, I’ll post the change list after I’ve fixed up the blog. First things first.

AIIDE 2023 - Steamhammer is submitted

Steamhammer is submitted for AIIDE 2023. You bring the futile hopes, I’ll bring the lurker spines.

It was kind of a scramble this year, though. Yesterday when I did what was supposed to be the final round of major tests, I turned up 3 critical bugs, 2 in new features and 1 left over from who knows when, hidden from view because the opponent model learned to avoid playing into it. As I stayed up late last night frantically debugging, a cricket got into the house—into the same room—and started talking loudly with its friends outside. Not entirely relaxing! But I got up early in the morning and finished fixing everything, and ran more tests, and packed it up, and ran the did-I-pack-it-up-correctly checks and tests, and now it’s on its way.

Last year, Steamhammer scored about 8% against BananaBrain, which finished first. BananaBrain has improved since then, but I expect to score substantially higher against it this year. Well, I could have missed further bugs, but there was no sign of it in what I had time for. My very last test game was against BananaBrain. It was hard-fought and went to late game, and zerg lost narrowly. Steamhammer managed to parasite every shuttle, and plague a lot of armies.

Next: Fixing the blog comments is my first priority. Then I’ll release Steamhammer and write up its changes.

progress on three items

Three items.

1. Steamhammer is coming along nicely. Today I completed and tested new infrastructure that will make it easy to solve one of Steamhammer’s biggest weaknesses, and bring other play improvements closer too. There’s not much time before the AIIDE submission deadline, but even so, expect harder fights.

2. Blog comments turn out to not be the only problem with the blog. I need to do some sysadmin stuff that I find tedious, and I don’t want to be distracted from working on Steamhammer. I’ll get around to it sometime in September for sure. Sorry. :-( I miss the good comments.

3. CoG has not posted results on its website, not even summary results. If and when they appear, I’ll do at least some of my usual analysis.

BananaBrain-Steamhammer game

To fill the dead air while I try to fix the absurdly undiagnosable comment bug, here’s a game I was pleased with.

Steamhammer - BananaBrain on Python was played not long ago. (Here’s the replay.) BananaBrain held the initiative for most of the game, and broke into the zerg natural at one point, but never destroyed a completed zerg base. The game has plague, parasite, and broodling.

Steamhammer’s favorite strategy is to overrun you in the late game. Even strong opponents lose if they let the strategy play out.

AIIDE and other tournaments

AIIDE. Steamhammer will play in AIIDE again this year. I expect to bring a new version—it has been too long. Steamhammer’s infrastructure for some important new skills is almost ready, so if all goes as it should I will shatter your futile hopes with lurker spines!

I like the map rules this year: Five chosen from last year’s maps, five from a long list of varied maps. It’s a compromise between the guaranteed quality of a fixed map pool and CoG’s historical plan of selecting the maps from a list with inconsistent quality, some of which bots struggle on. The AIIDE list is large but sorted by quality, and the allowed maps have relatively few features that bots can’t cope with. Well, the list is long enough that there are several maps I don’t recognize.

I have often tested Steamhammer on random maps from a large collection, including utterly nonstandard Blizzard maps. It’s not good (yet) at taking advantage of map features, but it’s solid and consistent on standard-ish maps. It may be to my advantage.

CoG. The conference runs from 21-24 August, so results should be out soon. The roster includes one new bot, ProtossPleb, whose name and information does not look promising in itself. But we’ll see. The other participants are several familiar top finishers.

ASL Season 16 started this week. No great games so far, but I enjoyed Calm’s clever play against Rain in group B of the round of 24. The best games are often in the round of 8.

I tried turning comments back on, but it seems the feature grew a technical problem on the new webhost. Stand by for repairs.

Randomhammer re-uploaded

I re-enabled Randomhammer on SSCAIT. It was disabled for the tournament. There are no updates to the code.

I disabled it on 19 December by uploading an empty zip. Strangely, Randomhammer’s game history shows 5 games played between 30 January and 4 February (today). Since there was no bot to run, the Randomhammer player did not do anything.

SSCAIT Steamhammer prospects

Steamhammer won all but 2 of its regames, shifting its score up minutely from 79-33 to 80-32. It is tied with WillyT, which means it’s not definite which opponent it will face. Depending on whatever rule is used to pair tied bots, it might face Hao Pan, PurpleWave, or Dragon. PurpleWave is a possible opponent only if Hao Pan wins its last regame, which is likely.

Halo by Hao Pan would be its ideal opponent. Steamhammer would stand a good chance to upset the higher ranked bot.

PurpleWave would almost certainly win.

Dragon is in between. Steamhammer’s score ratio versus Dragon on BASIL is around 2:3, so it has a theoretical chance of winning a match. But Steamhammer will do worse on SSCAIT because it has less data to go on. There would be a slight chance of an upset.

SSCAIT 2022 prospects

I may not have updated Steamhammer in 2022, but I am still following SSCAIT. I’m watching a lot of the games, and especially all Steamhammer games.

Krasi0 is participating, after sitting out recent tournaments. It has been missed.

I expect the top to be fought between Krasi0, Stardust, and BananaBrain. Krasi0 is the favorite to win the round robin phase. Monster has slipped a little as a few opponents have learned how to deal with it. PurpleWave put on a clinic for how to beat Monster as protoss, and so did Krasi0 as terran. Both won with one-base timing attacks at an early point when Monster’s build was weak. Monster needed better understanding of the opponent’s build to adapt. (Monster’s ZvZ build and adaptation are different, so zerg can’t simply copy the timing.)

PurpleWave is following its pattern of excellent preparation against key opponents it will face in the elimination phase, along with stray losses to weaker opponents. Will it be good enough to win the elimination phase and be the overall winner?

So far Steamhammer has been holding a position at the bottom of the top 16, with only slight wobbles. But the tournament is young. I expect it to finish about the same as last year. Only its top opponents have improved much, and they are all ranked higher anyway! And Steamhammer’s learning tends to make it robust against moderate updates to its opponents, at least once it has had time to adjust. But then, I have been over-optimistic in the past.

AIIDE 2022 - what Steamhammer learned

Steamhammer did not record all games, only the last 200. I’ll mention my preparation for different opponents, because it makes a big difference.

Steamhammer’s gas steal achieved nothing significant against any opponent. Maybe next year I’ll disable it.


#1 bananabrain

openinggameswinswinslossesfirstlast
10HatchHydra20%-8:5862195
10HatchLing10%-10:00150150
11Gas10PoolLurkerB10%-20:123232
11HatchTurtleHydra10%-14:25138138
12-11Hatch10%-11:114747
12-12Hatch10%-13:548787
12Hatch12Pool10%-15:02137137
12Hatch13Pool10%-12:299595
3HatchHydraExpo10%-9:36135135
3HatchLing10%-8:19109109
3HatchLingBust4726%15:1911:560197
3HatchLingExpo911%7:588:563154
4HatchBeforeLair10%-8:3477
4PoolHard10%-8:00159159
5HatchBeforeGas138%12:1111:564161
5HatchPoolLing10%-14:372222
5HatchPoolLingBurrow3017%22:3810:2350187
5PoolHard2Player10%-17:253939
6PoolBurrow10%-11:546969
6PoolHide20%-16:2337110
6PoolSpeed10%-8:544949
7-7HydraRush10%-7:343333
7PoolHard10%-12:447979
8Gas7PoolLurker B10%-6:217373
8Hatch7Pool10%-13:32106106
8Pool10%-11:184444
9HatchExpo9Pool9Gas10%-10:094040
9HatchMain9Pool9Gas1916%9:5111:37112192
9Pool20%-10:12164193
9PoolExpo10%-11:387474
9PoolHatch10%-16:2522
9PoolHatchBurrow10%-14:415757
9PoolHatchSpeed7Drone10%-12:468282
9PoolHatchSpeed7DroneB10%-11:297676
9PoolHatchSpeedSpire210%-15:095555
9PoolHatchSpire10%-8:109999
9PoolLair20%-11:3152105
9PoolLurker10%-12:00175175
9PoolSpeed10%-9:007575
9PoolSpeedAllIn20%-7:25141198
9PoolSpire10%-6:43143143
9PoolSunkHatch20%-13:1598111
9PoolSunkSpeed10%-7:258383
AntiFact_2Hatch10%-6:49199199
AntiFactoryHydra10%-11:02129129
AntiStyx_9Pool20%-9:01108170
AntiStyx_Muta10%-9:463535
AntiZeal_12Hatch10%-15:27171171
DefilerRush10%-13:19188188
Over10Hatch20%-11:3186165
Over10Hatch2Sunk20%-17:363042
Over10PoolHydra20%-10:40124
OverhatchExpoLing20%-14:1945177
OverhatchExpoMuta20%-12:1580184
OverhatchLing20%-10:582548
Overpool+110%-8:44185185
OverpoolHide10%-9:38145145
OverpoolLurker10%-6:57162162
OverpoolSpeed10%-10:048989
Phlegethon1020%8:2614:029196
ZvP_2HatchFakeHydra10%-9:207878
ZvP_2HatchFakeMuta10%-14:56139139
ZvP_3HatchPoolHydra10%-16:342626
ZvP_Overpool3Hatch10%-12:404646
ZvT_13Pool10%-7:52160160
65 openings20012% 12:49 11:31
planpredictedrecognizedaccuracy
countgameswinscountgameswinsgood?
Fast rush178%6%147%7%24%47%
Heavy rush8744%11%7940%13%75%15%
Naked expand94%11%42%50%0%89%
Proxy2412%12%168%0%29%17%
Safe expand5326%17%3216%12%51%9%
Turtle105%0%158%7%10%20%
Unknown--4020%15%0%0%
timing#medianearlylate
my combat unit2003:091:497:43
my gas1833:271:1511:15
enemy scout2001:440:576:47
enemy combat unit2002:532:186:02
enemy gas1876:182:4810:52
enemy air unit1836:332:4912:46
enemy cloaked unit1399:023:2613:50
game duration20011:335:5226:39
gas steal#medianearlylatewinsenemy gas
gas steal decision532:141:583:4615%6:27
gas steal success382:202:083:4316%6:28
none or failed162---11%6:12
gas steal killed383:052:5120:12


On BASIL, Steamhammer had been scoring best against BananaBrain with the Phlegethon ling-flood build. If that worked, then I reasoned (without testing) that the similar but more efficient 3HatchLingBust should be better. I gave Steamhammer hints to try both, and I was right. It wins sometimes when BananaBrain incautiously expands too early. Since no opening was good, Steamhammer experimented widely and found a lot of inferior tries.


#2 stardust

openinggameswinswinslossesfirstlast
11Gas10PoolLurker10%-11:223434
11HatchTurtleHydra20%-10:5434
11HatchTurtleMuta138%13:0412:3813153
12HatchTurtle10%-12:21104104
2HatchLurkerAllIn20%-11:363673
2HatchMutaPure1136%0:0110:45165195
2x10HatchAllIn911%0:0110:0055194
2x10HatchSlow10%-9:591010
3GasMuta3424%7:3912:0318198
3HatchHydraExpo20%-13:445109
3HatchLing10%-9:4911
3HatchLingExpo10%-9:55190190
3HatchLurker10%-9:55146146
4HatchBeforeGas10%-10:29126126
4PoolSoft10%-9:541717
5HatchPoolLing10%-11:546363
5PoolHard2Player10%-10:03169169
6PoolSpeed70%-10:04997
7PoolMid10%-9:249494
8-8HydraRush119%7:038:0160189
8Hatch7PoolBurrowB10%-9:16123123
9GasLair10%-8:187474
9PoolFastLair10%-8:40156156
9PoolFastLurker10%-12:378080
9PoolFastSpireB10%-9:032424
9PoolHatch10%-9:25100100
9PoolLair10%-13:53199199
9PoolLurker10%-11:448181
9PoolSpeed10%-13:58159159
9PoolSpeedAllIn10%-12:0266
9PoolSpire10%-9:58136136
9PoolSunkBurrow812%0:019:4666162
9PoolSunkHatch10%-13:06103103
9PoolSunkSpeed10%-9:293737
AntiZeal_12Hatch10%-9:562727
DefilerRush10%-26:439999
HiveRush10%-22:44186186
Over10Hatch1Sunk30%-10:262107
Over10Hatch2Sunk20%-11:2550111
Over10HatchBust20%-9:20052
Over10HatchHydra10%-11:454444
Over10HatchSlowLings10%-12:303939
Over10PoolMuta20%-8:05108140
OverhatchExpoLing10%-9:182929
OverpoolFastLair10%-10:35130130
OverpoolSpeed10%-8:5488
OverpoolTurtle 010%-12:071111
Overpool_3HatchLing1631%0:0110:4043157
Overpool_3HatchSpeed10%-9:424040
Sparkle 1HatchMuta3447%17:3415:45112197
Sparkle 3HatchMuta10%-9:05168168
ZvP_Overpool3Hatch10%-8:43171171
ZvT_2HatchMuta10%-15:449090
ZvT_3HatchMuta10%-11:28187187
ZvZ_12Gas11Pool10%-7:32192192
ZvZ_12HatchExpo10%-9:192222
ZvZ_12HatchMain10%-10:21163163
ZvZ_Overpool9Gas10%-9:553030
58 openings20018% 15:17 10:48
planpredictedrecognizedaccuracy
countgameswinscountgameswinsgood?
Heavy rush19196%18%5628%5%29%70%
Turtle94%33%21%0%0%89%
Unknown--14271%24%0%0%
timing#medianearlylate
my combat unit1863:101:495:19
my gas1853:011:187:25
enemy scout1861:571:186:01
enemy combat unit1862:462:215:14
enemy gas1863:573:057:53
enemy air unit1864:053:0610:13
enemy cloaked unit6211:066:5717:09
game duration20010:560:0126:43
gas steal#medianearlylatewinsenemy gas
gas steal decision122:041:532:158%3:56
gas steal success62:041:562:210%4:17
none or failed194---19%3:56
gas steal killed62:452:362:57


I expected to score zero against Stardust, or next to it. As it turned out, mutalisk openings held out some hope, and not all wins were due to Stardust crashing (the “wins” timing column gives the median duration of winning games).


#3 dragon

openinggameswinswinslossesfirstlast
3HatchPoolMuta757%14:2926:3567177
5HatchPool5190%14:2028:300194
9PoolFastLurker1070%10:3631:33109191
9PoolHatchSpeed10%-16:1277
9PoolSpire10%-16:305454
AntiFact_13Pool1560%17:2222:122180
AntiFact_Overpool11Hatch5990%16:5124:1120196
OverpoolLurker10%-21:477474
OverpoolSpeed10%-15:014545
ZvP_4HatchPoolHydra1675%14:2527:124197
ZvT_3HatchMutaExpo3884%16:2523:313199
11 openings20082% 15:45 23:35
planpredictedrecognizedaccuracy
countgameswinscountgameswinsgood?
Factory2412%75%2010%75%21%29%
Heavy rush32%67%63%100%0%67%
Naked expand147%79%168%81%7%43%
Safe expand9045%80%4623%83%30%34%
Turtle--32%100%0%0%
Unknown--6734%79%0%0%
Worker rush6934%87%4221%83%43%30%
timing#medianearlylate
my combat unit2003:102:138:17
my gas1683:391:4617:58
enemy scout1932:141:0313:37
enemy combat unit1692:432:218:46
enemy gas1656:062:3414:09
enemy air unit1639:295:3318:13
enemy cloaked unit11510:507:2224:22
game duration20016:243:4251:19
gas steal#medianearlylatewinsenemy gas
gas steal decision102:442:243:0680%6:29
gas steal success0-----
none or failed200---82%6:06
gas steal killed0---


Since Dragon was a carryover bot, and Steamhammer was not much changed from last year, my preparation was to drop in last year’s learning file unchanged. The Steamhammer fixes I did make improved defense substantially, though, so Steamhammer in most cases scored better playing the same openings. It discovered AntiFact_Overpool11Hatch on its own, though.

Dragon never allowed a gas steal. And it played the longest games.


#5 purplewave

openinggameswinswinslossesfirstlast
10Hatch10%-12:137373
10HatchBurrow10%-11:242424
11HatchTurtleMuta5269%20:1416:1568194
11Pool10%-28:54106106
2.5HatchMuta10%-6:46172172
6PoolHide10%-31:133737
7-7HydraRush10%-10:23149149
7Pool12Hatch1173%10:1321:27167198
9GasLair825%24:2111:5166164
9PoolHatchSpeedAllIn10%-9:271717
9PoolSpeedAllIn2642%24:4013:1929192
9PoolSunkHatch1323%25:2416:0811147
AntiZeal_12Hatch650%21:4314:02161184
Over10Hatch3435%25:1322:411199
Over10Hatch1Sunk10%-43:2444
Over10Hatch2Sunk20%-21:013196
Over10HatchBurrow10%-15:529797
Over10HatchBust1844%7:5912:130166
Over10HatchSlowLings10%-10:4877
OverhatchLateGas933%24:1413:28135195
OverpoolBurrow10%-10:42152152
OverpoolHide617%8:3924:2759176
OverpoolTurtle 010%-11:23133133
UltraRush10%-9:282525
ZvP_3BaseSpire+Den10%-19:122727
ZvT_12PoolMuta10%-21:27158158
26 openings20044% 21:45 15:45
planpredictedrecognizedaccuracy
countgameswinscountgameswinsgood?
Heavy rush200100%44%15578%44%78%9%
Naked expand--168%69%0%0%
Safe expand--21%50%0%0%
Turtle--94%11%0%0%
Unknown--189%33%0%0%
timing#medianearlylate
my combat unit2003:031:584:02
my gas1994:021:197:09
enemy scout1991:351:188:06
enemy combat unit2002:432:223:46
enemy gas1906:293:549:46
enemy air unit1739:196:3015:02
enemy cloaked unit14412:136:4217:31
game duration20019:335:3860:00
gas steal#medianearlylatewinsenemy gas
gas steal decision412:352:053:1541%6:18
gas steal success312:402:173:2039%6:13
none or failed169---44%6:33
gas steal killed313:173:034:06


For PurpleWave, I gave hints that 3HatchHydraExpo might lose and Over10Hatch might win. On BASIL, PurpleWave had been playing the same opening over and over versus Steamhammer, and I doubted it would do the same in the tournament, so I didn’t have much to go on. Steamhammer made interesting and surprising choices. I would not have guessed that the crazy 7Pool12Hatch would succeed. It’s too bad that the bot discovered it so late in the tournament.

Steamhammer tended to get gas late, a sign that it was either under pressure or else putting on its own pressure instead of teching.


#6 mcrave

openinggameswinswinslossesfirstlast
10Hatch10%-5:574545
11Gas10PoolMuta10%-6:231414
11HatchTurtleLurker10%-9:11192192
12Hatch13Pool20%-5:5328157
2HatchLingAllInSpire10%-5:35118118
3HatchHydraBust10%-5:254040
3HatchLingBurrow10%-5:375050
3HatchPoolHydraAllIn10%-5:475757
4PoolHard10%-8:48188188
4PoolSoft10%-7:582121
5PoolHard2Player10%-8:36114114
5Scout729%5:359:0131162
7Pool12Hatch10%-8:584747
7Pool6GasLurker A10%-5:23143143
7Pool6GasLurker B20%-5:2338184
8Hatch7PoolBurrowB10%-5:337878
9Hatch8Pool10%-5:25121121
9Pool9Hatch10%-5:50195195
9PoolBurrow10%-9:54102102
9PoolHatchSpeed7Drone10%-5:29142142
9PoolHatchSpeedAllIn3453%5:489:0115199
9PoolHatchSpeedLurker10%-9:59126126
9PoolSunkHatch20%-8:4912124
AntiFact_Overpool9Gas10%-5:158989
Over10Hatch1010%5:485:3883133
Over10Hatch11Pool10%-5:258080
Over10Hatch2Sunk10%-12:07103103
Over10HatchBurrow10%-8:182727
Overgas+110%-5:269898
Overpool+110%-6:15146146
OverpoolTurtle 010%-14:103030
ZvP_4HatchPoolHydra10%-5:399090
ZvZ_12Gas11Pool2335%11:385:3062182
ZvZ_12HatchMain10%-8:38153153
ZvZ_12PoolLing10%-9:28163163
ZvZ_Overgas9Pool1429%10:475:412194
ZvZ_OverpoolTurtle7867%9:3412:390198
37 openings20042% 9:12 8:18
planpredictedrecognizedaccuracy
countgameswinscountgameswinsgood?
Fast rush7336%44%168%50%7%79%
Turtle12764%42%2914%48%15%76%
Unknown--15578%41%0%0%
timing#medianearlylate
my combat unit1962:261:473:45
my gas1832:061:307:06
enemy scout1832:530:428:23
enemy combat unit2002:270:413:42
enemy gas1953:092:326:03
enemy air unit1874:353:386:22
enemy cloaked unit0---
game duration2008:445:1219:17
gas steal#medianearlylatewinsenemy gas
gas steal decision142:110:453:2121%3:28
gas steal success10:490:490:49100%-
none or failed199---42%3:09
gas steal killed14:334:334:33


For McRave I gave hints suggesting 5Scout and ZvZ_OverpoolTurtle. 5Scout seriously has scored well against McRave, but not this time—though it does seem to have brought one winning gas steal.


#7 microwave

openinggameswinswinslossesfirstlast
10HatchLing956%6:3712:38154185
12-13Hatch10%-4:397979
12HatchTurtle10%-14:199999
2HatchLingAllInSpire1464%11:326:14128180
3HatchLurker10%-4:40117117
4HatchBeforeGas10%-7:11124124
5PoolHard10%-10:258080
6PoolSpeedBurrow10%-6:32187187
9Pool8Hatch10%-10:317070
9PoolHatchSpeed7Drone8100%6:10-192199
9PoolHatchSpeedAllIn2467%6:1511:0652179
9PoolHatchSpeedAllInB10%-12:22190190
OverhatchMuta2167%9:585:040177
OverpoolSpeed2572%12:4010:362189
ZvT_3HatchMutaExpo10%-5:34119119
ZvZ_12Gas11Pool10%-5:208989
ZvZ_12HatchMain1050%12:3814:4220191
ZvZ_Overpool9Gas7991%13:5222:103186
18 openings20074% 11:47 10:52
planpredictedrecognizedaccuracy
countgameswinscountgameswinsgood?
Fast rush4623%83%2613%77%9%48%
Heavy rush158%80%136%92%0%60%
Naked expand10754%68%5226%77%27%38%
Turtle3216%75%158%47%3%69%
Unknown--9447%72%0%0%
timing#medianearlylate
my combat unit1962:261:514:07
my gas1952:061:495:23
enemy scout1942:261:178:55
enemy combat unit2002:341:013:25
enemy gas1574:042:1511:59
enemy air unit1275:573:3414:17
enemy cloaked unit34:574:547:38
game duration20011:274:0637:54
gas steal#medianearlylatewinsenemy gas
gas steal decision102:111:552:4840%4:28
gas steal success0-----
none or failed200---74%4:04
gas steal killed0---


For Microwave I prepared four different ZvZ openings that were successful on BASIL. All were reasonably effective, and ZvZ_Overpool9Gas was excellent. Steamhammer discovered 9PoolHatchSpeed7Drone on its own, very late in the tournament, and won the last 8 games straight with it. Overall, zerglings mostly worked out better than mutalisks, but the median game duration suggests that the win often came after switching to mutas.


#8 ualbertabot

openinggameswinswinslossesfirstlast
OverpoolTurtle20096%5:5520:160199
1 openings20096% 5:55 20:16
planpredictedrecognizedaccuracy
countgameswinscountgameswinsgood?
Factory2814%100%3116%100%7%21%
Fast rush2110%95%2914%100%5%33%
Heavy rush12964%96%6532%98%33%25%
Naked expand2211%95%2412%100%18%27%
Unknown--5126%88%0%0%
timing#medianearlylate
my combat unit2002:262:222:37
my gas2002:582:554:25
enemy scout1792:101:186:38
enemy combat unit1692:461:464:14
enemy gas1843:302:3114:48
enemy air unit3313:335:5116:47
enemy cloaked unit1914:552:3817:21
game duration2005:573:3134:14
gas steal#medianearlylatewinsenemy gas
gas steal decision391:561:452:41100%3:33
gas steal success152:061:582:41100%11:43
none or failed185---96%3:29
gas steal killed153:032:496:56


For UAlbertaBot I did not provide hints, but configured Steamhammer to always play its best known choice. It’s an extreme turtle build that holds on against all of UAlbertaBot’s rushes and then strikes back. Any experimentation would have lowered the win rate.


#9 pylonpuller

openinggameswinswinslossesfirstlast
12HatchTurtle2488%11:168:5622165
12Hatch_4HatchLing2796%6:458:30170197
3HatchHydra2767%11:178:310130
9HatchExpo9Pool9Gas1974%6:1311:1682156
9PoolHatch2479%8:009:409199
AntiFact_2Hatch540%12:598:1497117
AntiZeal_12Hatch4088%11:008:436193
Over10HatchBurrow10%-12:38129129
ZvZ_OverpoolTurtle3385%12:0112:29132169
9 openings20082% 10:23 9:37
planpredictedrecognizedaccuracy
countgameswinscountgameswinsgood?
Fast rush21%100%126%8%0%50%
Heavy rush13768%80%8442%79%49%25%
Turtle5930%85%4020%90%22%44%
Unknown--6231%94%0%0%
Worker rush21%100%21%100%0%50%
timing#medianearlylate
my combat unit2003:092:138:13
my gas1973:412:016:05
enemy scout1253:551:229:09
enemy combat unit1783:272:217:23
enemy gas874:212:5214:14
enemy air unit554:292:5314:15
enemy cloaked unit335:423:1811:45
game duration20010:174:1924:00
gas steal#medianearlylatewinsenemy gas
gas steal decision712:081:463:0790%3:53
gas steal success402:192:053:0088%8:35
none or failed160---80%4:18
gas steal killed405:152:5717:53


I made no prep. There wasn’t data, the opponent was being updated too often.


#10 styx

openinggameswinswinslossesfirstlast
9PoolSunkHatch9996%5:177:090199
9PoolSunkSpeed2291%4:4310:18148194
Over10PoolMuta978%6:575:2439198
OverpoolSunk1794%5:325:598172
ZvT_12PoolMuta2886%6:125:2357196
ZvZ_12PoolLing2580%5:576:277161
6 openings20091% 5:27 6:26
planpredictedrecognizedaccuracy
countgameswinscountgameswinsgood?
Fast rush18291%91%10352%97%51%29%
Heavy rush189%89%4020%88%17%22%
Unknown--5728%82%0%0%
timing#medianearlylate
my combat unit1992:172:132:49
my gas1894:062:065:50
enemy scout1732:310:375:39
enemy combat unit1882:131:133:43
enemy gas0---
enemy air unit0---
enemy cloaked unit0---
game duration2005:373:2514:12
gas steal#medianearlylatewinsenemy gas
gas steal decision0-----
gas steal success0-----
none or failed200---91%-
gas steal killed0---


No prep needed.


#11 cunybot

openinggameswinswinslossesfirstlast
11Gas10PoolMuta10100%7:59-45194
4PoolHard475%4:544:229132
4PoolSoft580%6:486:5454134
5PoolHard8100%5:25-82193
5PoolHard2Player250%5:019:4278113
5PoolSoft5100%5:11-110181
6PoolSpeed10100%4:55-8138
9PoolHatchSpeedAllIn6100%5:14-144196
9PoolHatchSpeedAllInB14100%5:12-5178
9PoolSunkHatch20100%7:18-0177
9PoolSunkSpeed12100%5:56-31190
Over10PoolLing2100%6:22-160182
OverhatchLing14100%5:47-3170
OverhatchMuta1694%6:214:5015192
OverpoolSunk11100%5:20-1198
ZvZ_12HatchExpo12100%6:37-12191
ZvZ_12HatchMain14100%8:04-33197
ZvZ_12PoolLing6100%5:49-95165
ZvZ_12PoolMain10100%6:39-4199
ZvZ_Overgas9Pool989%7:4315:5085189
ZvZ_OverpoolTurtle1090%10:309:4613107
21 openings20097% 6:27 8:18
planpredictedrecognizedaccuracy
countgameswinscountgameswinsgood?
Fast rush5226%96%4824%92%25%17%
Heavy rush178%100%2814%100%12%29%
Naked expand13166%97%7035%99%29%31%
Unknown--5427%98%0%0%
timing#medianearlylate
my combat unit2002:271:473:17
my gas1822:411:307:51
enemy scout1892:591:316:43
enemy combat unit1982:341:024:42
enemy gas623:452:4311:53
enemy air unit194:273:5114:19
enemy cloaked unit0---
game duration2006:273:3723:51
gas steal#medianearlylatewinsenemy gas
gas steal decision0-----
gas steal success0-----
none or failed200---97%3:45
gas steal killed0---


No prep needed. The win percentages say that Steamhammer immediately switched away from every opening that lost once.


overall

totalZvTZvPZvZZvR
openinggameswinsgameswinsgameswinsgameswinsgameswins
10Hatch20% 10% 10%
10HatchBurrow10% 10%
10HatchHydra20% 20%
10HatchLing1050% 10% 956%
11Gas10PoolLurker10% 10%
11Gas10PoolLurkerB10% 10%
11Gas10PoolMuta1191% 1191%
11HatchTurtleHydra30% 30%
11HatchTurtleLurker10% 10%
11HatchTurtleMuta6557% 6557%
11Pool10% 10%
12-11Hatch10% 10%
12-12Hatch10% 10%
12-13Hatch10% 10%
12Hatch12Pool10% 10%
12Hatch13Pool30% 10% 20%
12HatchTurtle2681% 2584% 10%
12Hatch_4HatchLing2796% 2796%
2.5HatchMuta10% 10%
2HatchLingAllInSpire1560% 1560%
2HatchLurkerAllIn20% 20%
2HatchMutaPure1136% 1136%
2x10HatchAllIn911% 911%
2x10HatchSlow10% 10%
3GasMuta3424% 3424%
3HatchHydra2767% 2767%
3HatchHydraBust10% 10%
3HatchHydraExpo30% 30%
3HatchLing20% 20%
3HatchLingBurrow10% 10%
3HatchLingBust4726% 4726%
3HatchLingExpo1010% 1010%
3HatchLurker20% 10% 10%
3HatchPoolHydraAllIn10% 10%
3HatchPoolMuta757% 757%
4HatchBeforeGas20% 10% 10%
4HatchBeforeLair10% 10%
4PoolHard650% 10% 560%
4PoolSoft757% 10% 667%
5HatchBeforeGas138% 138%
5HatchPool5190% 5190%
5HatchPoolLing20% 20%
5HatchPoolLingBurrow3017% 3017%
5PoolHard989% 989%
5PoolHard2Player520% 20% 333%
5PoolSoft5100% 5100%
5Scout729% 729%
6PoolBurrow10% 10%
6PoolHide30% 30%
6PoolSpeed1856% 80% 10100%
6PoolSpeedBurrow10% 10%
7-7HydraRush20% 20%
7Pool12Hatch1267% 1173% 10%
7Pool6GasLurker A10% 10%
7Pool6GasLurker B20% 20%
7PoolHard10% 10%
7PoolMid10% 10%
8-8HydraRush119% 119%
8Gas7PoolLurker B10% 10%
8Hatch7Pool10% 10%
8Hatch7PoolBurrowB20% 10% 10%
8Pool10% 10%
9GasLair922% 922%
9Hatch8Pool10% 10%
9HatchExpo9Pool9Gas2070% 2070%
9HatchMain9Pool9Gas1916% 1916%
9Pool20% 20%
9Pool8Hatch10% 10%
9Pool9Hatch10% 10%
9PoolBurrow10% 10%
9PoolExpo10% 10%
9PoolFastLair10% 10%
9PoolFastLurker1164% 1070% 10%
9PoolFastSpireB10% 10%
9PoolHatch2673% 2673%
9PoolHatchBurrow10% 10%
9PoolHatchSpeed10% 10%
9PoolHatchSpeed7Drone1080% 10% 989%
9PoolHatchSpeed7DroneB10% 10%
9PoolHatchSpeedAllIn6562% 10% 6462%
9PoolHatchSpeedAllInB1593% 1593%
9PoolHatchSpeedLurker10% 10%
9PoolHatchSpeedSpire210% 10%
9PoolHatchSpire10% 10%
9PoolLair30% 30%
9PoolLurker20% 20%
9PoolSpeed20% 20%
9PoolSpeedAllIn2938% 2938%
9PoolSpire30% 10% 20%
9PoolSunkBurrow812% 812%
9PoolSunkHatch13786% 1619% 12195%
9PoolSunkSpeed3689% 20% 3494%
AntiFact_13Pool1560% 1560%
AntiFact_2Hatch633% 633%
AntiFact_Overpool11Hatch5990% 5990%
AntiFact_Overpool9Gas10% 10%
AntiFactoryHydra10% 10%
AntiStyx_9Pool20% 20%
AntiStyx_Muta10% 10%
AntiZeal_12Hatch4879% 4879%
DefilerRush20% 20%
HiveRush10% 10%
Over10Hatch4628% 3633% 1010%
Over10Hatch11Pool10% 10%
Over10Hatch1Sunk40% 40%
Over10Hatch2Sunk70% 60% 10%
Over10HatchBurrow30% 20% 10%
Over10HatchBust2040% 2040%
Over10HatchHydra10% 10%
Over10HatchSlowLings20% 20%
Over10PoolHydra20% 20%
Over10PoolLing2100% 2100%
Over10PoolMuta1164% 20% 978%
Overgas+110% 10%
OverhatchExpoLing30% 30%
OverhatchExpoMuta20% 20%
OverhatchLateGas933% 933%
OverhatchLing1688% 20% 14100%
OverhatchMuta3778% 3778%
Overpool+120% 10% 10%
OverpoolBurrow10% 10%
OverpoolFastLair10% 10%
OverpoolHide714% 714%
OverpoolLurker20% 10% 10%
OverpoolSpeed2864% 10% 20% 2572%
OverpoolSunk2896% 2896%
OverpoolTurtle20096% 20096%
OverpoolTurtle 030% 20% 10%
Overpool_3HatchLing1631% 1631%
Overpool_3HatchSpeed10% 10%
Phlegethon1020% 1020%
Sparkle 1HatchMuta3447% 3447%
Sparkle 3HatchMuta10% 10%
UltraRush10% 10%
ZvP_2HatchFakeHydra10% 10%
ZvP_2HatchFakeMuta10% 10%
ZvP_3BaseSpire+Den10% 10%
ZvP_3HatchPoolHydra10% 10%
ZvP_4HatchPoolHydra1771% 1675% 10%
ZvP_Overpool3Hatch20% 20%
ZvT_12PoolMuta2983% 10% 2886%
ZvT_13Pool10% 10%
ZvT_2HatchMuta10% 10%
ZvT_3HatchMuta10% 10%
ZvT_3HatchMutaExpo3982% 3884% 10%
ZvZ_12Gas11Pool2532% 10% 2433%
ZvZ_12HatchExpo1392% 10% 12100%
ZvZ_12HatchMain2673% 10% 2576%
ZvZ_12PoolLing3281% 3281%
ZvZ_12PoolMain10100% 10100%
ZvZ_Overgas9Pool2352% 2352%
ZvZ_Overpool9Gas8090% 10% 7991%
ZvZ_OverpoolTurtle12174% 3385% 8869%
total200064%20082%80039%80076%20096%
openings played15311117601


Steamhammer-Stardust game

In this game, Steamhammer hit on a surprising plan that exploited a weakness in Stardust. Even so, Stardust had tricks up its sleeve.

A zerg hatchery in Stardust’s natural, mining away with no defense.

It is strategically correct for the stronger bot to play conservatively, taking no risks. Steamhammer happened across an opening which Stardust answers too conservatively: It proxied in Stardust’s natural. It started the hatchery almost immediately after scouting the location of the protoss base. Correct play is for Stardust to smash the proxy before it can be defended. Stardust scouted the proxy and immediately assumed without evidence that it was contained, so it played conservatively and did not try to break out. The yellow dot in Steamhammer’s natural is the scouting probe: Stardust had all the information it needed to conclude that the proxy was indefensible, but assumed that it was too risky to attack.

The production queues tell each bot’s strategy. Stardust made a robo to escape the containment by air. Also notice the Citadel of Adun. The two cannons next to the nexus are unnecessary; zerg does not have a lair, and protoss could have scouted it but did not bother to. Steamhammer’s opening build assumes blindly that the opponent will not attack—it is a build specialized for defeating one-base protoss players who build up and attack late. Steamhammer is making drones now in preparation for sunkens at the proxy and then a large army.

Speed zealots airlifted out of the protoss base attack the zerg natural.

Both sides have attack +1 already. The citadel was for zealot speed. A shuttle can carry four zealots but only two dragoons. Stardust cleverly elevatored zealots from its main to the north of its base where they would not be seen, and ran them across the map. Steamhammer was ready anyway. Zerglings are about to hatch, and once they joined the hydras the zealots were afraid to engage and ran away. The zealots tried to retreat to the protoss main through the proxy, where sunkens and the zerg army slaughtered them.

Zerg breaks into the protoss base.

After that zerg was in charge. Steamhammer immediately invaded the protoss base, while Stardust airlifted a probe out for a distant hidden base. There was more fighting, but Steamhammer is reliable about winning when this far ahead.

On Jade with its low main, it’s important to defend above the ramp if you can. Otherwise you don’t see what’s coming and you have to fight uphill. But as far as I can see, it didn’t affect this game. Stardust scouted the proxy and did not try to defend its ramp, except for one cannon.

Update: Steamhammer played a second game against Stardust, on the map Python. It went very much the same way. I was right that Jade’s low-ground main did not matter.

Second update, 10 July: Steamhammer has since won a bunch of games that went the same way. Here’s the first game that went differently, on Andromeda. It shows both the strength and the fragility of a strong proxy position.

machine learning for Steamhammer

Working at glacial speed, I pieced together a machine learning algorithm for use in Steamhammer. It passed basic tests today. When I’m sure that it works for real cases that I care about, I’ll release the code. It’s short.

I used a little-known idea and combined it with a standard algorithm employed in a slightly old-fashioned way. It took me a long time to put the thoughts together, but the result is that it fits in 374 lines of code, including blanks and comments, with no dependencies. (It will likely be longer when I release it.) It should be as accurate as a conventional (non-“deep”) neural network, but it learns faster and runs faster. It’s there in the literature, I just had to put the pieces together.

Hooking it into Steamhammer will take more code that the method itself. I’ve claimed before that the first use will be for an evaluation function, “Am I winning?” but that’s not strictly true. The first use will be to train the evaluation function! Once it has useful accuracy it will be put to work in opening selection, and it can be bootstrapped for all kinds of midgame strategy decisions.

Don’t hold your breath, I’m still working at glacial speed, and even global warming won’t change that right away.

Steamhammer in SSCAIT 2021

I predicted Steamhammer to finish at #11 in SSCAIT this year, and hoped it would do a little better. It finished tied for #12-13. On the one hand, it’s only a little lower than I expected. On the other, the difference in games from what I expected is glaring, to my eyes. When I made the prediction, I didn’t realize that Steamhammer’s saved learning data had been reset at some recent time. In the games I saw, Steamhammer had about 8 past games of data on each opponent. I did not imagine that Steamhammer might lose 2 games in a row to XIMP by Tomas Vajda, and 2 games in a row to WuliBot, and other losses to fixed-strategy opponents—it simply doesn’t happen when Steamhammer is trained up.

I estimate that if Steamhammer had won its “easy” games at the rate it does on BASIL, it would have finished at #10, with a chance of reaching #9. It would have been as I hoped.

Today’s finals round 1 match against Halo by Hao Pan was awful. Steamhammer scores over 60% versus Halo on BASIL. In the SSCAIT round robin it scored 2-0 using a ling flood strategy, which won when Halo opened its wall prematurely. In today’s match the ling flood failed, though it was close. Steamhammer didn’t have much experience to back up its next choices, and made poor ones.

Steamhammer’s next match is in the loser’s bracket against #13 McRaveZ. I think its odds are under 50%.

SSCAIT 3 second game

What happened in game 947, Steamhammer-Florian Richoux? It wasn’t the failure to connect that has disturbed other games. It looks like a related but different server failure.

Both bots recorded replays. Both replays are 3 seconds long. Florian Richoux (aka AIUR) recorded a replay where both bots sent workers to mine, end of game. Steamhammer recorded a replay where it sent drones to mine while Florian Richoux was idle as if it had not connected. The official result has Florian Richoux winning, and the game is not considered a crash.

I guess Steamhammer connected and then somehow lost its connection after it issued its mining orders and before Florian Richoux’s mining orders reached it? Or something?

So far Steamhammer has 4 games out of 34 played which were disturbed by apparent server failures. 2 are wins and 2 are losses. That’s about 12%, consistent with the estimated 14% overall rate from earlier on. The failures are adding noise and on average causing scores to shift toward 50%.

SSCAIT early returns

SSCAIT has only been underway for a short time. Results so far are very rough and will change. Even so, Steamhammer is scoring about as expected, currently 10-4 for #10. It has played more games than most bots. A good sign is that it has played more games against the top 16 than any other bot in the top 16, and still held its expected position.

A bad sign is that Steamhammer has two wins over opponents that did not start up: Halo by Hao Pan and Stardust. Stardust has 3 losses, all against opponents it should beat easily. None of the 3 has a replay recorded on Stardust’s side, so it must have failed to start all 3 games. If it’s the server’s fault, either the server bug has a bias or else Stardust is extremely unlucky. In a real game, Steamhammer has good odds against Hao Pan (better than 2:1), but virtually no chance against Stardust.

The ranking will change a lot before the end. So far, BetaStar and PurpleWave have perfect records with 7 and 6 games played respectively. BananaBrain, Monster, and Krasi0P follow with around 90%.