archive by month
Skip to content

AIIDE 2020 - Dragon versus Ecgberht

Two posts today, to cover the newly available Ecgberht pairings. Neither post has much meat to it.

dragon strategies versus ecgberht strategies

overall14CCBioMechGreedyFEFullMechProxyBBSProxyEightRax
overall141/150 94%28/28 100%27/28 96%25/25 100%36/44 82%25/25 100%
1rax fe5/6 83%1/1 100%1/1 100%1/1 100%2/3 67%-
bio136/144 94%27/27 100%26/27 96%24/24 100%34/41 83%25/25 100%

I was curious about Dragon’s pattern of seemingly giving up on “1rax fe” (barracks expand) after a single loss, so I looked at the file. In fact Dragon played “bio” as the regular build the whole time, throwing in “1rax fe” occasionally for spice. The “1rax fe” loss was not the last “1rax fe” game, but the second to last.

For Ecgberht, when one build is producing nearly all the wins, probably you should play it more often than 30% of the time. You may not want to play it every game, because that makes it easy for the opponent to adapt—mixing it up is good. Maybe 50% of the time would be better, given this number of alternatives? To know for sure, I guess we’d have to test against a range of bots to see the overall effectiveness of learning.

dragon as seen by ecgberht

dragon played#ecgberht recognized
1rax fe66 Unknown
bio144144 Unknown

Nothing to see here. Move along.

ecgberht as seen by dragon

Dragon does not record its idea of the opponent’s build. If it has one.

AIIDE 2020 - BananaBrain versus Ecgberht

bananabrain strategies versus ecgberht strategies

overall14CCFullMechJoyORushMechGreedyFEProxyEightRax
overall148/150 99%31/31 100%28/28 100%28/28 100%28/28 100%33/35 94%
PvT_10/12gate10/10 100%3/3 100%-1/1 100%3/3 100%3/3 100%
PvT_10/15gate10/10 100%2/2 100%3/3 100%1/1 100%1/1 100%3/3 100%
PvT_12nexus10/10 100%3/3 100%3/3 100%2/2 100%1/1 100%1/1 100%
PvT_1gatedtexpo10/10 100%1/1 100%3/3 100%2/2 100%4/4 100%-
PvT_1gatereaver10/10 100%2/2 100%3/3 100%2/2 100%1/1 100%2/2 100%
PvT_28nexus10/10 100%3/3 100%2/2 100%1/1 100%2/2 100%2/2 100%
PvT_2gatedt11/11 100%2/2 100%4/4 100%1/1 100%2/2 100%2/2 100%
PvT_2gaterngexpo10/10 100%3/3 100%3/3 100%-1/1 100%3/3 100%
PvT_32nexus10/10 100%1/1 100%1/1 100%2/2 100%3/3 100%3/3 100%
PvT_9/9gate10/10 100%2/2 100%-3/3 100%-5/5 100%
PvT_9/9proxygate10/10 100%4/4 100%3/3 100%1/1 100%1/1 100%1/1 100%
PvT_bulldog10/10 100%1/1 100%1/1 100%5/5 100%1/1 100%2/2 100%
PvT_dtdrop10/10 100%1/1 100%-3/3 100%3/3 100%3/3 100%
PvT_proxydt7/9 78%1/1 100%1/1 100%3/3 100%2/2 100%0/2 0%
PvT_stove10/10 100%2/2 100%1/1 100%1/1 100%3/3 100%3/3 100%

We can see exactly how Ecgberht scored its total of 2 wins: It happened to play a fast proxy when BananaBrain played a slow proxy. For BananaBrain, maybe the lesson is to avoid risky openings versus much weaker opponents. As a general principle, I suggest saving risky builds for games where you have a high risk of losing with safe play—in that case, why not?

bananabrain as seen by ecgberht

bananabrain played#ecgberht recognized
PvT_10/12gate107 ZealotRush | 3 Unknown
PvT_10/15gate1010 Unknown
PvT_12nexus109 ProtossFE | 1 Unknown
PvT_1gatedtexpo1010 Unknown
PvT_1gatereaver1010 Unknown
PvT_28nexus1010 Unknown
PvT_2gatedt1111 Unknown
PvT_2gaterngexpo1010 Unknown
PvT_32nexus1010 Unknown
PvT_9/9gate107 ZealotRush | 3 Unknown
PvT_9/9proxygate108 Unknown | 2 CannonRush
PvT_bulldog1010 Unknown
PvT_dtdrop1010 Unknown
PvT_proxydt99 Unknown
PvT_stove1010 Unknown

Except for a couple cases of CannonRush, the builds that Ecgberht recognized were named correctly. I imagine that it interpreted CannonRush as “something proxied.”

ecgberht as seen by bananabrain

ecgberht played#bananabrain recognized
14CC3121 T_fastexpand | 6 T_unknown | 4 T_2rax
FullMech2821 T_unknown | 6 T_1fac | 1 T_2fac
JoyORush2823 T_2fac | 3 T_unknown | 2 T_1fac
MechGreedyFE2825 T_unknown | 3 T_2rax
ProxyEightRax3535 T_unknown

As we’ve seen before, BananaBrain has little skill in recognizing terran builds.

AIIDE 2020 - what Ecgberht learned

I added parsing code for Ecgberht’s JSON format learning files. I had to refactor for generality, and it added complexity, but I can use the parser for more than one purpose. Today I summarize the contents of its history files.

Ecgberht I think is a complex and interesting bot. It played up to 5 different strategies in each matchup, though the selection of the 5 varied by matchup. Sometimes it played fewer. Against most opponents Ecgberht played its strategies at roughly equal rates—except for the strategies it didn’t play at all. Ecgberht uses UCB with a high exploration rate. The strategy manager in the source lists 15 strategies (plus one more played only on the map Plasma and named PlasmaWraithHell), so it did not play everything it knows. I made a quick scan through the source for opponent-specific preparation, and did find some, but for bots in the tournament only ZZZKBot is affected (it is flagged by a zergling rush check; some bots that always zealot rush are flagged for that). I didn’t dig deep enough to find out why Ecgberht ignores so many of its available strategies.

Ecgberht tries to recognize the opponent’s strategy, but often finds itself unsure. It recorded a high rate of Unknown enemy plans. The ones it does recognize are drawn from a small set that seems to me well-chosen.

Ecgberht recorded fewer than 150 games for 5 of its 11 opponents, although it completed all games with no crashes. In total, 7 games do not appear in the game records of the history files. Maybe it has a cleanup bug that bites occasionally?


#1 stardust

openinggameswinsfirstlast
14CC310%3147
FullMech280%0148
JoyORush270%2143
MechGreedyFE270%4146
ProxyEightRax366%1141
5 openings1491%
enemygameswins
Unknown1491%
1 opening1491%


A couple wins against the top player is not bad.


#2 purplewave

openinggameswinsfirstlast
14CC353%3148
FullMech290%0149
JoyORush280%2146
MechGreedyFE280%4147
ProxyEightRax300%1142
5 openings1501%
enemygameswins
ProtossFE70%
Unknown1431%
2 openings1501%

#3 bananabrain

openinggameswinsfirstlast
14CC310%3146
FullMech280%0144
JoyORush280%2147
MechGreedyFE280%4148
ProxyEightRax356%1149
5 openings1501%
enemygameswins
CannonRush20%
ProtossFE90%
Unknown1252%
ZealotRush140%
4 openings1501%

#4 dragon

openinggameswinsfirstlast
14CC280%3148
BioMechGreedyFE284%4144
FullMech250%0146
ProxyBBS4418%2149
ProxyEightRax250%1147
5 openings1506%
enemygameswins
Unknown1506%
1 opening1506%

#5 mcrave

openinggameswinsfirstlast
14CC287%7147
BioGreedyFE5129%0145
ProxyEightRax4726%21140
TwoPortWraith225%3146
4 openings14820%
enemygameswins
FastHatch6116%
NinePool1331%
Unknown7422%
3 openings14820%


Ecgberht put up its strongest fight against zerg.


#6 microwave

openinggameswinsfirstlast
14CC329%4145
BioGreedyFE210%0148
FullBioFE244%3146
ProxyEightRax5227%1147
TwoPortWraith200%2138
5 openings14912%
enemygameswins
FastHatch994%
NinePool540%
Unknown4527%
3 openings14912%

#7 steamhammer

openinggameswinsfirstlast
14CC3412%8147
BioGreedyFE3617%0142
ProxyEightRax3614%1141
TwoPortWraith4323%4148
4 openings14917%
enemygameswins
EarlyPool40%
FastHatch2232%
NinePool8114%
Unknown4217%
4 openings14917%

#8 daqin

openinggameswinsfirstlast
14CC320%8148
FullMech290%0149
JoyORush280%4144
MechGreedyFE280%43147
ProxyEightRax333%1141
5 openings1501%
enemygameswins
Unknown1501%
1 opening1501%

#9 zzzkbot

openinggameswinsfirstlast
FullBio15071%0149
1 opening15071%
enemygameswins
EarlyPool15071%
1 opening15071%


Ecgberht upset ZZZKBot, possibly aided by its hardcoded knowledge of how ZZZKBot plays.


#10 ualbertabot

openinggameswinsfirstlast
FullBio5843%0144
FullMech5238%2145
ProxyBBS4032%1149
3 openings15039%
enemygameswins
BioPush1191%
EarlyPool1250%
MechRush933%
Unknown10424%
ZealotRush14100%
5 openings15039%

#11 willyt

openinggameswinsfirstlast
14CC313%68148
FullMech349%0147
ProxyEightRax8541%2149
3 openings15026%
enemygameswins
BioPush3415%
Unknown11629%
2 openings15026%

#13 eggbot

openinggameswinsfirstlast
FullMech14894%0147
1 opening14894%
enemygameswins
CannonRush9495%
Unknown5493%
2 openings14894%

AIIDE 2020 - Microwave versus BananaBrain

This is the last matchup I can analyze this way without writing more parsing code. McRave did ask for more in a comment, though, so I may do that. All the matchups have featured BananaBrain.

Microwave plays a large number of strategies, so I put it on the left side. Blue is good for Microwave, red is good for BananaBrain.

microwave strategies versus bananabrain strategies

overallPvZ_10/12gatePvZ_1basespeedzealPvZ_2basespeedzealPvZ_4gate2archonPvZ_5gategoonPvZ_9/9gatePvZ_9/9proxygatePvZ_bisuPvZ_neobisuPvZ_sairdtPvZ_sairgoonPvZ_sairreaverPvZ_stove
overall58/150 39%5/17 29%3/19 16%4/11 36%4/9 44%4/7 57%5/11 45%5/12 42%4/14 29%4/10 40%5/10 50%6/11 55%4/9 44%5/10 50%
10Hatch9Pool9gas0/2 0%---0/1 0%0/1 0%--------
10HatchMain9Pool9Gas0/1 0%-------0/1 0%-----
11HatchTurtleHydra0/1 0%--------0/1 0%----
12Hatch0/1 0%0/1 0%------------
12PoolMain22/43 51%0/5 0%0/9 0%2/2 100%3/3 100%3/3 100%0/1 0%1/3 33%2/2 100%3/3 100%0/3 0%2/3 67%4/4 100%2/2 100%
12PoolMuta0/1 0%0/1 0%------------
1HatchMuta_Sparkle0/1 0%------0/1 0%------
2HatchMuta1/5 20%--1/1 100%--0/1 0%-0/1 0%---0/1 0%0/1 0%
3HatchHydraBust0/1 0%-------0/1 0%-----
3HatchHydra_BHG0/1 0%--0/1 0%----------
3HatchLingBust2/6 33%-0/1 0%0/1 0%--1/1 100%0/1 0%---1/1 100%-0/1 0%
3HatchMuta0/1 0%--------0/1 0%----
3HatchPoolHydraExpo0/1 0%0/1 0%------------
4HatchBeforeGas0/1 0%----------0/1 0%--
4HatchPoolHydra0/2 0%-0/1 0%0/1 0%----------
4PoolHard2/6 33%-1/1 100%0/1 0%--1/1 100%-0/1 0%----0/2 0%
4PoolSoft0/1 0%-0/1 0%-----------
6Pool0/1 0%-0/1 0%-----------
7Pool0/1 0%---------0/1 0%---
8Pool0/1 0%--------0/1 0%----
8PoolHydraRush8D0/1 0%0/1 0%------------
9PoolGasHatchSpeed8D12/18 67%2/2 100%2/2 100%-1/2 50%0/1 0%1/1 100%0/2 0%1/1 100%1/1 100%1/1 100%1/2 50%0/1 0%2/2 100%
9PoolHatchGasSpeed7D0/1 0%---0/1 0%---------
9PoolHatchGasSpeed8D17/32 53%3/4 75%0/1 0%1/1 100%0/1 0%0/1 0%2/4 50%4/5 80%1/5 20%0/1 0%4/4 100%2/2 100%0/2 0%0/1 0%
9PoolSpeed0/3 0%0/1 0%--0/1 0%------0/1 0%--
9PoolSpeedLing1/5 20%-----0/1 0%-0/1 0%--0/1 0%0/1 0%1/1 100%
9PoolSunkHatch0/1 0%--0/1 0%----------
Overpool0/1 0%0/1 0%------------
OverpoolSpeed0/3 0%-0/1 0%0/1 0%----0/1 0%-----
ZvP_10Hatch9Pool1/3 33%-0/1 0%0/1 0%-1/1 100%--------
ZvP_11Hatch10Pool0/1 0%--------0/1 0%----
ZvZ_Overgas9Pool0/1 0%--------0/1 0%----
ZvZ_Overpool11Gas0/2 0%-----0/1 0%---0/1 0%---

This table looks even more scattered than yesterday’s BananaBrain-Dragon table, but to me it tells a story of duelling learning algorithms. Microwave found a few builds that countered BananaBrain’s preferred play, and BananaBrain did not shift its responses far enough to entirely squelch them.

microwave as seen by bananabrain

microwave played#bananabrain recognized
10Hatch9Pool9gas22 Z_10hatch
10HatchMain9Pool9Gas11 Z_10hatch
11HatchTurtleHydra11 Z_12hatch
12Hatch11 Z_12hatch
12PoolMain4336 Z_12pool | 5 Z_10hatch | 2 Z_unknown
12PoolMuta11 Z_10hatch
1HatchMuta_Sparkle11 Z_unknown
2HatchMuta55 Z_12hatch
3HatchHydraBust11 Z_12hatch
3HatchHydra_BHG11 Z_10hatch
3HatchLingBust66 Z_12hatch
3HatchMuta11 Z_12hatch
3HatchPoolHydraExpo11 Z_12hatch
4HatchBeforeGas11 Z_12hatch
4HatchPoolHydra22 Z_12hatch
4PoolHard66 Z_4/5pool
4PoolSoft11 Z_4/5pool
6Pool11 Z_4/5pool
7Pool11 Z_9pool
8Pool11 Z_9pool
8PoolHydraRush8D11 Z_9pool
9PoolGasHatchSpeed8D1815 Z_9pool | 3 Z_overpool
9PoolHatchGasSpeed7D11 Z_9pool
9PoolHatchGasSpeed8D3229 Z_9pool | 3 Z_overpool
9PoolSpeed32 Z_9poolspeed | 1 Z_9pool
9PoolSpeedLing55 Z_9poolspeed
9PoolSunkHatch11 Z_9pool
Overpool11 Z_overpool
OverpoolSpeed33 Z_overpool
ZvP_10Hatch9Pool33 Z_10hatch
ZvP_11Hatch10Pool11 Z_12hatch
ZvZ_Overgas9Pool11 Z_12pool
ZvZ_Overpool11Gas22 Z_overpool

BananaBrain was accurate at reading Microwave’s initial build. Lumping 11 hatch with 12 hatch is fine, they’re very similar. 12 pool can be difficult to distinguish from 10 hatch, if you scout it late after the second hatchery finishes. It would be useful to better separate 9 pool from overpool, which are significantly different in effect, but it requires close attention to detail. Overall, highly accurate readings with only one wide miss, seeing the overgas 9 pool as 12 pool—and that is a ZvZ build that is extremely rare in ZvP.

It makes quite a contrast with yesterday’s BananaBrain-Dragon analysis, where BananaBrain barely recognized terran builds.

bananabrain as seen by microwave

bananabrain played#microwave recognized
PvZ_10/12gate1713 HeavyRush | 3 Unknown | 1 NakedExpand
PvZ_1basespeedzeal1914 Unknown | 5 HeavyRush
PvZ_2basespeedzeal114 NakedExpand | 3 Turtle | 3 SafeExpand | 1 HeavyRush
PvZ_4gate2archon94 NakedExpand | 4 SafeExpand | 1 HeavyRush
PvZ_5gategoon76 NakedExpand | 1 HeavyRush
PvZ_9/9gate119 HeavyRush | 2 Unknown
PvZ_9/9proxygate126 HeavyRush | 6 Unknown
PvZ_bisu146 SafeExpand | 4 NakedExpand | 2 Turtle | 1 HeavyRush | 1 Unknown
PvZ_neobisu104 NakedExpand | 3 SafeExpand | 2 Turtle | 1 HeavyRush
PvZ_sairdt108 Unknown | 2 HeavyRush
PvZ_sairgoon117 NakedExpand | 1 SafeExpand | 1 Turtle | 1 Unknown | 1 HeavyRush
PvZ_sairreaver94 SafeExpand | 3 NakedExpand | 2 Turtle
PvZ_stove107 Unknown | 3 HeavyRush

Microwave borrowed Steamhammer’s rather crude classification of enemy plans (which was still far in the future when Microwaved forked from Steamhammer). It was intended to be minimal, just enough to allow for basic reactions, to hold the fort until I could raise enough troops to make a sally. Microwave’s recognitions look similar to Steamhammer’s, with the right general tendency but many sloppy variations (which I think are due mostly to weak scouting, with a contribution from overlapping recognition rules).

It’s striking that some recognitions—of dubious accuracy—are dark blue in stark contrast to their neighbors. It gives me the impression that Microwave makes use of the recognized enemy plan, in some cases to good effect. It suggests that more accurate recognition, if the reactions are also good, could be a major improvement.

AIIDE 2020 - BananaBrain versus Dragon

Of the 4 bots I’m prepared to run this analysis on, this is the only pairing involving Dragon. Dragon did not record all 150 games against either McRave or Microwave. Like yesterday, all win rates and coloring are from the point of view of BananaBrain: Blue is good for BananaBrain, red is good for Dragon.

bananabrain strategies versus dragon strategies

overall1rax fe2rax bio2rax mechbiodirty worker rushmass vulturesiege expand
overall67/150 45%6/14 43%6/11 55%8/15 53%15/37 41%3/3 100%22/56 39%7/14 50%
PvT_10/12gate12/17 71%2/3 67%-2/3 67%4/4 100%-3/6 50%1/1 100%
PvT_10/15gate5/12 42%-2/2 100%1/5 20%1/3 33%-1/2 50%-
PvT_12nexus1/8 12%1/2 50%--0/1 0%-0/3 0%0/2 0%
PvT_1gatedtexpo3/7 43%1/2 50%--0/1 0%-2/4 50%-
PvT_1gatereaver0/5 0%-0/1 0%-0/2 0%-0/2 0%-
PvT_28nexus5/11 45%0/2 0%0/1 0%0/2 0%1/1 100%-4/5 80%-
PvT_2gatedt3/9 33%0/1 0%-1/1 100%0/2 0%-0/3 0%2/2 100%
PvT_2gaterngexpo2/7 29%-0/1 0%-1/1 100%1/1 100%0/4 0%-
PvT_32nexus2/8 25%---1/4 25%1/1 100%0/2 0%0/1 0%
PvT_9/9gate14/18 78%-2/3 67%-4/4 100%1/1 100%7/9 78%0/1 0%
PvT_9/9proxygate8/14 57%1/1 100%1/1 100%3/3 100%0/2 0%-2/6 33%1/1 100%
PvT_bulldog0/6 0%0/1 0%--0/3 0%-0/1 0%0/1 0%
PvT_dtdrop2/8 25%-1/1 100%-0/4 0%-1/2 50%0/1 0%
PvT_proxydt10/14 71%1/1 100%-1/1 100%3/3 100%-2/5 40%3/4 75%
PvT_stove0/6 0%0/1 0%0/1 0%-0/2 0%-0/2 0%-

Not one table cell has more than 9 games in it. Neither bot successfully predicted what the other would play, if it even tried: BananaBrain is unpredictable and Dragon changes its choice frequently when losing, and besides BananaBrain is poor at recognizing terran plans. So the strategy x strategy cross is a hash. To me the table means that, at least for this pairing, reactions during the game were more important than the initial choice of strategy. Neither side had a way to choose a counter beforehand.

bananabrain as seen by dragon

Dragon does not record a recognized opponent strategy. Its history files have only its own strategy and whether it won.

dragon as seen by bananabrain

dragon played#bananabrain recognized
1rax fe1413 T_unknown | 1 T_fastexpand
2rax bio118 T_unknown | 2 T_fastexpand | 1 T_1fac
2rax mech1514 T_unknown | 1 T_1fac
bio3735 T_unknown | 1 T_1fac | 1 T_fastexpand
dirty worker rush33 T_unknown
mass vulture5630 T_1fac | 26 T_unknown
siege expand149 T_unknown | 5 T_1fac

We knew that BananaBrain struggles to recognize terran strategies. Maybe the author has not spent effort on it because it doesn’t affect results much? In any case, given how Dragon plays, with its love of fast expansions and mixed tech, the terran builds that are recognized probably represent truths about the games. It’s not clear that they are helpful truths, though, because they say so little about what happened.

From the coloring, it looks as though there was little relationship between whether BananaBrain recognized Dragon’s build and whether BananaBrain won. That is consistent with the theory that the author decided it didn’t matter.

AIIDE 2020 - BananaBrain versus McRave

If both bots in a pairing write history files, and both record all 150 games of the tournament, then the history files can be aligned and we can compare what the bots were thinking in each game. So far, between the limitations of the data and the limitations of my script, I’m only ready to do that for a few pairings. Dragon in particular often did not record all 150 games, and I’d rather not try to align game records when there are gaps in the histories (there is enough data to do it programmatically, but it’s a pain and risks errors). Also my script depends on parsing out data into a specific format, and it is only implemented for 4 bots so far (#3 BananaBrain, #4 Dragon, #5 McRave, #6 Microwave—alphabetical order and their finishing order were the same).

Today is BananaBrain versus McRave. The first BananaBrain line in its file about McRave:

2020-10-09 20:56:04,2,(2)Destination.scx,PvZ_9/9proxygate,Z_overpool,7.6,1

The first McRave line in its history file about BananaBrain (we’re told it doesn’t use this data in games, but it’s there and we can analyze it):

Lost,Destination,7:30,2Gate,Proxy,ZealotRush,PoolHatch,Overpool,2HatchSpeedling,1:21,1:21,1:21,5,Zerg_Larva,30,Zerg_Zergling,15,Zerg_Drone,3,Zerg_Overlord,24,Protoss_Probe,16,Protoss_Zealot,1,Protoss_Corsair Lost,HeartbreakRidge,17:40,2Gate,Main,Corsair,PoolHatch,Overpool,2HatchMuta,2:01,2:01,5:10,2,Zerg_Larva,16,Zerg_Zergling,42,Zerg_Drone,10,Zerg_Overlord,28,Zerg_Mutalisk,18,Zerg_Scourge,89,Protoss_Probe,54,Protoss_Zealot,23,Protoss_Dragoon,1,Protoss_High_Templar,1,Protoss_Shuttle,33,Protoss_Corsair,5,Protoss_Dark_Templar,1,Protoss_Reaver,8,Protoss_Scarab

My script extracts key info from each line so we can compare. BananaBrain played PvZ_9/9proxygate and concluded that McRave answered with Z_overpool, while McRave played PoolHatch,Overpool,2HatchSpeedling and classified what it saw from BananaBrain as 2Gate,Proxy,ZealotRush. In this game, both sides agreed pretty well about what was going on.

bananabrain strategies versus mcrave strategies

This table shows which BananaBrain strategies were successful against which three-part McRave strategies. All the winning rates are from BananaBrain’s point of view. The intersection of the overall row and the overall column says that BananaBrain won 82 out of 150 games throughout the tournament, which can be checked against the official crosstable. The overall row tells how BananaBrain fared against each of McRave’s strategies, which can be checked against my tables of what McRave learned. The overall column tells how each BananaBrain strategy performed, which can be checked against what BananaBrain learned. (Spoiler: All the numbers match.) The center cells are the meat, and show what countered what.

overallPoolHatch,Overpool,2HatchMutaPoolHatch,Overpool,2HatchSpeedlingPoolHatch,Overpool,3HatchSpeedling
overall82/150 55%72/131 55%5/10 50%5/9 56%
PvZ_10/12gate9/13 69%4/4 100%-5/9 56%
PvZ_1basespeedzeal6/12 50%6/12 50%--
PvZ_2basespeedzeal3/9 33%3/9 33%--
PvZ_4gate2archon1/6 17%1/6 17%--
PvZ_5gategoon9/16 56%9/16 56%--
PvZ_9/9gate26/27 96%26/27 96%--
PvZ_9/9proxygate5/10 50%-5/10 50%-
PvZ_bisu1/5 20%1/5 20%--
PvZ_neobisu5/11 45%5/11 45%--
PvZ_sairdt3/10 30%3/10 30%--
PvZ_sairgoon11/17 65%11/17 65%--
PvZ_sairreaver1/5 20%1/5 20%--
PvZ_stove2/9 22%2/9 22%--

The table makes it plain that 2HatchSpeedling and 3HatchSpeedling were reactions to specific protoss builds, as the author pointed out in a comment. The counter to 10/12 gate at least seems to have been valuable, because McRave lost all 4 games where the 10/12 gate was played but not countered. The 9/9 gate crushed because no counter was played against it; the zealots are a McRave weakness.

bananabrain as seen by mcrave

But wait, there’s more. Both bots recorded not only their own strategy, but the recognized opponent strategy, so we can compare the known strategy of one bot with how the other bot recognized it. Note well: If the recognized strategy looks different than the actual strategy, it is not necessarily a mistake or a scouting miss. The bots may simply be noting different aspects of the game. Only some differences indicate mistakes.

The coloring is from the point of view of BananaBrain. For McRave, red is good and blue is bad.

bananabrain played#mcrave recognized
PvZ_10/12gate1312 2Gate,Main,Corsair | 1 2Gate,Main,DT
PvZ_1basespeedzeal128 1GateCore,2Zealot,DT | 2 2Gate,Main,DT | 1 2Gate,Main,4Gate | 1 1GateCore,2Zealot,Corsair
PvZ_2basespeedzeal98 FFE,Forge,Speedlot | 1 FFE,Gateway,Speedlot
PvZ_4gate2archon62 FFE,Forge,NeoBisu | 2 FFE,Forge,5GateGoon | 1 FFE,Forge,ZealotArchon | 1 FFE,Nexus,NeoBisu
PvZ_5gategoon1614 FFE,Forge,5GateGoon | 2 FFE,Nexus,5GateGoon
PvZ_9/9gate2726 2Gate,Main,Corsair | 1 2Gate,Main,DT
PvZ_9/9proxygate1010 2Gate,Proxy,ZealotRush
PvZ_bisu53 FFE,Forge,NeoBisu | 2 FFE,Nexus,NeoBisu
PvZ_neobisu115 FFE,Forge,NeoBisu | 4 FFE,Forge,Speedlot | 2 FFE,Nexus,NeoBisu
PvZ_sairdt1010 1GateCore,2Zealot,Corsair
PvZ_sairgoon179 FFE,Forge,NeoBisu | 2 FFE,Nexus,5GateGoon | 2 FFE,Nexus,NeoBisu | 2 FFE,Forge,Unknown | 1 FFE,Forge,Speedlot | 1 FFE,Forge,5GateGoon
PvZ_sairreaver55 FFE,Forge,NeoBisu
PvZ_stove99 1GateCore,2Zealot,Corsair

Only 2 games have an Unknown element. Without watching replays, I can’t say that any of McRave’s recognitions are wrong. Seeing PvZ_sairgoon as FFE,Forge,Speedlot could be correct if BananaBrain followed up with zealots in that one game.

I’m not sure what the difference is between FFE,Forge and FFE,Gateway and FFE,Nexus. FFE stands for forge fast expand, which means a forge and a nexus, and then you need a gateway if you’re ever going to make a mobile army, so all three buildings are required. Maybe it’s whatever building McRave saw first.

mcrave as seen by bananabrain

Again, the coloring is from the point of view of BananaBrain.

mcrave played#bananabrain recognized
PoolHatch,Overpool,2HatchMuta131101 Z_overpool | 27 Z_9pool | 3 Z_unknown
PoolHatch,Overpool,2HatchSpeedling109 Z_overpool | 1 Z_unknown
PoolHatch,Overpool,3HatchSpeedling98 Z_overpool | 1 Z_9pool

BananaBrain remembered far less detail about the game than McRave. Overpool is only an initial build order which reaches its end at 9 supply and can be followed up with any tech or unit mix whatsoever. If all you know is that the opponent will start with overpool, the only conclusions you can draw are limits on the opponent’s tech timings and economy. On the other hand, if you do know more about the opponent’s play, can you use the information productively?

more?

I could generate more tables. Various tables showing recognized strategies might make sense. If at least one bot of the pair records the map for each game, it would be easy to break down strategies by map. Is there any particular breakdown you’d like to see?

Update: I added coloring to the “as seen by” tables, to show how win rates vary depending on what the bots recognized.

AIIDE 2020 - what DaQin learned

Holdover bot DaQin is based on Locutus and writes game records in a format close to old-style Steamhammer game records. The same script parses both Locutus and DaQin files, and is only slightly different from my original Steamhammer code. But DaQin plays a more restricted set of builds.


#1 stardust

openinggameswins
2GateDT60%
3GateDT1338%
4GateGoon110%
3 openings1507%
planpredictedrecognizedaccuracy
countgameswinscountgameswinsgood?
DarkTemplar rush11275%7%8959%3%58%1%
Fast rush117%0%1611%6%0%0%
Not fast rush2617%12%4429%16%23%0%
Unknown11%0%11%0%0%0%
timing#medianearlylate
gas steal attempt631:430:461:47
gas steal success2---
enemy scout1501:551:172:34
enemy combat units1503:072:225:42
enemy air units1268:025:3512:26
enemy cloaked units118:137:0622:38


It’s interesting that DaQin settled on a dark templar strategy. DaQin seems poor at recognizing the enemy strategy. Given these classes, I think all games would have been best classified as Not fast rush.


#2 purplewave

openinggameswins
2GateDT743%
3GateDT30%
4GateGoon14011%
3 openings15013%
planpredictedrecognizedaccuracy
countgameswinscountgameswinsgood?
DarkTemplar rush128%33%139%23%50%0%
Fast rush13791%11%13691%11%95%0%
Naked expand--11%100%0%0%
Unknown11%0%--0%0%
timing#medianearlylate
gas steal attempt80:460:450:47
gas steal success5---
enemy scout1502:071:183:47
enemy combat units1503:022:217:50
enemy air units146:073:4119:42
enemy cloaked units936:475:1420:05


BananaBrain chose 4 gate goon as best against both Stardust and PurpleWave. DaQin liked the dragoons only against PurpleWave. This table doesn’t say so, but 2GateDT was tried on the tournament’s 3rd round out of 150 and won then, while 4GateGoon lost on its first outing. I would have to read the code to decipher the strange seeming preference for dragoons.


#3 bananabrain

openinggameswins
2GateDT1436%
3GateDT8940%
4GateGoon4721%
3 openings15034%
planpredictedrecognizedaccuracy
countgameswinscountgameswinsgood?
DarkTemplar rush6543%34%7248%40%43%2%
Fast rush7953%35%6342%25%41%3%
Naked expand21%0%32%0%0%0%
Not fast rush11%0%43%75%0%100%
Proxy21%50%32%0%0%0%
Safe expand--11%100%0%0%
Unknown11%0%43%50%0%0%
timing#medianearlylate
gas steal attempt601:420:461:47
gas steal success9---
enemy scout1501:580:533:11
enemy combat units1502:572:185:50
enemy air units1037:453:4515:31
enemy cloaked units386:115:2922:03

#4 dragon

openinggameswins
12NexusCarriers10658%
3GateDT933%
4GateGoon2715%
DTDrop825%
4 openings15047%
planpredictedrecognizedaccuracy
countgameswinscountgameswinsgood?
Factory4127%56%2919%62%44%15%
Naked expand107%30%1510%67%10%10%
Not fast rush3523%63%2416%12%3%20%
Proxy2617%15%2416%21%0%8%
Safe expand3523%46%3121%48%26%20%
Unknown21%100%2416%67%0%50%
Worker rush11%0%32%100%0%0%
timing#medianearlylate
gas steal attempt1222:180:463:18
gas steal success9---
enemy scout1412:151:0619:29
enemy combat units1482:592:306:37
enemy air units1329:297:5814:01
enemy cloaked units1279:558:1817:26


The carriers were successful versus Dragon. DaQin attempted to steal gas in almost all games, and rarely succeeded. The tables don’t show enough information to tell whether the attempts were worth it.


#5 mcrave

openinggameswins
ForgeExpand5GateGoon30%
ForgeExpandSpeedlots14736%
2 openings15035%
planpredictedrecognizedaccuracy
countgameswinscountgameswinsgood?
Heavy rush149%43%2819%57%14%7%
Not fast rush13288%36%11778%31%78%2%
Unknown43%0%53%20%0%25%
timing#medianearlylate
gas steal attempt0---
gas steal success0---
enemy scout1502:390:535:35
enemy combat units1503:022:256:17
enemy air units1506:215:237:01
enemy cloaked units13111:029:3015:13

#6 microwave

openinggameswins
4GateGoon1173%
ForgeExpand5GateGoon30%
ForgeExpandSpeedlots13612%
3 openings15017%
planpredictedrecognizedaccuracy
countgameswinscountgameswinsgood?
Fast rush11%0%11%100%0%0%
Heavy rush139%8%3020%17%15%0%
Not fast rush12483%13%10369%17%69%6%
Proxy117%73%85%12%18%0%
Unknown11%0%85%12%0%0%
timing#medianearlylate
gas steal attempt0---
gas steal success0---
enemy scout1462:421:2310:18
enemy combat units1503:562:476:45
enemy air units1336:174:4316:55
enemy cloaked units5010:065:4911:58


Another puzzling choice of a seemingly less-successful strategy...


#7 steamhammer

openinggameswins
ForgeExpand5GateGoon13679%
ForgeExpandSpeedlots1471%
2 openings15078%
planpredictedrecognizedaccuracy
countgameswinscountgameswinsgood?
Fast rush--43%100%0%0%
Heavy rush2718%89%3322%85%15%4%
Hydra bust85%62%21%100%0%0%
Not fast rush11476%77%10469%74%68%5%
Unknown11%0%75%86%0%0%
timing#medianearlylate
gas steal attempt0---
gas steal success0---
enemy scout1272:110:5936:17
enemy combat units1503:151:556:29
enemy air units338:064:3927:42
enemy cloaked units3312:024:5423:23


... but not against Steamhammer. Steamhammer is far more skillful at fighting zealots than dragoons, and DaQin’s choice was correct here. (I expect that Steamhammer would have scored well against the speed zealots if DaQin had stuck to them.) Was Steamhammer’s poor showing relative to Microwave partly due to a mistake by DaQin that only happened versus Microwave?


#9 zzzkbot

openinggameswins
ForgeExpand5GateGoon14710%
ForgeExpandSpeedlots30%
2 openings1509%
planpredictedrecognizedaccuracy
countgameswinscountgameswinsgood?
Fast rush--53%100%0%0%
Heavy rush14395%6%14496%6%99%1%
Unknown75%71%11%0%0%0%
timing#medianearlylate
gas steal attempt0---
gas steal success0---
enemy scout1473:450:515:39
enemy combat units1502:471:463:49
enemy air units97:477:438:21
enemy cloaked units0---

#10 ualbertabot

openinggameswins
12NexusCarriers10%
3GateDT3468%
4GateGoon3253%
DTDrop10%
ForgeExpand5GateGoon8178%
5 openings14969%
planpredictedrecognizedaccuracy
countgameswinscountgameswinsgood?
DarkTemplar rush3624%61%3523%60%22%0%
Factory11%100%1611%94%100%0%
Fast rush8154%78%5235%69%37%1%
Heavy rush32%67%64%83%0%0%
Hydra bust--11%100%0%0%
Naked expand--11%100%0%0%
Not fast rush1913%68%2617%73%5%5%
Proxy85%25%107%30%0%0%
Unknown11%0%21%100%0%0%
timing#medianearlylate
gas steal attempt391:420:461:48
gas steal success11---
enemy scout1381:411:148:25
enemy combat units1473:571:346:54
enemy air units76:545:5015:14
enemy cloaked units195:074:315:15

#11 willyt

openinggameswins
12NexusCarriers367%
3GateDT14797%
2 openings15096%
planpredictedrecognizedaccuracy
countgameswinscountgameswinsgood?
Factory--21%100%0%0%
Heavy rush117%82%85%100%0%27%
Not fast rush107%100%85%100%0%40%
Safe expand12382%98%9060%94%60%27%
Unknown64%83%4228%98%0%33%
timing#medianearlylate
gas steal attempt1391:431:392:21
gas steal success53---
enemy scout1491:531:433:55
enemy combat units1503:052:385:06
enemy air units6517:308:2729:58
enemy cloaked units3715:0711:4321:49

#12 ecgberht

openinggameswins
12NexusCarriers250%
3GateDT148100%
2 openings15099%
planpredictedrecognizedaccuracy
countgameswinscountgameswinsgood?
Factory8859%100%5436%100%23%14%
Fast rush2416%100%2718%96%17%0%
Naked expand--21%100%0%0%
Not fast rush53%100%149%100%20%0%
Proxy--11%100%0%0%
Safe expand3121%100%3725%100%19%10%
Unknown21%50%1510%100%0%0%
timing#medianearlylate
gas steal attempt1261:431:382:21
gas steal success29---
enemy scout1401:350:343:55
enemy combat units1503:432:055:45
enemy air units467:295:599:31
enemy cloaked units158:417:359:54

#13 eggbot

openinggameswins
3GateDT1694%
4GateGoon13497%
2 openings15097%
planpredictedrecognizedaccuracy
countgameswinscountgameswinsgood?
DarkTemplar rush10469%95%9060%98%58%0%
Proxy4228%100%6040%95%36%0%
Unknown43%100%--0%0%
timing#medianearlylate
gas steal attempt580:460:460:49
gas steal success54---
enemy scout1210:460:353:41
enemy combat units296:344:3922:57
enemy air units0---
enemy cloaked units0---

overall

totalPvTPvPPvZPvR
openinggameswinsgameswinsgameswinsgameswinsgameswins
12NexusCarriers11257% 11158% 10%
2GateDT2730% 2730%
3GateDT57965% 30496% 24126% 3468%
4GateGoon40246% 2715% 33247% 1173% 3253%
DTDrop922% 825% 10%
ForgeExpand5GateGoon37050% 28942% 8178%
ForgeExpandSpeedlots30027% 30027%
total179950%45081%60038%60035%14969%
openings played74335

AIIDE 2020 - what BananaBrain learned

#3 BananaBrain had pre-trained data, 3000 (!) games versus Stardust and 100 each against PurpleWave, Dragon, McRave, Microwave, and DaQin. Other opponents did not rate. The main tables here include only tournament games, not pre-training games. BananaBrain scored higher in training games than in tournament games against every opponent except the carryover DaQin (training 61% of 100 games, tournament 66% of 150 games, statistically close enough). It looks as though BananaBrain might have won the tournament if it had played against the same versions of opponents that it trained against. I take it as a sign that secret tournament improvements may be worth it.

A couple conclusions: 1. Enemy strategy recognition seemed to have some misfires with terran opponents. 2. BananaBrain would have scored slightly better if it had never played the Stove. It’s a for-fun build more than a for-real build—though bots are often poor at adaptation, so perhaps on BASIL it is more effective than here.


#1 stardust

openinggameswinsfirstlast
PvP_10/12gate1040%12119
PvP_12nexus20%1166
PvP_2gatedt617%28145
PvP_2gatedtexpo70%0140
PvP_2gatereaver2924%3149
PvP_3gaterobo425%50106
PvP_3gatespeedzeal30%465
PvP_4gategoon2665%31144
PvP_9/9gate40%29146
PvP_9/9proxygate1741%8142
PvP_nzcore20%268
PvP_zcore10%118118
PvP_zcorez540%42117
PvP_zzcore3453%5148
14 openings15038%
enemygameswins
P_1gatecore2335%
P_2gate475%
P_2gatefast1030%
P_4gategoon9444%
P_unknown1911%
5 openings15038%


BananaBrain was the only bot to leave a dent in Stardust. Its plan recognition was not precise enough to pin down Stardust’s 4 gate goon strategy consistently, likely because Stardust ejected the bananascout before the build was complete. Still, BananaBrain’s 4 gate goon opener defeated Stardust’s 4 gate goons 65% of the time in 26 games. BananaBrain is deliberately unpredictable, but against this opponent consistency may have been better: Stardust played without learning, so its opponents should have sought the single best opening as an answer rather than the best mix of openings. It’s possible that #3 BananaBrain could have upset Stardust if it had done that, though it would not have gained enough wins to pass #2 PurpleWave.

openinggameswinsfirstlast
PvP_10/12gate603%112934
PvP_12nexus560%42915
PvP_2gatedt11231%82978
PvP_2gatedtexpo27853%52921
PvP_2gatereaver111066%62988
PvP_3gaterobo603%22935
PvP_3gatespeedzeal11626%72916
PvP_4gategoon560%32917
PvP_9/9gate13636%122995
PvP_9/9proxygate43761%132936
PvP_nzcore560%12918
PvP_zcore10221%02989
PvP_zcorez7212%92986
PvP_zzcore34967%102999
14 openings300051%

This is the table of pre-trained games. It looks different from the tournament table; the overall score and the individual results by strategy do not match up. The training may have been against an older version of Stardust on the Starcraft AI Ladder, or it may have been against Locutus, which was wrapped around an encrypted Stardust binary on SSCAIT and played instead of Stardust if it didn’t have its encryption key.

The misleading training cannot have helped BananaBrain’s results. It did adapt, but notice that BananaBrain’s most effective counter of 4 gate goon was only played 26 times in 150 games, less often than P_2gatereaver and P_zzcore which scored highest in training.


#2 purplewave

openinggameswinsfirstlast
PvP_10/12gate714%1146
PvP_12nexus714%2125
PvP_2gatedt1136%22142
PvP_2gatedtexpo1040%36141
PvP_2gatereaver922%20144
PvP_3gaterobo1323%3148
PvP_3gatespeedzeal933%9108
PvP_4gategoon1669%4137
PvP_9/9gate922%13128
PvP_9/9proxygate922%10147
PvP_nzcore1443%7149
PvP_zcore714%29115
PvP_zcorez1242%0143
PvP_zzcore1765%5139
14 openings15037%
enemygameswins
P_1gatecore10638%
P_2gate580%
P_2gatefast367%
P_4gategoon1436%
P_ffe10%
P_unknown2124%
6 openings15037%


Again, 4 gate goon was BananaBrain’s best, though zealot-zealot-core was statistically equal. PurpleWave learns, so mixing it up was likely correct. Judging by the names, the last 4 builds here, the ones that mention “core”, are nonspecific tech builds that might aim for any tech and unit mix in the midgame. Do the names accurately describe them?

Again the training data was somewhat misleading (52% win rate in 100 training games and entirely different best counters), but BananaBrain tried its strategies in a fairly even distribution so I think it made little difference in this case. Presumably 100 games of training provide a smaller bias than 3000 games.


#4 dragon

openinggameswinsfirstlast
PvT_10/12gate1771%8145
PvT_10/15gate1242%15147
PvT_12nexus812%16132
PvT_1gatedtexpo743%36134
PvT_1gatereaver50%10118
PvT_28nexus1145%25149
PvT_2gatedt933%2128
PvT_2gaterngexpo729%32131
PvT_32nexus825%12124
PvT_9/9gate1878%7146
PvT_9/9proxygate1457%4148
PvT_bulldog60%5120
PvT_dtdrop825%0117
PvT_proxydt1471%1140
PvT_stove60%11125
15 openings15045%
enemygameswins
T_1fac3842%
T_fastexpand475%
T_unknown10844%
3 openings15045%


BananaBrain could not recognize most of Dragon’s builds. It looks like Dragon was vulnerable to mass zealots, an important weakness, and to hidden dark templar, which any terran might die to if unscouted. But what is the Stove doing there? Does it work against decent terran bots? Maybe the key is that there are few mid-rank terran bots, they are mostly in the upper and lower tiers.

67% overall win rate in training, but this time BananaBrain’s best counters matched between training and the tournament. The training helped, even though it was against a weaker version of Dragon.


#5 mcrave

openinggameswinsfirstlast
PvZ_10/12gate1369%24144
PvZ_1basespeedzeal1250%8133
PvZ_2basespeedzeal933%25148
PvZ_4gate2archon617%29132
PvZ_5gategoon1656%7129
PvZ_9/9gate2796%1145
PvZ_9/9proxygate1050%0147
PvZ_bisu520%1987
PvZ_neobisu1145%5149
PvZ_sairdt1030%4141
PvZ_sairgoon1765%3146
PvZ_sairreaver520%2691
PvZ_stove922%2140
13 openings15055%
enemygameswins
Z_9pool2882%
Z_overpool11847%
Z_unknown475%
3 openings15055%


According to McRave’s tables, McRave played overpool every game against BananaBrain. BananaBrain was able to correctly recognize that most of the time, but strangely won at a higher rate when recognition failed. Does BananaBrain perhaps have a reaction to overpool which was detrimental in this case? Or was BananaBrain perfectly right, and McRave sometimes slips up in its build order and goes 9 pool instead of overpool? I think it’s more likely that BananaBrain misrecognized it.


#6 microwave

openinggameswinsfirstlast
PvZ_10/12gate1771%6148
PvZ_1basespeedzeal1984%2141
PvZ_2basespeedzeal1164%1145
PvZ_4gate2archon956%4147
PvZ_5gategoon743%20125
PvZ_9/9gate1155%19123
PvZ_9/9proxygate1258%0130
PvZ_bisu1471%5138
PvZ_neobisu1060%11121
PvZ_sairdt1050%8146
PvZ_sairgoon1145%3149
PvZ_sairreaver956%7143
PvZ_stove1050%17136
13 openings15061%
enemygameswins
Z_10hatch1377%
Z_12hatch2085%
Z_12pool3749%
Z_4/5pool875%
Z_9pool5052%
Z_9poolspeed786%
Z_overpool1258%
Z_unknown367%
8 openings15061%


BananaBrain’s openings scored roughly similarly against Microwave, only a couple below 50% and only one above 75%. I think that argues that Microwave is well balanced in its skills.


#7 steamhammer

openinggameswinsfirstlast
PvZ_10/12gate17100%4148
PvZ_1basespeedzeal1377%8124
PvZ_2basespeedzeal1173%11130
PvZ_4gate2archon933%6140
PvZ_5gategoon944%19147
PvZ_9/9gate17100%27149
PvZ_9/9proxygate1694%5142
PvZ_bisu838%2145
PvZ_neobisu60%18129
PvZ_sairdt1493%0137
PvZ_sairgoon1164%7146
PvZ_sairreaver1040%14144
PvZ_stove956%1139
13 openings15071%
enemygameswins
Z_10hatch3453%
Z_12hatch8769%
Z_12pool1191%
Z_4/5pool2100%
Z_9pool8100%
Z_overpool3100%
Z_unknown5100%
7 openings15071%


The 2 gate zealot openings whomped Steamhammer. Steamhammer survives the zealot attack in many cases, but usually by spending more than it can afford so that it falls far behind in economy.


#8 daqin

openinggameswinsfirstlast
PvP_10/12gate1070%15140
PvP_12nexus757%49146
PvP_2gatedt1688%8147
PvP_2gatedtexpo1471%9133
PvP_2gatereaver1681%3149
PvP_3gaterobo1362%4138
PvP_3gatespeedzeal729%11121
PvP_4gategoon850%32118
PvP_9/9gate1694%16148
PvP_9/9proxygate1060%1135
PvP_nzcore1164%10139
PvP_zcore743%0130
PvP_zcorez729%2137
PvP_zzcore850%31145
14 openings15066%
enemygameswins
P_1gatecore6668%
P_4gategoon6860%
P_ffe1100%
P_unknown1580%
4 openings15066%

#9 zzzkbot

openinggameswinsfirstlast
PvZ_10/12gate12100%6133
PvZ_1basespeedzeal12100%25148
PvZ_2basespeedzeal14100%2149
PvZ_4gate2archon1191%3144
PvZ_5gategoon1283%0142
PvZ_9/9gate12100%21135
PvZ_9/9proxygate978%4146
PvZ_bisu1191%17145
PvZ_neobisu12100%10143
PvZ_sairdt12100%5147
PvZ_sairgoon12100%18136
PvZ_sairreaver1080%1132
PvZ_stove1191%12141
13 openings15094%
enemygameswins
Z_4/5pool9998%
Z_9pool4885%
Z_overpool2100%
Z_unknown1100%
4 openings15094%


ZZZKBot is the first opponent that BananaBrain outclassed. It did not much matter what protoss played.


#10 ualbertabot

openinggameswinsfirstlast
PvU_10/12gate2190%2145
PvU_9/9gate2291%4147
PvU_9/9proxygate1872%1133
PvU_ffe2391%0146
PvU_nzcore2085%10139
PvU_zcore2696%3149
PvU_zzcore2085%9148
7 openings15088%
enemygameswins
P_1gatecore2195%
P_2gate580%
P_2gatefast1794%
P_4gategoon2100%
P_unknown20%
T_2fac22100%
T_2rax1894%
T_unknown15100%
T_wallin1100%
Z_12hatch1493%
Z_4/5pool3266%
Z_unknown1100%
12 openings15088%


It’s interesting that BananaBrain recognized a terran wall in one game. UAlbertaBot does not know how to build a wall, and in fact places its early buildings near the command center. Terran is also the opponent race with the highest number of unrecognized (“unknown”) builds. BananaBrain suffered recognition trouble against Dragon too.


#11 willyt

openinggameswinsfirstlast
PvT_10/12gate12100%6148
PvT_10/15gate11100%12129
PvT_12nexus978%8146
PvT_1gatedtexpo1080%7139
PvT_1gatereaver1080%14143
PvT_28nexus862%5144
PvT_2gatedt1173%1145
PvT_2gaterngexpo978%29127
PvT_32nexus12100%0142
PvT_9/9gate12100%2149
PvT_9/9proxygate13100%3147
PvT_bulldog978%4141
PvT_dtdrop978%19108
PvT_proxydt967%25133
PvT_stove650%22131
15 openings15084%
enemygameswins
T_1fac888%
T_2rax5296%
T_fastexpand2677%
T_unknown6477%
4 openings15084%


The Stove did not work well against WillyT.


#12 ecgberht

openinggameswinsfirstlast
PvT_10/12gate10100%2127
PvT_10/15gate10100%6137
PvT_12nexus10100%24129
PvT_1gatedtexpo10100%9148
PvT_1gatereaver10100%11131
PvT_28nexus10100%15139
PvT_2gatedt11100%12142
PvT_2gaterngexpo10100%1140
PvT_32nexus10100%10125
PvT_9/9gate10100%18147
PvT_9/9proxygate10100%0145
PvT_bulldog10100%25149
PvT_dtdrop10100%8143
PvT_proxydt978%17146
PvT_stove10100%3144
15 openings15099%
enemygameswins
T_1fac8100%
T_2fac24100%
T_2rax7100%
T_fastexpand21100%
T_unknown9098%
5 openings15099%


The Stove did as well as anything against Ecgberht. But then, only one opening had any losses (it had 2 losses).


#13 eggbot

openinggameswinsfirstlast
PvP_10/12gate12100%1145
PvP_12nexus11100%16142
PvP_2gatedt12100%19148
PvP_2gatedtexpo1292%10137
PvP_2gatereaver10100%27122
PvP_3gaterobo989%12104
PvP_3gatespeedzeal12100%0146
PvP_4gategoon12100%3149
PvP_9/9gate12100%2143
PvP_9/9proxygate875%22136
PvP_nzcore989%13130
PvP_zcore11100%5147
PvP_zcorez11100%8138
PvP_zzcore989%11131
14 openings15096%
enemygameswins
P_cannonrush14796%
P_proxygate3100%
2 openings15096%

AIIDE 2020 - what Steamhammer learned

Steamhammer’s tables are fuller than others, partly because Steamhammer records more information than most bots and partly because I put more effort into analyzing my own bot’s results. Even so, the game records contain far more information than is summarized here. I have many features in mind that I’d like to add to my analysis scripts.

Some bottom line findings: 1. My preparation for specific opponents was largely successful, as far as it went. All prepared openings had at least a fair win rate, and most were among the most successful openings Steamhammer discovered throughout the tournament. 2. Steamhammer’s gas steal skill had value against many opponents, even though my first analysis of the skill suggested that it might not. (I have known for a long time that my first analysis had missed the truth.) It was able to judge pretty accurately whether stealing gas was effective versus a given opponent, so it could exploit it when successful and reduce the cost of trying it when unsuccessful.


#1 stardust

openinggameswinsfirstlast
10HatchBurrow186%96146
10HatchHydra10%4949
10Pool9Hatch10%3434
11HatchTurtleHydra70%379
11HatchTurtleMuta10%111111
12-11HatchLing10%6060
12HatchTurtle40%1329
2x10HatchAllIn20%53147
2x10HatchSlow10%3838
3HatchHydra10%00
3HatchHydraBust10%5858
3HatchLateHydras+110%5959
3HatchLingExpo10%5454
3HatchLurker10%104104
4HatchBeforeLair10%101101
4PoolHard10%11
4Scout20%4348
5HatchBeforeGas10%7070
5HatchPoolLing10%148148
5HatchPoolLingBurrow10%120120
5PoolHard2Player20%36118
5Scout10%4545
7HatchSpeed30%41117
8DroneGas10%3232
8Gas7PoolLurker B10%5151
8Hatch7Pool20%47139
8Hatch7PoolBurrow10%6363
8Hatch7PoolSpeed10%3535
9Hatch8Pool20%6771
9HatchMain9Pool9Gas20%5062
9PoolHatch10%9999
9PoolHatchBurrow10%4646
9PoolHatchSpeed10%6969
9PoolHatchSpeedSpire20%3773
9PoolSpeedAllIn10%3333
9PoolSpireSlowlings10%5555
AntiTyrLurker10%6666
AntiZeal_12Hatch70%8138
GuardianRush10%4040
Over10Hatch20%683
Over10Hatch1Sunk30%224
Over10Hatch2Sunk40%516
Over10Hatch2SunkHard20%1452
Over10HatchBurrow10%105105
Over10HatchBust297%74145
Over10HatchHydra20%8691
Over10HatchSlowLings20%420
OverhatchLateGas20%7795
OverpoolHydra10%3939
OverpoolSpeed10%126126
OverpoolSunk10%5656
OverpoolTurtle50%11134
Overpool_3HatchLing10%149149
Overpool_4HatchLing20%5768
PurpleSwarmBuild20%129140
QueenRush10%144144
Sparkle 3HatchMuta10%137137
ZvP_2HatchFakeMuta10%130130
ZvP_4HatchPoolHydra20%4464
ZvP_Overpool3Hatch10%7272
ZvT_2HatchMuta10%6565
ZvZ_12HatchMain20%61142
ZvZ_12PoolLingB10%3131
63 openings1502%
planpredictedrecognizedaccuracy
countgameswinscountgameswinsgood?
Heavy rush14899%2%10167%2%68%32%
Unknown21%0%4933%2%0%50%
timing#medianearlylate
my combat unit1503:021:515:35
my gas1483:231:157:50
enemy scout1501:571:172:41
enemy combat unit1502:382:214:47
enemy gas1504:163:598:20
enemy air unit59:497:4711:21
enemy cloaked unit59:497:4711:21
game duration1508:146:1618:36
gas steal#medianearlylatewinsenemy gas
gas steal decision152:131:483:350%4:25
gas steal success112:092:002:270%4:27
none or failed139---2%4:15
gas steal killed112:442:382:59


Steamhammer managed 3 wins with 2 different openings, but basically nothing worked despite trying the full range from 4 pool to hive rush. Stealing gas did not help, but the situation was desperate so Steamhammer tried it 10% of the time. An interesting number is the enemy scout timing: The scout probe arrived at the zerg base with more consistent timing (arriving in a narrower time window) than against any other opponent. Part of Stardust’s recipe is good scouting.


#2 purplewave

openinggameswinsfirstlast
11Gas10PoolLurker10%4343
11Gas10PoolMuta10%6565
11HatchTurtleHydra30%189
11HatchTurtleMuta20%1419
12-11Hatch20%4656
12Hatch12Pool10%8181
12HatchTurtle1315%10147
2HatchLingAllInSpire10%6969
2HatchLurkerAllIn20%2584
2HatchLurkerPure1315%85148
2HatchMutaPure10%128128
2x10HatchSlow10%111111
3HatchHydra10%140140
3HatchHydraExpo20%2467
3HatchLing30%075
3HatchLingBust210%5555
3HatchLingExpo20%74138
3HatchLurker10%6060
5HatchBeforeGas20%116144
5HatchPoolLing10%6868
5PoolHard2Player10%146146
6PoolHide10%118118
6PoolSpeed20%5862
6Scout10%149149
7DroneHatch10%141141
8-8HydraRush10%109109
8Gas7PoolLurker B10%108108
8Hatch7Pool1513%37127
973HydraBust10%104104
9Hatch8Pool10%7272
9HatchExpo9Pool9Gas714%51143
9PoolExpo10%4848
9PoolHatch30%34119
9PoolHatchSpeed7DroneB10%6666
9PoolHatchSpeedAllInB20%8896
9PoolHatchSpeedSpire10%3131
9PoolSpeedAllIn10%5353
9PoolSunkHatch10%9898
AntiFact_13Pool10%4545
AntiFact_2Hatch10%6161
AntiFactoryHydra10%7373
AntiWraith_2Hatch10%114114
AntiZeal_12Hatch110%4112
Over10Hatch40%518
Over10Hatch+110%7171
Over10Hatch11Pool10%7979
Over10Hatch1Sunk10%99
Over10Hatch2Sunk10%1616
Over10Hatch2SunkHard40%3100
Over10HatchBust10%2323
Over10HatchHydra10%8080
OverhatchExpoLing10%121121
OverhatchExpoMuta40%828
OverhatchLateGas10%2929
Overpool+110%115115
Overpool2HatchLurker10%110110
OverpoolHatch10%6464
OverpoolHide10%9393
OverpoolSpeed30%3382
OverpoolTurtle30%213
OverpoolTurtle 010%4242
Overpool_3HatchLing10%106106
ZvP_2HatchMuta10%6363
ZvP_3BaseSpire+Den10%102102
ZvP_3HatchMuta10%4949
ZvP_3HatchPoolHydra10%101101
ZvT_13Pool10%9999
ZvZ_Overgas8Pool10%9797
ZvZ_Overpool11Gas10%7070
69 openings1505%
planpredictedrecognizedaccuracy
countgameswinscountgameswinsgood?
Fast rush--64%0%0%0%
Heavy rush13389%5%7147%4%47%26%
Naked expand--21%100%0%0%
Safe expand1510%7%2215%0%7%27%
Turtle11%0%107%0%0%0%
Unknown11%0%3926%5%0%0%
timing#medianearlylate
my combat unit1503:061:537:55
my gas1503:251:1411:39
enemy scout1502:111:1914:11
enemy combat unit1492:552:186:22
enemy gas1475:113:518:40
enemy air unit10211:074:3916:47
enemy cloaked unit8711:427:1516:58
game duration15013:095:4625:41
gas steal#medianearlylatewinsenemy gas
gas steal decision152:131:583:000%5:10
gas steal success102:222:182:410%5:16
none or failed140---5%5:11
gas steal killed103:052:535:08


Steamhammer again desperately tried every tech and timing known to zerg, and this time found a little success with a few of them—a sunken build, a lurker build, and two 2-hatch zergling wave builds. PurpleWave largely stuck with 2 gates. Stealing gas barely delayed Protoss from taking gas, but Steamhammer still tried 10% of the time—if you’re losing almost all games, it doesn’t hurt.


#3 bananabrain

openinggameswinsfirstlast
11HatchTurtleHydra2730%2149
12-12Hatch10%6363
2HatchHydra10%1515
3HatchHydraExpo10%5555
3HatchLateHydras+110%11
3HatchLingBurrow1828%5139
3HatchLingBust22938%4140
4HatchBeforeGas10%99
4PoolHard10%1010
5PoolHard10%143143
973HydraBust10%00
9PoolHatchSpeedAllInB10%5757
AntiFact_13Pool2438%3137
DefilerRush333%144147
OverhatchExpoLing10%6161
OverhatchExpoMuta10%9494
OverhatchLateGas10%9898
OverpoolSunk10%110110
Overpool_3HatchLing10%3939
Sparkle 2HatchMuta10%4848
ZvP_3HatchPoolHydra1020%26120
ZvT_12PoolMuta812%46146
ZvT_13Pool1547%108148
ZvT_3HatchMuta10%8181
24 openings15029%
planpredictedrecognizedaccuracy
countgameswinscountgameswinsgood?
Fast rush128%33%75%0%17%42%
Heavy rush4228%21%3020%10%19%26%
Naked expand43%25%53%80%0%25%
Proxy--53%0%0%0%
Safe expand7147%31%3725%38%21%31%
Turtle2114%38%1812%67%10%43%
Unknown--4832%23%0%0%
timing#medianearlylate
my combat unit1503:111:474:11
my gas1453:212:136:42
enemy scout1501:451:156:55
enemy combat unit1503:092:196:37
enemy gas1395:222:479:41
enemy air unit1316:022:4711:18
enemy cloaked unit967:113:2614:06
game duration15010:224:4132:00
gas steal#medianearlylatewinsenemy gas
gas steal decision652:131:483:2337%5:19
gas steal success462:191:542:4039%6:04
none or failed104---25%5:07
gas steal killed465:472:4520:00


BananaBrain was the first opponent weak enough that Steamhammer was able to find answers and did not feel a need to throw in the kitchen sink. 2 hatch muta builds were the most successful (and the best was one specialized for play against terran), but zergling builds and hydra builds were also OK. I love that the defiler rush won a game (it’s not at all a practical opening, but against a bot...). Unlike Stardust and PurpleWave, unpredictable BananaBrain played a variety of builds—for example, the appearance of an enemy cloaked unit at 3:26 in one game suggests a dark templar rush. The gas steal was successful and delayed protoss from taking gas for nearly an entire minute, so Steamhammer went with it frequently.


#4 dragon

openinggameswinsfirstlast
2HatchLingAllInSpire850%35140
3HatchLurker1656%0148
4PoolSoft520%1747
5HatchPool5985%5146
5PoolHard2Player10%11
6PoolSpeed10%44
9PoolSpeedAllIn20%23
UltraRush333%142149
ZvT_3HatchMuta771%121147
ZvT_3HatchMutaExpo4078%49145
ZvT_7Pool850%5384
11 openings15070%
planpredictedrecognizedaccuracy
countgameswinscountgameswinsgood?
Factory5637%70%3624%53%46%25%
Heavy rush21%50%11%100%0%50%
Naked expand1711%82%1510%93%18%35%
Safe expand128%33%128%83%8%58%
Turtle11%100%11%100%0%0%
Unknown--4631%74%0%0%
Worker rush6241%74%3926%67%42%29%
timing#medianearlylate
my combat unit1413:171:477:58
my gas1133:471:4710:51
enemy scout1492:151:056:47
enemy combat unit1212:392:218:45
enemy gas1186:022:4311:45
enemy air unit1089:154:2217:01
enemy cloaked unit859:545:4316:34
game duration15015:073:0137:21
gas steal#medianearlylatewinsenemy gas
gas steal decision392:211:564:2072%6:02
gas steal success172:222:143:0665%7:07
none or failed133---71%5:52
gas steal killed174:263:185:08


Steamhammer upset Dragon. The success of 5 hatcheries before spawning pool means that Dragon was not aggressive early, to its detriment—or that Steamhammer recognized any early aggression as a rush and reacted correctly. 3 hatchery mutalisk builds were also good. Even 3 hatchery lurker was not bad, though on the face it appears unsuited to counter Dragon’s play style. The gas steal was not successful in terms of win rate, but Steamhammer noticed that it delayed Dragon’s gas for a long time so it tried anyway. Fewer than half the attempts to steal gas ended with the extractor successfully made, though. The 37 minute game (here 37:21, officially 37:22) was Steamhammer’s longest game of the tournament, except for a couple games versus EggBot that went to the 60 minute limit and had to be adjudicated on points.


#5 mcrave

openinggameswinsfirstlast
12PoolLurker10%5555
3HatchLingBurrow520%97126
8DroneGas1164%106148
9HatchMain9Pool9Gas20%52138
9PoolHatchSpeedAllInB10%1919
9PoolSpire20%5995
Over10HatchBust1942%62149
Over10PoolLing10%00
OverpoolSpeed1520%5135
OverpoolSunk2138%30128
OverpoolTurtle2348%66139
ZvP_3HatchMuta10%134134
ZvZ_12HatchExpo10%77
ZvZ_Overgas9Pool20%13
ZvZ_OverpoolTurtle4558%2146
15 openings15043%
planpredictedrecognizedaccuracy
countgameswinscountgameswinsgood?
Heavy rush2013%35%85%50%0%70%
Naked expand11879%45%3322%42%21%69%
Turtle96%44%43%25%0%78%
Unknown21%0%10469%42%0%50%
Worker rush11%0%11%100%0%0%
timing#medianearlylate
my combat unit1502:262:133:15
my gas1462:321:313:30
enemy scout1502:470:375:51
enemy combat unit1502:341:116:03
enemy gas1303:232:3211:09
enemy air unit1234:313:3710:10
enemy cloaked unit515:0611:4524:23
game duration15010:583:4129:42
gas steal#medianearlylatewinsenemy gas
gas steal decision102:001:542:4830%3:15
gas steal success0-----
none or failed150---43%3:23
gas steal killed0---


Steamhammer failed to recognize McRave’s build in 2/3 of games, though we know from yeterday’s post exactly what they were, and that they should not have been hard to understand. I put more effort into recognizing rushes and proxies that change the whole course of the game than into regular builds, and the result is that Steamhammer’s understanding and prediction are sometimes spectacularly unhelpful. The 8DroneGas build is actually a 9 pool which makes a second hatchery; it’s called that because it ends up with 8 drones while flooding zerglings (it’s not the Styx build, but related). 5 games had cloaked units; I think that means that McRave researched burrow, because it does use burrow and does not seem to ever make lurkers. Steamhammer was unable to steal gas in 10 attempts, so it gave up trying.


#6 microwave

openinggameswinsfirstlast
6PoolBurrow10%5050
8-8HydraRush10%131131
9Hatch8Pool520%6887
9PoolHatchSpeedSpire10%6060
OverhatchLing10%22
OverpoolBurrow10%121121
ZvZ_12HatchExpo540%117141
ZvZ_12PoolLing1164%0149
ZvZ_12PoolMain333%171
ZvZ_Overpool11Gas4473%3147
ZvZ_Overpool9Gas6489%8148
ZvZ_OverpoolTurtle1354%9140
12 openings15071%
planpredictedrecognizedaccuracy
countgameswinscountgameswinsgood?
Fast rush128%67%85%88%8%67%
Heavy rush4429%75%3221%91%20%32%
Naked expand9463%70%4228%67%23%45%
Turtle--43%75%0%0%
Unknown--6443%62%0%0%
timing#medianearlylate
my combat unit1502:261:573:14
my gas1502:061:382:45
enemy scout1502:251:174:53
enemy combat unit1502:411:495:25
enemy gas1295:212:349:37
enemy air unit1157:343:4615:33
enemy cloaked unit0---
game duration15013:323:4130:36
gas steal#medianearlylatewinsenemy gas
gas steal decision61:581:502:200%5:04
gas steal success12:212:212:210%6:40
none or failed149---72%5:16
gas steal killed13:163:163:16


Steamhammer found a variety of overpool openings to be best. Overpool is flexible; those openings play out quite differently. Microwave didn’t play 5 pool often because it didn’t work: Steamhammer’s rush recognition is improved this year, and it reacted well. The burrow openings and 8-8 dawn hydra rush are not appropriate for ZvZ; those choices could be improved. Unlike McRave, Microwave did not use burrow. Stealing gas failed, so Steamhammer gave it up quickly.


#8 daqin

openinggameswinsfirstlast
10HatchLing10%139139
11Gas10PoolLurker10%6363
12-12Hatch10%4242
12Hatch_4HatchLing20%82126
2.5HatchMuta10%9999
2HatchHydraBust20%5131
3HatchHydra20%20113
3HatchHydraBust30%497
3HatchHydraExpo10%5353
3HatchLateHydras+110%107107
3HatchLing5944%0147
3HatchLingBust220%2269
4HatchBeforeGas2520%13144
4HatchBeforeLair10%142142
5HatchBeforeGas20%12
5HatchPool10%128128
5PoolHard2Player10%6666
5Scout10%9393
973HydraBust40%373
9Pool8GasLurker10%9191
9PoolHatchSpeed10%3838
9PoolHatchSpeedSpire210%114114
9PoolHatchSpire10%6767
9PoolSpireSlowlings10%3131
9PoolSunkHatch10%9292
AntiFact_2Hatch10%8787
AntiFact_Overpool9Gas10%141141
AntiFactory210%116116
Over10Hatch1Sunk10%7676
OverhatchExpoMuta30%1747
OverpoolSpeed10%7272
OverpoolTurtle 020%106146
Proxy8HatchNatural10%4141
Sparkle 3HatchMuta617%120136
ZvP_2HatchMuta10%2525
ZvP_3BaseSpire+Den10%115115
ZvP_3HatchPoolHydra714%133149
ZvT_2HatchMuta10%5757
ZvT_3HatchMuta10%4343
ZvT_7Pool10%5959
ZvZ_12PoolLing10%7777
ZvZ_12PoolLingB20%103129
ZvZ_Overpool11Gas10%8888
43 openings15022%
planpredictedrecognizedaccuracy
countgameswinscountgameswinsgood?
Heavy rush--107%20%0%0%
Naked expand--53%80%0%0%
Safe expand3523%11%4832%21%37%6%
Turtle11476%25%8557%20%59%0%
Unknown11%100%21%0%0%0%
timing#medianearlylate
my combat unit1503:111:515:01
my gas1503:221:475:53
enemy scout1491:301:1511:34
enemy combat unit1504:494:066:51
enemy gas1485:424:438:31
enemy air unit3813:159:1026:30
enemy cloaked unit4812:114:4317:37
game duration15011:166:2236:26
gas steal#medianearlylatewinsenemy gas
gas steal decision312:141:583:0635%6:16
gas steal success312:222:083:1335%6:16
none or failed119---18%5:32
gas steal killed312:532:3813:06


DaQin upset Steamhammer badly, and zerg fell back on exploring widely. One ling bust and a few macro builds were able to save some games against DaQin’s consistent forge expand (which Steamhammer often misrecognized as Turtle because it did not actively look for the expansion nexus). The gas steal is measured to increase the overall win rate from 18% to 22%, not bad.


#9 zzzkbot

openinggameswinsfirstlast
8Hatch7Pool560%103133
9PoolHatchSpire425%14148
9PoolSunkHatch3067%3149
9PoolSunkSpeed1771%0136
OverhatchLing1464%108140
OverpoolSunk2050%1143
ZvZ_12Pool10%7979
ZvZ_OverpoolTurtle5997%13147
8 openings15075%
planpredictedrecognizedaccuracy
countgameswinscountgameswinsgood?
Fast rush4027%80%107%100%25%68%
Turtle11073%73%2718%70%22%78%
Unknown--11375%73%0%0%
timing#medianearlylate
my combat unit1502:252:143:06
my gas1482:382:017:07
enemy scout1502:380:394:01
enemy combat unit1502:411:534:31
enemy gas1215:272:248:21
enemy air unit626:346:238:35
enemy cloaked unit0---
game duration1507:544:2615:23
gas steal#medianearlylatewinsenemy gas
gas steal decision82:372:013:0175%5:27
gas steal success0-----
none or failed150---75%5:27
gas steal killed0---


ZZZKBot switches between its famous 4 pool (recognized as Fast rush; see the 100% win rate when the strategy was recognized) and a build with sunkens, two hatcheries, and 6 sudden mutalisks (recognized as Turtle). It seems that part of Steamhammer’s difficulty with ZZZKBot (I consider a 75% win rate to be low in this case) is due to poor scouting: See the rate of Unknown enemy strategies. A bigger part of it may be a problem with the exploration policy. ZvZ_OverpoolTurtle scored 97% and was discovered early, but was played in only 59 games out of 150.

Steamhammer does not use enemy scout timing as a clue to the enemy strategy, and it should. When a scout appears at your base in 39 seconds it must have been sent almost immediately. Either the enemy is rushing, or is terrified that you might. A comparison of past scout timings versus recognized strategies for this opponent could be strong evidence.

ZZZKBot takes gas only in its muta strategy, and then it has sunkens so that a gas steal cannot succeed. Steamhammer figured that out fairly quickly.


#10 ualbertabot

openinggameswinsfirstlast
973HydraBust10%129129
AntiZeal_12Hatch771%0142
Over10Hatch475%2141
OverpoolTurtle13799%1148
4 openings14996%
planpredictedrecognizedaccuracy
countgameswinscountgameswinsgood?
Factory107%100%1711%100%0%50%
Fast rush2819%93%2315%96%14%36%
Heavy rush11174%96%6040%93%44%22%
Naked expand--107%100%0%0%
Unknown--3926%97%0%0%
timing#medianearlylate
my combat unit1492:262:223:15
my gas1472:582:544:46
enemy scout1402:021:187:41
enemy combat unit1182:391:424:33
enemy gas1273:382:3713:12
enemy air unit3314:3110:4616:33
enemy cloaked unit3214:162:3716:33
game duration1498:273:4220:54
gas steal#medianearlylatewinsenemy gas
gas steal decision0-----
gas steal success0-----
none or failed149---96%3:38
gas steal killed0---


Steamhammer recorded only 149 games against UAlbertaBot, because it crashed one game, its only crash in the tournament. Against every other opponent, Steamhammer recorded all 150 games.

There was no need to test the gas steal. If you’re winning nearly all games, spending a drone to vary your play is not likely to gain anything. Another point is that UAlbertaBot often takes gas quite late, so stealing gas early is unlikely to pay off.


#11 willyt

openinggameswinsfirstlast
11Gas10PoolLurker4774%4149
12-12Hatch10%4646
2HatchLurker10%115115
4PoolHard520%258
9HatchMain9Pool9Gas1638%7148
9PoolSpeed3358%1141
9PoolSpeedAllIn2854%3145
GuardianRush540%123143
Over10Hatch2Sunk10%146146
Overpool_3HatchLing10%113113
Sparkle 3HatchMuta1145%65132
ZvT_3HatchMuta10%00
12 openings15055%
planpredictedrecognizedaccuracy
countgameswinscountgameswinsgood?
Factory--11%0%0%0%
Fast rush--11%0%0%0%
Heavy rush1611%62%1510%27%12%50%
Naked expand8657%53%3523%100%17%52%
Safe expand4832%56%3020%77%25%31%
Unknown--6845%31%0%0%
timing#medianearlylate
my combat unit1502:421:463:38
my gas1451:491:455:17
enemy scout1422:111:387:19
enemy combat unit1502:592:056:41
enemy gas1125:134:0410:07
enemy air unit1117:1310:4530:58
enemy cloaked unit2214:237:1019:33
game duration1508:484:4231:49
gas steal#medianearlylatewinsenemy gas
gas steal decision272:131:482:4367%5:45
gas steal success232:211:562:5770%6:19
none or failed127---53%5:11
gas steal killed234:063:004:43


WillyT was a tough opponent for Steamhammer. The choice of zerg builds does not seem strong. I have no idea how the guardian rush won 2 games out of 5.


#12 ecgberht

openinggameswinsfirstlast
11HatchTurtleLurker10%11
11HatchTurtleMuta757%8148
12HatchTurtle10%119119
9PoolLurker4791%0149
9PoolSpeed2576%3142
AntiStyx_9Pool475%121141
HiveRush875%89140
Over10HatchBust2282%2135
OverpoolLurker3591%4147
9 openings15083%
planpredictedrecognizedaccuracy
countgameswinscountgameswinsgood?
Factory3926%79%2416%79%28%26%
Fast rush3020%80%2114%90%10%40%
Heavy rush5637%89%2315%87%18%39%
Naked expand64%67%64%83%17%33%
Proxy85%75%53%60%0%50%
Safe expand85%100%85%75%0%50%
Unknown--5537%87%0%0%
Worker rush32%67%85%62%0%33%
timing#medianearlylate
my combat unit1502:182:113:17
my gas1501:551:457:07
enemy scout1441:270:305:18
enemy combat unit1483:011:556:53
enemy gas985:052:518:43
enemy air unit495:584:0119:55
enemy cloaked unit315:545:217:15
game duration1508:363:5222:29
gas steal#medianearlylatewinsenemy gas
gas steal decision222:171:485:4586%5:10
gas steal success132:232:005:5185%5:24
none or failed137---83%5:03
gas steal killed133:272:176:10


Ecgberht is a tricky opponent. If it knew how to defeat fast lurker builds, it would score a lot higher against Steamhammer.


#13 eggbot

openinggameswinsfirstlast
2HatchHydraBust367%3286
3HatchHydra786%70105
3HatchHydraBust367%52103
3HatchHydraExpo8100%15137
3HatchLateHydras+1683%1375
3HatchLingBust26100%12121
4HatchBeforeGas6100%7149
4HatchBeforeLair11100%16142
5HatchBeforeGas8100%1118
6PoolHide19100%5145
973HydraBust9100%6130
9PoolHide10100%27115
9PoolSunkHatch11100%0138
9PoolSunkSpeed7100%18148
AntiStyx_9Pool6100%8129
OverpoolHide14100%2146
ZvP_3BaseSpire+Den10100%11141
ZvP_3HatchPoolHydra683%30147
18 openings15097%
planpredictedrecognizedaccuracy
countgameswinscountgameswinsgood?
Contain5637%98%3322%100%23%43%
Proxy3523%97%2517%80%14%37%
Turtle5939%95%3725%100%20%31%
Unknown--5537%100%0%0%
timing#medianearlylate
my combat unit1502:261:584:09
my gas1393:432:388:31
enemy scout791:290:3110:17
enemy combat unit326:504:318:59
enemy gas0---
enemy air unit0---
enemy cloaked unit0---
game duration1506:504:0460:00
gas steal#medianearlylatewinsenemy gas
gas steal decision0-----
gas steal success0-----
none or failed150---97%-
gas steal killed0---


EggBot is a cannon bot. Its builds were recognized as Proxy for close cannons, Contain for cannons farther away from zerg bases, or Turtle for distant cannons. Steamhammer tried a variety of openings, discarding one as soon as it had lost a single game because there were others that still scored 100%. Steamhammer understood that EggBot never took gas, so gas steal would gain nothing.


overall

totalZvTZvPZvZZvR
openinggameswinsgameswinsgameswinsgameswinsgameswins
10HatchBurrow186% 186%
10HatchHydra10% 10%
10HatchLing10% 10%
10Pool9Hatch10% 10%
11Gas10PoolLurker4971% 4774% 20%
11Gas10PoolMuta10% 10%
11HatchTurtleHydra3722% 3722%
11HatchTurtleLurker10% 10%
11HatchTurtleMuta1040% 757% 30%
12-11Hatch20% 20%
12-11HatchLing10% 10%
12-12Hatch30% 10% 20%
12Hatch12Pool10% 10%
12HatchTurtle1811% 10% 1712%
12Hatch_4HatchLing20% 20%
12PoolLurker10% 10%
2.5HatchMuta10% 10%
2HatchHydra10% 10%
2HatchHydraBust540% 540%
2HatchLingAllInSpire944% 850% 10%
2HatchLurker10% 10%
2HatchLurkerAllIn20% 20%
2HatchLurkerPure1315% 1315%
2HatchMutaPure10% 10%
2x10HatchAllIn20% 20%
2x10HatchSlow20% 20%
3HatchHydra1155% 1155%
3HatchHydraBust729% 729%
3HatchHydraExpo1267% 1267%
3HatchLateHydras+1956% 956%
3HatchLing6242% 6242%
3HatchLingBurrow2326% 1828% 520%
3HatchLingBust23845% 3845%
3HatchLingExpo30% 30%
3HatchLurker1850% 1656% 20%
4HatchBeforeGas3234% 3234%
4HatchBeforeLair1385% 1385%
4PoolHard714% 520% 20%
4PoolSoft520% 520%
4Scout20% 20%
5HatchBeforeGas1362% 1362%
5HatchPool6083% 5985% 10%
5HatchPoolLing20% 20%
5HatchPoolLingBurrow10% 10%
5PoolHard10% 10%
5PoolHard2Player50% 10% 40%
5Scout20% 20%
6PoolBurrow10% 10%
6PoolHide2095% 2095%
6PoolSpeed30% 10% 20%
6Scout10% 10%
7DroneHatch10% 10%
7HatchSpeed30% 30%
8-8HydraRush20% 10% 10%
8DroneGas1258% 10% 1164%
8Gas7PoolLurker B20% 20%
8Hatch7Pool2223% 1712% 560%
8Hatch7PoolBurrow10% 10%
8Hatch7PoolSpeed10% 10%
973HydraBust1656% 1560% 10%
9Hatch8Pool812% 30% 520%
9HatchExpo9Pool9Gas714% 714%
9HatchMain9Pool9Gas2030% 1638% 20% 20%
9Pool8GasLurker10% 10%
9PoolExpo10% 10%
9PoolHatch40% 40%
9PoolHatchBurrow10% 10%
9PoolHatchSpeed20% 20%
9PoolHatchSpeed7DroneB10% 10%
9PoolHatchSpeedAllInB40% 30% 10%
9PoolHatchSpeedSpire40% 30% 10%
9PoolHatchSpeedSpire210% 10%
9PoolHatchSpire520% 10% 425%
9PoolHide10100% 10100%
9PoolLurker4791% 4791%
9PoolSpeed5866% 5866%
9PoolSpeedAllIn3247% 3050% 20%
9PoolSpire20% 20%
9PoolSpireSlowlings20% 20%
9PoolSunkHatch4372% 1385% 3067%
9PoolSunkSpeed2479% 7100% 1771%
AntiFact_13Pool2536% 2536%
AntiFact_2Hatch20% 20%
AntiFact_Overpool9Gas10% 10%
AntiFactory210% 10%
AntiFactoryHydra10% 10%
AntiStyx_9Pool1090% 475% 6100%
AntiTyrLurker10% 10%
AntiWraith_2Hatch10% 10%
AntiZeal_12Hatch2520% 180% 771%
DefilerRush333% 333%
GuardianRush633% 540% 10%
HiveRush875% 875%
Over10Hatch1030% 60% 475%
Over10Hatch+110% 10%
Over10Hatch11Pool10% 10%
Over10Hatch1Sunk50% 50%
Over10Hatch2Sunk60% 10% 50%
Over10Hatch2SunkHard60% 60%
Over10HatchBurrow10% 10%
Over10HatchBust7139% 2282% 307% 1942%
Over10HatchHydra30% 30%
Over10HatchSlowLings20% 20%
Over10PoolLing10% 10%
OverhatchExpoLing20% 20%
OverhatchExpoMuta80% 80%
OverhatchLateGas40% 40%
OverhatchLing1560% 1560%
Overpool+110% 10%
Overpool2HatchLurker10% 10%
OverpoolBurrow10% 10%
OverpoolHatch10% 10%
OverpoolHide1593% 1593%
OverpoolHydra10% 10%
OverpoolLurker3591% 3591%
OverpoolSpeed2015% 50% 1520%
OverpoolSunk4342% 20% 4144%
OverpoolTurtle16887% 80% 2348% 13799%
OverpoolTurtle 030% 30%
Overpool_3HatchLing40% 10% 30%
Overpool_4HatchLing20% 20%
Proxy8HatchNatural10% 10%
PurpleSwarmBuild20% 20%
QueenRush10% 10%
Sparkle 2HatchMuta10% 10%
Sparkle 3HatchMuta1833% 1145% 714%
UltraRush333% 333%
ZvP_2HatchFakeMuta10% 10%
ZvP_2HatchMuta20% 20%
ZvP_3BaseSpire+Den1283% 1283%
ZvP_3HatchMuta20% 10% 10%
ZvP_3HatchPoolHydra2433% 2433%
ZvP_4HatchPoolHydra20% 20%
ZvP_Overpool3Hatch10% 10%
ZvT_12PoolMuta812% 812%
ZvT_13Pool1644% 1644%
ZvT_2HatchMuta20% 20%
ZvT_3HatchMuta1050% 862% 20%
ZvT_3HatchMutaExpo4078% 4078%
ZvT_7Pool944% 850% 10%
ZvZ_12HatchExpo633% 633%
ZvZ_12HatchMain20% 20%
ZvZ_12Pool10% 10%
ZvZ_12PoolLing1258% 10% 1164%
ZvZ_12PoolLingB30% 30%
ZvZ_12PoolMain333% 333%
ZvZ_Overgas8Pool10% 10%
ZvZ_Overgas9Pool20% 20%
ZvZ_Overpool11Gas4670% 20% 4473%
ZvZ_Overpool9Gas6489% 6489%
ZvZ_OverpoolTurtle11777% 11777%
total179954%45070%75031%45063%14996%
openings played15129130304


This is not all of Steamhammer’s zerg openings! The tournament wasn’t long enough for it to try everything.

AIIDE 2020 - what McRave learned

I got distracted, but I’m back. These tables aren’t what McRave learned exactly, they are what it recorded in its Info files, more like a summary of how McRave played given what it had learned. History files like these are rich with information and I wanted to extract more from them, but this will do for now.

The “opening” tables give McRave’s strategy as it represents it, build-opener-transition (see last post). The “enemy” tables represent the recognized enemy strategy in the same format. I like that the strategies of both sides are represented the same way, it’s elegant. The hierarchical representation has advantages for reacting to enemy strategies: McRave may be able to react to an aspect of its enemy’s plan, or to an enemy strategy that it only partially recognized.

Here’s a sample line from the file ZvZ Microwave Info.txt, the first game of 150, to give a taste of how much information there is.

Won,Destination,28:43,HatchPool,9Pool,LingRush,PoolLair,9Pool,1HatchMuta,4:07,2:45,3:31,1,Zerg_Larva,92,Zerg_Zergling,105,Zerg_Drone,18,Zerg_Overlord,73,Zerg_Mutalisk,36,Zerg_Scourge,30,Zerg_Larva,114,Zerg_Zergling,102,Zerg_Drone,12,Zerg_Overlord,34,Zerg_Mutalisk,14,Zerg_Scourge,4,Zerg_Cocoon,11,Zerg_Devourer


#1 stardust

openinggameswinsfirstlast
PoolHatch,Overpool,2HatchMuta1502%0149
1 openings1502%
enemygameswins
1GateCore,2Zealot,4Gate147%
2Gate,Main,4Gate1351%
2Gate,Main,DT10%
3 openings1502%


I think Stardust does not make dark templar, so the one DT game may be a strategy inference miss. It’s interesting that most of McRave’s wins came when Stardust was recognized as opening with gate-cybercore instead of with two gates.


#2 purplewave

openinggameswinsfirstlast
PoolHatch,Overpool,2HatchMuta1495%0149
PoolHatch,Overpool,3HatchSpeedling10%4545
2 openings1505%
enemygameswins
2Gate,Main,4Gate1446%
2Gate,Main,Corsair30%
2Gate,Main,ZealotRush30%
3 openings1505%


PurpleWave chose to play similarly to Stardust, not quite as successfully.


#3 bananabrain

openinggameswinsfirstlast
PoolHatch,Overpool,2HatchMuta13145%1149
PoolHatch,Overpool,2HatchSpeedling1050%0147
PoolHatch,Overpool,3HatchSpeedling944%24131
3 openings15045%
enemygameswins
1GateCore,2Zealot,Corsair2075%
1GateCore,2Zealot,DT862%
2Gate,Main,4Gate10%
2Gate,Main,Corsair3811%
2Gate,Main,DT425%
2Gate,Proxy,ZealotRush1050%
FFE,Forge,5GateGoon1747%
FFE,Forge,NeoBisu2462%
FFE,Forge,Speedlot1354%
FFE,Forge,Unknown20%
FFE,Forge,ZealotArchon1100%
FFE,Gateway,Speedlot10%
FFE,Nexus,5GateGoon425%
FFE,Nexus,NeoBisu786%
14 openings15045%


McRave’s plans were about equally successful, but it chose to go with mutalisks much more often than zerglings. I think that’s strategically correct, because BananaBrain is susceptible to the occasional ling bust but will play safely if zerg repeats it too often. Otherwise, BananaBrain is unpredictable as always. As I understand it, McRave does not try to directly predict the enemy strategy but only reacts to what it scouts, so unpredictability can confuse UCB but nothing worse.


#4 dragon

openinggameswinsfirstlast
HatchPool,12Hatch,2HatchMuta6018%0148
HatchPool,12Hatch,2HatchSpeedling30%24129
PoolHatch,12Pool,2HatchMuta190%3149
PoolHatch,Overpool,2HatchMuta6728%1147
PoolHatch,Overpool,2HatchSpeedling1100%4747
5 openings15021%
enemygameswins
2Rax,Expand,Unknown20%
2Rax,Main,1FactTanks20%
2Rax,Main,Academy30%
2Rax,Main,Unknown2722%
2Rax,Proxy,1FactTanks10%
2Rax,Proxy,Unknown20%
RaxCC,1RaxFE,1FactTanks1010%
RaxCC,1RaxFE,5FactGoliath4518%
RaxCC,1RaxFE,Unknown1258%
RaxFact,Unknown,5FactGoliath1436%
RaxFact,Unknown,Unknown250%
Unknown,Unknown,2Fact617%
Unknown,Unknown,Unknown234%
Unknown,Unknown,WorkerRush1100%
14 openings15021%


Dragon is the first opponent to push McRave into exploring most of its available strategies. Notice McRave only played PoolHatch,Overpool,2HatchSpeedling once (about a third of the way through the tournament) even though it won, and even though PoolHatch and Overpool was its preferred stem. It shows a strong preference for mutalisk play.


#6 microwave

openinggameswinsfirstlast
PoolHatch,12Pool,2HatchMuta1963%1127
PoolHatch,12Pool,2HatchSpeedling1457%21118
PoolLair,9Pool,1HatchMuta11484%0146
3 openings14779%
enemygameswins
HatchPool,12Pool,1HatchLurker1100%
HatchPool,12Pool,2HatchLing6100%
HatchPool,12Pool,3HatchMuta667%
HatchPool,12Pool,Unknown1377%
HatchPool,4Pool,LingRush250%
HatchPool,9Pool,LingRush2857%
HatchPool,9Pool,Unknown10%
HatchPool,Unknown,2HatchLing2186%
HatchPool,Unknown,3HatchLing1100%
HatchPool,Unknown,Unknown6100%
PoolHatch,12Pool,2HatchLing2100%
PoolHatch,12Pool,3HatchMuta10%
PoolHatch,12Pool,Unknown12100%
PoolHatch,4Pool,LingRush2100%
PoolHatch,9Pool,2HatchLing1100%
PoolHatch,9Pool,LingRush2100%
PoolHatch,Unknown,2HatchLing3100%
PoolHatch,Unknown,Unknown475%
PoolLair,9Pool,1HatchMuta3100%
PoolLair,9Pool,Unknown3100%
PoolLair,Unknown,Unknown1100%
Unknown,12Pool,3HatchLing1100%
Unknown,12Pool,3HatchMuta450%
Unknown,12Pool,Unknown967%
Unknown,4Pool,LingRush1100%
Unknown,9Pool,LingRush367%
Unknown,9Pool,Unknown475%
Unknown,Unknown,1HatchHydra1100%
Unknown,Unknown,3HatchMuta1100%
Unknown,Unknown,Unknown4100%
30 openings14779%


McRave’s play was similar against Microwave and Steamhammer: It chose the same builds in roughly similar proportions, and it found the opponent’s strategies to be highly diverse and difficult to recognize (notice all the Unknown values).


#7 steamhammer

openinggameswinsfirstlast
PoolHatch,12Pool,2HatchMuta3348%2149
PoolHatch,12Pool,2HatchSpeedling2255%1144
PoolLair,9Pool,1HatchMuta9561%0148
3 openings15057%
enemygameswins
HatchPool,12Pool,1HatchHydra10%
HatchPool,12Pool,1HatchLurker2100%
HatchPool,12Pool,1HatchMuta1100%
HatchPool,12Pool,2HatchLing4100%
HatchPool,12Pool,3HatchMuta250%
HatchPool,12Pool,Unknown825%
HatchPool,9Pool,2HatchLing617%
HatchPool,9Pool,3HatchMuta20%
HatchPool,9Pool,LingRush1233%
HatchPool,9Pool,Unknown875%
HatchPool,Unknown,1HatchHydra2100%
HatchPool,Unknown,2HatchLing888%
HatchPool,Unknown,2HatchMuta1100%
HatchPool,Unknown,Unknown4100%
PoolHatch,12Pool,1HatchLurker1100%
PoolHatch,12Pool,2HatchLing1100%
PoolHatch,12Pool,Unknown580%
PoolHatch,9Pool,2HatchLing250%
PoolHatch,9Pool,LingRush786%
PoolHatch,9Pool,Unknown10%
PoolHatch,Unknown,2HatchLing1100%
PoolHatch,Unknown,Unknown20%
PoolLair,12Pool,1HatchMuta650%
PoolLair,9Pool,1HatchMuta1050%
PoolLair,9Pool,Unknown1100%
PoolLair,Unknown,1HatchMuta714%
PoolLair,Unknown,Unknown3100%
Unknown,12Pool,1HatchHydra540%
Unknown,12Pool,3HatchMuta250%
Unknown,12Pool,Unknown875%
Unknown,9Pool,1HatchHydra250%
Unknown,9Pool,LingRush1100%
Unknown,Unknown,1HatchHydra3100%
Unknown,Unknown,3HatchMuta367%
Unknown,Unknown,Unknown1844%
35 openings15057%

#8 daqin

openinggameswinsfirstlast
PoolHatch,Overpool,2HatchMuta15065%0149
1 openings15065%
enemygameswins
FFE,Forge,5GateGoon580%
FFE,Forge,Speedlot12159%
FFE,Forge,ZealotArchon2100%
FFE,Gateway,Speedlot1100%
FFE,Nexus,Speedlot2190%
5 openings15065%


McRave never varied against DaQin. Why is that? It doesn’t seem to be due to elitism (that is, always choosing a plan that has shown itself “elite” aka good enough), because McRave tried two plans versus UAlbertaBot and both had a higher win rate.


#9 zzzkbot

openinggameswinsfirstlast
PoolHatch,12Pool,2HatchMuta1662%1127
PoolHatch,12Pool,2HatchSpeedling1050%40105
PoolLair,9Pool,1HatchMuta12488%0149
3 openings15083%
enemygameswins
HatchPool,4Pool,LingRush2100%
HatchPool,9Pool,LingRush580%
HatchPool,Unknown,2HatchHydra2100%
HatchPool,Unknown,2HatchMuta1100%
PoolHatch,9Pool,LingRush10%
PoolHatch,Unknown,Unknown2100%
Unknown,4Pool,LingRush3586%
Unknown,9Pool,LingRush6887%
Unknown,9Pool,Unknown967%
Unknown,Unknown,1HatchHydra3100%
Unknown,Unknown,Unknown2268%
11 openings15083%

#10 ualbertabot

openinggameswinsfirstlast
PoolHatch,Overpool,2HatchMuta9980%0149
PoolHatch,Overpool,2HatchSpeedling5198%3147
2 openings15086%
enemygameswins
1GateCore,0Zealot,4Gate3093%
1GateCore,0Zealot,DT10100%
1GateCore,Unknown,DT6100%
2Gate,Main,ZealotRush16100%
2Rax,Main,MarineRush989%
2Rax,Main,Unknown2241%
HatchPool,Unknown,1HatchHydra6100%
HatchPool,Unknown,2HatchHydra4100%
HatchPool,Unknown,2HatchLing8100%
HatchPool,Unknown,2HatchMuta4100%
HatchPool,Unknown,Unknown4100%
PoolHatch,Unknown,Unknown1100%
RaxCC,8Rax,Unknown838%
RaxFact,Unknown,Unknown6100%
Unknown,4Pool,LingRush9100%
Unknown,9Pool,LingRush1100%
Unknown,Unknown,1HatchHydra1100%
Unknown,Unknown,Unknown5100%
18 openings15086%

#11 willyt

openinggameswinsfirstlast
HatchPool,12Hatch,2HatchMuta10267%0149
PoolHatch,12Pool,2HatchMuta60%6142
PoolHatch,Overpool,2HatchMuta4163%3146
PoolHatch,Overpool,2HatchSpeedling10%44
4 openings15063%
enemygameswins
2Rax,Main,1FactTanks10%
2Rax,Main,Academy3100%
2Rax,Main,MarineRush250%
RaxCC,1RaxFE,1FactTanks9349%
RaxCC,1RaxFE,5FactGoliath10%
RaxCC,1RaxFE,Unknown786%
RaxCC,Unknown,Unknown20100%
Unknown,Unknown,2Fact333%
Unknown,Unknown,Unknown2085%
9 openings15063%

#12 ecgberht

openinggameswinsfirstlast
HatchPool,12Hatch,2HatchMuta8387%0149
HatchPool,12Hatch,2HatchSpeedling2979%12142
PoolHatch,12Pool,2HatchMuta60%11133
PoolHatch,12Pool,2HatchSpeedling3100%3032
PoolHatch,Overpool,2HatchMuta1650%1113
PoolHatch,Overpool,2HatchSpeedling13100%27101
6 openings15079%
enemygameswins
2Rax,Expand,Unknown1883%
2Rax,Main,Academy10%
2Rax,Main,MarineRush10%
2Rax,Main,Unknown1947%
2Rax,Proxy,Unknown786%
RaxCC,1RaxFE,1FactTanks1100%
RaxCC,1RaxFE,Unknown3985%
RaxCC,8Rax,Unknown2090%
RaxCC,Unknown,Unknown2181%
RaxFact,Unknown,2Fact1100%
RaxFact,Unknown,2PortWraith10100%
RaxFact,Unknown,Unknown7100%
Unknown,Unknown,Unknown540%
13 openings15079%


Ecgberht is a tricky opponent. I think McRave tried every plan that was enabled—mostly with success, to be sure.


#13 eggbot

openinggameswinsfirstlast
PoolHatch,Overpool,2HatchMuta10100%18148
PoolHatch,Overpool,2HatchSpeedling14099%0149
2 openings15099%
enemygameswins
2Gate,Proxy,ZealotRush1989%
CannonRush,Unknown,Unknown16100%
Unknown,Unknown,Unknown115100%
3 openings15099%

AIIDE 2020 - McRave’s learning algorithm

I meant to summarize McRave’s learning data today, but to know what to put in the tables I had to understand how the numbers are used. Yesterday I examined McRave’s strategy representation with three elements, like “PoolHatch,Overpool,2HatchMuta”. In the code, the elements are named “build” (like PoolHatch), “opener” (like Overpool) and “transition” (like 2HatchMuta). Today I read the code to see what the numbers in the learning files are and how they are used.

Here’s a sample data file, showing McRave doing well versus Steamhammer. The first two numbers are the overall wins and losses. After that, delimited by dashes, is a section for the first build, followed by a section for the openers of that build and a section for the transitions of the build. Then more sections for the other two builds and their appendages. Each element has an independent count of wins and losses.

86 64
-
HatchPool 0 0
-
12Hatch 0 0
-
2HatchMuta 0 0
2HatchSpeedling 0 0
-
PoolHatch 28 27
-
4Pool 0 0
9Pool 0 0
Overpool 0 0
12Pool 28 27
-
2HatchMuta 16 17
2HatchSpeedling 12 10
3HatchSpeedling 0 0
-
PoolLair 58 37
-
9Pool 58 37
-
1HatchMuta 58 37

The code calls a function to check which triples are allowed and deals with other minor details, but even with the fiddly bits it’s simple: It picks the build with the highest UCB value, then given that build the corresponding opener with the highest UCB value, then given that build and opener the transition with the highest UCB value. Because of how the data file is organized, this can be done in one pass. The code is in the file LearningManager.cpp in the nested function parseLearningFile().

In theory, this three-level hierarchy could speed up learning. For example, you might be able to conclude that PoolHatch is better than PoolLair against some opponent, even if you don’t have enough data to know which PoolHatch opener or transition is best. My intuition is that the hierarchical scheme should on average work better than a flat scheme, but that there will be perverse situations where it does worse. Many of the triples are not allowed, which limits the value of the hierarchy. There should be enough data from this tournament to judge whether the hierarchy brought an advantage; it would be interesting to do the analysis.

Next: OK, now I know what tables to generate. I have to add some features to my script, but soon I should be able to post the summary tables.

AIIDE 2020 - what Dragon learned

Dragon’s learning file format is spare, one line for each game giving strategy name and win or loss, nothing more. Dragon has 7 strategies, and against most opponents tried all of them. Its habit is to keep with a winning strategy, trying others sporadically but generally switching when the current plan starts to fail.

Dragon calls its worker rush “dirty worker rush”. Perhaps we should get it together with Stone so it can learn a nice clean worker rush.


#1 stardust

openinggameswinsfirstlast
1rax fe166%6147
2rax bio186%2143
2rax mech140%0148
bio268%4149
dirty worker rush2313%1114
mass vulture4010%3144
siege expand130%5145
7 openings1507%


As you can see in the “first” column (the first game each strategy was played), Dragon tried all 7 strategies in the first 7 games because they all lost on their first tries. Worker rush turned out to be the most successful plan, as far as that goes, which is very interesting. Mass vultures were the most-played plan despite not having the highest win rate, apparently because the worker rush had a string of losses so that vultures looked better in recent games. (Maybe Dragon figured that Stardust had learned how to deal with the worker rush.)

How did mass vultures have any chance against Stardust’s dragoons? I located a couple of the “mass vulture” wins and watched them. In fact, tanks were the core of Dragon’s army and the vultures acted as buffer. It looked like regular tank-vulture unit mix with regular tank pushes.


#2 purplewave

openinggameswinsfirstlast
1rax fe3664%983
2rax bio743%4101
2rax mech30%19129
bio1650%3100
dirty worker rush30%0102
mass vulture3262%20146
siege expand5058%1128
7 openings14756%


Against PurpleWave, and BananaBrain below, most Dragon strategies worked about equally well. Apparently it has well-balanced play against protoss. Actually I think the explanation may be different: Once the opening is over, Dragon quickly adapts to the enemy, playing against the units it sees. If I guess right, then its goal in the opening is to survive in a good position, and after that Dragon will produce whatever units it needs, so the opening doesn’t much affect the outcome. Obviously the worker rush doesn’t leave much room for adaptation, so it is an exception.

This hypothesis explains why Dragon can do well though it records so little data about each game: The openings often don’t much matter.


#3 bananabrain

openinggameswinsfirstlast
1rax fe1457%35143
2rax bio1145%22139
2rax mech1547%20149
bio3759%0137
dirty worker rush30%23146
mass vulture5661%15144
siege expand1450%1140
7 openings15055%

#5 mcrave

openinggameswinsfirstlast
1rax fe9087%11146
2rax bio1464%4893
2rax mech1567%5182
bio2268%066
dirty worker rush10%4747
mass vulture10%77
siege expand450%812
7 openings14778%


Fast expand works versus McRave...


#6 microwave

openinggameswinsfirstlast
1rax fe30%4144
2rax bio9866%0148
2rax mech520%750
bio1346%2143
dirty worker rush1155%831
mass vulture30%168
siege expand1644%547
7 openings14957%


2 barracks is good against Microwave...


#7 steamhammer

openinggameswinsfirstlast
1rax fe3732%12149
2rax bio60%11108
2rax mech1233%1141
bio911%6106
dirty worker rush3933%10140
mass vulture3037%7104
siege expand1724%0116
7 openings15030%


... but against Steamhammer, again, most strategies look about the same. Watching games, I think Dragon converges on a diverse unit mix fairly quickly after the opening.

I checked out a “mass vulture” game against Steamhammer, and it looked different from the same strategy against Stardust. Dragon made a modest number of vultures and researched spider mines, but added tanks and wraiths and soon the unit mix looked like most Dragon-Steamhammer games.


#8 daqin

openinggameswinsfirstlast
1rax fe4967%14133
2rax bio1030%6132
2rax mech2357%1148
bio520%277
dirty worker rush30%078
mass vulture4553%3137
siege expand1443%776
7 openings14954%

#9 zzzkbot

openinggameswinsfirstlast
1rax fe520%071
2rax bio1040%283
2rax mech3549%2499
bio1338%25113
dirty worker rush40%6102
mass vulture2654%4149
siege expand5753%27148
7 openings15047%


Most curious: Against ZZZKBot, factory openings predominate. Checking the game durations, most games that ZZZKBot won were short, meaning that it played its 4 pool with success. Most games that Dragon won were longer, so either ZZZKBot did not 4 pool or else Dragon was slow to counterattack after surviving.


#10 ualbertabot

openinggameswinsfirstlast
1rax fe3281%94147
2rax bio560%48
2rax mech1369%9105
bio2983%66137
dirty worker rush250%1011
mass vulture6386%13125
siege expand450%03
7 openings14880%

#11 willyt

openinggameswinsfirstlast
1rax fe5100%56148
2rax mech14394%0145
mass vulture1100%5959
3 openings14994%

#12 ecgberht

openinggameswinsfirstlast
1rax fe683%49140
bio14494%0149
2 openings15094%

#13 eggbot

openinggameswinsfirstlast
2rax mech14699%0148
siege expand367%550
2 openings14998%

AIIDE 2020 - what Microwave learned 2

Microwave’s history files include both pre-training games and tournament games. I removed the pre-training games, and these tables show only tournament results. I looked at it both ways and decided this way was more informative. Yesterday’s table includes both prepared data and tournament games.

The enemy strategies listed in the form “HeavyRush -> SafeExpand” are the initially predicted and the later recognized enemy play, as explained by MicroDK in a comment. When they’re the same, the prediction was correct.


#1 stardust

openinggameswinsfirstlast
10Hatch9Pool9gas30%60107
10HatchMain9Pool9Gas10%133133
12HatchMain20%1449
12Pool10%110110
12PoolMain10%121121
12PoolMuta20%46142
2HatchMuta70%2098
3Hatch30%17112
3HatchExpo20%4357
3HatchHydra10%139139
3HatchHydra_BHG10%3838
3HatchLingBust911%24144
3HatchMuta360%0143
3HatchPoolHydra70%27147
3HatchPoolHydraExpo10%114114
4PoolHard10%123123
4PoolSoft20%1670
5HatchPoolHydra180%5149
5Pool20%881
6Pool20%4041
6PoolSpeed40%28146
7Pool10%148148
9Hatch9Pool9Gas10%134134
9HatchMain8Pool8Gas10%117117
9Pool10%1515
9PoolGasHatchSpeed7D10%132132
9PoolGasHatchSpeed8D10%33
9PoolHatchGasSpeed7D10%3434
9PoolHatchGasSpeed8D120%6138
9PoolHydra10%118118
9PoolLurker10%9595
9PoolSpeed10%137137
9PoolSpeedLing10%5858
9PoolSunkHatch20%71105
9PoolSunken10%140140
OverpoolLurker10%7373
OverpoolSpeed10%116116
OverpoolTurtle10%104104
ZvP_10Hatch9Pool20%77109
ZvP_11Hatch10Pool10%8080
ZvP_2HatchHydra20%87129
ZvP_9Hatch9Pool20%127145
ZvZ_Overgas11Pool20%3361
ZvZ_Overgas9Pool20%2128
ZvZ_Overpool11Gas20%6782
ZvZ_Overpool9Gas10%4848
ZvZ_OverpoolTurtle10%122122
47 openings1501%
enemygameswins
HeavyRush -> HeavyRush1271%
HeavyRush -> Unknown210%
SafeExpand -> HeavyRush20%
3 openings1501%


Stardust always plays the same strategy, so it’s no wonder that Microwave was able to predict it. Not that it helped. 3HatchMuta was tried repeatedly because it scored some wins in training.


#2 purplewave

openinggameswinsfirstlast
10Hatch9Pool9gas30%4122
11HatchTurtleHydra30%72139
11HatchTurtleLurker10%5757
12HatchMain10%4444
12PoolMuta1118%20121
2HatchLurkerAllIn10%4747
3HatchHydraBust10%4040
3HatchHydra_BHG10%1616
3HatchMuta933%26149
3HatchMutaExpo10%1717
3HatchPoolHydra10%9494
4HatchPoolHydra10%5656
4PoolHard812%7147
6Pool10%5555
6PoolSpeed1030%32135
7Pool30%3886
7PoolHydraLingRush7D10%108108
8PoolHydraRush8D20%1949
9Hatch9Pool9Gas10%124124
9HatchMain8Pool8Gas825%15128
9Pool20%9102
9PoolGasHatchSpeed7D2850%0142
9PoolHatchGasSpeed7D1765%11141
9PoolHatchGasSpeed8D956%114146
9PoolSpeed425%154
9PoolSpeedLing20%60119
9PoolSunkHatch10%109109
9PoolSunken10%145145
OverpoolSpeed714%23143
OverpoolTurtle617%14123
ZvP_10Hatch9Pool10%6666
ZvP_2HatchHydra10%9292
ZvP_9Hatch9Pool20%130148
ZvZ_Overpool9Gas10%4343
34 openings15029%
enemygameswins
HeavyRush -> HeavyRush10323%
HeavyRush -> NakedExpand250%
HeavyRush -> SafeExpand20%
HeavyRush -> Turtle540%
HeavyRush -> Unknown1631%
NakedExpand -> HeavyRush20%
SafeExpand -> HeavyRush1100%
SafeExpand -> SafeExpand333%
SafeExpand -> Turtle250%
Turtle -> HeavyRush333%
Turtle -> NakedExpand4100%
Turtle -> SafeExpand333%
Turtle -> Turtle475%
13 openings15029%


PurpleWave opened with 2 gate most games. Microwave was able to predict it, but as we saw in UAlbertaBot’s table, the zealots are a Microwave weakness and PurpleWave was able to exploit it. Nevertheless, Microwave was no pushover. The more successful zerg tries were zergling openings, especially variants of the Styx build (9PoolHatchGasSpeed).


#3 bananabrain

openinggameswinsfirstlast
10Hatch9Pool9gas20%420
10HatchMain9Pool9Gas10%55
11HatchTurtleHydra10%8383
12Hatch10%6060
12PoolMain4351%37139
12PoolMuta10%6868
1HatchMuta_Sparkle10%6565
2HatchMuta520%3080
3HatchHydraBust10%109109
3HatchHydra_BHG10%122122
3HatchLingBust633%12130
3HatchMuta10%1111
3HatchPoolHydraExpo10%4949
4HatchBeforeGas10%33
4HatchPoolHydra20%127
4PoolHard633%55145
4PoolSoft10%108108
6Pool10%8181
7Pool10%1313
8Pool10%5353
8PoolHydraRush8D10%3131
9PoolGasHatchSpeed8D1867%70149
9PoolHatchGasSpeed7D10%3434
9PoolHatchGasSpeed8D3253%0146
9PoolSpeed30%25147
9PoolSpeedLing520%7123
9PoolSunkHatch10%142142
Overpool10%127127
OverpoolSpeed30%7992
ZvP_10Hatch9Pool333%29110
ZvP_11Hatch10Pool10%121121
ZvZ_Overgas9Pool10%106106
ZvZ_Overpool11Gas20%21134
33 openings15039%
enemygameswins
HeavyRush -> HeavyRush2232%
HeavyRush -> NakedExpand1486%
HeavyRush -> SafeExpand120%
HeavyRush -> Turtle617%
HeavyRush -> Unknown2532%
NakedExpand -> HeavyRush1443%
NakedExpand -> NakedExpand1479%
NakedExpand -> SafeExpand50%
NakedExpand -> Turtle20%
NakedExpand -> Unknown1233%
SafeExpand -> HeavyRush825%
SafeExpand -> NakedExpand475%
SafeExpand -> SafeExpand425%
SafeExpand -> Turtle20%
SafeExpand -> Unknown540%
Turtle -> NakedExpand1100%
16 openings15039%


BananaBrain is not predictable, and Microwave could not predict its play. Again, the more successful zerg builds were zergling openings.


#4 dragon

openinggameswinsfirstlast
10HatchTurtleHydra10%131131
11HatchTurtleLurker10%7676
12PoolMain10%141141
2HatchMuta6853%1148
3HatchHydraExpo333%122135
3HatchMutaExpo3847%0144
4HatchPoolHydra825%73136
4PoolSoft1828%38147
5HatchPoolHydra560%126149
5PoolSpeed10%118118
7PoolHydraLingRush7D10%7878
9PoolHatchGasSpeed8D10%128128
9PoolSunkHatch10%115115
Overpool10%5353
OverpoolLurker10%107107
OverpoolTurtle10%6262
16 openings15043%
enemygameswins
Factory -> Factory1856%
Factory -> HeavyRush1346%
Factory -> SafeExpand20%
Factory -> Unknown1471%
Factory -> WorkerRush333%
HeavyRush -> Factory1527%
HeavyRush -> HeavyRush2854%
HeavyRush -> NakedExpand10%
HeavyRush -> SafeExpand40%
HeavyRush -> Turtle20%
HeavyRush -> Unknown3126%
NakedExpand -> HeavyRush1100%
SafeExpand -> HeavyRush1100%
SafeExpand -> Unknown250%
WorkerRush -> Factory250%
WorkerRush -> HeavyRush2100%
WorkerRush -> Unknown450%
WorkerRush -> WorkerRush743%
18 openings15043%


Microwave was moderately successful in predicting Dragon’s play, because Dragon tends to stick with a successful strategy as long as it remains successful. Look at that mix of zerg openings! 4 pool, hydra builds, and mutalisk builds.


#5 mcrave

openinggameswinsfirstlast
10Hatch9Pool9gas10%133133
10HatchMain9Pool9Gas425%4272
10HatchTurtleHydra10%8383
11HatchTurtleLurker10%3636
12Hatch10%1515
12Pool1718%4147
12PoolMain20%110139
2HatchLurker10%3232
3Hatch20%113137
3HatchLurker10%9595
3HatchMuta10%148148
3HatchMutaExpo10%106106
3HatchPoolHydra20%92102
3HatchPoolHydraExpo1225%49145
4HatchBeforeGas10%7171
4PoolSoft10%3838
5PoolSpeed10%7373
6PoolSpeed425%128138
7PoolHydraLingRush7D10%134134
8Pool10%6262
9HatchMain8Pool8Gas10%4747
9Pool10%104104
9PoolGasHatchSpeed8D10%1717
9PoolSpeed2846%33146
9PoolSpeedLing10%7676
Overpool10%7979
OverpoolSpeed2722%0149
ZvP_2HatchHydra20%1454
ZvP_9Hatch9Pool2133%1143
ZvZ_Overpool11Gas60%7108
ZvZ_Overpool9Gas50%867
31 openings15023%
enemygameswins
FastRush -> HeavyRush10%
HeavyRush -> NakedExpand367%
HeavyRush -> Unknown10%
NakedExpand -> FastRush1100%
NakedExpand -> HeavyRush333%
NakedExpand -> NakedExpand838%
NakedExpand -> Turtle714%
NakedExpand -> Unknown297%
Turtle -> FastRush10%
Turtle -> HeavyRush1100%
Turtle -> NakedExpand1164%
Turtle -> Turtle2326%
Turtle -> Unknown6116%
13 openings15023%


Microwave tried a lot of stuff versus McRave—three hatch before pool hydralisk opening in ZvZ? And it worked sometimes? I should try to find some of those games.


#7 steamhammer

openinggameswinsfirstlast
10Hatch9Pool9gas944%68142
10HatchMain9Pool9Gas425%101113
10HatchTurtleHydra10%3939
11HatchTurtleMuta10%108108
12HatchMain10%1515
12Pool2520%0144
12PoolMain520%2492
2HatchLurker20%5483
3HatchHydraBust10%104104
3HatchHydraExpo20%6786
3HatchPoolHydra20%7149
4HatchPoolHydra10%3434
5Pool40%596
5PoolSpeed333%94133
7Pool10%3636
7PoolHydraLingRush7D10%8989
9Hatch9Pool9Gas10%106106
9HatchTurtleHydra10%127127
9PoolGasHatchSpeed8D10%4242
9PoolHatch20%1929
9PoolSpeed3155%9138
9PoolSpeedLing10%117117
9PoolSunken70%195
OverpoolSpeed333%47121
ZvP_11Hatch10Pool450%135145
ZvP_2HatchHydra90%384
ZvP_9Hatch9Pool10%1616
ZvZ_Overgas11Pool2050%6147
ZvZ_Overpool11Gas20%7993
ZvZ_Overpool9Gas425%61148
30 openings15029%
enemygameswins
HeavyRush -> HeavyRush250%
HeavyRush -> Turtle40%
Turtle -> FastRush1100%
Turtle -> HeavyRush1457%
Turtle -> NakedExpand1638%
Turtle -> Turtle9623%
Turtle -> Unknown1729%
7 openings15029%


Microwave recognizes turtle builds in most games. That will be Steamhammer’s OverpoolTurtle opening, which builds as many sunkens at it can afford (2) without delaying mutalisks. It’s tough for bots to handle, because the build is safe on the ground while giving nothing away in the air. Microwave mainly preferred speed zergling openings in response, taking advantage of its superior zergling-on-zergling micro (which is not really a difference in micro as much as in engagement skills).


#8 daqin

openinggameswinsfirstlast
1HatchMuta_Sparkle6290%49148
3HatchLingBust1765%1130
3HatchMuta5990%0149
3HatchMutaExpo956%1248
3HatchPoolHydraExpo10%33
9Pool10%2222
OverpoolLurker10%1919
7 openings15083%
enemygameswins
HeavyRush -> HeavyRush4100%
HeavyRush -> SafeExpand3100%
HeavyRush -> Turtle6100%
HeavyRush -> Unknown2100%
NakedExpand -> Turtle367%
SafeExpand -> NakedExpand1100%
SafeExpand -> SafeExpand2100%
SafeExpand -> Turtle5100%
Turtle -> HeavyRush2085%
Turtle -> NakedExpand16100%
Turtle -> Proxy10%
Turtle -> SafeExpand1662%
Turtle -> Turtle5585%
Turtle -> Unknown1662%
14 openings15083%

#9 zzzkbot

openinggameswinsfirstlast
OverpoolSpeed14795%2149
ZvZ_Overgas11Pool30%03
2 openings15093%
enemygameswins
FastRush -> FastRush9694%
FastRush -> Turtle1100%
FastRush -> Unknown5196%
Turtle -> FastRush20%
4 openings15093%


It looks like ZZZKBot played its 4 pool about 2/3 of the time, and the rest of the time did something that Microwave could not recognize. But no matter, Microwave played overpool nearly all the time, fast enough to stop the rush and, in Microwave’s hands, flexible enough to counter ZZZKBot’s other builds.


#10 ualbertabot

openinggameswinsfirstlast
1HatchMuta_Sparkle20%123143
3HatchHydraExpo10%9191
4PoolSoft5175%0147
5Pool757%44133
5PoolSpeed2268%3146
7PoolHydraLingRush7D10%7979
7PoolHydraRush7D10%5050
8PoolHydraRush8D1050%3485
9PoolGasHatchSpeed8D250%2728
9PoolSunkHatch956%113135
OverpoolSunken1553%102148
ZvP_10Hatch9Pool2756%21120
ZvZ_Overpool11Gas10%8282
13 openings14961%
enemygameswins
Factory -> FastRush250%
Factory -> HeavyRush20%
Factory -> NakedExpand1100%
Factory -> Unknown20%
FastRush -> Factory3100%
FastRush -> FastRush475%
FastRush -> HeavyRush967%
FastRush -> NakedExpand2100%
FastRush -> Unknown367%
HeavyRush -> Factory2100%
HeavyRush -> FastRush2264%
HeavyRush -> HeavyRush4941%
HeavyRush -> NakedExpand9100%
HeavyRush -> Unknown2268%
NakedExpand -> Factory4100%
NakedExpand -> FastRush250%
NakedExpand -> HeavyRush540%
NakedExpand -> NakedExpand3100%
NakedExpand -> Unknown2100%
Unknown -> HeavyRush1100%
20 openings14961%


Compare this to UAlbertaBot’s table. Microwave did not do perfectly against any UAlbertaBot race, and suffered badly against the zealot rush. Microwave had neither a universal build that works against all UAlbertaBot plays (which is how Steamhammer succeeded against UAlbertaBot), nor was it able to adapt its build well enough to counter what it saw (compare ZZZKBot above). Still, it found that 4 pool and 5 pool were not bad! Fight fire with fire.


#11 willyt

openinggameswinsfirstlast
10Hatch9Pool9gas1573%1143
11HatchTurtleLurker617%2674
11HatchTurtleMuta425%2573
12PoolMain333%121149
12PoolMuta2100%6480
2HatchMuta_Sparkle10%3636
3HatchExpo10%7777
3HatchHydra10%5858
3HatchLurker20%57141
3HatchMuta475%76146
3HatchMutaExpo850%56145
9Hatch9Pool9Gas1377%123144
9PoolExpo4078%9147
9PoolGasHatchSpeed8D4100%53142
9PoolHydra10%9191
9PoolLurker1040%5115
9PoolSpeed2181%0148
9PoolSunkHatch425%343
9PoolSunken978%51103
ZvZ_Overgas11Pool10%8484
20 openings15065%
enemygameswins
Factory -> Factory1100%
Factory -> NakedExpand4100%
Factory -> SafeExpand10%
Factory -> Unknown4100%
HeavyRush -> Factory250%
HeavyRush -> HeavyRush4100%
HeavyRush -> NakedExpand5100%
HeavyRush -> SafeExpand425%
HeavyRush -> Unknown250%
NakedExpand -> Factory862%
NakedExpand -> HeavyRush1050%
NakedExpand -> NakedExpand43100%
NakedExpand -> SafeExpand1346%
NakedExpand -> Unknown3123%
SafeExpand -> Factory250%
SafeExpand -> NakedExpand7100%
SafeExpand -> SafeExpand633%
SafeExpand -> Unknown30%
18 openings15065%

#12 ecgberht

openinggameswinsfirstlast
2HatchHydra14788%0149
9PoolLurker367%525
2 openings15088%
enemygameswins
Factory -> Factory1100%
Factory -> NakedExpand8100%
Factory -> SafeExpand10%
Factory -> Unknown6100%
FastRush -> Factory1100%
FastRush -> Unknown2100%
HeavyRush -> Factory4100%
HeavyRush -> FastRush250%
HeavyRush -> HeavyRush1100%
HeavyRush -> NakedExpand4100%
HeavyRush -> SafeExpand1100%
HeavyRush -> Unknown1100%
NakedExpand -> Factory13100%
NakedExpand -> FastRush475%
NakedExpand -> HeavyRush1688%
NakedExpand -> NakedExpand35100%
NakedExpand -> SafeExpand250%
NakedExpand -> Unknown4573%
SafeExpand -> Factory1100%
SafeExpand -> HeavyRush1100%
SafeExpand -> Unknown1100%
21 openings15088%

#13 eggbot

openinggameswinsfirstlast
9Pool150100%0149
1 openings150100%
enemygameswins
Proxy -> Turtle2100%
Turtle -> Proxy15100%
Turtle -> Turtle84100%
Turtle -> Unknown49100%
4 openings150100%


Microwave did not understand how to recognize EggBot’s cannon play, but it knew from training how to win.

AIIDE 2020 - what Microwave learned 1

I’ll cover Microwave over two days because it writes two files for each opponent, a “results” file giving wins/losses for each strategy and a “history” file of more detailed game records. Each summary is bulky in itself, and I don’t want to pile them up. The history file has all the information in the results file and more. In fact, a quick look at Microwave’s code says that it no longer reads the results file at all, but reconstructs its contents from the history file each game. But different presentations of the data have value in themselves; this view makes it easy to read across the columns and see where a given opening was effective.

Today is the results file, the table of strategies versus each opponent. Wow, that’s a lot of opening builds! I count 73, less than half as many as Steamhammer but still too large a number to explore in a tournament of 150 rounds. I think only bots with combinatorial strategies have more. The numbers include not only games played during the tournament, but also Microwave’s prepared data for each opponent, so they add up to more than 150 games versus each opponent. You can compare the overall win rates per opponent to see which ones Microwave was more successful against in training as opposed to in the tournament—it may indicate whether the opponent was updated for the tournament and became stronger than Microwave expected. In general, for stronger opponents training data overestimated Microwave’s success, while for weaker opponents it was the opposite (that is, the training uncovered mistakes that Microwave could then avoid).

total#1 stardust#2 purplewave#3 bananabrain#4 dragon#5 mcrave#7 steamhammer#8 daqin#9 zzzkbot#10 ualbertabot#11 willyt#12 ecgberht#13 eggbot
10Hatch9Pool9gas28-48 37%0-4 0%0-12 0%3-19 14%-0-1 0%4-5 44%---21-7 75%--
10HatchMain9Pool9Gas2-8 20%0-1 0%-0-1 0%-1-3 25%1-3 25%------
10HatchTurtleHydra0-3 0%---0-1 0%0-1 0%0-1 0%------
11HatchTurtleHydra0-11 0%-0-10 0%0-1 0%---------
11HatchTurtleLurker11-17 39%-0-1 0%-0-2 0%0-1 0%0-1 0%---11-12 48%--
11HatchTurtleMuta4-15 21%-0-7 0%0-2 0%--0-1 0%---4-5 44%--
12Hatch0-3 0%--0-2 0%-0-1 0%-------
12HatchMain0-4 0%0-2 0%0-1 0%---0-1 0%------
12Pool35-51 41%0-1 0%---9-17 35%26-33 44%------
12PoolMain25-34 42%0-1 0%-22-21 51%0-1 0%0-2 0%2-7 22%---1-2 33%--
12PoolMuta7-20 26%0-2 0%2-9 18%0-1 0%------5-8 38%--
1HatchMuta_Sparkle56-9 86%--0-1 0%---56-6 90%-0-2 0%---
2HatchHydra161-24 87%0-1 0%0-2 0%----0-1 0%---161-20 89%-
2HatchLurker0-8 0%0-1 0%0-1 0%0-2 0%-0-1 0%0-2 0%----0-1 0%-
2HatchLurkerAllIn0-2 0%0-1 0%0-1 0%----------
2HatchMuta74-59 56%1-14 7%0-1 0%3-9 25%60-33 65%0-1 0%------10-1 91%
2HatchMuta_Sparkle0-1 0%---------0-1 0%--
3Hatch0-5 0%0-3 0%---0-2 0%-------
3HatchExpo0-3 0%0-2 0%--------0-1 0%--
3HatchHydra0-2 0%0-1 0%--------0-1 0%--
3HatchHydraBust0-14 0%0-7 0%0-2 0%0-2 0%-0-1 0%0-1 0%0-1 0%-----
3HatchHydraExpo1-5 17%---1-2 33%-0-2 0%--0-1 0%---
3HatchHydra_BHG0-4 0%0-1 0%0-1 0%0-1 0%-0-1 0%-------
3HatchLingBust36-41 47%2-20 9%-2-6 25%---32-15 68%-----
3HatchLurker0-4 0%----0-1 0%----0-3 0%--
3HatchMuta90-106 46%7-58 11%3-9 25%3-19 14%-0-1 0%-72-14 84%--5-5 50%--
3HatchMutaExpo48-64 43%0-1 0%1-25 4%0-1 0%32-22 59%0-1 0%-9-7 56%--6-7 46%--
3HatchPoolHydra1-24 4%1-15 6%0-2 0%--0-2 0%0-2 0%0-3 0%-----
3HatchPoolHydraExpo3-12 20%0-1 0%-0-1 0%-3-9 25%-0-1 0%-----
4HatchBeforeGas0-10 0%0-5 0%0-1 0%0-3 0%-0-1 0%-------
4HatchPoolHydra4-25 14%0-2 0%0-1 0%2-15 12%2-6 25%-0-1 0%------
4PoolHard3-13 19%0-1 0%1-7 12%2-4 33%------0-1 0%--
4PoolSoft61-44 58%0-3 0%0-2 0%0-2 0%7-14 33%0-3 0%---54-17 76%0-3 0%--
5HatchPoolHydra5-28 15%2-26 7%--3-2 60%--------
5Pool7-17 29%0-2 0%---0-1 0%3-10 23%0-1 0%-4-3 57%---
5PoolSpeed29-18 62%---0-1 0%0-1 0%1-2 33%--28-14 67%---
6Pool0-6 0%0-2 0%0-1 0%0-2 0%--0-1 0%------
6PoolSpeed4-14 22%0-4 0%3-7 30%--1-3 25%-------
7Pool0-6 0%0-1 0%0-3 0%0-1 0%--0-1 0%------
7PoolHydraLingRush7D0-5 0%-0-1 0%-0-1 0%0-1 0%0-1 0%--0-1 0%---
7PoolHydraRush7D0-2 0%------0-1 0%-0-1 0%---
8Pool0-2 0%--0-1 0%-0-1 0%-------
8PoolHydraRush8D5-8 38%-0-2 0%0-1 0%-----5-5 50%---
9Hatch9Pool9Gas10-12 45%0-1 0%0-6 0%0-1 0%--0-1 0%---10-3 77%--
9HatchMain8Pool8Gas2-8 20%0-1 0%2-6 25%--0-1 0%-------
9HatchTurtleHydra0-3 0%0-1 0%0-1 0%---0-1 0%------
9Pool183-11 94%0-4 0%0-3 0%--0-1 0%-0-1 0%--0-1 0%0-1 0%183-0 100%
9PoolExpo31-9 78%---------31-9 78%--
9PoolGasHatchSpeed7D18-19 49%0-1 0%18-18 50%----------
9PoolGasHatchSpeed8D21-29 42%0-4 0%-12-6 67%-0-2 0%0-1 0%0-3 0%-1-1 50%8-12 40%--
9PoolHatch0-3 0%-----0-2 0%-0-1 0%----
9PoolHatchGasSpeed7D11-8 58%0-1 0%11-6 65%0-1 0%---------
9PoolHatchGasSpeed8D36-50 42%1-16 6%5-6 45%30-24 56%0-1 0%0-2 0%0-1 0%------
9PoolHydra0-3 0%0-1 0%-----0-1 0%--0-1 0%--
9PoolLurker15-14 52%0-2 0%--------6-8 43%9-4 69%-
9PoolSpeed68-71 49%0-3 0%1-4 20%0-4 0%-13-16 45%24-21 53%0-2 0%--30-21 59%--
9PoolSpeedLing2-22 8%0-3 0%0-3 0%2-7 22%-0-3 0%0-2 0%0-3 0%--0-1 0%--
9PoolSunkHatch6-12 33%0-2 0%0-1 0%0-1 0%0-1 0%----5-4 56%1-3 25%--
9PoolSunken9-15 38%0-1 0%0-1 0%--0-1 0%2-10 17%---7-2 78%--
Overpool0-4 0%0-1 0%-0-1 0%0-1 0%0-1 0%-------
OverpoolLurker0-4 0%0-1 0%--0-1 0%--0-1 0%--0-1 0%--
OverpoolSpeed187-60 76%0-1 0%1-6 14%0-3 0%-27-37 42%1-3 25%-158-9 95%-0-1 0%--
OverpoolSunken8-7 53%--------8-7 53%---
OverpoolTurtle1-13 7%0-1 0%1-11 8%-0-1 0%--------
ZvP_10Hatch9Pool17-30 36%0-5 0%0-8 0%2-5 29%-----15-12 56%---
ZvP_11Hatch10Pool2-12 14%0-2 0%0-7 0%0-1 0%--2-2 50%------
ZvP_2HatchHydra2-28 7%0-3 0%0-9 0%0-4 0%-0-2 0%2-10 17%------
ZvP_9Hatch9Pool13-34 28%0-2 0%0-10 0%0-1 0%-13-18 42%0-1 0%0-2 0%-----
ZvZ_Overgas11Pool30-24 56%0-3 0%----13-15 46%-17-5 77%-0-1 0%--
ZvZ_Overgas9Pool0-5 0%0-2 0%-0-1 0%--0-2 0%------
ZvZ_Overpool11Gas5-21 19%0-2 0%-0-2 0%-5-13 28%0-3 0%--0-1 0%---
ZvZ_Overpool9Gas2-13 13%0-2 0%0-1 0%--1-7 12%1-3 25%------
ZvZ_OverpoolTurtle0-1 0%0-1 0%-----------
total-  51%14-250  5%49-216  18%83-180  32%105-90  54%73-161  31%82-153  35%169-63  73%175-15  92%120-69  63%146-120  55%170-26  87%193-1  99%

Microwave explored widely against top opponents, and concentrated efficiently on a few winning openings against weaker ones. On the other hand, although there is a flag in the configuration file named PlayGoodStrategiesFirst (turned on), Microwave seems to have little idea which strategies are most likely to work. Versus DaQin, 1 hatch mutalisk and 3 hatch mutalisk are successful, but the most natural 2 hatch muta is never tried. Of course that’s a widespread weakness among bots.

The 3 hatch muta strategies were relatively successful overall. That’s interesting.

AIIDE 2020 - what UAlbertaBot learned

Though UAlbertaBot has been surpassed over the years and become a low-end bot, we can still gain insight from its experience. The table summarizes the contents of its learning files. Last year this table had the bots down the left and the strategies across the top, but this year I turned it on its side—I am looking ahead to the table for Microwave, which has many strategies.

Some of the numbers here are slightly different from those in the official crosstable, because of games where UAlbertaBot did not record a result (no doubt due to crashes).

total#1 stardust#2 purplewave#3 bananabrain#4 dragon#5 mcrave#6 microwave#7 steamhammer#8 daqin#9 zzzkbot#11 willyt#12 ecgberht#13 eggbot
4RaxMarines33-120 22%2-18 10%1-6 14%0-13 0%1-8 11%7-12 37%3-14 18%0-9 0%0-6 0%0-10 0%17-19 47%2-5 29%-
MarineRush66-140 32%0-10 0%0-5 0%1-18 5%6-16 27%8-12 40%4-12 25%4-23 15%0-5 0%0-10 0%0-5 0%6-9 40%37-15 71%
TankPush17-105 14%0-10 0%5-18 22%0-12 0%0-5 0%0-3 0%0-5 0%0-9 0%8-23 26%0-9 0%4-8 33%0-3 0%-
VultureRush17-82 17%0-10 0%0-5 0%0-12 0%0-5 0%0-3 0%0-5 0%0-9 0%0-5 0%0-9 0%0-3 0%17-16 52%-
DTRush19-119 14%1-22 4%0-13 0%1-13 7%11-26 30%0-16 0%-0-14 0%6-13 32%-0-2 0%--
DragoonRush13-117 10%0-16 0%0-13 0%0-9 0%0-12 0%2-28 7%-1-20 5%10-17 37%-0-2 0%--
ZealotRush185-170 52%0-15 0%2-24 8%4-20 17%0-12 0%0-16 0%37-13 74%1-20 5%0-5 0%48-11 81%25-18 58%28-15 65%40-1 98%
2HatchHydra9-83 10%0-12 0%2-21 9%1-6 14%6-13 32%0-11 0%0-6 0%0-8 0%0-2 0%0-1 0%0-3 0%--
3HatchMuta0-63 0%0-12 0%0-12 0%0-4 0%0-4 0%0-11 0%0-6 0%0-8 0%0-2 0%0-1 0%0-3 0%--
3HatchScourge0-59 0%0-11 0%0-11 0%0-4 0%0-4 0%0-10 0%0-6 0%0-7 0%0-2 0%0-1 0%0-3 0%--
ZerglingRush195-168 54%0-11 0%0-11 0%11-21 34%5-11 31%0-10 0%14-23 38%1-11 8%22-23 49%29-18 62%21-17 55%39-10 80%53-2 96%
total-  31%3-147  2%10-139  7%18-132  12%29-116  20%17-132  11%58-90  39%7-138  5%46-103  31%77-70  52%67-83  45%92-58  61%130-18  88%

Random UAlbertaBot starts off with its default strategies of marine rush, zealot rush, or zergling rush, and tries alternatives only if the strategy scores poorly. The table shows that the default strategies chosen years ago are still the best choices. The zealot rush even scored well against #6 Microwave. Also constant over the years is that the 3 hatch scourge build, which was designed to counter the carrier bot XIMP, has no other use; UAlbertaBot would have done better without it.

It’s curious that UAlbertaBot’s overall weakest race is terran, but that its terran scored best against many stronger opponents: Terran was UAlbertaBot’s happiest roll versus #7 Steamhammer, #5 McRave, #2 PurpleWave, and #1 Stardust. But these stronger opponents allowed few wins. #1 Stardust (2%), #7 Steamhammer (5%), and #2 PurpleWave (7%) shut down UAlbertaBot hard.

If your bot is ranked above UAlbertaBot, then pink or blue boxes suggest weaknesses that you might benefit from working on. If a weaker bot beats you this way, presumably a stronger one can too. UAlbertaBot benefits from its random race and the big differences between its strategies, so maybe something went wrong in your scouting or reactions. #6 Microwave had trouble with zealots, #5 McRave had trouble with marines, and #4 Dragon had some trouble with 4 different rushes.

AIIDE 2020 - what bots wrote data

I looked in each bot’s final write directory to see what files it wrote, if any, and in its AI directory to see if it had prepared data for any opponents. Standard disclaimers apply: A bot does not necessarily use the data it writes. Preparation for specific opponents is not necessarily in the form of data in the AI directory, it might be in code.

#botinfo
1StardustNothing. Stardust relies on its great execution.
2PurpleWaveThe learning files have a sequence of PurpleWave’s strategy choices followed by a sequence of “fingerprinted” enemy strategies. (PurpleWave also has specific preparation for its opponents, but that’s in code rather than data.) There are also debug logs that show some decisions, but are probably only for the author.
3BananaBrainThe learning files look just like last year’s: One file for each opponent in the form of brief records of results. Each record consists of date+time, map, BananaBrain’s strategy (“PvZ_9/9proxygate”), the opponent’s recognized strategy (“Z_9pool”), a floating point number which we were told last year is the game duration in minutes, and the game result. Pre-learned data for 6 opponents, with the largest file by far for Stardust. Maybe if you have pegged your opponent as having a narrow range of adaptation, you don’t have to leave room for surprises.
4DragonVery simple game records with strategy and game result, like "siege expand" won.
5McRaveTwo files for each opponent, named like ZvU UAlbertaBot.txt and ZvU UAlbertaBot Info.txt. The first file is short and counts wins and losses overall and for each of McRave’s strategies. The info file (now working correctly, unlike last year) has detailed game records with aspects of the opponent’s strategy (2Gate,Main,ZealotRush), McRave’s strategy at 3 levels of abstraction (PoolHatch,Overpool,2HatchMuta), timings, and unit counts. I want to look more closely at the game records and see how they are used (maybe they are only logs for the author).
6MicrowaveResult and history files for each opponent that look similar to last year’s. The result files count wins and losses for each Microwave strategy, and no longer limit the counts to 10—apparently Microwave no longer deliberately forgets history. The history files have a one-line record of data about each game and look the same as last year. Also pre-learned history files for all 12 opponents.
7SteamhammerSteamhammer’s learning file format is documented here.
8DaQinCarried over from last year. Learning files straight from its parent Locutus (very similar to the old format Steamhammer files). There is no visible pre-learned data (in a quick check I also found no opponent-specific code).
9ZZZKBotLearning files for each opponent that look the same as last year, with detailed but hard-to-interpret information about each game.
10UAlbertaBotCarried over from past years. For each opponent, a file listing strategies with win and loss counts for each.
11WillyTA single log file with 150 lines apparently giving data for 150 games against various opponents. Each line looks like 20201009,Ecgberht,T,01,0. The items look like date, opponent, opponent race, a number 01 02 or 03, and win/loss. There were 150 rounds in the tournament, so maybe this is a log of one game per round—the dates seem to back that up, but if so, how is the single game chosen? Is it the last one played? This is either broken, or else it is doing something I can’t fathom.
12EcgberhtTwo files for each opponent, named like Dragon_Terran.json and Dragon_Terran-History.json. The plain file counts wins and losses of each of Ecgberht’s strategies separately for each map size (number of starting locations, 2 3 or 4). (The map size breakdown is similar to AIUR’s.) There is also an overall win/loss count, plus flags named naughty and defendHarass. Of all bots in the tournament, only ZZZKBot is flagged naughty, so maybe it means the opponent likes fast rushes. defendHarass tells whether the opponent defends its workers if Ecgberht’s scouting SCV attacks them (that way it can exploit weak opponents without risking its SCV against prepared ones). The history file is a list of game records, giving opponent name, opponent race, game outcome, Ecgberht’s strategy, the map, and the opponent’s recognized strategy (which is often Unknown).
13EggBotNothing. EggBot is the only entrant other than Stardust to record no data.

In recent years, nearly all top bots have relied on opening learning to adapt to their opponents. The strongest bot without learning was Iron, which came in #1 in AIIDE 2016 and slipped down the ranks until it fell to #8 in AIIDE 2019, scoring under 50%. Stardust is the only high finisher since then to get by without. Stardust plays with a restricted set of units, only zealots and dragoons with observers as needed. On the one hand, that shows the value of specializing and becoming extremely skilled at the most important aspects of the game (the opposite of Steamhammer’s development strategy). On the other hand, it points out how much headroom all bots have to improve.