AITP scored zero against over half of the participants, so its learning results are not deeply interesting. Also, its strategies are labeled with opaque sequences of letters and numbers. But it was easy to generate the tables, and they offer a little insight into AITP’s interesting design, so here they are.
Unlike other Steamhammer forks, AITP does not spell out concrete opening builds in the configuration file, at least not beyond 4 x SCV
—start by making workers. The strategy names themselves are code sequences that tell what to do throughout the game. The letters A, B, C are stages of the game, and the combinations A1, A2 etc. are “modules” that may be active during the matching stage. Each module has its own update method to decide what to build, and the StrategyManager
sometimes checks the current module for other decisions. There is module switching code in case of surprises (StrategyManager::shouldSwitchModule()
); it also sets flags and updates other information.
I like it, it’s a flexible way to specify a plan for the whole game, and allows for changing plans on the fly. It’s an abstract strategy system, similar in principle to what I plan for Steamhammer. My implementation will look entirely different, though.
AITP has only 5 strategies configured. I gather that it can switch to other sequences on the fly if circumstances warrant. 5 is not many, though; I think they have only completed the basics. Here is the Steamhammer opening group it assigns to each strategy. It does not use the opening group strings, but they may have some heuristic value:
• A1-B3-C2 AntiRush
• A1-B1-B2-C2 Rush
• A3-B5-C1 NoneBunker
• A3-B7-C1 NoneBunker
• A4-B2-C1 8BB (does that mean BBS?)
#1 locutus
opening | games | wins |
A1-B1-B2-C2 | 7 | 0% |
A1-B3-C2 | 10 | 0% |
A3-B5-C1 | 16 | 0% |
A3-B7-C1 | 27 | 0% |
A4-B2-C1 | 40 | 0% |
5 openings | 100 | 0% |
plan | predicted | recognized | accuracy |
count | games | wins | count | games | wins | good | ? |
Naked expand | 59 | 59% | 0% | 11 | 11% | 0% | 7% | 83% |
Proxy | 27 | 27% | 0% | 9 | 9% | 0% | 11% | 67% |
Turtle | 9 | 9% | 0% | 3 | 3% | 0% | 0% | 67% |
Unknown | 5 | 5% | 0% | 77 | 77% | 0% | 0% | 80% |
timing | # | median | early | late |
gas steal attempt | 0 | - | - | - |
gas steal success | 0 | - | - | - |
enemy scout | 100 | 2:01 | 1:17 | 8:58 |
enemy combat units | 100 | 3:49 | 2:42 | 8:06 |
enemy air units | 35 | 7:18 | 6:14 | 7:57 |
enemy cloaked units | 61 | 7:34 | 6:14 | 11:26 |
AITP lost every game, but did not explore its possible strategies equally. It seems to have priorities. Maybe later I will look into how that works. AutoGasSteal
is set true in the configuration file, but AITP did not record itself as stealing gas against any opponent. Presumably it is turned off in the code.
#2 purplewave
opening | games | wins |
A1-B1-B2-C2 | 7 | 0% |
A1-B3-C2 | 15 | 0% |
A3-B5-C1 | 17 | 0% |
A3-B7-C1 | 20 | 0% |
A4-B2-C1 | 30 | 0% |
5 openings | 89 | 0% |
plan | predicted | recognized | accuracy |
count | games | wins | count | games | wins | good | ? |
Naked expand | 80 | 90% | 0% | 3 | 3% | 0% | 2% | 98% |
Unknown | 9 | 10% | 0% | 86 | 97% | 0% | 0% | 89% |
timing | # | median | early | late |
gas steal attempt | 0 | - | - | - |
gas steal success | 0 | - | - | - |
enemy scout | 89 | 2:03 | 1:19 | 6:53 |
enemy combat units | 89 | 3:39 | 3:11 | 6:22 |
enemy air units | 83 | 6:53 | 6:03 | 11:38 |
enemy cloaked units | 60 | 6:53 | 5:25 | 14:01 |
#3 bananabrain
opening | games | wins |
A1-B1-B2-C2 | 11 | 0% |
A1-B3-C2 | 5 | 0% |
A3-B5-C1 | 11 | 0% |
A3-B7-C1 | 37 | 0% |
A4-B2-C1 | 35 | 0% |
5 openings | 99 | 0% |
plan | predicted | recognized | accuracy |
count | games | wins | count | games | wins | good | ? |
Fast rush | 9 | 9% | 0% | 3 | 3% | 0% | 0% | 78% |
Heavy rush | 20 | 20% | 0% | 5 | 5% | 0% | 10% | 70% |
Naked expand | 30 | 30% | 0% | 5 | 5% | 0% | 3% | 83% |
Proxy | 31 | 31% | 0% | 4 | 4% | 0% | 0% | 90% |
Unknown | 9 | 9% | 0% | 82 | 83% | 0% | 0% | 89% |
timing | # | median | early | late |
gas steal attempt | 0 | - | - | - |
gas steal success | 0 | - | - | - |
enemy scout | 99 | 2:01 | 0:45 | 6:38 |
enemy combat units | 99 | 3:39 | 2:25 | 8:07 |
enemy air units | 69 | 6:31 | 3:39 | 11:25 |
enemy cloaked units | 78 | 6:34 | 3:47 | 9:46 |
#4 daqin
opening | games | wins |
A1-B1-B2-C2 | 5 | 0% |
A1-B3-C2 | 7 | 0% |
A3-B5-C1 | 17 | 0% |
A3-B7-C1 | 16 | 0% |
A4-B2-C1 | 28 | 0% |
5 openings | 73 | 0% |
plan | predicted | recognized | accuracy |
count | games | wins | count | games | wins | good | ? |
Unknown | 73 | 100% | 0% | 73 | 100% | 0% | 0% | 100% |
timing | # | median | early | late |
gas steal attempt | 0 | - | - | - |
gas steal success | 0 | - | - | - |
enemy scout | 73 | 4:03 | 2:43 | 10:39 |
enemy combat units | 73 | 3:42 | 2:34 | 7:59 |
enemy air units | 73 | 7:01 | 5:55 | 8:43 |
enemy cloaked units | 33 | 11:01 | 10:01 | 15:01 |
#5 steamhammer
opening | games | wins |
A1-B1-B2-C2 | 5 | 0% |
A1-B3-C2 | 17 | 6% |
A3-B5-C1 | 4 | 0% |
A3-B7-C1 | 22 | 5% |
A4-B2-C1 | 21 | 5% |
5 openings | 69 | 4% |
plan | predicted | recognized | accuracy |
count | games | wins | count | games | wins | good | ? |
Naked expand | 67 | 97% | 3% | 13 | 19% | 0% | 18% | 82% |
Unknown | 2 | 3% | 50% | 56 | 81% | 5% | 0% | 50% |
timing | # | median | early | late |
gas steal attempt | 0 | - | - | - |
gas steal success | 0 | - | - | - |
enemy scout | 69 | 2:27 | 0:51 | 5:46 |
enemy combat units | 69 | 3:31 | 2:53 | 7:15 |
enemy air units | 48 | 7:24 | 5:22 | 14:13 |
enemy cloaked units | 7 | 8:22 | 7:34 | 11:21 |
Steamhammer is the highest-ranked opponent that AITP scored wins against. It looks like a few scattered games, though.
#6 zzzkbot
opening | games | wins |
A1-B3-C2 | 51 | 47% |
A3-B7-C1 | 3 | 0% |
A4-B2-C1 | 4 | 25% |
3 openings | 58 | 43% |
plan | predicted | recognized | accuracy |
count | games | wins | count | games | wins | good | ? |
Fast rush | 57 | 98% | 44% | 37 | 64% | 51% | 63% | 37% |
Unknown | 1 | 2% | 0% | 21 | 36% | 29% | 0% | 0% |
timing | # | median | early | late |
gas steal attempt | 0 | - | - | - |
gas steal success | 0 | - | - | - |
enemy scout | 58 | 2:37 | 0:58 | 8:29 |
enemy combat units | 58 | 2:56 | 2:18 | 5:11 |
enemy air units | 43 | 8:13 | 6:38 | 11:51 |
enemy cloaked units | 0 | - | - | - |
It looks like ZZZKBot played its 4 pool in over half the games, and perhaps its guardian rush in the remainder. A1-B3-C2
is the strategy labeled AntiRush
. AITP recorded more wins for itself than it actually scored, despite recording fewer games than it played. I suspect that AITP has changed the meaning of the numbers.
#7 microwave
opening | games | wins |
A1-B1-B2-C2 | 5 | 0% |
A1-B3-C2 | 32 | 22% |
A3-B5-C1 | 14 | 0% |
A3-B7-C1 | 17 | 0% |
A4-B2-C1 | 7 | 0% |
5 openings | 75 | 9% |
plan | predicted | recognized | accuracy |
count | games | wins | count | games | wins | good | ? |
Fast rush | 59 | 79% | 8% | 5 | 7% | 0% | 3% | 93% |
Naked expand | 15 | 20% | 13% | 3 | 4% | 0% | 7% | 80% |
Unknown | 1 | 1% | 0% | 67 | 89% | 10% | 0% | 0% |
timing | # | median | early | late |
gas steal attempt | 0 | - | - | - |
gas steal success | 0 | - | - | - |
enemy scout | 75 | 2:38 | 1:43 | 5:53 |
enemy combat units | 75 | 3:29 | 2:46 | 4:29 |
enemy air units | 13 | 13:01 | 11:26 | 15:46 |
enemy cloaked units | 0 | - | - | - |
#8 iron
opening | games | wins |
A1-B1-B2-C2 | 19 | 0% |
A1-B3-C2 | 5 | 0% |
A3-B5-C1 | 27 | 0% |
A3-B7-C1 | 12 | 0% |
A4-B2-C1 | 36 | 0% |
5 openings | 99 | 0% |
plan | predicted | recognized | accuracy |
count | games | wins | count | games | wins | good | ? |
Factory | 98 | 99% | 0% | 99 | 100% | 0% | 100% | 0% |
Unknown | 1 | 1% | 0% | | - | - | 0% | 0% |
timing | # | median | early | late |
gas steal attempt | 0 | - | - | - |
gas steal success | 0 | - | - | - |
enemy scout | 99 | 2:18 | 1:55 | 7:23 |
enemy combat units | 99 | 4:14 | 3:33 | 4:55 |
enemy air units | 95 | 6:05 | 5:37 | 6:39 |
enemy cloaked units | 95 | 5:55 | 5:26 | 6:38 |
#9 xiaoyi
opening | games | wins |
A1-B1-B2-C2 | 10 | 0% |
A1-B3-C2 | 13 | 0% |
A3-B5-C1 | 25 | 0% |
A3-B7-C1 | 11 | 0% |
A4-B2-C1 | 36 | 0% |
5 openings | 95 | 0% |
plan | predicted | recognized | accuracy |
count | games | wins | count | games | wins | good | ? |
Factory | 94 | 99% | 0% | 95 | 100% | 0% | 100% | 0% |
Unknown | 1 | 1% | 0% | | - | - | 0% | 0% |
timing | # | median | early | late |
gas steal attempt | 0 | - | - | - |
gas steal success | 0 | - | - | - |
enemy scout | 95 | 1:47 | 1:22 | 8:27 |
enemy combat units | 95 | 3:13 | 2:39 | 4:46 |
enemy air units | 92 | 9:13 | 7:22 | 11:14 |
enemy cloaked units | 89 | 6:26 | 5:41 | 11:14 |
#10 mcrave
opening | games | wins |
A1-B1-B2-C2 | 3 | 0% |
A1-B3-C2 | 15 | 27% |
A3-B5-C1 | 14 | 0% |
A3-B7-C1 | 26 | 8% |
A4-B2-C1 | 40 | 30% |
5 openings | 98 | 18% |
plan | predicted | recognized | accuracy |
count | games | wins | count | games | wins | good | ? |
Fast rush | 6 | 6% | 17% | 2 | 2% | 0% | 17% | 67% |
Heavy rush | 37 | 38% | 19% | 4 | 4% | 0% | 5% | 89% |
Naked expand | 42 | 43% | 21% | 7 | 7% | 14% | 10% | 86% |
Unknown | 13 | 13% | 8% | 85 | 87% | 20% | 0% | 92% |
timing | # | median | early | late |
gas steal attempt | 0 | - | - | - |
gas steal success | 0 | - | - | - |
enemy scout | 98 | 1:59 | 1:14 | 12:41 |
enemy combat units | 98 | 4:13 | 2:55 | 7:13 |
enemy air units | 36 | 7:39 | 6:17 | 10:39 |
enemy cloaked units | 72 | 6:34 | 5:29 | 11:01 |
#11 ualbertabot
opening | games | wins |
A1-B1-B2-C2 | 14 | 21% |
A1-B3-C2 | 30 | 57% |
A3-B5-C1 | 1 | 0% |
A4-B2-C1 | 14 | 21% |
4 openings | 59 | 39% |
plan | predicted | recognized | accuracy |
count | games | wins | count | games | wins | good | ? |
Fast rush | 50 | 85% | 40% | 13 | 22% | 54% | 20% | 74% |
Naked expand | 7 | 12% | 14% | 3 | 5% | 33% | 0% | 71% |
Unknown | 2 | 3% | 100% | 43 | 73% | 35% | 0% | 50% |
timing | # | median | early | late |
gas steal attempt | 0 | - | - | - |
gas steal success | 0 | - | - | - |
enemy scout | 58 | 2:41 | 1:17 | 12:26 |
enemy combat units | 58 | 3:29 | 2:18 | 7:27 |
enemy air units | 8 | 7:05 | 6:46 | 15:01 |
enemy cloaked units | 0 | - | - | - |
Again, AITP recorded fewer games and more wins than happened. Is it a bug, or is it intentionally over-recording wins for certain strategies to focus its search? Or what? AITP is interesting, it deserves a closer look into the code.
#13 bunkerboxer
opening | games | wins |
A1-B3-C2 | 56 | 98% |
A3-B5-C1 | 3 | 100% |
2 openings | 59 | 98% |
plan | predicted | recognized | accuracy |
count | games | wins | count | games | wins | good | ? |
Unknown | 2 | 3% | 100% | 58 | 98% | 98% | 0% | 50% |
Worker rush | 57 | 97% | 98% | 1 | 2% | 100% | 0% | 100% |
timing | # | median | early | late |
gas steal attempt | 0 | - | - | - |
gas steal success | 0 | - | - | - |
enemy scout | 56 | 2:07 | 1:50 | 3:25 |
enemy combat units | 36 | 7:44 | 2:58 | 9:22 |
enemy air units | 0 | - | - | - |
enemy cloaked units | 0 | - | - | - |
overall
| total | TvT | TvP | TvZ | TvR |
opening | games | wins | games | wins | games | wins | games | wins | games | wins |
A1-B1-B2-C2 | 86 | 3% |
29 | 0% |
33 | 0% |
10 | 0% |
14 | 21% |
A1-B3-C2 | 256 | 42% |
74 | 74% |
52 | 8% |
100 | 32% |
30 | 57% |
A3-B5-C1 | 149 | 2% |
55 | 5% |
75 | 0% |
18 | 0% |
1 | 0% |
A3-B7-C1 | 191 | 2% |
23 | 0% |
126 | 2% |
42 | 2% |
|
A4-B2-C1 | 291 | 6% |
72 | 0% |
173 | 7% |
32 | 6% |
14 | 21% |
total | 973 | 14% | 253 | 23% | 459 | 4% | 202 | 17% | 59 | 39% |
openings played | 5 | 5 | 5 | 5 | 4 |
Comments