archive by month
Skip to content

AIIDE 2023 - what McRave learned

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

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


#1 bananabrain

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

#2 stardust

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

#3 purplewave

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

#4 steamhammer

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

#6 microwave

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

#7 dragon

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

#8 ualbertabot

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

#9 infestedartosis

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

AIIDE 2021 - McRave versus DaQin

Blue is good for McRave, red is good for DaQin.

mcrave strategies versus daqin strategies

overallForgeExpand5GateGoonForgeExpandSpeedlots
overall122/157 78%3/3 100%119/154 77%
HatchPool,12Hatch,2HatchMuta102/123 83%3/3 100%99/120 82%
PoolHatch,9Pool,2HatchMuta1/3 33%-1/3 33%
PoolHatch,9Pool,3HatchMuta1/2 50%-1/2 50%
PoolHatch,9Pool,6HatchHydra0/2 0%-0/2 0%
PoolHatch,Overpool,2HatchMuta18/23 78%-18/23 78%
PoolHatch,Overpool,3HatchMuta0/3 0%-0/3 0%
PoolHatch,Overpool,6HatchHydra0/1 0%-0/1 0%

Move along, nothing to see here folks.

mcrave as seen by daqin

mcrave played#daqin recognized
HatchPool,12Hatch,2HatchMuta12393 Not fast rush | 18 Unknown | 12 Heavy rush
PoolHatch,9Pool,2HatchMuta31 Not fast rush | 1 Unknown | 1 Fast rush
PoolHatch,9Pool,3HatchMuta22 Fast rush
PoolHatch,9Pool,6HatchHydra21 Unknown | 1 Not fast rush
PoolHatch,Overpool,2HatchMuta2322 Not fast rush | 1 Heavy rush
PoolHatch,Overpool,3HatchMuta32 Not fast rush | 1 Heavy rush
PoolHatch,Overpool,6HatchHydra11 Not fast rush

Apparently 9 pool is sometimes a fast rush and sometimes a not fast rush.

daqin as seen by mcrave

daqin played#mcrave recognized
ForgeExpand5GateGoon33 FFE,Forge,5GateGoon
ForgeExpandSpeedlots15488 FFE,Forge,Speedlot | 24 FFE,Forge,5GateGoon | 23 FFE,Gateway,Speedlot | 7 FFE,Forge,ZealotArchon | 6 FFE,Nexus,Speedlot | 2 FFE,Nexus,5GateGoon | 2 FFE,Forge,Unknown | 2 FFE,Gateway,5GateGoon

There are those dragoons again, even when DaQin believes it is making zealots. I imagine that something in McRave’s recognizer is approximate. It only matters if McRave reacts to its own wrong recognition, though.

AIIDE 2021 - McRave versus WillyT

These tables tell more about McRave than about WillyT. Blue is good for McRave, red is good for WillyT.

mcrave strategies versus willyt strategies

overall1 rush2 fe bio-mech3 fe mech4 tonk
overall48/157 31%16/41 39%9/54 17%12/47 26%11/15 73%
HatchPool,12Hatch,2HatchMuta29/89 33%10/20 50%6/32 19%10/33 30%3/4 75%
PoolHatch,12Pool,3HatchMuta19/55 35%6/18 33%3/16 19%2/12 17%8/9 89%
PoolHatch,Overpool,2HatchMuta0/13 0%0/3 0%0/6 0%0/2 0%0/2 0%

I find it strange that McRave’s overpool into 2 hatch muta failed in every case. Is it a reaction build that turned out to be a misreaction to what WillyT does? Probably not, it was tried against every WillyT opener. McRave’s other 2 builds were about equal, though the table shows that they were best in different cases. Switching between them was likely correct. The ratio that they were tried in also looks good to me: You want a ratio that leads to the final results being about equal.

WillyT would have done better without 15 tonk builds.

willyt as seen by mcrave

willyt played#mcrave recognized
1 rush4140 Unknown,Unknown,Unknown | 1 RaxCC,1RaxFE,Unknown
2 fe bio-mech5423 RaxCC,1RaxFE,Unknown | 20 RaxCC,1RaxFE,1FactTanks | 6 Unknown,Unknown,Unknown | 5 RaxCC,1RaxFE,5FactGoliath
3 fe mech4733 RaxCC,1RaxFE,5FactGoliath | 8 Unknown,Unknown,Unknown | 6 RaxCC,1RaxFE,Unknown
4 tonk1513 Unknown,Unknown,Unknown | 2 RaxFact,Unknown,5FactGoliath

Both the rush and the tonk build usually denied scouting, which seems like it should have been important because the builds call for opposite reactions. Yet McRave defeated the tanks and had less trouble with the rush than with WillyT’s expansion builds. RaxCC and 1RaxFE seem simple enough to recognize, and were. The followup seems harder to recognize, and was. I doubt that so many were actually 5FactGoliath.

AIIDE 2021 - McRave versus Dragon

McRave recorded all 157 games versus Dragon, but Dragon recorded only 155. I was able to align the files anyway, because Dragon’s missing games were clearly due to Dragon’s 2 crashes. I manually removed the corresponding games from McRave’s records. Then there was one more fix: The game of round 97 that McRave and Dragon both recorded that they had lost. Officially, McRave had timed out and Dragon won, so I manually altered Dragon’s game record to give it the win.

Dragon doesn’t record anything but win/loss and its own strategy, so it has nothing to say about how McRave played.

mcrave strategies versus dragon strategies

overall1rax fe2rax bio2rax mechbiodirty worker rushmass vulturesiege expand
overall51/155 33%4/20 20%14/40 35%6/17 35%9/24 38%2/2 100%3/6 50%13/46 28%
HatchPool,12Hatch,2HatchMuta21/66 32%0/7 0%5/14 36%3/5 60%2/11 18%-2/2 100%9/27 33%
HatchPool,12Hatch,2HatchSpeedling0/1 0%--0/1 0%----
PoolHatch,12Pool,2HatchMuta1/9 11%0/2 0%0/2 0%1/2 50%---0/3 0%
PoolHatch,12Pool,3HatchMuta14/36 39%1/3 33%6/14 43%1/2 50%6/11 55%-0/3 0%0/3 0%
PoolHatch,Overpool,2HatchMuta9/26 35%3/4 75%1/7 14%0/4 0%1/2 50%--4/9 44%
PoolHatch,Overpool,2HatchSpeedling2/2 100%----2/2 100%--
PoolHatch,Overpool,3HatchMuta4/15 27%0/4 0%2/3 67%1/3 33%--1/1 100%0/4 0%

Another reaction build: PoolHatch,Overpool,2HatchSpeedling was a reaction to Dragon’s worker rush, and taught Dragon not to do that.

dragon as seen by mcrave

dragon played#mcrave recognized
1rax fe2012 Unknown,Unknown,Unknown | 5 RaxCC,1RaxFE,5FactGoliath | 3 RaxCC,1RaxFE,Unknown
2rax bio4031 Unknown,Unknown,Unknown | 6 2Rax,Main,Unknown | 1 2Rax,Main,1FactTanks | 1 RaxCC,1RaxFE,Unknown | 1 2Rax,Expand,Unknown
2rax mech1714 Unknown,Unknown,Unknown | 2 2Rax,Main,Unknown | 1 2Rax,Proxy,Unknown
bio2411 RaxCC,1RaxFE,5FactGoliath | 7 Unknown,Unknown,Unknown | 3 RaxCC,1RaxFE,1FactTanks | 3 RaxCC,1RaxFE,Unknown
dirty worker rush22 Unknown,Unknown,WorkerRush
mass vulture65 Unknown,Unknown,Unknown | 1 RaxFact,Unknown,2PortWraith
siege expand4618 Unknown,Unknown,Unknown | 13 RaxFact,Unknown,5FactGoliath | 9 RaxCC,1RaxFE,5FactGoliath | 4 RaxCC,1RaxFE,Unknown | 2 RaxFact,Unknown,Unknown

Not much to see here; we already knew that McRave had trouble scouting Dragon. Much of what it did recognize was correct, at least. Though what McRave saw as a proxy, Dragon called “2rax mech”. The game is game 2767 from round 61 (replay file) on Heartbreak Ridge. Nothing in it resembles a proxy; it must have been a McRave bug.

AIIDE 2021 - McRave versus BananaBrain

McRave and BananaBrain both recorded all 157 of their mutual games. I chose to put McRave down the left side of the strategy cross, because its longer strategy names make the table hard to read otherwise. I also trimmed off the “PvZ_” and “Z_” prefixes from BananaBrain’s strategy names for compactness.

Blue is good for McRave, red is good for BananaBrain.

mcrave strategies versus bananabrain strategies

overall10/12gate1basespeedzeal2basespeedzeal4gate2archon5gategoon9/9gate9/9proxygatebisuneobisusairdtsairgoonsairreaverstove
overall28/157 18%8/54 15%1/3 33%1/5 20%1/1 100%1/1 100%1/1 100%2/8 25%1/5 20%1/4 25%1/3 33%2/12 17%1/1 100%7/59 12%
HatchPool,12Hatch,2HatchMuta16/86 19%3/28 11%1/1 100%1/3 33%1/1 100%1/1 100%1/1 100%0/1 0%-1/4 25%0/2 0%2/10 20%1/1 100%4/33 12%
HatchPool,12Hatch,2HatchSpeedling0/1 0%------0/1 0%------
HatchPool,9Pool,2HatchSpeedling2/2 100%------2/2 100%------
PoolHatch,9Pool,2HatchMuta3/15 20%0/2 0%------0/3 0%----3/10 30%
PoolHatch,9Pool,2HatchSpeedling0/3 0%------0/3 0%------
PoolHatch,9Pool,3HatchMuta4/19 21%4/13 31%-0/1 0%----0/1 0%----0/4 0%
PoolHatch,9Pool,6HatchHydra0/2 0%----------0/1 0%-0/1 0%
PoolHatch,Overpool,2HatchMuta0/4 0%0/2 0%0/1 0%--------0/1 0%--
PoolHatch,Overpool,2HatchSpeedling0/1 0%------0/1 0%------
PoolHatch,Overpool,3HatchMuta3/14 21%1/9 11%0/1 0%-----1/1 100%-1/1 100%--0/2 0%
PoolHatch,Overpool,6HatchHydra0/10 0%--0/1 0%---------0/9 0%

There we have the explanation for the 2 lonely HatchPool,9Pool,2HatchSpeedling games: The strategy was a successful reaction to proxy gates. I read it as meaning that the build is 9 hatch, 9 pool, and gas soon for the zergling speed upgrade.

BananaBrain split its effort between 10-12 gate and the Stove (a scout into dark templar build), very different builds. McRave answered both mostly with 12 hatch into 2 hatch muta. A hydralisk opening would have been a more natural way to counter both, but play what you’re good at.

mcrave as seen by bananabrain

mcrave played#bananabrain recognized
HatchPool,12Hatch,2HatchMuta8684 12hatch | 2 unknown
HatchPool,12Hatch,2HatchSpeedling11 unknown
HatchPool,9Pool,2HatchSpeedling22 12pool
PoolHatch,9Pool,2HatchMuta158 9pool | 7 overpool
PoolHatch,9Pool,2HatchSpeedling32 overpool | 1 9pool
PoolHatch,9Pool,3HatchMuta1913 9pool | 6 overpool
PoolHatch,9Pool,6HatchHydra21 overpool | 1 9pool
PoolHatch,Overpool,2HatchMuta44 overpool
PoolHatch,Overpool,2HatchSpeedling11 overpool
PoolHatch,Overpool,3HatchMuta1414 overpool
PoolHatch,Overpool,6HatchHydra1010 overpool

BananaBrain was accurate in recognizing 12 hatch and overpool, but had trouble with 9 pool. It did not try to narrow the build down any further than that.

bananabrain as seen by mcrave

bananabrain played#mcrave recognized
10/12gate5431 2Gate,10/12,Corsair | 8 2Gate,10/12,DT | 4 2Gate,10/12,ZealotRush | 3 2Gate,10/17,Corsair | 2 2Gate,Unknown,Corsair | 2 2Gate,9/9,DT | 2 2Gate,9/9,Corsair | 1 2Gate,10/17,4Gate | 1 2Gate,10/17,DT
1basespeedzeal32 1GateCore,2Zealot,DT | 1 1GateCore,2Zealot,Corsair
2basespeedzeal53 FFE,Forge,Speedlot | 1 FFE,Nexus,Speedlot | 1 FFE,Nexus,5GateGoon
4gate2archon11 FFE,Forge,5GateGoon
5gategoon11 FFE,Nexus,5GateGoon
9/9gate11 2Gate,9/9,Corsair
9/9proxygate87 2Gate,Proxy,ZealotRush | 1 2Gate,9/9,Unknown
bisu52 FFE,Forge,Unknown | 2 FFE,Forge,5GateGoon | 1 FFE,Nexus,Unknown
neobisu44 FFE,Forge,Speedlot
sairdt33 1GateCore,2Zealot,Corsair
sairgoon126 FFE,Forge,5GateGoon | 2 FFE,Nexus,5GateGoon | 2 FFE,Forge,Unknown | 1 FFE,Gateway,5GateGoon | 1 FFE,Gateway,Unknown
sairreaver11 FFE,Forge,Unknown
stove5927 1GateCore,2Zealot,Corsair | 10 1GateCore,Unknown,Corsair | 6 1GateCore,Unknown,DT | 6 1GateCore,2Zealot,DT | 3 2Gate,10/12,DT | 3 2Gate,10/12,ZealotRush | 2 2Gate,10/17,4Gate | 1 2Gate,10/17,DT | 1 2Gate,10/12,4Gate

In 1-base protoss plays, McRave tried to distinguish when the gates were made, and often got it right but had some trouble. It seems like something you can’t do perfectly, even if you combine direct scouting of the gates with inferences based on the enemy army. Recognizing the enemy build precisely doesn’t seem possible in general, though you can usually get close.

AIIDE 2021 - what McRave learned

I’m taking the bots in finishing order; McRave is next. Last year I analyzed McRave’s three-part strategy representation and learning algorithm. These apparently have not changed in outline, though details may have changed. The set of available strategies has been updated. For example, 6HatchHydra is new this year. It follows that the set of enabled strategy triples has also changed.

McRave is much stronger this year. It has become noted for dangerous mutalisk control.


#1 stardust

openinggameswinsfirstlast
HatchPool,12Hatch,2HatchMuta816%0156
PoolHatch,9Pool,2HatchMuta2214%13155
PoolHatch,9Pool,3HatchMuta110%4147
PoolHatch,9Pool,6HatchHydra90%9143
PoolHatch,Overpool,2HatchMuta90%6145
PoolHatch,Overpool,3HatchMuta138%11125
PoolHatch,Overpool,6HatchHydra120%1149
7 openings1576%
enemygameswins
1GateCore,2Zealot,4Gate1056%
2Gate,10/12,4Gate1010%
2Gate,10/17,4Gate405%
2Gate,9/9,4Gate10%
2Gate,Unknown,4Gate10%
5 openings1576%


9 pool into 2 hatch muta worked best, with 3 wins out of 22. That is not intuitive. The more natural 12 hatch into 2 hatch muta was tried more but was less successful. Did Stardust react inefficiently to the 9 pool? McRave appears to correctly understand that Stardust ends up with 4 gates despite taking different routes to get there. That’s kind of impressive.

Last year McRave scored 3 out of 150 against Stardust. This year it scored 8 out of 150 against a stronger Stardust—which seems to have updates specifically to defeat McRave, since McRave was the only bot to upset it in CoG 2021. Good progress!


#2 bananabrain

openinggameswinsfirstlast
HatchPool,12Hatch,2HatchMuta8619%0156
HatchPool,12Hatch,2HatchSpeedling10%2626
HatchPool,9Pool,2HatchSpeedling2100%30100
PoolHatch,9Pool,2HatchMuta1520%18144
PoolHatch,9Pool,2HatchSpeedling30%2429
PoolHatch,9Pool,3HatchMuta1921%4124
PoolHatch,9Pool,6HatchHydra20%12129
PoolHatch,Overpool,2HatchMuta40%996
PoolHatch,Overpool,2HatchSpeedling10%2525
PoolHatch,Overpool,3HatchMuta1421%16114
PoolHatch,Overpool,6HatchHydra100%1146
11 openings15718%
enemygameswins
1GateCore,2Zealot,Corsair3113%
1GateCore,2Zealot,DT812%
1GateCore,Unknown,Corsair1010%
1GateCore,Unknown,DT60%
2Gate,10/12,4Gate10%
2Gate,10/12,Corsair3116%
2Gate,10/12,DT1127%
2Gate,10/12,ZealotRush70%
2Gate,10/17,4Gate367%
2Gate,10/17,Corsair30%
2Gate,10/17,DT250%
2Gate,9/9,Corsair333%
2Gate,9/9,DT20%
2Gate,9/9,Unknown10%
2Gate,Proxy,ZealotRush729%
2Gate,Unknown,Corsair20%
FFE,Forge,5GateGoon922%
FFE,Forge,Speedlot729%
FFE,Forge,Unknown520%
FFE,Gateway,5GateGoon1100%
FFE,Gateway,Unknown10%
FFE,Nexus,5GateGoon425%
FFE,Nexus,Speedlot10%
FFE,Nexus,Unknown1100%
24 openings15718%


McRave’s wins over BananaBrain are dominated by games where BananaBrain timed out. In game 2754, BananaBrained timed out with 320 frames over 55ms, when McRave had 318 frames over 55ms—close call! McRave had more timeouts than any other bot, but only 3 losses to BananaBrain by timeout. BananaBrain’s timeouts seem to be concentrated on Dragon and McRave, and to a lesser extent on Steamhammer.

If HatchPool,9Pool,2HatchSpeedling was tried twice and won twice, why wasn’t it tried more often? The first try was on game 30 of 0-156. I imagine that it was a reactive build, not enabled as an initial choice but switched to under given circumstances. I didn’t read the source to verify that.

The enemy table shows a complex set of strategies by BananaBrain.


#3 dragon

openinggameswinsfirstlast
HatchPool,12Hatch,2HatchMuta6632%0156
HatchPool,12Hatch,2HatchSpeedling10%6161
PoolHatch,12Pool,2HatchMuta911%27150
PoolHatch,12Pool,3HatchMuta3741%1129
PoolHatch,Overpool,2HatchMuta2733%3127
PoolHatch,Overpool,2HatchSpeedling2100%2199
PoolHatch,Overpool,3HatchMuta1527%25148
7 openings15733%
enemygameswins
2Rax,Expand,Unknown1100%
2Rax,Main,1FactTanks10%
2Rax,Main,Unknown825%
2Rax,Proxy,Unknown10%
RaxCC,1RaxFE,1FactTanks333%
RaxCC,1RaxFE,5FactGoliath2512%
RaxCC,1RaxFE,Unknown1127%
RaxFact,Unknown,2PortWraith1100%
RaxFact,Unknown,5FactGoliath1323%
RaxFact,Unknown,Unknown250%
Unknown,Unknown,Unknown8939%
Unknown,Unknown,WorkerRush2100%
12 openings15733%


Over half of McRave’s losses to Dragon were by timeout. I think Dragon is an especially easy bot to time out against, because its strong macro and big battles with light units put heavy demands on the opponent.

The enemy table shows 89 games with Unknown,Unknown,Unknown. Apparently Dragon often denied scouting. Presumably the scouting overlord was afraid to approach due to marines, and any scouting drone was turned away. Also, I wonder about 2Rax,Proxy,Unknown. Did Dragon really proxy once, or was it a misrecognition? On Python, bases can be close by air. If McRave measures proxy distance by air distance, it might take a barracks in the enemy main for a proxy.


#4 steamhammer

openinggameswinsfirstlast
PoolHatch,12Pool,2HatchMuta2133%3142
PoolHatch,12Pool,2HatchSpeedling1217%1136
PoolLair,9Pool,1HatchMuta12551%0157
3 openings15846%
enemygameswins
HatchPool,10Hatch,1HatchMuta2100%
HatchPool,10Hatch,2HatchSpeedling1681%
HatchPool,10Hatch,3HatchMuta10%
HatchPool,10Hatch,Unknown850%
HatchPool,9Pool,3HatchMuta10%
HatchPool,9Pool,Unknown667%
HatchPool,Unknown,Unknown1100%
PoolHatch,12Pool,3HatchMuta1100%
PoolHatch,12Pool,Unknown250%
PoolHatch,4Pool,LingRush888%
PoolHatch,9Pool,2HatchSpeedling1100%
PoolHatch,9Pool,Unknown838%
PoolHatch,Unknown,2HatchHydra1100%
PoolHatch,Unknown,3HatchMuta2100%
PoolHatch,Unknown,Unknown475%
PoolLair,9Pool,1HatchMuta2100%
PoolLair,Unknown,1HatchMuta425%
Unknown,Unknown,1HatchHydra1100%
Unknown,Unknown,1HatchLurker2100%
Unknown,Unknown,1HatchMuta5127%
Unknown,Unknown,3HatchMuta20%
Unknown,Unknown,Unknown3429%
22 openings15846%


McRave chose from the same fixed set of 3 strategies against all the zergs. Only the 1 hatch mutalisks were able to hold their own with Steamhammer.


#6 willyt

openinggameswinsfirstlast
HatchPool,12Hatch,2HatchMuta8933%0156
PoolHatch,12Pool,3HatchMuta5535%1155
PoolHatch,Overpool,2HatchMuta130%2151
3 openings15731%
enemygameswins
RaxCC,1RaxFE,1FactTanks200%
RaxCC,1RaxFE,5FactGoliath3826%
RaxCC,1RaxFE,Unknown3033%
RaxFact,Unknown,5FactGoliath20%
Unknown,Unknown,Unknown6742%
5 openings15731%


Hurrying the mutas too much did not help against WillyT. The enemy table shows that WillyT sometimes countered with goliaths. Does McRave later make a hydra switch to fight the goliaths? WillyT sometimes goes for goliaths with 2 tanks, and it’s sensible to fight back with hydralisks. I didn’t see a hydra switch in the games I watched.

I noticed that McRave doesn’t clear the terran scout from its main until mutas come out. WillyT gets to know the exact timing for its turrets with no need to spend a scan.


#7 microwave

openinggameswinsfirstlast
PoolHatch,12Pool,2HatchMuta4965%3156
PoolHatch,12Pool,2HatchSpeedling1533%1147
PoolLair,9Pool,1HatchMuta9362%0149
3 openings15761%
enemygameswins
HatchPool,10Hatch,+1Ling10%
HatchPool,10Hatch,1HatchMuta10%
HatchPool,10Hatch,2HatchHydra1100%
HatchPool,10Hatch,2HatchSpeedling4146%
HatchPool,10Hatch,3HatchMuta1182%
HatchPool,10Hatch,Unknown1867%
HatchPool,9Pool,+1Ling10%
HatchPool,9Pool,2HatchSpeedling2100%
HatchPool,9Pool,3HatchMuta250%
HatchPool,9Pool,Unknown2100%
HatchPool,Unknown,2HatchSpeedling250%
PoolHatch,12Pool,+1Ling1100%
PoolHatch,12Pool,1HatchHydra1100%
PoolHatch,12Pool,2HatchSpeedling1100%
PoolHatch,12Pool,3HatchHydra1100%
PoolHatch,12Pool,3HatchMuta922%
PoolHatch,12Pool,Unknown580%
PoolHatch,4Pool,LingRush1479%
PoolHatch,9Pool,+1Ling10%
PoolHatch,9Pool,1HatchMuta10%
PoolHatch,9Pool,2HatchSpeedling1100%
PoolHatch,9Pool,3HatchMuta367%
PoolHatch,9Pool,Unknown250%
PoolHatch,Unknown,2HatchHydra1100%
PoolHatch,Unknown,Unknown3100%
Unknown,9Pool,+1Ling250%
Unknown,9Pool,1HatchHydra1100%
Unknown,Unknown,+1Ling30%
Unknown,Unknown,1HatchLurker1100%
Unknown,Unknown,1HatchMuta1100%
Unknown,Unknown,3HatchHydra250%
Unknown,Unknown,3HatchMuta1060%
Unknown,Unknown,Unknown1173%
33 openings15761%



#8 daqin

openinggameswinsfirstlast
HatchPool,12Hatch,2HatchMuta12383%0156
PoolHatch,9Pool,2HatchMuta333%12138
PoolHatch,9Pool,3HatchMuta250%1120
PoolHatch,9Pool,6HatchHydra20%5898
PoolHatch,Overpool,2HatchMuta2378%83155
PoolHatch,Overpool,3HatchMuta30%37105
PoolHatch,Overpool,6HatchHydra10%11
7 openings15778%
enemygameswins
FFE,Forge,5GateGoon2796%
FFE,Forge,Speedlot8874%
FFE,Forge,Unknown2100%
FFE,Forge,ZealotArchon7100%
FFE,Gateway,5GateGoon250%
FFE,Gateway,Speedlot2374%
FFE,Nexus,5GateGoon2100%
FFE,Nexus,Speedlot633%
8 openings15778%


The mutalisks did in DaQin. DaQin’s slow start puts 12 hatch ahead of other choices; DaQin makes cannons before nexus regardless of what the opponent does. DaQin defends its natural entrance with cannons, but not its nexus, so the mutalisks have a free hand and DaQin finds itself short of probes.


#9 freshmeat

openinggameswinsfirstlast
PoolHatch,12Pool,2HatchMuta4065%3152
PoolHatch,12Pool,2HatchSpeedling1947%1135
PoolLair,9Pool,1HatchMuta9869%0156
3 openings15766%
enemygameswins
HatchPool,10Hatch,2HatchSpeedling2662%
HatchPool,10Hatch,3HatchMuta1338%
HatchPool,10Hatch,Unknown1060%
HatchPool,9Pool,2HatchSpeedling729%
HatchPool,9Pool,Unknown250%
HatchPool,Unknown,3HatchMuta1100%
HatchPool,Unknown,Unknown1100%
PoolHatch,4Pool,LingRush2479%
PoolHatch,9Pool,2HatchSpeedling450%
PoolHatch,9Pool,Unknown2100%
PoolHatch,Unknown,2HatchSpeedling475%
PoolHatch,Unknown,3HatchMuta1100%
PoolLair,Unknown,Unknown1100%
Unknown,9Pool,Unknown4100%
Unknown,Unknown,+1Ling2100%
Unknown,Unknown,1HatchHydra2100%
Unknown,Unknown,1HatchMuta2100%
Unknown,Unknown,3HatchMuta1164%
Unknown,Unknown,3HatchSpeedling10%
Unknown,Unknown,Unknown3967%
20 openings15766%



#10 ualbertabot

openinggameswinsfirstlast
PoolHatch,12Pool,2HatchMuta10%9898
PoolHatch,Overpool,2HatchMuta8542%0156
PoolHatch,Overpool,2HatchSpeedling7131%4154
3 openings15737%
enemygameswins
1GateCore,0Zealot,4Gate2100%
1GateCore,0Zealot,DT1100%
2Gate,10/12,ZealotRush1090%
2Gate,9/9,Unknown20%
2Gate,9/9,ZealotRush3642%
2Rax,Main,MarineRush250%
2Rax,Main,Unknown633%
PoolHatch,4Pool,LingRush5240%
RaxCC,8Rax,Unknown100%
RaxFact,Unknown,2Fact1100%
RaxFact,Unknown,Unknown10%
Unknown,Unknown,Unknown1164%
12 openings15737%


McRave met UAlbertaBot with the same strategies as last year (except for one stray PoolHatch,12Pool,2HatchMuta this year). The same strategies by name, that is. The actual play was different and performed far worse against UAlbertaBot’s pressure builds. I looked at some games. When McRave respected its enemy and defended itself, it generally won. Sometimes it seemed to arrogantly conclude “Pff, you’re not worth spending a sunken on” and got overrun. As far as I could tell from watching games, it wasn’t a scouting miss—though it’s easy to overlook things in watching games. It had the feel of a bug.

AIIDE 2020 - Steamhammer versus McRave

I added parsing for Steamhammer. DaQin is nearly the same. The only remaining bot which records data that can be analyzed this way is ZZZKBot, which has a difficult file format, does not keep a recognized enemy strategy, and doesn’t bother to write a newline at the end of its file. I may skip ZZZKBot.

The Steamhammer-McRave strategy crosstable is the most interesting one yet.

steamhammer strategies versus mcrave strategies

overallPoolHatch,12Pool,2HatchMutaPoolHatch,12Pool,2HatchSpeedlingPoolLair,9Pool,1HatchMuta
overall64/150 43%17/33 52%10/22 45%37/95 39%
12PoolLurker0/1 0%--0/1 0%
3HatchLingBurrow1/5 20%1/2 50%-0/3 0%
8DroneGas7/11 64%-1/1 100%6/10 60%
9HatchMain9Pool9Gas0/2 0%--0/2 0%
9PoolHatchSpeedAllInB0/1 0%--0/1 0%
9PoolSpire0/2 0%0/2 0%--
Over10HatchBust8/19 42%7/7 100%-1/12 8%
Over10PoolLing0/1 0%--0/1 0%
OverpoolSpeed3/15 20%1/5 20%0/3 0%2/7 29%
OverpoolSunk8/21 38%0/1 0%2/8 25%6/12 50%
OverpoolTurtle11/23 48%2/6 33%1/1 100%8/16 50%
ZvP_3HatchMuta0/1 0%--0/1 0%
ZvZ_12HatchExpo0/1 0%-0/1 0%-
ZvZ_Overgas9Pool0/2 0%-0/1 0%0/1 0%
ZvZ_OverpoolTurtle26/45 58%6/10 60%6/7 86%14/28 50%

For Steamhammer, either 8DroneGas (a zergling build despite the name) or else ZvZ_OverpoolTurtle (a mutalisk build) may dominate among the openings tried, while McRave’s best was the 1 hatch muta play because no Steamhammer try was better than even against it. It’s possible that switching between different kinds of builds was important, though, because the table suggests that the other counters are likely imbalanced (without a game-theoretic saddle point).

Both sides had trouble identifying the best strategies. If both had played their best strategies then the match would have come out close to 50%, while in fact Steamhammer came out behind, so Steamhammer had more trouble selecting from its excessive range of possibilities. I get the impression of a back-and-forth learning struggle.

steamhammer as seen by mcrave

steamhammer played#mcrave recognized
12PoolLurker11 HatchPool,12Pool,1HatchMuta
3HatchLingBurrow53 HatchPool,Unknown,2HatchLing | 1 HatchPool,Unknown,Unknown | 1 Unknown,Unknown,3HatchMuta
8DroneGas116 HatchPool,9Pool,2HatchLing | 2 PoolHatch,9Pool,2HatchLing | 1 PoolHatch,Unknown,2HatchLing | 1 HatchPool,Unknown,2HatchLing | 1 PoolHatch,Unknown,Unknown
9HatchMain9Pool9Gas21 PoolHatch,12Pool,2HatchLing | 1 HatchPool,Unknown,2HatchLing
9PoolHatchSpeedAllInB11 PoolHatch,9Pool,LingRush
9PoolSpire22 Unknown,Unknown,Unknown
Over10HatchBust197 HatchPool,12Pool,Unknown | 4 HatchPool,12Pool,2HatchLing | 3 Unknown,12Pool,Unknown | 2 HatchPool,Unknown,2HatchLing | 2 HatchPool,Unknown,Unknown | 1 PoolHatch,12Pool,Unknown
Over10PoolLing11 HatchPool,12Pool,Unknown
OverpoolSpeed155 HatchPool,9Pool,LingRush | 4 PoolHatch,12Pool,Unknown | 3 Unknown,12Pool,Unknown | 1 Unknown,9Pool,LingRush | 1 PoolHatch,9Pool,LingRush | 1 HatchPool,12Pool,3HatchMuta
OverpoolSunk218 HatchPool,9Pool,Unknown | 5 PoolHatch,9Pool,LingRush | 2 HatchPool,9Pool,3HatchMuta | 1 PoolHatch,9Pool,Unknown | 1 Unknown,Unknown,Unknown | 1 Unknown,12Pool,3HatchMuta | 1 HatchPool,Unknown,Unknown | 1 HatchPool,12Pool,3HatchMuta | 1 PoolHatch,Unknown,Unknown
OverpoolTurtle237 HatchPool,9Pool,LingRush | 5 Unknown,12Pool,1HatchHydra | 3 Unknown,Unknown,1HatchHydra | 2 HatchPool,Unknown,1HatchHydra | 2 Unknown,9Pool,1HatchHydra | 2 HatchPool,12Pool,1HatchLurker | 1 PoolHatch,12Pool,1HatchLurker | 1 HatchPool,12Pool,1HatchHydra
ZvP_3HatchMuta11 HatchPool,Unknown,2HatchLing
ZvZ_12HatchExpo11 HatchPool,Unknown,2HatchMuta
ZvZ_Overgas9Pool21 PoolLair,Unknown,1HatchMuta | 1 PoolLair,Unknown,Unknown
ZvZ_OverpoolTurtle4515 Unknown,Unknown,Unknown | 10 PoolLair,9Pool,1HatchMuta | 6 PoolLair,12Pool,1HatchMuta | 6 PoolLair,Unknown,1HatchMuta | 2 PoolLair,Unknown,Unknown | 2 Unknown,12Pool,Unknown | 2 Unknown,Unknown,3HatchMuta | 1 PoolLair,9Pool,Unknown | 1 Unknown,12Pool,3HatchMuta

Some curious stuff here. None of Steamhammer’s openings here is 3 hatch mutalisk, so those that are recognized that way may have added a third hatchery later in the game. Steamhammer does have an unfortunate love of laying down an unnecessary hatchery before its spire in ZvZ (3 hatcheries with zerglings is good, 2 hatcheries with mutalisks is good, 3 hatcheries with mutalisks is hard to justify in ZvZ). Looking at the Steamhammer openings tried more often, OverpoolSunk should be recognized as PoolHatch usually (maybe sometimes PoolLair). McRave got it wrong over half the time, without any big effect on its win rate. OverpoolTurtle should be PoolHatch with a hydra followup (this opening is not intended for ZvZ). For ZvZ_OverpoolTurtle, the closest match is PoolLair,9Pool,1HatchMuta. McRave got it right 10 times out of 45 and was close some other times. Failing to recognize anything (likely the scout was denied) was bad.

mcrave as seen by steamhammer

mcrave played#steamhammer recognized
PoolHatch,12Pool,2HatchMuta3322 Naked expand | 6 Unknown | 5 Heavy rush
PoolHatch,12Pool,2HatchSpeedling229 Naked expand | 9 Unknown | 3 Heavy rush | 1 Worker rush
PoolLair,9Pool,1HatchMuta9589 Unknown | 4 Turtle | 2 Naked expand

Worker rush? That is likely a bug. The other choices capture information about the game that is probably true and not particularly useful.

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 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 - McRave’s strategy representation

McRave lists its strategy choices with three names, such as “PoolLair,9Pool,1HatchMuta.” In trying to understand what McRave learned, I myself learned more about what the 3 names mean: They are chosen from a small structured set of composable elements which are strung together into full strategies. Here is the scheme:

1. HatchPool
1.1.1 12Hatch
1.2.1 2HatchMuta
1.2.2 2HatchSpeedling
2. PoolHatch
2.1.1 4Pool
2.1.2 9Pool
2.1.3 Overpool
2.1.4 12Pool
2.2.1 2HatchMuta
2.2.2 2HatchSpeedling
2.2.3 3HatchSpeedling
3. PoolLair
3.1.1 9Pool
3.2.1 1HatchMuta

I made up the numbering to depict how the elements fit together, as I understand it: First you pick a top-level category of builds, 1 2 or 3. Say you pick 2, spawning pool then hatchery. Under that, you pick a concrete build order that implements the top-level category, 2.1.x, from the list of ways that McRave knows to make a spawning pool first. After that—not under it—you pick a followup strategy, 2.2.x, from the strategies that are reachable via that category of builds. Notice that 9Pool appears under both PoolHatch and PoolLair (both are pool first), and that 2HatchMuta appears under both HatchPool and PoolHatch (all you need are 2 hatcheries). I count 15 different possible strategies in this scheme, 2 under HatchPool, 12 under PoolHatch, and 1 under PoolLair.

In principle, combinatorial schemes like this can represent a huge number of strategies with a small number of building blocks. Adding the one new item of 2.2.4 2HatchLurker would add 4 new strategies, though they might not all make sense in games. Having separate elements could also give a learning algorithm clues about how to generalize its findings.

In practice, McRave does not play all the strategies it can represent. It appears to have tight restrictions based on matchup. This list is based on the strategies that are mentioned in the learning files, not on code analysis, so it might be incomplete or misleading.

• ZvT: HatchPool-12Hatch or PoolHatch-Overpool or PoolHatch-12Pool, then for any of those, 2HatchMuta or 2HatchSpeedling.
• ZvP: PoolHatch-Overpool or PoolHatch-12Pool, then 2HatchMuta or (rarely) 2HatchSpeedling.
• ZvZ: PoolHatch-12Pool then 2HatchMuta or 2HatchSpeedling, or PoolLair-9Pool-1HatchMuta.
• ZvR: PoolHatch-Overpool or PoolHatch-12Pool, then 2HatchMuta or 2HatchSpeedling.

Next: Tables showing what strategy choices McRave learned.

AIIDE 2018 - what McRave learned

McRave, like Microwave and no doubt most bots that follow more than one plan, plays different openings against different races. In each opponent’s learning file, it writes win/loss numbers for 15 strategies. Their names all start with “P” for protoss, but I have stripped out the P to make the table more readable. 4 of the strategies are unused: ZealotDrop, NZCore (sounds like no zealot core), Proxy99, and Proxy6. That leaves 11 active openings. The races they were used against seen in the table. ZZCore (2 zealots before core) was played only against random.

#bottotal12Nexus1GateCorsair1GateRobo21Nexus2GateDragoon2GateExpand4GateDTExpandFFEZCoreZZCore
#1saida16-55  23%1-12 8%--7-17 29%1-12 8%--7-14 33%---
#2cherrypi15-88  15%-6-25 19%---6-25 19%2-20 9%-1-18 5%--
#3cse27-75  26%--7-19 27%--5-17 23%2-15 12%--13-24 35%-
#4bluebluesky29-74  28%--1-14 7%--2-15 12%7-18 28%--19-27 41%-
#5locutus46-56  45%--5-12 29%--15-15 50%14-15 48%--12-14 46%-
#6isamind54-49  52%--7-11 39%--4-10 29%15-14 52%--28-14 67%-
#7daqin60-43  58%--13-11 54%--4-9 31%8-10 44%--35-13 73%-
#9iron56-32  64%27-8 77%--2-7 22%18-9 67%--9-8 53%---
#10zzzkbot75-28  73%-8-7 53%---17-7 71%21-7 75%-29-7 81%--
#11steamhammer64-38  63%-9-9 50%---27-10 73%15-10 60%-13-9 59%--
#12microwave82-21  80%-0-5 0%---39-4 91%30-5 86%-13-7 65%--
#13lastorder97-6  94%-10-2 83%---17-1 94%10-2 83%-60-1 98%--
#14tyr91-10  90%--23-3 88%--7-5 58%31-1 97%--30-1 97%-
#15metabot49-46  52%--8-11 42%--16-12 57%23-14 62%--2-9 18%-
#16letabot77-15  84%12-5 71%--5-5 50%20-4 83%--40-1 98%---
#17arrakhammer102-1  99%------94-1 99%-8-0 100%--
#18ecgberht99-2  98%95-0 100%---3-1 75%--1-1 50%---
#19ualbertabot73-29  72%-----12-8 60%38-6 86%-7-7 50%-16-8 67%
#20ximp41-59  41%--8-14 36%--15-17 47%18-18 50%--0-10 0%-
#21cdbot103-0  100%------103-0 100%----
#22aiur80-21  79%--11-6 65%--13-6 68%41-3 93%--15-6 71%-
#23killall60-43  58%-3-9 25%---6-9 40%19-12 61%-32-13 71%--
#24willyt77-17  82%37-2 95%--3-6 33%23-4 85%--14-5 74%---
#25ailien86-17  83%-31-3 91%---20-5 80%5-6 45%-30-3 91%--
#26cunybot91-8  92%-26-1 96%---36-1 97%14-3 82%-15-3 83%--
#27hellbot103-0  100%---------103-0 100%-
overall-  68%172-27 86%93-61 60%83-101 45%17-35 33%65-30 68%261-176 60%510-180 74%71-29 71%208-68 75%257-118 69%16-8 67%

Unlike other bots that scored comparatively well against SAIDA—meaning they weren’t always wiped summarily from the map—McRave did not rely solely on cloaked units. The DTExpand opening scored best, but 21Nexus was nearly as successful. (McRave scored inconsistently against lower-ranked bots, though, as its author has commented.)

Every strategy came out with some good scores. But here is another analysis: Suppose the goal of the learning algorithm is to find the single most successful strategy (which is not always true—you might want to find the best mix to confuse the opponent’s learning). Leaving aside CDBot and HellBot, which McRave scored 100% against, against how many opponents was each opening the best choice? I made this table by hand, so there might be mistakes. I counted equal best as also best. The “versus” column tells which races the opening was used against.

openingbestversus
12Nexus3T
1GateCorsair2Z
1GateRobo0P
21Nexus0T
2GateDragoon0T
2GateExpand6P, Z, R
4Gate5P, Z, R
DTExpand2T
FFE5Z, R
ZCore4P
ZZCore0R

The counts do not match up well with the overall winning rates. There were 4 never-best openings. This analysis does not say that they are bad openings that dragged down the score. Consider what would have happened if they had not been enabled: Their games would have been distributed among the other openings; there would have been some extra wins and some extra losses, and the ratio would depend on the distribution. 21Nexus was never best, but scored second best against SAIDA and contributed as many wins. On the other hand, the openings which were often best were definitely worth having; they were well-chosen for McRave versus this set of opponents. It could make sense to try those openings first, or more often. On the third hand, notice that the openings with the highest counts were played against the largest number of opponents. There were more bests to count! Openings versus terran scored 5 bests because there were 5 terran opponents.

Plenty of similar analyses could be done. For example, you could count how often or how widely an opening scored above/below the average for each opponent: Did it make a net contribution, or the opposite? It would be another way of seeing whether the openings were well chosen for the opponents they faced.

Next I want to start watching some replays. I think I will start with LastOrder, which did all its learning offline yet held its win rate steady against the onslaught of learning bots. I’m expecting it to be interesting and sophisticated in some way.

two McRave games

Here are 2 McRave games. The first is what will probably turn out to be the biggest upset of SSCAIT 2017, and for journalistic balance (look at me! I can pretend to be objective, just like a reporter!) the second is a win over a tough opponent that has given McRave trouble.

McRave is currently at #3, and it will probably finish there. So I find it striking that both games show easy to notice weaknesses on both sides. All bots have a long way to go to become truly strong.

McRave-FTTankTER

As I write, McRave is #3 and FTTankTER is #69 out of 78 entrants, with fewer than 50 games remaining to play in the tournament. There are a couple of unplayed games that theoretically could unseat this one as the biggest upset, but it’s unlikely. What I find most remarkable about the game is not that the result was such a reversal, but that it came about because FTTankTER played better. McRave didn’t lose because of a bug (at least not one that I can detect) or by playing a risky strategy and getting unlucky, but because of missing skills.

McRave-FTTankTER started with McRave fast expanding behind a single gateway and FTTankTER rushing with marines.

marines arrive at the front

McRave did not make an initial zealot, but waited for its cyber core to finish so it could get straight to dragoons, the key unit at the start in PvT. Making 1 zealot slows down dragoons a trifle but adds safety against all kinds of cheeses and fast rushes, so it’s probably smart. But even without, McRave could have held. When a small number of marines show up at your front, they are weak. Marines gain strength in numbers because they are ranged units, but workers are faster and tougher than marines without medics or stim. Just pull workers and defend until your gateways produce. Workers can easily win fights against small numbers.

Instead, this happened:

Protoss pulled probes only after losing its first gateway, when the marine numbers had grown. The probes did not try to surround marines, but mostly milled around in front of the marines as if playing dodgeball. Nearly every probe was lost before the dragoon entered the fight. McRave was too optimistic, first in ignoring the attack, and then in continuing to throw away probes. A fallback plan would be: Abandon the natural, retreat the surviving probes, wait for the dragoon, and try a coordinated probe-dragoon defense of the main.

FTTankTER is clumsy and wasn’t able to finish off its helpless opponent, but the no-kill time limit ran out and terran won on points.

I think McRave shows some wider vulnerability to marine all-in attacks. McRave-Oleg Ostroumov is an example. Since McRave has lost fewer than 10% of its games, its weaknesses are apparently not easy to exploit.

McRave-CherryPi

CherryPi won its first game over McRave when McRave played a standard forge expand. In the second game, McRave played differently and CherryPi never seemed to notice. It was still a fight, though.

When both players learn, it becomes a race to see who can learn more and faster. With only 2 games, we can’t tell how the race would have turned out.

The game McRave-CherryPi on Benzene opened with McRave building 2 gates and CherryPi playing overpool into second and third hatcheries at the natural. CherryPi droned up as if McRave had fast expanded, which it should have known didn’t happen because its zerglings made it to the protoss natural. Zerg was underdefended, and McRave’s zealots killed a couple drones in the zerg natural and started hitting buildings.

Then a sunken started and the zealots retreated for no apparent reason. Protoss should at least take swipes at the morphing sunken until zerglings appear. The protoss scout probe in the main saw the zergling count and location, so McRave could have known it was safe. In the game above, McRave was overconfident; here it is overcautious. It is a sign of not truly understanding the situation (so far, no bot does). In the picture, the zealots have just retreated.

protoss retreats unnecessarily

Wuli beat CherryPi 2-0 with its heavy rush, but McRave likes to tech faster. CherryPi added to 3 sunkens and continued drone production, still seeming to assume that McRave had fast expanded. McRave poked repeatedly at the front without committing much or achieving much; at least it impelled zerg to spend on fighting units instead of drones. McRave often had a vanguard of units doing the combat and a rear guard that stayed out of the fight. I got the impression that McRave was not hiding its strength, but was just confused.

CherryPi had mismanaged the opening and was contained. Lurkers or mutalisks might have forced protoss back, but CherryPi got the lair late and did not make either; it wants to win with low-tier units. Sticking with zerglings and hydralisks and making many drones, zerg soon needed to expand more than it safely could, and put a hatchery at the nearby mineral only base, barely outside the containment. McRave soon scouted it—and did nothing. Protoss continued to poke at the front and ignored the third base. It could have detached a couple of rear guard zealots to take it down; zerg could have done nothing. The picture shows protoss defeating an inadvisable zerg foray near the mineral only third. After this, McRave ignored the third and made another poke at the front (even if the bot doesn’t notice creep, protoss had seen the hatchery with a probe). In the minimap, McRave has just started its natural nexus.

smashing a zerg escape attempt

Finally McRave felt confident enough to split its forces and kill the expansion. Before it died, CherryPi started a fourth base in the lower right corner. CherryPi was ahead in workers but had only 2 mining bases, while McRave had a far stronger army and a mostly successful containment (it only leaked a few drones).

After finishing the zerg third, McRave seemed to realize how far ahead it was and broke into the natural. With drones killed and a second nexus to make more probes, McRave had effectively caught up in economy and its army was more than zerg could face. In the picture, a high templar is storming drones that decided to fight instead of running away. The drones might as well do that; the only place they could safely run away to was the main, which was already saturated.

storming drones

CherryPi did not go down easy, but protoss was too far ahead. Oddly, though McRave made many templar and they accumulated plenty of energy, that one storm was the only one in the game. The high templar stayed in the rear guard where they were too far away to contribute. Also, both bots seemed confused by the neutral building block on the map, and got units stuck behind the block. I expect that from rough bots like Steamhammer, not from polished competitors.

CherryPi showed its curious strategic rigidity, where it believes without scouting that it knows what the opponent is doing—in this case, it even scouted that the opponent was not doing what the zerg opening assumed. To me it seems strange, because in Steamhammer the first major feature I wrote was the strategy boss which solves this exact problem, and it greatly boosted zerg’s strength. McRave showed surprising caution and slowness in taking advantage of opportunities.

cheese game McRave-MadMix

Yesterday an epic, today a short sharp shock. The game McRave vs. MadMix is a brazen cheese. Why shouldn’t I build my first pylon next to your nexus? Maybe because it couldn’t possibly succeed?

MadMix placed its first pylon in McRave’s mineral line, at the corner of the nexus. I can suggest an improvement: Place the pylon slightly to the left so it blocks access to the indented mineral patch. That is called a manner pylon because it is ever so polite. A probe sent to mine there will run behind the mineral line, slowing down the opponent’s mining. If you’re going to push a pylon into the opponent’s face, you might as well make it a manner pylon, as in the famous game Bisu-Pokju from 2007.

A manner pylon is commonly worth it, given that you have an early probe in the opponent’s base, especially if (as in Bisu-Pokju) it blocks 2 mineral patches: In between trapped workers that have to escape (which I doubt bots have the knowledge to do), workers devoted to attacking the pylon, and workers sent behind the mineral line, it can slow down the opponent’s mining more than enough to make up for its cost. It occurs to me that a bot with mineral locking could avoid some of the cost provided it has the special case knowledge to avoid locking workers to the blocked mineral patch or patches. I doubt that any bot has that knowledge yet, since I’ve never seen a bot place a manner pylon! I would be interested to see how a manner pylon interacts with LetaBot’s path smoothing. If the smoothing is not smart enough, some SCVs might be unable to mine at all—I am imagining SCVs bumping against the pylon trying to follow the shortest path.

one pylon for each side

McRave assigned 2 probes to tear down the offending pylon. MadMix calmly continued the cheesemaking process, building a gateway, then replacing the destroyed pylon with 2 fresh pylons, then laying down a second gateway, all while sending fresh probes to make sure one was always on hand. McRave seemed unimpressed and carried on with its 1 gateway build.

2 gates versus 1 gate

McRave ought to have been impressed. McRave’s first zealot was out earlier, and it could have held easily with good play. But McRave didn’t seem to know how to react; as it was attacking proxy buildings and mining gas and starting its cyber core, MadMix was killing probes and pulling ahead. The proxy won. Correct play when you get proxied like this is to delay your tech until you have the situation in hand. Your opponent set itself back to perform the proxy, and you can always stay ahead in units.

Don’t blame McRave for missing knowledge. All the top bots, Iron and Tscmoo included, have knowledge gaps wide enough to drive a government cheese truck through. It was only shortly before the tournament that I added smarts to Steamhammer to react on the fly to this kind of in-base cheese (Steamhammer makes a spawning pool if it has 9 or more drones, and will cancel gas or a second hatchery if that helps it get the pool up faster). And Steamhammer doesn’t understand how to react to other proxies like Juno’s (by Yuanheng Zhu) cannon contain (it still relies on a hand-coded counter for that). Bots need a lot of knowledge and it takes a long time to acquire.

McRave-Iron - narrowing the entrance

I thought this picture was funny. In a game yesterday against Iron, McRave fast expanded and walled off one of the bridges to its natural, but left the other bridge open. Vultures cannot pass the wall, but they happily took the other bridge and Iron won easily.

1 bridge blocked, 1 open

McRave seemed to mess up its build, getting dragoons too late. (The underlying mistake may have been taking gas at the natural instead of the main.) But the idea is sound. McRave is narrowing the entrance to its natural, making it easier to defend against vultures. A small number of dragoons can block a narrow entrance, either early in the game when there are only a few dragoons on the map, or later when the main army is away and the only dragoons around are those rallied from the gateways.

Its next game against Iron was on Roadrunner. McRave won using the same idea of narrowing the entrance.

buildings partly block the entrance

McRave’s dragoons beat Iron, so they played well by bot standards. But I see room for improvement. Vultures can pass either left or right of the upper gateway. I think the first 2 dragoons should plug the gaps so that vultures are physically blocked. Iron will lay mines to force its way in, and then the dragoons can retreat to the defense line McRave actually held, the gap between the lower gateway and the nexus. The farther away the vultures and their mines are kept from the probes, the better.

Steamhammer versus McRave and KillAll

I thought these 2 games showed interesting mistakes.

Steamhammer-McRave

This game on Circuit Breaker was kind of disorganized on both sides, but fun. Steamhammer played its usual low econ zergling pressure, and McRave opened with cyber core before second gate, which was slow enough to give the pressure a chance. After a few tries, Steamhammer killed enough probes to make up for its own weak economy, and the game was on.

Steamhammer fails to contain its opponent

The fight went back and forth, the sides seeming about equal in economic growth, tech progress, and missteps. It was fun to watch.

Steamhammer: It’s only an overlord. No need to keep it safe. And that? Oh, it’s only another overlord.
McRave: Huh? Why wouldn’t I awkwardly split my army?

Then dark templar came out, and Steamhammer fell over. Zerg did not understand.

Steamhammer: What danger? I don’t see any protoss units that I can’t fight.
McRave: Exactly.

Steamhammer-KillAll

This game was a win but... ugh. Only because KillAll went above and beyond to play worse.

KillAll did its thing and sunkened up for safety. Steamhammer understands in outline how to win these games: Place zerglings in a containing position so the enemy can’t expand or attack, make drones while teching, then win with mutalisks. But (as against ZZZKBot in AIIDE) Steamhammer did not execute well. It placed the zerglings in a position that contained nothing, and in fact left the barn door wide open. Steamhammer even stepped back to let enemies pass, in reflexive fear of the distant sunkens.

Steamhammer fails to contain its opponent

Below you can see that Steamhammer is ahead in economy, tech, and army—yet Steamhammer is in trouble because its force is out of position, standing outside an enemy base that it cannot threaten while its own base is under attack. Meanwhile, KillAll decided that its attackers should focus down the lair to the exclusion of all other targets, so that Steamhammer’s drones were able to clear the zerglings with no losses.

KillAll fails to attack its opponent

I can’t say it’s an undeserved win. The winner made smaller mistakes. Only not small mistakes.

Next: Thoughts on the gas steal.