archive by month
Skip to content

AIIDE 2023 - what McRave learned

In 2020, I analyzed McRave’s three-part strategy representation. This version of McRave is the CoG 2022 version, and I think details have changed, but the basic structure is the same as in 2020.

With its deadly mutalisks, McRave apparently does not bother to learn what to play against zerg opponents. In ZvZ, it follows the same 9 pool into one hatch muta strategy every game. It went mutas in most games against terran and protoss, too. But it’s still interesting to see what it recognized in its opponents play.


#1 bananabrain

openinggameswinsfirstlast
HatchPool,12Hatch,2HatchMuta20318%0286
PoolHatch,Overpool,2HatchMuta855%1287
2 openings28814%
enemygameswins
1GateCore,2Zealot,Corsair28014%
1GateCore,2Zealot,Speedlot50%
1GateCore,Unknown,Corsair30%
3 openings28814%

#2 stardust

openinggameswinsfirstlast
HatchPool,12Hatch,2HatchMuta1526%0287
PoolHatch,Overpool,2HatchMuta697%5286
PoolHatch,Overpool,3HatchMuta363%3283
PoolHatch,Overpool,6HatchHydra320%1288
4 openings2895%
enemygameswins
1GateCore,2Zealot,4Gate729%
1GateCore,2Zealot,Corsair1075%
2Gate,10/12,4Gate10%
2Gate,10/12,Corsair10%
2Gate,10/17,4Gate520%
2Gate,10/17,Corsair1811%
2Gate,Proxy,ZealotRush10%
FFE,Forge,CorsairGoon851%
FFE,Forge,DoubleStargate70%
FFE,Forge,Speedlot170%
FFE,Forge,Unknown520%
FFE,Gateway,CorsairGoon205%
FFE,Gateway,Speedlot40%
FFE,Nexus,CorsairGoon40%
FFE,Nexus,DoubleStargate10%
Unknown,Unknown,Unknown633%
16 openings2895%

#3 purplewave

openinggameswinsfirstlast
HatchPool,12Hatch,2HatchMuta23945%0289
PoolHatch,Overpool,2HatchMuta5120%1277
2 openings29040%
enemygameswins
1GateCore,2Zealot,4Gate10%
1GateCore,2Zealot,Corsair270%
1GateCore,2Zealot,Robo1100%
1GateCore,2Zealot,Speedlot100%
1GateCore,Unknown,4Gate1100%
1GateCore,Unknown,Speedlot1100%
2Gate,10/12,Corsair11554%
2Gate,10/12,DT10%
2Gate,10/12,Unknown120%
2Gate,10/12,ZealotRush7450%
2Gate,10/17,Corsair2232%
2Gate,10/17,Unknown50%
2Gate,10/17,ZealotRush1040%
2Gate,9/9,Corsair30%
2Gate,9/9,Unknown10%
2Gate,9/9,ZealotRush1100%
2Gate,Proxy,ZealotRush1100%
2Gate,Unknown,Corsair1100%
2Gate,Unknown,ZealotRush333%
19 openings29040%

#4 steamhammer

openinggameswinsfirstlast
PoolLair,9Pool,1HatchMuta29050%0289
1 opening29050%
enemygameswins
HatchPool,10Hatch,2HatchSpeedling1100%
PoolHatch,12Pool,2HatchHydra1100%
PoolHatch,12Pool,2HatchMuta1100%
PoolHatch,12Pool,2HatchSpeedling11100%
PoolHatch,12Pool,3HatchSpeedling2100%
PoolHatch,4Pool,LingRush3100%
PoolHatch,7Pool,2HatchSpeedling2100%
PoolHatch,9Pool,2HatchSpeedling1675%
PoolLair,12Pool,1HatchMuta5756%
PoolLair,4Pool,1HatchMuta10%
PoolLair,7Pool,1HatchMuta2548%
PoolLair,9Pool,1HatchMuta2343%
PoolLair,Unknown,1HatchMuta10%
Unknown,12Pool,1HatchHydra2100%
Unknown,12Pool,2HatchSpeedling1947%
Unknown,12Pool,Unknown50%
Unknown,7Pool,2HatchSpeedling6349%
Unknown,7Pool,Unknown10%
Unknown,9Pool,2HatchSpeedling3714%
Unknown,Unknown,1HatchHydra367%
Unknown,Unknown,2HatchSpeedling9100%
Unknown,Unknown,3HatchMuta250%
Unknown,Unknown,Unknown50%
23 openings29050%

#6 microwave

openinggameswinsfirstlast
PoolLair,9Pool,1HatchMuta29089%0289
1 opening29089%
enemygameswins
HatchPool,10Hatch,2HatchSpeedling2100%
PoolHatch,12Pool,2HatchSpeedling22100%
PoolHatch,12Pool,3HatchMuta4100%
PoolHatch,12Pool,3HatchSpeedling10%
PoolHatch,12Pool,Unknown23100%
PoolHatch,4Pool,LingRush14100%
PoolHatch,7Pool,2HatchSpeedling14100%
PoolHatch,9Pool,2HatchSpeedling45100%
PoolHatch,Unknown,2HatchSpeedling1100%
PoolLair,12Pool,1HatchLurker1100%
PoolLair,9Pool,1HatchMuta2100%
PoolLair,9Pool,2HatchMuta1100%
Unknown,12Pool,1HatchHydra2100%
Unknown,4Pool,LingRush22100%
Unknown,7Pool,2HatchSpeedling11478%
Unknown,9Pool,2HatchSpeedling933%
Unknown,Unknown,1HatchHydra3100%
Unknown,Unknown,2HatchSpeedling888%
Unknown,Unknown,3HatchSpeedling1100%
Unknown,Unknown,Unknown1100%
20 openings29089%

#7 dragon

openinggameswinsfirstlast
HatchPool,12Hatch,2HatchMuta3842%0271
HatchPool,12Hatch,2HatchSpeedling30%49199
PoolHatch,12Pool,2HatchMuta1145%44274
PoolHatch,12Pool,2HatchSpeedling60%19235
PoolHatch,12Pool,3HatchMuta10776%1289
PoolHatch,Overpool,2HatchMuta2748%15282
PoolHatch,Overpool,2HatchSpeedling2770%2286
PoolHatch,Overpool,3HatchMuta7176%28285
8 openings29065%
enemygameswins
2Rax,Expand,MarineRush10%
2Rax,Main,1FactTanks1225%
2Rax,Main,5FactGoliath3858%
2Rax,Main,Academy2642%
2Rax,Main,MarineRush138%
2Rax,Main,Unknown6156%
2Rax,Proxy,Unknown10%
2Rax,Proxy,WorkerRush367%
2Rax,Unknown,Unknown1100%
RaxCC,1RaxFE,1FactTanks250%
RaxCC,1RaxFE,5FactGoliath1688%
RaxCC,1RaxFE,Unknown2100%
RaxFact,Unknown,2Fact1573%
RaxFact,Unknown,2PortWraith475%
RaxFact,Unknown,5FactGoliath1894%
RaxFact,Unknown,Unknown978%
Unknown,Unknown,5FactGoliath2090%
Unknown,Unknown,Unknown3083%
Unknown,Unknown,WorkerRush1889%
19 openings29065%

#8 ualbertabot

openinggameswinsfirstlast
PoolHatch,Overpool,2HatchMuta20635%0289
PoolHatch,Overpool,2HatchSpeedling8432%1285
2 openings29034%
enemygameswins
2Gate,10/12,ZealotRush5250%
2Gate,10/17,Unknown10%
2Gate,10/17,ZealotRush50%
2Gate,9/9,ZealotRush5342%
2Rax,Main,+1 5Rax1100%
2Rax,Main,MarineRush10%
2Rax,Main,Unknown8526%
2Rax,Proxy,Unknown1100%
Unknown,4Pool,LingRush7434%
Unknown,7Pool,2HatchSpeedling250%
Unknown,Unknown,2HatchSpeedling40%
Unknown,Unknown,Unknown1118%
12 openings29034%

#9 infestedartosis

openinggameswinsfirstlast
PoolLair,9Pool,1HatchMuta29099%0289
1 opening29099%
enemygameswins
HatchPool,10Hatch,2HatchSpeedling3100%
PoolHatch,12Pool,2HatchMuta5100%
PoolHatch,12Pool,2HatchSpeedling132100%
PoolHatch,12Pool,3HatchMuta13100%
PoolHatch,12Pool,3HatchSpeedling7100%
PoolHatch,9Pool,2HatchMuta4100%
PoolHatch,9Pool,2HatchSpeedling67100%
PoolHatch,9Pool,3HatchMuta16100%
PoolLair,12Pool,1HatchMuta2100%
PoolLair,7Pool,1HatchMuta3100%
Unknown,12Pool,2HatchSpeedling786%
Unknown,7Pool,2HatchSpeedling9100%
Unknown,9Pool,2HatchSpeedling10%
Unknown,Unknown,2HatchSpeedling10100%
Unknown,Unknown,3HatchMuta6100%
Unknown,Unknown,3HatchSpeedling2100%
Unknown,Unknown,Unknown3100%
17 openings29099%

AIIDE 2023 - what Microwave learned

Microwave is configured to save only the most recent 200 game records. There were 290 rounds, so where all games were played, it dropped data for 90 games. (Steamhammer is configured the same way, though the data it stores is quite different.)


#1 bananabrain

openinggameswinsfirstlast
10Hatch9Pool9gas10%187187
10HatchMain9Pool9Gas20%150152
10HatchTurtleHydra20%6265
11Gas10PoolMuta20%131155
11HatchTurtleHydra10%8686
11HatchTurtleLurker10%113113
11HatchTurtleMuta20%7897
12Hatch10%6767
12HatchTurtle10%130130
12Pool20%2887
12PoolMain10%8585
1HatchMuta_Sparkle50%59143
2HatchLurker20%5153
2HatchLurkerAllIn10%172172
2HatchMuta1718%84199
2HatchMuta_Sparkle20%55128
3Hatch20%5056
3HatchExpo20%122190
3HatchHydraBust70%52170
3HatchHydraExpo10%7070
3HatchLingBust50%58162
3HatchLurker20%72144
3HatchMuta186%4193
3HatchMutaExpo40%68157
3HatchMuta_Sparkle10%9595
3HatchPoolHydra50%57197
4HatchBeforeGas60%34154
4HatchPool10%139139
4HatchPoolHydra40%115198
4PoolHard20%4869
4PoolSoft10%2424
5HatchPool10%6060
5HatchPoolHydra30%49142
5Pool157%19188
6Pool20%47173
7Pool20%92120
7PoolHydraLingRush7D10%123123
8Pool20%117118
8PoolHydraRush8D10%135135
9Hatch9Pool9Gas20%22108
9HatchMain8Pool8Gas10%7676
9Pool30%88126
9PoolExpo20%2799
9PoolGasHatchSpeed8D10%7171
9PoolHatch30%15175
9PoolHatchGasSpeed8D1817%0186
9PoolSpeed70%12183
9PoolSpeedLing30%13125
9PoolSunkHatch20%111182
9PoolSunken20%7396
Overpool30%89136
OverpoolSpeed30%31176
OverpoolSunken20%64151
OverpoolTurtle20%91145
ZvP_10Hatch9Pool60%18129
ZvP_11Hatch10Pool30%83158
ZvZ_Overgas11Pool10%105105
ZvZ_Overgas9Pool10%1010
ZvZ_Overpool11Gas30%16196
ZvZ_OverpoolTurtle10%2323
60 openings2004%
enemygameswins
HeavyRush260%
NakedExpand100%
Proxy20%
SafeExpand1252%
Turtle1612%
Unknown2119%
6 openings2004%


Mutalisks were good—relatively speaking—even though this version of BananaBrain goes heavy on the corsairs. Even the slow-starting 3 hatch muta was more successful than most builds. It’s curious that the highest win rate came when Microwave was unable to figure out what opening BananaBrain was playing. I doubt the cost of scouting is that high. I’m guessing it’s more likely that scouting failed more often when starting positions were distant. That gave Microwave more time to prepare.


#2 stardust

openinggameswinsfirstlast
10Hatch9Pool9gas20%79125
10HatchTurtleHydra10%147147
11Gas10PoolMuta10%181181
12HatchMain10%4949
1HatchMuta_Sparkle10%105105
2HatchHydra10%141141
2HatchLurker20%130171
2HatchMuta30%66103
3HatchHydra10%8080
3HatchHydraBust40%44168
3HatchLingBust20%1693
3HatchMuta30%62170
3HatchMutaExpo20%17104
3HatchMuta_Sparkle10%178178
3HatchPoolExpo20%129149
3HatchPoolHydra10%135135
4HatchBeforeGas40%5177
4HatchPool10%8282
4PoolHard20%1330
4PoolSoft20%45195
5HatchPool10%111111
5HatchPoolHydra80%9119
5PoolSpeed10%118118
7PoolHydraLingRush7D10%126126
8Pool10%6464
9HatchTurtleHydra10%3535
9Pool10%139139
9PoolExpo10%117117
9PoolGasHatchSpeed7D80%2172
9PoolGasHatchSpeed8D10%191191
9PoolHatch20%120179
9PoolSpeed20%102157
9PoolSpeedLing12821%0199
OverpoolLurker10%121121
OverpoolSpeed10%5252
ZvP_10Hatch9Pool40%12173
ZvP_2HatchHydra10%5353
37 openings20014%
enemygameswins
HeavyRush170%
NakedExpand2030%
SafeExpand860%
Turtle280%
Unknown4943%
5 openings20014%


But Stardust was (a little) vulnerable to zerglings. Again, the highest win rate came when Microwave did not know what Stardust was doing.


#3 purplewave

openinggameswinsfirstlast
10Hatch9Pool9gas2157%11195
11HatchTurtleHydra10%66
2HatchLurker10%7171
3HatchHydra10%165165
4PoolSoft10%172172
5Pool333%323
9PoolGasHatchSpeed8D10%3939
9PoolHatchGasSpeed8D16784%0199
9PoolSpeed10%145145
OverpoolTurtle10%9595
ZvP_9Hatch9Pool10%11
ZvZ_Overpool9Gas10%180180
12 openings20077%
enemygameswins
HeavyRush9274%
NakedExpand20%
Unknown10681%
3 openings20077%


PurpleWave just fell over to Microwave’s zerglings. But even here, an Unknown enemy build was good news for Microwave.

Steamhammer was also successful with zerglings (I’ll post its data when I get to it), but nothing like this successful. I expect that, true to its name, Microwave has superior zergling micro. Though maybe it’s just more aggressive?


#4 steamhammer

openinggameswinsfirstlast
10HatchMain9Pool9Gas633%141153
10HatchTurtleHydra333%174178
12Hatch10%145145
12Pool1242%91180
12PoolMain10%7272
1HatchMuta_Sparkle1644%94164
3Hatch1060%183198
3HatchExpo20%3259
3HatchLingBust10%4040
3HatchPoolHydra10%130130
4PoolHard425%5262
4PoolSoft20%67165
5Pool333%97136
5PoolSpeed825%4383
6Pool10%1010
7Pool10%195195
9HatchMain8Pool8Gas10%7373
9PoolHatchGasSpeed8D2259%35199
9PoolSpeed2941%11196
OverpoolSpeed4939%0187
ZvZ_Overgas11Pool333%57103
ZvZ_Overpool11Gas10%88
ZvZ_Overpool9Gas2339%1182
23 openings20040%
enemygameswins
HeavyRush12534%
NakedExpand1070%
Turtle4132%
Unknown2467%
4 openings20040%


A lot of openings are roughly equal. I suspect that some of the ones that scored 0 would have also been roughly equal if they’d been tried more times.


#5 mcrave

openinggameswinsfirstlast
10Hatch9Pool9gas10%157157
11Gas10PoolMuta10%9696
12Hatch10%179179
12HatchMain10%164164
12HatchTurtle150%1121
12Pool10%150150
2HatchHydra10%6666
2HatchLurker10%6969
2HatchLurkerAllIn20%15119
2HatchMuta10%9898
3Hatch10%7878
3HatchExpo10%1414
3HatchHydra20%171188
3HatchHydra_BHG10%140140
3HatchLingBust10%133133
3HatchPoolHydra20%163191
4HatchBeforeGas10%3636
4HatchPoolHydra10%139139
4PoolHard80%7130
4PoolSoft70%43168
5HatchPool10%183183
5HatchPoolHydra10%33
5Pool50%56149
6Pool10%156156
7Pool10%103103
7PoolHydraLingRush7D20%17151
9PoolGasHatchSpeed7D10%193193
9PoolHatchGasSpeed8D12618%0199
9PoolSunken30%88147
OverpoolSpeed10%5151
OverpoolSunken10%190190
OverpoolTurtle10%5959
ZvP_10Hatch9Pool20%115181
ZvP_2HatchHydra20%57153
ZvZ_Overgas9Pool10%8787
ZvZ_Overpool11Gas10%6060
36 openings20012%
enemygameswins
FastRush30%
HeavyRush17111%
NakedExpand20%
Turtle1527%
Unknown90%
5 openings20012%


So: Good with zerglings, not so good with mutalisks. Microwave knows how to defend its bases with two spore colonies each, in the standard pro way, but apparently that’s not enough to survive against McRave.


#7 dragon

openinggameswinsfirstlast
10HatchTurtleHydra10%8282
11HatchTurtleMuta425%72142
12Hatch1644%45158
1HatchMuta_Sparkle10%4040
3HatchExpo250%178179
3HatchHydraBust10%3737
3HatchLurker10%123123
3HatchMutaExpo250%187188
3HatchMuta_Sparkle2475%160199
5HatchPool3751%2192
5HatchPoolHydra9657%0195
5PoolSpeed10%9797
7PoolHydraLingRush7D30%43100
7PoolHydraRush7D20%119131
8Pool10%169169
8PoolHydraRush8D10%2424
9PoolExpo10%8484
9PoolGasHatchSpeed8D10%108108
9PoolSpeed10%77
9PoolSunken10%6464
ZvP_9Hatch9Pool10%125125
ZvZ_Overgas11Pool10%106106
ZvZ_Overgas9Pool10%175175
23 openings20051%
enemygameswins
Factory17848%
HeavyRush250%
SafeExpand786%
Unknown989%
WorkerRush425%
5 openings20051%


The two top builds are 5 hatcheries before spawning pool. Compare Dragon’s table for Microwave, which says that opening with mass vultures was best. The vultures must have often come before Microwave could defend itself.


#8 ualbertabot

openinggameswinsfirstlast
11Gas10PoolLurker450%92111
11HatchTurtleHydra4865%0191
12PoolMain10%181181
3HatchPoolHydra10%109109
5HatchPool10%9494
6Pool2560%142197
7PoolHydraRush7D250%166167
9Hatch9Pool9Gas10%188188
9HatchTurtleHydra10%175175
9Pool4161%10189
9PoolGasHatchSpeed7D2255%12169
9PoolGasHatchSpeed8D2277%16199
9PoolHatch10%5858
9PoolSunken10%165165
ZvP_2HatchHydra2658%25193
ZvZ_OverpoolTurtle333%45133
16 openings20060%
enemygameswins
Factory5100%
FastRush3969%
HeavyRush11850%
NakedExpand6100%
Unknown3269%
5 openings20060%

#9 infestedartosis

openinggameswinsfirstlast
5Pool7294%0199
9PoolSpeedLing12098%3198
9PoolSunken888%55196
3 openings20096%
enemygameswins
HeavyRush8390%
NakedExpand80100%
Unknown37100%
3 openings20096%

AIIDE 2023 - what Dragon learned

Once the opening build is over, Dragon adapts to the opponent’s unit mix and many of its games start to look similar. Nevertheless, the opening makes a big difference in how the game comes out.

The “dirty worker rush” is a late rush with a lot of SCVs. You have to be ready for it, but if you are, it’s easy to beat.


#1 bananabrain

openinggameswinsfirstlast
1rax fe415%2271
2rax bio270%5260
2rax mech464%0279
bio454%1282
dirty worker rush260%3203
mass vulture547%6281
siege expand4812%4286
7 openings2876%

#2 stardust

openinggameswinsfirstlast
1rax fe6010%6271
2rax bio287%3272
2rax mech7813%0288
bio457%2266
dirty worker rush250%5268
mass vulture274%4253
siege expand260%1276
7 openings2898%

It’s surprising that adding a second barracks was best against Stardust. I imagine the extra firepower was good against the first protoss attack.


#3 purplewave

openinggameswinsfirstlast
1rax fe825%5268
2rax bio50%1201
2rax mech50%0136
bio20256%9287
dirty worker rush50%8263
mass vulture5853%2205
siege expand50%3204
7 openings28851%

#4 steamhammer

openinggameswinsfirstlast
1rax fe80%1282
2rax bio1010%0149
2rax mech2516%2227
bio4025%5278
dirty worker rush17144%4287
mass vulture2421%6209
siege expand1010%3132
7 openings28834%

That SCV rush! Reading through Dragon’s game history file, you can practically see the two learning systems dueling. Dragon loses a string of games - it finds that the SCV rush works - before long Steamhammer switches builds to beat it - Dragon notices and searches for an opening to exploit weaknesses in Steamhammer’s answer - and so on. Steamhammer knows about fast worker rushes, but doesn’t have a special reaction to late worker rushes. It underestimates the danger of the SCVs. Dragon and WillyT are the only opponents that take advantage.


#5 mcrave

openinggameswinsfirstlast
1rax fe90%7279
2rax bio6954%5262
2rax mech11840%10288
bio2326%6178
dirty worker rush2114%2265
mass vulture2421%1169
siege expand2516%0276
7 openings28935%

McRave copes with the SCV rush, so Dragon settles on mainstream builds.


#6 microwave

openinggameswinsfirstlast
1rax fe1030%1280
2rax bio1828%10161
2rax mech812%15249
bio60%0272
dirty worker rush1547%8285
mass vulture22450%6281
siege expand50%7106
7 openings28644%

Microwave would likely have done much better if it coped with the vultures better.


#8 ualbertabot

openinggameswinsfirstlast
1rax fe4386%85289
2rax bio10%00
2rax mech650%71137
bio7684%386
dirty worker rush6988%58286
mass vulture6986%88287
siege expand2665%1219
7 openings29083%

#9 infestedartosis

openinggameswinsfirstlast
1rax fe20%109225
2rax bio1250%2228
2rax mech540%80223
bio650%108288
dirty worker rush2568%0224
mass vulture22685%6289
siege expand1457%112209
7 openings29078%

AIIDE 2023 - what UAlbertaBot learned

openingtotal#1
bananab
#2
stardus
#3
purplew
#4
steamha
#5
mcrave
#6
microwa
#7
dragon
#9
infeste
total-  31%5-279  2%25-263  9%53-236  18%9-274  3%183-102  64%112-170  40%48-236  17%263-26  91%
4RaxMarines8-117 6%0-19 0%5-33 13%0-11 0%0-22 0%-3-16 16%0-16 0%-
MarineRush181-240 43%2-25 7%1-18 5%14-54 21%1-28 3%65-30 68%18-45 29%3-29 9%77-11 88%
TankPush1-89 1%0-18 0%1-16 6%0-11 0%0-21 0%-0-7 0%0-16 0%-
VultureRush1-90 1%0-18 0%0-12 0%0-11 0%0-21 0%-0-7 0%1-21 5%-
DTRush24-177 12%1-40 2%0-25 0%3-41 7%0-18 0%--20-53 27%-
DragoonRush2-119 2%0-32 0%2-39 5%0-22 0%0-18 0%--0-8 0%-
ZealotRush229-236 49%0-32 0%2-39 5%0-22 0%8-54 13%62-46 57%59-23 72%3-18 14%95-2 98%
2HatchHydra44-143 24%1-27 4%0-10 0%32-44 42%0-23 0%-2-10 17%9-29 24%-
3HatchMuta1-73 1%0-21 0%0-10 0%0-4 0%0-23 0%-0-5 0%1-10 9%-
3HatchScourge1-73 1%0-20 0%1-14 7%0-4 0%0-23 0%-0-5 0%0-7 0%-
ZerglingRush206-229 47%1-27 4%13-47 22%4-12 25%0-23 0%56-26 68%30-52 37%11-29 28%91-13 88%

UAlbertaBot’s primary builds are MarineRush, ZealotRush (9-9 gates), and ZerglingRush (5 pool). Against #5 McRave and #9 InfestedArtosis, it stuck with them. Against other opponents it experimented with alternatives to try to escape its losses. It found 4RaxMarines (barracks at 4 supply) against #2 Stardust, 2HatchHydra against #3 PurpleWave, and DTRush against #7 Dragon.

AIIDE 2023 - what InfestedArtosis learned

InfestedArtosis learns three things independently of each other: Opening build, unit mix, and whether to build a defensive sunken under certain circumstances. For some reason, every opponent has data for exactly 46 decisions of whether to build the defense. I didn’t look into why.

It enables different options against each race, so I made separate tables. It didn’t seem worthwhile to write code to extract the small amount of data from 8 short files (especially the clumsy way I first thought of doing it), so I made the tables by hand. There may be minor errors.

The tables simply repeat what’s in the learning files. The first number is wins, the second is losses.

protoss

itemBananaBrainStardustPurpleWave
OverPool 073 073 1454
NinePoolSpeed 073 073 133
FourPool 070 070 3543
TwelveHatch 073 072 3176
LingFlood 073 073 77115
Mutalisk 072 072 333
Default 072 072 130
Hydra 072 071 028
sunken 046 046 1333

InfestedArtosis seems to have lost information about one game versus #2 Stardust, though the official results say that all 290 games completed and that InfestedArtosis had zero crashes.

#3 PurpleWave was vulnerable to zerglings, especially with 4 pool but also after the economical 12 hatchery.

zerg

itemSteamhammerMcRaveMicrowave
OverPool 055 159 358
TwelvePool 054 056 152
NinePoolSpeed 364 156 766
TwelveHatch 158 056 049
NineHatch 054 055 049
LingFlood 1137 2148 4132
Mutalisk 3148 0137 7142
sunken 145 046 244

terran

itemDragon
TwelvePool 1553
NinePoolSpeed 1352
FourPool 030
TwelveHatch 3581
LingFlood 133
Mutalisk 1045
Default 3884
Hydra 1454
sunken 838

Rushes did not work against the slow-moving #7 Dragon, but countering with slow zerg play was fairly effective. TwelveHatch 35/81 is 43%, while TwelvePool 15/53 is only 28%.

random

itemUAlbertaBot
OverPool 161
NinePoolSpeed 058
FourPool 1865
FivePool 677
LingFlood 21100
Mutalisk 359
Default 153
Hydra 049
sunken 244

I’m surprised that 4 pool worked as well as it did against UAlbertaBot. UAlbertaBot’s protoss and zerg builds should both counter it.

AIIDE 2023 - the learning curves

No big analysis, but I do want to point out a couple features of the cumulative results over time.

Graph of the learning curves.

#1 Stardust, #3 PurpleWave, and #8 UAlbertaBot largely declined over the tournament, or declined and leveled out. They were outlearned by the competition. Steamhammer is slow to learn but keeps learning for a long time, and its curve is fairly flat.

The two bots with the most impressive learning curves are #7 Dragon, a carryover from last year, and #9 InfestedArtosis, the tail ender. Dragon improved between round 25 and 100. Infested Artosis improved after round 100. Between round 100 and the end of the tournament, InfestedArtosis increased its score by 3.1% in absolute terms, more than any other bot improved after round 100. No other bot comes close over the same period. The weakest bot outdid all others in continuing to play better over the entire long tournament.

InfestedArtosis has a simple learning method. It independently learns three things, each from a short menu of choices: What opening build to play, what unit mix to follow up with, and whether to build static defense. Imagine how well it might learn if it, say, approximated the joint distribution and chose based on that!

AIIDE 2023 - map tables by bot

The first table is the same as yesterday’s, for reference. Except I didn’t mark old/new maps.

#botoverallDestinMatchPPolariLonginNeoSylArcadiColossEmpireNeoGroRoadki
1bananabrain84.54%91%81%81%87%87%87%84%81%83%84%
2stardust83.43%71%87%90%89%84%84%86%74%84%85%
3purplewave57.70%65%59%53%44%58%60%61%61%59%57%
4steamhammer50.11%53%51%54%54%47%46%53%48%48%46%
5mcrave49.81%53%44%35%50%44%58%45%60%61%47%
6microwave43.44%40%47%49%41%45%33%49%51%33%46%
7dragon42.28%44%45%43%43%46%44%32%38%44%44%
8ualbertabot30.45%22%23%32%35%34%31%36%28%29%33%
9infestedartosis8.28%10%12%12%7%5%8%4%9%8%6%

One table for each bot, showing results on each map against each opponent. With 10 maps and 290 rounds, each cell shows the results for 29 games (some slightly fewer). It’s not a large number, there is plenty of statistical noise.

#bananabrainoverallDestinMatchPPolariLonginNeoSylArcadiColossEmpireNeoGroRoadki
2stardust48%86%31%14%45%52%69%17%72%48%45%
3purplewave58%62%45%62%69%62%57%66%52%55%48%
4steamhammer97%100%93%100%93%100%97%100%100%97%86%
5mcrave86%97%93%79%100%97%83%100%48%66%97%
6microwave95%97%100%100%97%83%100%93%86%97%100%
7dragon94%93%90%97%97%100%86%93%93%100%97%
8ualbertabot99%97%100%100%93%100%100%100%96%100%100%
9infestedartosis100%100%100%100%100%100%100%100%100%100%100%
overall84.54%91%81%81%87%87%87%84%81%83%84%

#5 McRave’s comparatively good results versus #1 BananaBrain are due to only a few maps. Interesting! For the most part, BananaBrain is consistent. It seems to have few weaknesses that other bots are able to exploit.

#stardustoverallDestinMatchPPolariLonginNeoSylArcadiColossEmpireNeoGroRoadki
1bananabrain52%14%69%86%55%48%31%83%28%52%55%
3purplewave55%0%55%76%79%48%76%79%21%59%55%
4steamhammer92%100%93%90%97%100%90%72%90%97%97%
5mcrave95%86%97%100%100%100%93%90%93%93%97%
6microwave90%72%93%97%97%97%93%90%66%97%97%
7dragon92%97%93%72%90%97%93%93%100%93%97%
8ualbertabot91%100%93%97%97%86%97%79%97%86%83%
9infestedartosis100%100%100%100%100%100%100%100%100%100%100%
overall83.43%71%87%90%89%84%84%86%74%84%85%

#2 Stardust is very inconsistent against its fellow top protoss. These are the results of a brittle bot, strong but not resilient. On Destination, I expect it’s because the twin bridges to the natural bases are easy to defend, so that Stardust’s attack fails. But Empire of the Sun and the other troublesome maps aren’t like that. I can’t guess the reason there.

#purplewaveoverallDestinMatchPPolariLonginNeoSylArcadiColossEmpireNeoGroRoadki
1bananabrain42%38%55%38%31%38%43%34%48%45%52%
2stardust45%100%45%24%21%52%24%21%79%41%45%
4steamhammer84%83%97%97%59%72%100%90%79%86%79%
5mcrave60%45%79%66%52%79%38%90%48%31%69%
6microwave29%62%7%41%3%17%76%3%3%72%3%
7dragon49%45%48%38%41%41%31%79%71%48%52%
8ualbertabot82%83%86%76%76%79%79%83%90%86%79%
9infestedartosis70%62%55%48%72%86%86%90%66%59%79%
overall57.70%65%59%53%44%58%60%61%61%59%57%

And #3 PurpleWave is inconsistent against all opponents other than #8 UAlbertaBot—even the tail-ender #9 InfestedArtosis. Which is curious, because UAlbertaBot plays random and is hard to be consistent against!

#steamhammeroverallDestinMatchPPolariLonginNeoSylArcadiColossEmpireNeoGroRoadki
1bananabrain3%0%7%0%7%0%3%0%0%3%14%
2stardust8%0%7%10%3%0%10%28%10%3%3%
3purplewave16%17%3%3%41%28%0%10%21%14%21%
5mcrave50%72%79%69%52%38%24%48%45%38%31%
6microwave62%69%41%72%79%45%83%66%48%66%55%
7dragon67%72%76%90%55%62%52%76%66%62%55%
8ualbertabot97%93%97%93%97%100%97%100%100%100%93%
9infestedartosis99%100%97%97%100%100%97%100%97%100%100%
overall50.11%53%51%54%54%47%46%53%48%48%46%

This year’s improvements to #4 Steamhammer are particularly helpful against #8 UAlbertaBot, because of Steamhammer’s turtle strategy for surviving whichever rush UAlbertaBot ends up playing. The consistently excellent results against UAlbertaBot were key to squeaking past #5 McRave for the #4 spot.

#mcraveoverallDestinMatchPPolariLonginNeoSylArcadiColossEmpireNeoGroRoadki
1bananabrain14%3%7%21%0%3%17%0%52%34%3%
2stardust5%14%3%0%0%0%7%10%7%7%3%
3purplewave40%55%21%34%48%21%62%10%52%69%31%
4steamhammer50%28%21%31%48%62%76%52%55%62%69%
6microwave89%100%97%7%100%100%93%97%100%97%97%
7dragon65%52%48%76%69%45%76%66%76%79%62%
8ualbertabot35%72%55%14%34%24%31%28%38%41%14%
9infestedartosis99%100%100%93%100%100%100%100%100%100%100%
overall49.81%53%44%35%50%44%58%45%60%61%47%

Wow, look at #5 McRave vs #6 Microwave! Nearly all wins, except on Polaris Rhapsody where it was nearly all losses. The reason for it must be very specific.

#microwaveoverallDestinMatchPPolariLonginNeoSylArcadiColossEmpireNeoGroRoadki
1bananabrain5%3%0%0%3%17%0%7%14%3%0%
2stardust10%28%7%3%3%3%7%10%34%3%3%
3purplewave71%38%93%59%97%83%24%97%97%28%97%
4steamhammer38%31%59%28%21%55%17%34%52%34%45%
5mcrave11%0%3%93%0%0%7%3%0%3%3%
7dragon56%62%55%48%59%52%62%76%52%34%55%
8ualbertabot61%62%66%67%41%48%55%66%62%69%72%
9infestedartosis96%93%97%97%100%100%93%100%97%90%96%
overall43.44%40%47%49%41%45%33%49%51%33%46%

The overall results make it look like #6 Microwave somehow has #3 PurpleWave’s number, but here we see it depends on the map. It is presumably part of PurpleWave’s general inconsistency, but we’ll have to look at the replays to see the specific reasons.

#dragonoverallDestinMatchPPolariLonginNeoSylArcadiColossEmpireNeoGroRoadki
1bananabrain6%7%10%3%3%0%14%7%7%0%3%
2stardust8%3%7%28%10%3%7%7%0%7%3%
3purplewave51%55%52%62%59%59%69%21%29%52%48%
4steamhammer33%28%24%10%45%38%48%24%34%38%45%
5mcrave35%48%52%24%31%55%24%34%24%21%38%
6microwave44%38%45%52%41%48%38%24%48%66%45%
8ualbertabot83%86%93%86%83%90%86%59%83%79%86%
9infestedartosis78%90%76%79%69%76%62%76%76%93%86%
overall42.28%44%45%43%43%46%44%32%38%44%44%

#ualbertabotoverallDestinMatchPPolariLonginNeoSylArcadiColossEmpireNeoGroRoadki
1bananabrain1%3%0%0%7%0%0%0%4%0%0%
2stardust9%0%7%3%3%14%3%21%3%14%17%
3purplewave18%17%14%24%24%21%21%17%10%14%21%
4steamhammer3%7%3%7%3%0%3%0%0%0%7%
5mcrave65%28%45%86%66%76%69%72%62%59%86%
6microwave39%38%34%33%59%52%45%34%38%31%28%
7dragon17%14%7%14%17%10%14%41%17%21%14%
9infestedartosis91%72%76%90%100%97%97%100%90%97%93%
overall30.45%22%23%32%35%34%31%36%28%29%33%

#infestedartosisoverallDestinMatchPPolariLonginNeoSylArcadiColossEmpireNeoGroRoadki
1bananabrain0%0%0%0%0%0%0%0%0%0%0%
2stardust0%0%0%0%0%0%0%0%0%0%0%
3purplewave30%38%45%52%28%14%14%10%34%41%21%
4steamhammer1%0%3%3%0%0%3%0%3%0%0%
5mcrave1%0%0%7%0%0%0%0%0%0%0%
6microwave4%7%3%3%0%0%7%0%3%10%4%
7dragon22%10%24%21%31%24%38%24%24%7%14%
8ualbertabot9%28%24%10%0%3%3%0%10%3%7%
overall8.28%10%12%12%7%5%8%4%9%8%6%

I like it that even the tail-end bot has an upset against the strong #3 PurpleWave on one map.

AIIDE 2023 - map results

Five maps were familiar ones used in past AIIDE tournaments, and five were chosen randomly from a large pool.

carryover mapsnew maps
(2) Destination(2) Match Point
(2) Polaris Rhapsody(3) Neo Sylphid
(3) Longinus(4) Arcadia II
(4) Empire of the Sun(4) Neo Ground Zero
(4) Roadkill(4) Colosseum II

That makes 3 2-player maps, 2 3-player maps, and 5 4-player maps. It’s a good mix.

Each cell in the two tables represents 232 games, or occasionally 1 or 2 fewer if not all games completed successfully. I marked the carryover maps with dark headers, so you can look for patterns between familiar and new maps.

#botoverallDestinMatchPPolariLonginNeoSylArcadiColossEmpireNeoGroRoadki
1bananabrain84.54%91%81%81%87%87%87%84%81%83%84%
2stardust83.43%71%87%90%89%84%84%86%74%84%85%
3purplewave57.70%65%59%53%44%58%60%61%61%59%57%
4steamhammer50.11%53%51%54%54%47%46%53%48%48%46%
5mcrave49.81%53%44%35%50%44%58%45%60%61%47%
6microwave43.44%40%47%49%41%45%33%49%51%33%46%
7dragon42.28%44%45%43%43%46%44%32%38%44%44%
8ualbertabot30.45%22%23%32%35%34%31%36%28%29%33%
9infestedartosis8.28%10%12%12%7%5%8%4%9%8%6%

This table is the same as the map table in the official results except for the presentation. #5 McRave and #6 Microwave have clear likes and dislikes among the maps. The other mid-ranked zerg, #4 Steamhammer, shows more even results.

#botoverallDestinMatchPPolariLonginNeoSylArcadiColossEmpireNeoGroRoadki
1bananabrain10:47
14:37
10:55
13:18
11:12
14:42
10:52
15:58
10:34
15:32
10:43
14:00
10:53
15:43
9:58
14:55
10:38
14:55
10:54
13:46
10:56
12:44
2stardust10:43
16:51
10:16
17:34
11:07
18:25
10:48
21:00
10:27
17:22
10:54
18:08
10:58
15:44
11:06
14:51
10:12
14:40
10:31
18:22
10:45
15:19
3purplewave10:26
12:02
11:02
12:12
10:56
13:32
10:21
12:38
10:22
11:05
10:16
12:02
10:31
12:43
10:11
9:53
10:24
11:46
10:13
13:18
10:42
11:23
4steamhammer7:02
10:45
6:35
10:53
6:54
11:14
6:30
10:42
8:05
10:12
6:11
11:08
9:05
10:36
8:23
11:19
5:52
10:16
5:50
10:31
9:50
10:31
5mcrave9:15
11:27
9:21
11:56
8:52
12:31
12:37
11:07
8:27
11:25
8:38
11:13
9:20
12:11
8:43
9:55
10:39
11:46
11:58
12:21
8:49
11:12
6microwave7:03
10:05
6:29
10:09
7:52
10:45
6:34
10:40
7:05
9:47
7:19
9:47
6:26
9:58
7:04
10:14
7:01
9:28
6:09
10:03
7:02
10:43
7dragon15:45
12:05
15:41
12:04
16:38
11:53
16:08
11:36
16:04
12:49
15:54
12:07
16:03
14:31
14:11
11:10
14:35
11:42
16:02
11:47
14:42
12:39
8ualbertabot6:54
10:08
8:19
9:27
7:32
10:42
7:11
9:50
6:25
9:59
6:48
9:32
7:05
10:31
6:32
10:42
6:25
10:15
6:42
9:47
6:34
10:06
9infestedartosis9:52
6:31
9:20
7:50
10:09
7:36
8:47
7:02
11:55
5:51
10:36
6:08
12:15
6:26
9:51
6:33
12:31
6:12
9:23
6:10
12:06
6:18
overall10:1810:1210:5610:1410:0310:0010:3810:0410:0810:1810:22

This is like yesterday’s game duration table, but by map instead of by opponent. The top number in each cell is the median duration of winning games; the bottom number is losing games.

On maps where #2 Stardust won the most quickly—it didn’t win as much. On Destination, I imagine it’s because the twin bridges to the natural bases are so easy to defend; if it doesn’t break through quickly, then it may struggle against its stronger opponents. That explanation doesn’t work for Empire of the Sun, though. #7 Dragon has a similar pattern. Compare #3 PurpleWave: On Longinus where it struggled, it lost more quickly.

#4 Steamhammer takes the map into account in its learning, which may make its performance more even between maps, and its game durations less even. Possibly.

AIIDE 2023 - results

This crosstable exactly matches the official results. I had to make two adjustments compared to last year to get it to match:

1. In some failure conditions, the game is recorded anyway, provided it started in the first place. If the game did not start, last year its duration was recorded as 0 frames in detailed_results.txt. This year it is recorded as -1. The HTML detailed results still gives the -1 as duration 00:00:00.

2. Game ID 979, between UAlbertaBot and BananaBrain, is recorded in detailed_results.txt with finishing status NORMAL. But it’s obviously not normal; it looks like BananaBrain’s Starcraft instance crashed. There is no replay saved for BananaBrain, and no final score is recorded either. The official results correctly recognize that the game did not finish, and the HTML detailed results give the finishing status NO_REPORT, which means the game is not counted. But it’s still NORMAL in detailed_results.txt, so I coded it as a one-game special case for this analysis.

#botoverallbanastarpurpsteamcramicrdragualbinfe
1bananabrain84.54%48%58%97%86%95%94%99%100%
2stardust83.43%52%55%92%95%90%92%91%100%
3purplewave57.70%42%45%84%60%29%49%82%70%
4steamhammer50.11%3%8%16%50%62%67%97%99%
5mcrave49.81%14%5%40%50%89%65%35%99%
6microwave43.44%5%10%71%38%11%56%61%96%
7dragon42.28%6%8%51%33%35%44%83%78%
8ualbertabot30.45%1%9%18%3%65%39%17%91%
9infestedartosis8.28%0%0%30%1%1%4%22%9%

The same as the official crosstable except for the presentation. Microwave upset PurpleWave even more strongly than last year. And McRave and UAlbertaBot are both carryovers, so of course UAlbertaBot upset McRave like last year.

#botoverallbanastarpurpsteamcramicrdragualbinfe
1bananabrain10:47
14:37
17:22
14:46
11:33
12:16
11:02
8:01
11:46
18:46
11:09
5:48
9:02
22:59
10:25
8:52
6:04
-
2stardust10:43
16:51
14:46
17:22
14:10
18:06
11:01
14:57
11:57
16:54
10:07
6:10
10:40
24:26
9:36
6:13
9:58
-
3purplewave10:26
12:02
12:16
11:33
18:06
14:10
10:14
9:19
11:10
13:18
9:28
7:20
10:06
16:15
10:08
10:47
9:34
8:55
4steamhammer7:02
10:45
8:01
11:02
14:57
11:01
9:19
10:14
8:14
8:50
13:42
11:23
12:26
19:05
8:56
11:36
5:09
12:25
5mcrave9:15
11:27
18:46
11:46
16:54
11:57
13:18
11:10
8:50
8:14
8:22
6:04
20:43
21:33
12:49
9:09
5:47
9:03
6microwave7:03
10:05
5:48
11:09
6:10
10:07
7:20
9:28
11:23
13:42
6:04
8:22
16:35
25:12
8:50
7:06
5:03
10:40
7dragon15:45
12:05
22:59
9:02
24:26
10:40
16:15
10:06
19:05
12:26
21:33
20:43
25:12
16:35
12:09
8:39
11:28
12:40
8ualbertabot6:54
10:08
8:52
10:25
6:13
9:36
10:47
10:08
11:36
8:56
9:09
12:49
7:06
8:50
8:39
12:09
6:28
8:37
9infestedartosis9:52
6:31
-
6:04
-
9:58
8:55
9:34
12:25
5:09
9:03
5:47
10:40
5:03
12:40
11:28
8:37
6:28

The top number in each cell is the median duration of winning games for the bot on the left, and the bottom number is the median duration of losses. Winning fast and losing slowly suggests rush strategies or timing attacks. The opposite suggests cautious play and winning by defense into strong macro, or by gradually outplaying the opponent.

For example, Stardust likes to win with one big attack, and often wins faster than it loses—though it depends on the opponent. UAlbertaBot rushes with every race, and it shows in the numbers. Dragon likes to win by slowly pushing its opponents over. PurpleWave is comparatively balanced.

overallvTvPvZvR
terran42%21%48%83%
protoss75%79%83%91%
zerg38%52%17%50%
random30%17%9%50%

Um, yeah, protoss came out on top. I think we knew that.

#botoverallvTvPvZvR
1bananabrain84.54%94%53%94%99%
2stardust83.43%92%53%94%91%
3purplewave57.70%49%44%61%82%
4steamhammer50.11%67%9%70%97%
5mcrave49.81%65%20%79%35%
6microwave43.44%56%29%48%61%
7dragon42.28%-21%48%83%
8ualbertabot30.45%17%9%50%-
9infestedartosis8.28%22%10%2%9%

For me, the lesson of the per-race table is that Steamhammer is very bad against protoss. Also, if it weren’t for the relative performance against UAlbertaBot, McRave would have come out well ahead of Steamhammer.

AIIDE 2023 - results first look

The AIIDE 2023 tournament has been declared complete. Not all details of the results page are updated, but the basic info is there. In particular, the plain text detailed results file is not there yet, so I can’t run my analysis programs.

#1BananaBrain84.54%
#2Stardust83.43%
#3PurpleWave57.70%
#4Steamhammer50.11%
#5McRave49.81%
#6Microwave43.44%
#7Dragon42.28%
#8UAlbertaBot30.45%
#9InfestedArtosis8.28%

Participation was thin this year, with only 9 entrants. It remains unfortunate that #7 Dragon is the only terran.

Two surprises for me. #1 BananaBrain pulled ahead of #2 Stardust about round 145, and stayed ahead. Stardust does some learning, but after round 50 its performance gradually decreased. After Stardust’s great improvements, I felt pretty sure it would come out ahead. And Stardust did very well—it had a plus score against every opponent. BananaBrain looks impressive, though, with a bigger winning margin against all other opponents except McRave.

#3 PurpleWave became the best of the also-rans, rather than a contender. In the graph, it groups with the middle bots, #3 to #8.

The other surprise: #5 McRave was ahead of #4 Steamhammer for most of the tournament. The main cause was their head-to-head results, not performance against other bots. McRave is a carryover, and I thought my improvements would not have much effect in ZvZ, so I expected results like last year’s, when Steamhammer won head-to-head by a consistent 54%. Steamhammer should even do a little better, because I updated the preparation. As it happened, the head-to-head results varied over the tournament run. Steamhammer was ahead at first, then McRave figured out how to play against it and took the lead, both head-to-head and overall. Only late in the tournament did Steamhammer find an answer and reverse the trend. In the end, the head-to-head score was 49% for Steamhammer, enough to edge it into an overall lead.

Did I introduce a weakness, or was the surprise due to the vagaries of learning? So far, as I prepare the bugfix version, I haven’t found any bugs or weaknesses that seem serious enough to explain it. But data to find the real cause is not released yet.

#6 Microwave and #7 Dragon also had a close race, but in my eyes it doesn’t have the drama of the other two close races.

#8 UAlbertaBot continues to score better than I expected, though from the beginning I thought it was clear what place it would end up in. This year its overall score was 30.45% compared to 43.90% last year, but that’s mainly because there were fewer weak bots for it to beat up on.

Congratulation to #9 InfestedArtosis for participating! You got through with zero crashes, unlike some stronger bots, and scored wins against tough opponents, even if not many wins. Only #1 BananaBrain and #2 Stardust were able to shut you out. The signs say you have a solid foundation to build on.

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 running results

I was excited to learn that the AIIDE 2023 results are coming in live, this year. Though I see that the detailed results and win percentage over time are not updated as often as the overall results. My first impression is that the ranking so far is exactly what I expected it to be. Looking a little closer, McRave is doing substantially better versus Dragon than last year. (That is last year’s physical hardware version, to match this year.) Both are carryovers, so the difference may be due to the maps, or to the luck of learning. Well, the tournament is not far along. We’ll see how it goes with more data.

It looks like I was wrong about Steamhammer versus BananaBrain. Steamhammer is not as successful there as I expected. Either my tests were unrealistic in some way, or else I introduced a late bug. Or maybe BananaBrain was improved in a way that makes it harder for Steamhammer to do early damage. Steamhammer should put up a good fight in any game where it can kill some probes early on.

I will upload Steamhammer 3.6 to SSCAIT shortly.

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.

AIIDE 2023 participants

The AIIDE 2023 participants have been announced on a Google spreadsheet. They are the usual suspects and the carryovers plus Infested Artosis.

Infested Artosis by Brad Ewing is not high ranked, but I like it. It’s simple. You can read through the code on GitHub in a short time. It’s a far cry from the complex code of Steamhammer, which must be baffling to those who first look at it. At the same time, it has the nice feature that it independently learns what build to play and what unit mix to make. Both are straightforward picks from short lists. There’s provision for learning whether to make static defense too.

Enjoy the competition, Infested Artosis!

In other news, JyJ versus Soulkey in ASL 16 today was a dramatic TvZ best-of-five. The last two games were particularly hard-fought.

Dan’s AIIDE map pool analysis

Purple Dan Gant did some analysis of the AIIDE 2023 map pool and kindly e-mailed info to me. Here it is; I edited it slightly for clarity.

  • Ran games between PurpleWave and BananaBrain across all the AIIDE maps (based on what I think the legal maps are)
  • All the maps ran (they were 1.16.1-compatible)
  • Some of the maps in my zip appear to be observer maps which are unusable for bot play because they have extra start locations. All but Crossing Field have acceptable alternative versions in the pool
  • PurpleWave worked correctly on all maps. Its behavior on Katrina was dumb but explicable due to the backyard natural

He offers results on a google spreadsheet: AIIDE 2023 Map Info (you have to switch between the About and Data sheets). And he created a new version of the map pool which may better represent what we should actually get: Dan’s unofficial copy of AIIDE 2023 map pool version 2.

Thanks, Dan! You have done a public service.

Steamhammer can play on all the maps, but on the ICCup observer maps it feels a need to scout the observer “bases” to make sure nobody’s there. It knows better than to try to expand there. There are maps where it can correctly reject observer slots as non-bases, but it depends on how they are set up. Steamhammer also plays stupidly on Katrina, and I don’t intend to fix it yet because it’s too much time cost to pay down a small risk. At some point I’ll teach it to do the terrain connectivity analysis from first principles, and create a graph that it can reason about. Playing on Outsider is a goal, but one step at a time.

Steamhammer work is coming along nicely. The new feature I’m adding is coming up to the finish line, and it is passing its tests so far. It won’t be fully refined yet, but still a good improvement. I should have time to add one more important feature before the tournament. Between them they will make the bot sharper at taking advantage of opportunities and more resilient when under pressure. Can’t ask more than that in a short timeframe.

CherryPi - Stardust game

As you might guess from the CoG results, Stardust has gained strong new skills since last year. Against zerg in particular, one skill is that it uses corsairs heavily. Another is that it learned the forge expand opening. And yet it can still be defeated.

CherryPi is from 2017, but it shows how. The SSCAIT game Stardust v CherryPi is instructive (I kept the replay for when SSCAIT recycles it).

The recipe is:

1. Facing forge expand, play a greedy opening. CherryPi opened pool first (with a rare 13 pool) so that it could make zerglings if it needed to, but cannons were not going to walk across the map to attack, so it followed up with drones and hatcheries.

2. Fight efficiently in the middle game. CherryPi could not take any one-sided victories against such a tough opponent, but it traded well and cut the protoss army down to a safe size, where zerg could spawn enough defensive units in the time the protoss would take to cross the map.

3. With that breathing room, zerg could safely pull ahead in workers. Then it was just mass and smash.

See how easy it is? It’s a simple matter of being good at everything!

Of course it was only possible because Stardust showed weaknesses. One is that it was cautious and clumsy with its corsairs, and put on less counter-air pressure than it could have. First it kept them with the army, then it flew them over hydras.