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
opening | games | wins | first | last |
14CC | 31 | 0% | 3 | 147 |
FullMech | 28 | 0% | 0 | 148 |
JoyORush | 27 | 0% | 2 | 143 |
MechGreedyFE | 27 | 0% | 4 | 146 |
ProxyEightRax | 36 | 6% | 1 | 141 |
5 openings | 149 | 1% | | |
enemy | games | wins |
Unknown | 149 | 1% |
1 opening | 149 | 1% |
A couple wins against the top player is not bad.
#2 purplewave
opening | games | wins | first | last |
14CC | 35 | 3% | 3 | 148 |
FullMech | 29 | 0% | 0 | 149 |
JoyORush | 28 | 0% | 2 | 146 |
MechGreedyFE | 28 | 0% | 4 | 147 |
ProxyEightRax | 30 | 0% | 1 | 142 |
5 openings | 150 | 1% | | |
enemy | games | wins |
ProtossFE | 7 | 0% |
Unknown | 143 | 1% |
2 openings | 150 | 1% |
#3 bananabrain
opening | games | wins | first | last |
14CC | 31 | 0% | 3 | 146 |
FullMech | 28 | 0% | 0 | 144 |
JoyORush | 28 | 0% | 2 | 147 |
MechGreedyFE | 28 | 0% | 4 | 148 |
ProxyEightRax | 35 | 6% | 1 | 149 |
5 openings | 150 | 1% | | |
enemy | games | wins |
CannonRush | 2 | 0% |
ProtossFE | 9 | 0% |
Unknown | 125 | 2% |
ZealotRush | 14 | 0% |
4 openings | 150 | 1% |
#4 dragon
opening | games | wins | first | last |
14CC | 28 | 0% | 3 | 148 |
BioMechGreedyFE | 28 | 4% | 4 | 144 |
FullMech | 25 | 0% | 0 | 146 |
ProxyBBS | 44 | 18% | 2 | 149 |
ProxyEightRax | 25 | 0% | 1 | 147 |
5 openings | 150 | 6% | | |
enemy | games | wins |
Unknown | 150 | 6% |
1 opening | 150 | 6% |
#5 mcrave
opening | games | wins | first | last |
14CC | 28 | 7% | 7 | 147 |
BioGreedyFE | 51 | 29% | 0 | 145 |
ProxyEightRax | 47 | 26% | 21 | 140 |
TwoPortWraith | 22 | 5% | 3 | 146 |
4 openings | 148 | 20% | | |
enemy | games | wins |
FastHatch | 61 | 16% |
NinePool | 13 | 31% |
Unknown | 74 | 22% |
3 openings | 148 | 20% |
Ecgberht put up its strongest fight against zerg.
#6 microwave
opening | games | wins | first | last |
14CC | 32 | 9% | 4 | 145 |
BioGreedyFE | 21 | 0% | 0 | 148 |
FullBioFE | 24 | 4% | 3 | 146 |
ProxyEightRax | 52 | 27% | 1 | 147 |
TwoPortWraith | 20 | 0% | 2 | 138 |
5 openings | 149 | 12% | | |
enemy | games | wins |
FastHatch | 99 | 4% |
NinePool | 5 | 40% |
Unknown | 45 | 27% |
3 openings | 149 | 12% |
#7 steamhammer
opening | games | wins | first | last |
14CC | 34 | 12% | 8 | 147 |
BioGreedyFE | 36 | 17% | 0 | 142 |
ProxyEightRax | 36 | 14% | 1 | 141 |
TwoPortWraith | 43 | 23% | 4 | 148 |
4 openings | 149 | 17% | | |
enemy | games | wins |
EarlyPool | 4 | 0% |
FastHatch | 22 | 32% |
NinePool | 81 | 14% |
Unknown | 42 | 17% |
4 openings | 149 | 17% |
#8 daqin
opening | games | wins | first | last |
14CC | 32 | 0% | 8 | 148 |
FullMech | 29 | 0% | 0 | 149 |
JoyORush | 28 | 0% | 4 | 144 |
MechGreedyFE | 28 | 0% | 43 | 147 |
ProxyEightRax | 33 | 3% | 1 | 141 |
5 openings | 150 | 1% | | |
enemy | games | wins |
Unknown | 150 | 1% |
1 opening | 150 | 1% |
#9 zzzkbot
opening | games | wins | first | last |
FullBio | 150 | 71% | 0 | 149 |
1 opening | 150 | 71% | | |
enemy | games | wins |
EarlyPool | 150 | 71% |
1 opening | 150 | 71% |
Ecgberht upset ZZZKBot, possibly aided by its hardcoded knowledge of how ZZZKBot plays.
#10 ualbertabot
opening | games | wins | first | last |
FullBio | 58 | 43% | 0 | 144 |
FullMech | 52 | 38% | 2 | 145 |
ProxyBBS | 40 | 32% | 1 | 149 |
3 openings | 150 | 39% | | |
enemy | games | wins |
BioPush | 11 | 91% |
EarlyPool | 12 | 50% |
MechRush | 9 | 33% |
Unknown | 104 | 24% |
ZealotRush | 14 | 100% |
5 openings | 150 | 39% |
#11 willyt
opening | games | wins | first | last |
14CC | 31 | 3% | 68 | 148 |
FullMech | 34 | 9% | 0 | 147 |
ProxyEightRax | 85 | 41% | 2 | 149 |
3 openings | 150 | 26% | | |
enemy | games | wins |
BioPush | 34 | 15% |
Unknown | 116 | 29% |
2 openings | 150 | 26% |
#13 eggbot
opening | games | wins | first | last |
FullMech | 148 | 94% | 0 | 147 |
1 opening | 148 | 94% | | |
enemy | games | wins |
CannonRush | 94 | 95% |
Unknown | 54 | 93% |
2 openings | 148 | 94% |
Comments
Ecgberht on :
I think there is probably a bug and It causes Ecg not to explore between all of the available per-race strategies as It should have tried a lot more against some bots.
The enabled strategies per-race are coded here:
https://github.com/Jabbo16/Ecgberht/blob/master/src/ecgberht/StrategyManager.java#L48
I know enemy strategy detection is limited, but its hand-picked versus some fast or cheese strategies that my bot struggles to defend against if It doesn't react accordingly (like building a bunker vs early pool or 9-9 gateways). My bot also does recognize if a bot likes to only 4-5 pool and will try to counterplay with 8 rax into bunker in advance (harcoding zzzkbot only really helps vs the first games until this logic starts working).
Thanks again Jay for your work!
Jay Scott on :
MicroDK on :
Ecgberht on :