archive by month
Skip to content

how bots like maps

I decided to analyze the maps to see how bots feel about them overall. This data is derived from yesterday’s big table of how much bots like each SSCAIT map. The “spread” column is the mean of the absolute value of the Elo deviation numbers for a given map, across all the bots. I thought of calling it “controversy”; it measures how much bots like or dislike the map. Maps that all bots do OK on get low numbers; maps that some bots love and others hate get high numbers.

The “RMS” column is the root mean square of the same data. Statistically, it’s a fairer measure of the differences. It’s bigger because it puts more weight on outliers. The two measures don’t agree closely.

Destination is the most “controversial” map, with 60 Elo spread. If you pick one bot that likes Destination and one bot that dislikes it, on average the bot that likes it will have a 60 Elo advantage, which means a 59% win rate if the bots are otherwise even—nothing devastating. Neo Moon Glaive has Elo spread 41 or about 56% advantage, not much different. Even if you go with the RMS number, the peak 81 Elo RMS difference means a 61% win rate, still not much different.

mapspreadRMS
Benzene4557
Destination6078
HeartbreakRidge5381
NeoMoonGlaive4153
TauCross5174
Andromeda4970
CircuitBreaker5469
EmpireoftheSun5069
FightingSpirit5172
Icarus4660
Jade5064
LaMancha1.14965
Python4760
Roadrunner4663

Bottom line: On this analysis, the maps don’t seem to be distorting the competition. No highly “controversial” maps are introducing widespread unfairness.

Elo rating variations by map

From the SSCAIT data, I calculated the Elo advantage or disadvantage that each bot sees on each map. If it played all its games on that map, its Elo would change by that much. More or less; there isn’t as much data, so the advantage numbers are less accurate than the original Elo. I increased the Elo K factor to account for the smaller amount of data.

The 14 active maps:

  • (2)Benzene.scx
  • (2)Destination.scx
  • (2)HeartbreakRidge.scx
  • (3)NeoMoonGlaive.scx
  • (3)TauCross.scx
  • (4)Andromeda.scx
  • (4)CircuitBreaker.scx
  • (4)EmpireoftheSun.scm
  • (4)FightingSpirit.scx
  • (4)Icarus.scm
  • (4)Jade.scx
  • (4)LaMancha1.1.scx
  • (4)Python.scx
  • (4)Roadrunner.scx

The Elo ratings are repeated from the original post. I dropped 5 bots of the 103 for lack of data. The top number in each colored cell is the advantage or disadvantage that bot sees when playing on that map, in Elo points. You can look up winning rates for a given advantage in the Elo table. The bottom number is the count of games. Some bots have few games, like the new ZerGreenBot. A few bots have not played on every map, and get “-” instead of numbers.

botEloBenzDestHearNeoMTauCAndrCircEmpiFighIcarJadeLaMaPythRoadearliestlatest
krasi02163
2128
53
164
57
169
26
146
7
159
18
143
26
126
-76
144
-35
158
-73
140
-31
158
23
156
-63
155
-6
156
72
154
2015 Nov 302016 Sep 27
Iron bot2081
1990
139
141
-15
144
47
134
-35
157
53
140
-34
133
-79
129
-36
142
17
145
-12
142
17
148
1
150
-78
137
15
148
2015 Nov 272016 Sep 26
Marian Devecka2065
4117
-57
320
-18
255
70
303
-12
287
-37
322
104
273
45
285
-22
297
23
301
-41
289
-72
309
28
310
26
284
-38
282
2014 Oct 292016 Sep 27
Martin Rooijackers2011
6449
-25
462
56
473
-67
478
0
450
40
477
44
449
88
478
-37
458
-15
463
42
480
-156
446
0
429
31
475
-2
431
2014 Oct 292016 Sep 27
tscmooz1991
4972
-23
380
120
354
-20
323
-52
316
50
354
-50
393
21
354
-9
341
-78
370
43
364
-6
354
29
377
-54
328
29
364
2015 Feb 272016 Sep 27
tscmoo1978
5682
-8
359
44
355
-15
438
39
389
27
445
30
402
12
447
-14
420
-97
410
53
408
-70
385
29
397
41
396
-71
431
2015 Jan 222016 Sep 27
LetaBot CIG 20161932
444
120
26
33
38
-126
35
5
29
-81
30
40
30
-12
33
-64
26
100
23
2
29
-92
35
14
37
35
45
27
28
2016 Aug 012016 Sep 27
WuliBot1871
984
-9
73
-58
83
66
56
77
77
-32
68
14
59
-22
71
36
84
12
64
-21
64
54
80
-37
67
-55
68
-26
70
2016 Apr 192016 Sep 26
Simon Prins1867
5400
-20
388
-25
410
51
381
67
432
19
356
-18
412
-110
374
97
376
-21
396
-25
385
95
375
-54
324
17
373
-73
418
2015 Jan 252016 Sep 27
ICELab1865
6078
-21
441
-69
442
73
458
-127
377
-52
447
-17
398
-2
455
3
440
-13
425
-25
471
49
421
34
437
72
435
96
431
2014 Oct 292016 Sep 27
FlashTest1863
204
-71
13
-106
12
-117
13
149
22
94
18
31
14
-121
15
2
20
78
15
-57
10
79
13
59
13
4
12
-23
14
2016 Mar 222016 Jul 27
Sijia Xu1849
2313
22
171
30
155
19
182
-8
166
-2
148
-49
164
19
166
-25
165
-45
138
24
171
36
161
-72
153
51
201
0
172
2015 Oct 102016 Sep 27
LetaBot SSCAI 2015 Final1813
416
-10
28
83
31
-41
22
31
34
15
27
-223
37
199
28
-44
29
-96
33
-44
36
-32
27
1
29
79
25
81
30
2016 Aug 042016 Sep 27
Dave Churchill1804
6023
-29
473
200
428
-82
436
18
413
19
433
-74
412
-50
417
72
429
47
445
-68
396
-53
408
100
438
-46
455
-53
440
2014 Oct 292016 Sep 27
Chris Coxe1800
2195
31
153
188
169
66
153
-106
165
-25
149
-79
149
-34
166
-7
167
-18
153
115
146
-124
153
-114
154
114
156
-8
162
2015 Sep 032016 Sep 27
Tomas Vajda1790
6088
-2
441
9
439
21
441
-77
449
-14
443
-18
421
34
398
-7
458
55
422
17
425
61
440
-80
424
-6
439
7
448
2014 Oct 292016 Sep 27
Flash1777
991
-19
70
-163
65
16
59
7
68
-70
59
-12
85
3
76
72
69
23
69
64
87
71
84
-25
61
30
75
3
64
2016 Apr 182016 Sep 27
LetaBot IM noMCTS1766
1226
61
79
127
88
-116
83
39
106
85
87
-114
93
-106
89
-24
93
-28
89
58
93
-66
70
18
86
-2
92
68
78
2016 May 182016 Aug 01
Zia bot1757
536
54
36
-63
40
15
39
-22
41
50
39
-63
43
93
42
-7
34
20
36
-78
33
-58
30
-55
40
66
39
48
44
2016 Jul 072016 Sep 27
A Jarocki1741
932
20
63
121
66
125
62
-42
72
-48
74
18
53
-104
78
74
81
25
76
-93
59
-110
64
-39
55
52
67
3
62
2015 Oct 042016 Jan 26
PeregrineBot1728
1262
-21
104
94
89
-28
95
123
76
-133
90
77
95
-4
77
10
85
-67
94
-32
83
-51
94
11
90
14
103
9
87
2016 Feb 092016 Sep 10
tscmoop1721
1982
155
139
56
145
47
140
50
127
-7
130
53
154
-68
127
13
141
-17
140
-54
171
-59
128
-44
158
-51
148
-74
134
2015 Nov 112016 Sep 26
Andrew Smith1718
6160
63
460
-37
387
46
445
-10
457
-11
452
33
449
-21
463
89
480
22
441
-58
455
-25
445
-29
418
-58
400
-3
408
2014 Oct 292016 Sep 27
Florian Richoux1716
5970
-35
408
-107
425
120
441
42
411
-43
446
-46
443
37
397
152
468
66
416
-25
451
46
433
-90
410
-29
391
-88
430
2014 Oct 292016 Sep 27
Carsten Nielsen1695
4683
-19
361
27
341
-65
334
33
315
-21
330
-1
319
-27
353
53
336
88
369
-35
318
6
318
-78
282
26
340
12
367
2015 Mar 172016 Sep 27
Soeren Klett1687
6002
39
459
35
426
-12
420
63
396
-108
440
39
481
-20
402
-25
451
-4
454
36
433
-63
407
-19
406
71
410
-32
417
2014 Oct 292016 Sep 27
Vaclav Horazny1686
4140
33
291
78
291
-17
302
18
295
-22
274
-46
332
33
290
-31
308
4
284
-38
270
58
313
-96
315
25
296
2
279
2014 Oct 292015 Nov 18
La Nuee1662
558
-66
36
41
24
81
40
100
35
57
44
-11
41
-82
44
-21
36
50
52
-7
34
-78
43
-11
36
68
55
-121
38
2015 Dec 132016 Mar 18
Jakub Trancik1657
6136
102
427
79
454
1
434
-32
443
-64
445
-10
459
-16
438
-106
424
18
439
-35
413
-23
404
-40
463
63
445
63
448
2014 Oct 292016 Sep 27
Marek Suppa1655
4397
61
322
78
334
1
330
14
321
-48
304
-59
328
-88
315
-6
291
25
336
56
326
6
292
-25
300
-41
302
25
296
2015 Jan 052016 Mar 18
Krasimir Krystev1653
4292
-24
322
-59
283
92
304
49
298
8
327
-56
295
-51
296
-43
318
-76
326
-9
318
-24
280
132
318
-58
299
117
308
2014 Oct 292016 Mar 10
ASPbot20111652
222
-22
21
-178
17
-27
12
-13
17
98
20
154
11
-29
13
87
17
17
10
75
14
-59
17
-135
15
21
18
11
20
2015 Jan 292016 Feb 25
Marcin Bartnicki1633
1377
59
97
43
106
63
88
-54
110
-33
109
-20
110
-21
92
-46
96
-20
97
-12
92
53
92
-38
99
75
102
-48
87
2014 Nov 282016 Mar 18
Tomas Cere1631
6131
-27
446
-41
419
-2
444
-46
443
109
459
14
448
2
429
2
424
48
433
-24
442
-69
417
49
480
-12
426
-2
421
2014 Oct 292016 Sep 27
MegaBot1630
419
-22
29
27
27
6
34
36
27
-27
26
-21
25
-28
21
-1
28
44
41
64
28
-18
37
-2
37
-66
34
9
25
2016 Aug 012016 Sep 27
Aurelien Lermant1622
3673
-30
258
-8
249
15
268
-32
247
30
260
-37
287
-46
250
-73
266
87
262
38
253
51
255
80
285
-20
261
-53
272
2015 Jun 222016 Sep 27
Matej Kravjar1619
983
-29
69
22
67
-96
75
16
71
-266
75
12
65
78
73
74
79
-25
59
20
75
82
75
68
58
105
78
-60
64
2014 Oct 292015 Feb 18
Daniel Blackburn1605
4591
-61
327
-83
332
74
337
8
326
-8
306
66
330
-56
354
-26
350
74
327
-23
312
17
311
-3
319
-10
345
31
315
2014 Oct 292016 Jan 26
Gabriel Synnaeve1584
18
-3
1
-38
3
31
1
24
1
-26
2
-
-
19
1
-
-5
2
13
1
13
2
-9
2
-19
2
2015 Jan 302015 Nov 24
David Milec1566
49
-
-11
5
48
2
-47
4
-73
4
9
4
-2
3
-26
6
-13
2
16
4
25
3
31
5
70
5
-26
2
2015 Jan 132015 Jan 20
Odin20141565
5602
-60
416
-40
377
16
396
-40
399
-38
400
42
402
-45
380
-68
401
-29
424
58
416
52
393
66
411
14
365
73
422
2014 Dec 212016 Sep 11
Gaoyuan Chen1559
5106
-18
387
-40
348
-20
357
-64
387
59
379
48
352
-18
330
75
359
2
391
-24
362
-53
383
33
371
18
345
1
355
2015 Feb 102016 Sep 27
Henri Kumpulainen1553
881
62
75
-128
64
37
68
51
64
-23
69
33
69
-48
58
15
67
-36
62
22
74
27
48
1
58
-11
54
-1
51
2016 Jan 132016 May 31
Martin Dekar1533
2627
-58
195
14
186
25
189
5
196
-105
168
-27
189
73
178
-3
206
30
174
18
207
72
202
-9
166
-53
201
17
170
2014 Oct 292016 Jan 25
Serega1505
3802
-35
280
104
257
131
262
51
260
-3
278
26
261
-23
275
-114
285
-76
276
6
270
-4
268
-1
279
-100
291
38
260
2015 Jan 312016 Jan 26
Chris Ayers1481
1520
-34
115
-40
124
11
112
-28
106
0
106
-72
111
65
88
69
105
38
113
-52
117
49
109
-44
89
-44
102
82
123
2015 Aug 102016 Jan 26
Nathan a David1481
991
13
57
0
61
-91
77
31
88
-7
65
-34
75
-23
72
103
61
68
65
43
72
-26
78
-110
70
-34
64
68
86
2016 Feb 232016 Aug 08
DAIDOES1471
485
131
36
39
32
47
31
-27
30
1
28
-25
42
123
39
-159
28
29
44
32
34
-64
34
-80
36
-51
30
5
41
2016 Jun 132016 Sep 08
Igor Lacik1454
5852
19
420
48
399
13
447
-28
408
-38
375
31
418
-95
461
111
418
-28
386
-9
442
12
415
-54
405
26
429
-7
429
2014 Oct 292016 Sep 08
Matej Istenik1449
6054
-63
412
18
457
44
458
12
421
-20
429
-9
435
-109
417
-4
472
8
458
88
382
-3
414
8
426
-2
456
33
417
2014 Oct 292016 Sep 27
EradicatumXVR1443
4539
-41
340
18
324
62
309
66
319
-14
322
-5
315
60
322
-90
303
-24
331
-39
330
11
340
24
311
19
347
-47
326
2014 Nov 042016 Jan 23
Tomasz Michalski1432
433
6
29
34
30
-109
34
-35
23
142
27
30
40
-16
27
-92
31
174
32
-54
44
-5
23
12
31
-24
28
-63
34
2015 Dec 222016 Mar 18
Oleg Ostroumov1431
1345
10
92
38
83
63
69
-33
116
74
96
22
98
60
96
-1
116
101
109
-82
80
-104
97
-89
90
80
102
-138
101
2014 Oct 292016 Jan 26
NUS Bot1426
3333
78
216
-20
210
-525
233
64
236
29
249
25
221
-19
257
100
241
23
257
-39
254
133
240
104
232
36
257
11
230
2015 May 192016 Sep 06
Martin Pinter1425
1580
53
114
-54
110
69
108
7
110
-44
122
0
123
8
101
77
108
-60
97
26
131
-31
139
61
112
-53
95
-59
110
2014 Oct 292015 Dec 11
Roman Danielis1417
2945
-82
222
35
209
23
198
18
206
-9
202
13
221
89
202
-5
206
38
207
10
200
-18
225
-32
211
-29
226
-50
210
2014 Oct 292016 Sep 26
ZerGreenBot1416
36
-
-21
3
-13
3
-6
2
13
3
42
2
-29
3
8
1
6
1
-73
5
45
4
-7
4
36
4
0
1
2016 Sep 222016 Sep 27
Marek Kadek1413
5246
41
406
75
382
8
392
5
385
-28
383
-24
357
-12
369
-62
394
-49
359
-24
367
18
379
37
350
18
348
-3
375
2014 Oct 292016 May 22
Ian Nicholas DaCosta1404
2928
-38
217
-31
210
55
214
29
213
-134
222
-62
192
5
193
10
218
-17
205
-18
213
73
233
-47
199
90
186
84
213
2015 Apr 272016 Sep 08
AwesomeBot1403
473
-19
32
-24
31
-11
32
-23
49
20
29
149
29
-18
26
-3
30
9
53
-67
36
4
36
33
30
-12
32
-39
28
2016 Jun 162016 Sep 08
Radim Bobek1390
1151
-85
70
11
96
-36
68
54
77
-39
94
-95
81
-11
78
0
89
184
87
43
91
61
70
-58
75
-72
100
44
75
2015 Oct 012016 Mar 06
Adrian Sternmuller1375
4379
8
316
78
313
-85
330
-74
321
73
325
79
335
73
287
-42
315
-59
330
69
293
-115
288
33
331
-109
305
72
290
2014 Oct 302016 Jul 22
Martin Strapko1366
1144
-55
98
-2
103
-21
82
12
65
-6
83
88
89
20
73
-51
76
23
72
69
80
-57
81
-108
80
50
81
38
81
2014 Oct 292016 Jan 26
Maja Nemsilajova1363
4117
73
301
-73
292
73
322
7
309
31
298
-51
302
-77
269
-10
290
76
264
-36
302
-82
299
14
309
44
270
10
290
2014 Nov 042015 Nov 29
Johan Kayser1361
413
-58
24
153
19
22
33
-50
29
-2
29
27
36
-156
19
-150
28
-59
40
66
28
21
27
128
28
26
42
34
31
2016 Jul 292016 Sep 27
UPStarcraftAI1360
600
-16
43
56
48
6
41
45
48
11
36
12
43
-76
56
22
40
-28
44
52
37
37
43
23
32
-47
40
-98
49
2015 Dec 242016 Apr 13
Martin Vlcak1353
1210
-49
68
-83
97
-51
81
-26
86
-25
98
-31
87
88
60
119
94
35
79
-24
102
16
90
45
90
33
83
-46
95
2016 Feb 162016 Sep 07
Johannes Holzfuss1351
674
-46
52
98
39
24
36
59
51
-42
47
-27
54
-73
57
92
64
-82
49
-6
33
-4
57
-82
52
80
44
8
39
2016 Mar 052016 Jun 15
Vojtech Jirsa1350
2759
-87
212
-79
182
32
200
-8
207
-127
205
6
174
49
184
83
211
27
199
-30
186
79
207
117
193
31
214
-93
185
2015 Jan 122015 Sep 05
JompaBot1349
1043
-151
67
107
78
-180
70
-44
67
-52
83
81
61
95
88
1
83
71
75
82
80
-9
70
-72
77
68
73
2
71
2016 Feb 042016 Aug 13
Rob Bogie1346
651
42
48
-313
54
-193
38
135
45
365
49
-361
47
246
38
-333
43
-418
52
291
55
273
45
298
43
-306
40
274
54
2016 May 142016 Sep 06
Christoffer Artmann1344
395
30
25
-123
23
14
22
57
29
-45
31
-155
22
-36
27
-52
34
143
30
109
32
28
41
-17
31
-51
26
99
22
2016 Aug 072016 Sep 27
Marek Gajdos1331
1370
2
91
-102
100
90
95
-13
102
-139
99
93
87
42
81
39
107
-78
107
-30
106
-7
97
9
94
79
101
15
103
2016 Jan 302016 Sep 11
Travis Shelton1314
1212
38
72
-4
78
77
84
-31
80
-1
70
47
90
-25
105
2
92
-27
100
-30
104
-9
93
44
86
-87
82
5
76
2016 Feb 282016 Sep 06
Peter Dobsa1307
3015
27
213
26
205
-45
218
-71
199
-19
215
82
228
-4
232
81
197
58
212
-28
224
-32
207
42
204
-65
237
-54
224
2015 Jan 112015 Oct 02
VeRLab1304
888
-75
65
-5
52
-16
64
25
75
-20
56
-27
63
84
51
-6
79
42
71
57
77
99
51
6
52
-32
54
-131
78
2016 Feb 282016 Aug 01
Bjorn P Mattsson1295
4432
18
303
75
328
48
340
-4
303
-20
307
39
302
6
333
-26
317
12
304
-58
315
-96
326
-50
345
113
280
-57
329
2015 Apr 052016 Sep 27
Lukas Sedlacek1293
63
48
3
-80
10
74
3
-78
5
2
4
-14
6
-53
9
39
3
77
3
29
4
-15
2
7
3
-18
5
-20
3
2015 Jan 122015 Jan 20
Sergei Lebedinskij1293
1083
-16
59
11
71
-19
77
69
77
47
72
-97
83
70
70
46
69
3
86
-85
85
55
71
36
106
-51
74
-68
83
2015 May 282015 Sep 03
Vladimir Jurenka1278
6041
-87
429
-66
435
-33
454
-28
432
-15
402
11
438
44
453
77
435
-96
443
33
406
15
467
77
435
57
413
10
399
2014 Nov 042016 Sep 27
neverdieTRX1272
334
65
29
-3
27
56
21
-9
26
-38
19
13
20
-82
27
-50
28
44
26
-159
27
67
21
35
25
-3
24
62
14
2016 Jul 192016 Sep 10
OpprimoBot1256
1994
8
131
-23
138
14
144
122
146
70
143
-8
160
33
131
30
153
-70
135
-88
134
38
140
1
149
-93
139
-35
151
2015 Nov 182016 Sep 27
Marek Kruzliak1255
399
-1
31
-92
35
66
23
-46
27
146
28
111
27
-123
23
112
25
-43
36
-99
32
80
26
15
30
-25
25
-101
31
2014 Nov 282015 Jan 20
Sungguk Cha1250
697
-9
47
-38
46
34
54
-148
40
50
52
-62
51
130
48
-23
41
-3
65
-63
51
117
43
76
48
-44
61
-17
50
2016 Jun 052016 Sep 27
Jacob Knudsen1247
1244
-13
79
-32
89
92
99
-20
89
36
81
34
75
70
87
-87
88
-77
81
-5
99
55
87
-7
103
3
94
-47
93
2016 Feb 232016 Sep 10
Ludmila Nemsilajova1228
409
52
27
15
21
13
22
74
25
-90
27
-9
27
65
46
-71
37
-51
32
-75
28
1
30
-24
29
58
30
43
28
2014 Nov 282015 Jan 21
Karin Valisova1226
1067
159
84
-42
86
-11
71
-2
72
-28
74
0
79
-62
68
-40
76
6
72
-16
66
4
68
-29
85
31
82
31
84
2014 Nov 042016 Jan 26
HoangPhuc1209
300
-54
28
-46
32
25
22
3
16
83
21
-88
24
-21
16
51
20
-52
24
56
17
-70
25
-27
15
-37
25
178
15
2016 Jul 182016 Sep 07
Sebastian Mahr1182
1191
-2
67
-61
89
-18
83
-34
96
14
71
118
74
95
87
25
81
25
79
-13
97
-63
94
-40
89
17
97
-61
87
2016 Jan 132016 Aug 08
Jan Pajan1179
997
-15
85
58
71
14
64
-49
77
14
67
37
72
-61
78
2
61
-29
67
-19
70
-77
91
52
72
21
62
53
60
2014 Nov 042016 Jan 05
Pablo Garcia Sanchez1174
579
26
33
11
53
-28
42
-74
33
3
45
35
39
84
34
-49
43
52
39
26
37
24
50
-21
46
-37
51
-51
34
2015 Dec 242016 Apr 13
Ivana Kellyerova1131
1499
-59
115
-89
113
2
99
-20
113
71
111
38
108
-39
95
-6
99
19
125
30
92
53
106
-54
110
-5
97
60
116
2014 Nov 042015 Apr 01
Lucia Pivackova1090
717
-69
50
-1
53
-32
55
20
50
94
41
-13
58
-25
47
23
42
-57
47
39
49
-42
55
-32
50
48
59
46
61
2014 Oct 302015 Jan 20
Tae Jun Oh1036
138
43
11
21
8
-7
10
-40
7
96
8
-18
9
95
6
-35
9
-90
17
129
7
-40
14
-95
11
-21
9
-38
12
2016 Mar 222016 Apr 11
Denis Ivancik1022
418
-65
37
46
30
-23
25
-34
26
109
29
78
21
-26
36
96
26
-90
43
4
28
-35
27
-28
18
-43
34
11
38
2014 Nov 282015 Jan 20
ButcherBoy970
422
38
21
38
23
-68
32
-30
35
-43
34
100
31
46
29
-40
29
-6
35
-40
31
-49
34
128
23
7
30
-81
35
2016 Jun 212016 Sep 06
Jon W964
790
-30
58
47
66
-100
62
6
59
83
45
27
67
4
52
-44
50
7
60
35
47
-9
57
79
49
-66
62
-39
56
2015 Apr 302015 Jul 09
Matyas Novy885
1693
77
103
-76
132
-60
133
-69
122
-2
110
5
120
1
107
67
119
110
104
-59
145
-20
122
66
126
-83
124
44
126
2015 Feb 042015 Jul 09

There are some interesting things to see in the chart, but first look at Rob Bogie! That’s the bot MaasCraft. All the bots have preferences, some have strong preferences, but MaasCraft loves some maps and hates others. Why is that? If it could be made to love all the maps....

SSCAIT top 10 crosstables

Krasi0 passed Marian Devecka’s Killerbot to become #1 on SSCAIT on 18 August. A 100 by 100 crosstable is too big, but here’s a crosstable of the games played among the top 10 SSCAIT bots from 17 August to 27 September. The top 10 are chosen based on their Elo ratings at the end of the period. The top number in each box is the winning rate of the bot in that row against the bot in that column; the bottom number is the count of games. The overall column is the winning rate against the other 9 top bots; it doesn’t have to be closely related to the Elo rating, which is computed with all 100 bots.

since 17 AugoverallkrasIronMariMarttscmtscmLetaWuliSimoICEL
krasi066.67%20%
10
57%
14
100%
17
0%
14
55%
11
100%
7
100%
9
100%
8
100%
9
Iron bot71.28%80%
10
78%
9
36%
11
89%
9
64%
14
40%
15
100%
9
90%
10
100%
7
Marian Devecka65.38%43%
14
22%
9
100%
6
86%
7
58%
12
82%
11
80%
5
50%
6
100%
8
Martin Rooijackers56.82%0%
17
64%
11
0%
6
64%
14
78%
9
70%
10
100%
8
75%
4
100%
9
tscmooz54.43%100%
14
11%
9
14%
7
36%
14
50%
8
38%
8
43%
7
100%
6
100%
6
tscmoo48.75%45%
11
36%
14
42%
12
22%
9
50%
8
50%
8
0%
4
100%
6
100%
8
LetaBot CIG 201655.06%0%
7
60%
15
18%
11
30%
10
62%
8
50%
8
80%
10
100%
14
67%
6
WuliBot19.12%0%
9
0%
9
20%
5
0%
8
57%
7
100%
4
20%
10
0%
8
25%
8
Simon Prins31.94%0%
8
10%
10
50%
6
25%
4
0%
6
0%
6
0%
14
100%
8
100%
10
ICELab11.27%0%
9
0%
7
0%
8
0%
9
0%
6
0%
8
33%
6
75%
8
0%
10

It’s amazing that Tscmoo zerg scored 100% versus Krasi0 during the period. It’s equally amazing that former champion IceBot has a 0% score against 7 of the other 9 top bots; apparently once you’re better, you’re a lot better. Bots have improved that much in the last 2 years.

Here’s the same crosstable, except starting 1 January 2016.

since 1 JanoverallkrasIronMariMarttscmtscmLetaWuliSimoICEL
krasi045.47%49%
57
26%
57
78%
64
13%
61
16%
73
100%
10
83%
35
55%
56
55%
51
Iron bot53.37%51%
57
41%
37
39%
66
58%
43
54%
59
40%
15
85%
27
55%
47
64%
50
Marian Devecka63.12%74%
57
59%
37
57%
100
72%
67
53%
95
79%
14
83%
12
80%
95
49%
106
Martin Rooijackers53.71%22%
64
61%
66
43%
100
57%
168
47%
230
64%
11
74%
31
44%
162
81%
164
tscmooz62.23%87%
61
42%
43
28%
67
43%
168
66%
142
27%
11
57%
23
77%
138
84%
128
tscmoo62.43%84%
73
46%
59
47%
95
53%
230
34%
142
43%
14
53%
17
88%
154
84%
161
LetaBot CIG 201656.64%0%
10
60%
15
21%
14
36%
11
73%
11
57%
14
69%
13
100%
17
75%
8
WuliBot24.63%17%
35
15%
27
17%
12
26%
31
43%
23
47%
17
31%
13
16%
19
19%
26
Simon Prins33.01%45%
56
45%
47
20%
95
56%
162
23%
138
12%
154
0%
17
84%
19
38%
136
ICELab33.73%45%
51
36%
50
51%
106
19%
164
16%
128
16%
161
25%
8
81%
26
62%
136

The number of games in each cell depends on the lifetimes of both bots; not all were active over the whole period. The cells are mostly in paler colors, because many of the bots were updated during the year—they were neither always weak nor always strong.

I want to create a breakdown by map, but the data is not supporting it. There are 14 active maps. If I render data from the shorter period, there aren’t enough games for all the maps to be played in each pairing. If I use the longer period, there are usually enough games but the bots vary in strength with time so we’ll see a smear.

To break out crosstables by map, I’ll have to combine data one way or another. I could combine over time, using the longer period. I could combine bots by race, or try to compare groups of macro bots versus rush bots. I could lump together maps by number of starting spots. Or I could just do bot-map instead of bot-opponent-map. What do you think is useful? Maybe I should start with bot-map and then break it down further to bot-some group of opponents-map?

comparing AIIDE 2015 and CIG 2016 Elo ratings

The cool technique I had in mind to compare ratings across tournaments turned out not to work. Not cool after all. But 6 bots played unchanged in both AIIDE 2015 and CIG 2016, and we can compare their relative ratings. In this table the subtract column gives the AIIDE 2015 rating minus the CIG 2016 rating.

botAIIDE EloCIG elosubtractnormalize
UAlbertaBot1895177811735
Overkill189017969412
Aiur178416879715
TerranUAB1372133834-48
OpprimoBot1231115477-5
Bonjwa1171109972-10
average820

As you might expect, two tournaments with different maps and different opponents give different ratings. UAlbertaBot and Overkill swapped ranks among the 6. But after correcting for the 82 point offset (since only rating differences matter), the ratings turn out to be quite close between the tournaments. The biggest difference is for TerranUAB. Look up 48 points in the Elo table—it says that TerranUAB has a 57% probability of beating itself, not a drastic error.

You can try to convert a CIG 2016 rating into a rough estimate of an AIIDE 2015 rating by adding 82. For example, tscmoo terran earned a CIG rating of 1888, which corresponds to an AIIDE rating of 1888+82 = 1970, whereas the tscmoo zerg that played in AIIDE earned a rating there of 2026. So the estimate appears to be way off. But estimates made this way are likely to be closer for bots near the middle of the pack.

Next: Another mass of colorful crosstables.

CIG 2016 Bayesian Elo ratings

Same as yesterday, Bayesian Elo ratings calculated by bayeselo, this time for CIG 2016. I included both the qualifier and the final, of course. That gives the best possible ratings, so that confidence is higher for the 8 finalists. But the “score” column becomes difficult to interpret, because part of the score of the top 8 bots comes from the final when they faced tougher opposition. You can’t directly compare the scores of bots 1-8 with the scores of 9-16, only the ratings.

Also, with this analysis it doesn’t make sense to compare the rating values between tournaments. Each tournament is independently scaled to have an average rating of 1500. Only the relative ratings of bots in the same tournament can be compared. Ratings are relative.

botscoreElo95% conf.better?
1tscmoo73%18881872-190498.5%
2Iron71%18641848-188099.9%
3LetaBot68%18271811-184399.7%
4Overkill65%17961781-181270.9%
5ZZZKBot64%17901775-180586.8%
6UAlbertaBot63%17781763-179399.8%
7MegaBot60%17461731-176199.9%
8Aiur54%16871671-170272.7%
9Tyr62%16791659-1699100%
10Ziabot46%15001479-1521100%
11TerranUAB34%13381316-1360100%
12SRbotOne22%11581133-118359.1%
13OpprimoBot22%11541128-117997.1%
14XelnagaII21%11191092-114586.3%
15Bonjwa19%10991072-1125100%
16Salsa1%579510-636-

The official results have LetaBot a hair ahead of ZZZKBot, then Overkill following. bayeselo has ZZZKBot and Overkill reversed, saying that LetaBot is clearly superior to Overkill, which is fairly likely to be superior to ZZZKBot. The difference comes about because, of course, the official results include only the final. Martin Rooijackers was justified after all in saying that ZZZKBot had fallen from the top 3. All other results agree with the official ranking. The tailing finalist Aiur is 72.7% likely to be superior to Tyr, so there is some doubt that the best finalists won through (in general the doubt can’t be avoided, though).

The tail-ender Salsa has a wide and asymmetrical confidence interval. It takes more evidence to pin down an extreme rating than a middle-of-the-road rating.

Tomorrow: I’ll try an analysis in which the ratings of unchanged bots are carried over from AIIDE 2015 to CIG 2016, so that we can compare between tournaments. I’m not sure how well it will work, or even if I can get it to work at all, but it will be interesting to try.

AIIDE 2015 Bayesian Elo ratings

Krasi0 asked me to calculate ratings for tournaments using Rémi Coulom’s excellent bayeselo program. Here are ratings for AIIDE 2015.

bayeselo does not calculate basic Elo ratings like my little code snippets. It can’t calculate an Elo curve over time. It assumes that the players are fixed and have one true rating, and it crunches a full-on Bayesian statistical analysis to not only find the rating as accurately as possible, but also a 95% confidence interval so you can see how accurate the rating is. The ratings for the bots that learn, which aren’t fixed in strength as bayeselo assumes, can be seen as measuring the average strength over the tournament—the tournament score is no different in that respect.

The last column of the table is the probability of superiority, bayeselo’s calculated probability that the bot truly is better than the bot ranked immediately below it. The last bot doesn’t get one, of course. (bayeselo calculates this for all pairs, but in a tournament this long it rounds off to 100% for most.)

botscoreElo95% conf.better?
1tscmoo89%20262002-205081.0%
2ZZZKBot88%20111988-203599.9%
3UAlbertaBot80%18951874-191661.2%
4Overkill81%18901870-191199.9%
5Aiur73%17841765-180399.9%
6Ximp68%17121694-173199.9%
7Skynet64%16661648-168450.7%
8IceBot64%16661648-168488.4%
9Xelnaga63%16501632-166881.4%
10LetaBot61%16381620-165699.9%
11Tyr54%15531534-157296.0%
12GarmBot52%15311513-1549100%
13NUSBot39%13801362-139873.1%
14TerranUAB38%13721354-139099.8%
15Cimex36%13351316-135399.6%
16CruzBot32%12991280-131799.9%
17OpprimoBot28%12311211-125096.7%
18Oritaka26%12051185-122584.0%
19Stone25%11901170-121091.3%
20Bonjwa23%11711151-1191100%
21Yarmouk9%913885-93995.0%
22SusanooTricks8%882853-910-

In the official results, Overkill came in ahead of UAlbertaBot with a higher tournament score. bayeselo ratings are more accurate than score because they take into account more information, and bayeselo says UAlbertaBot > Overkill with probability 61%. As explained in the original results, it’s a statistical tie, but bayeselo says it’s not an even tie but a little tilted in a counterintuitive way.

Skynet looks dead even with IceBot in the rounded-off numbers above. bayeselo says that Skynet > IceBot with probability 50.7%, a hair off dead even. Even the large number of games in this tournament could not rank all the bots accurately.

Tomorrow: The same for CIG 2016.

7 eras of SSCAIT champions

The player with the highest rating on each day I’ll call the “champion” of the day. It turns out that the SSCAIT daily champions change frequently. I calculated all the daily champions and manually divided the time period into eras that looked to me to have different sets of champions.

dateschampions
2013 12 252015 02 16usually ICELab, sometimes Tomas Vajda (XIMP)
2015 02 172015 02 25Tomas Vajda and Dave Churchill (UAlbertaBot)
2015 02 262015 06 17mostly tscmoo, sometimes Tomas Vajda or ICELab
2015 06 212015 11 19largely tscmooz, sometimes Tomas Vajda or ICELab, occasionally Dave Churchill or Florian Richoux (AIUR), 3 days of Sijia Xu (Overkill)
2015 11 202016 02 08Marian Devecka (Killerbot), 2 days of tscmooz
2016 02 092016 08 17mostly Marian Devecka, sometimes tscmoop, 4 days of Iron
2016 08 182016 09 26mostly Krasi0, sometimes Marian Devecka

You can download the SSCAIT champions file in .csv format.

SSCAIT Elo ratings over time

Here it is, the great chart of SSCAIT Elo ratings over time. Well, not here actually, I put it on a separate page so that not every blog visitor has to load the mass of Javascript and data.

SSCAIT interactive ratings chart for 100 bots

The chart is generated from this csv file. Spreadsheet software or stats software should open it right up, if you want to poke the data yourself. It’s 950 lines of 101 columns each, a date and ratings for 100 bots.

Data in the csv file is filled in for each day from the bot’s first to its last game in the original raw data file (which is just a list of games), and left blank on other days. There may be an off-by-one error causing some bots to miss their last day of data; I didn’t bother to verify it since it’s hardly visible. Some bots have short lifetimes and only appear on the graph as a brief squiggle. Some bots have inactive periods in between their first and last games; the inactive periods with no games graph as flat lines. In excluding the 3 bots with insufficient games, I also removed them from the rating calculation, which improves the ratings to a tiny degree. The rankings stay exactly the same for all 100 bots, though.

a few preliminary Elo charts

The SSCAIT data includes 103 bots, and 3 of them have 10 or fewer games, leaving exactly 100 with useful rating curves. I’ve crunched and formatted the data, and now all I have to do is draw it. I hope to create a humongalicious zoomable graph of daily rating data for all 100 bots—if I can find a way to draw that many lines on a graph in a way that’s usable. Well, I’ll think of something. I chose powerful graphing software that’s fully capable of doing the job, but it’s complicated and my skill and patience may be less than fully capable....

Anyway, another appetizer. Here are static rating graphs for 2016 for the top 3 CIG finishers, all of which had many updates this year. The graphs run from 1 January 2016 to 27 September 2016. The authors may be interested in comparing their updates with movements in their graph. Krasi0 shows steady improvement since April, while the other two look more irregular.

graph of Krasi0’s rating in 2016

graph of Iron’s rating in 2016

graph of Tacmoo terran’s rating in 2016

SSCAIT initial and current Elo ratings

I’m still working on Elo curves over time, but today I have Elo ratings for each bot in the SSCAIT data at the beginning and end of its career. Here is yesterday’s table plus the new info, now sorted by decreasing current rating—the bot’s real strength yesterday as best we can measure. The topmost ratings are, to my surprise, exactly in the order I expected!

To make the ratings easier to interpret, I added two columns labeled “expect”. These are the expected winning rate of the bot against the average opponent. The rating system is designed so that the average Elo rating is constant at 1500, and it’s easy to compute the expected winning rate against an opponent rated 1500. The constant average rating, by the way, means that a bot which remains the same can see its rating decline over time if its opponents improve.

Ratings are not accurate for bots with a very small number of games. I plan to exclude those bots from the curves over time.

initialcurrent
botwin %EloexpectEloexpectgamesearliestlatest
krasi068.77%159363.07%216397.85%21422015 Nov 302016 Sep 27
Iron bot77.74%158061.31%208196.59%19992015 Nov 272016 Sep 26
Marian Devecka58.66%179084.15%206596.28%62892013 Dec 252016 Sep 27
Martin Rooijackers68.50%184087.62%201194.99%72902014 Jul 282016 Sep 27
tscmooz79.80%182386.52%199194.41%50062015 Feb 272016 Sep 27
tscmoo72.06%183887.50%197894.00%57192015 Jan 222016 Sep 27
LetaBot CIG 201675.68%174880.65%193292.32%4442016 Aug 012016 Sep 27
WuliBot72.76%177382.80%187189.43%9842016 Apr 192016 Sep 26
Simon Prins55.48%151351.87%186789.21%54312015 Jan 252016 Sep 27
ICELab81.12%218998.14%186589.10%83442013 Dec 252016 Sep 27
FlashTest69.44%174480.29%186388.99%2162016 Mar 222016 Jul 27
Sijia Xu71.65%185088.23%184988.17%23282015 Oct 102016 Sep 27
LetaBot SSCAI 2015 Final65.87%171077.01%181385.84%4162016 Aug 042016 Sep 27
Dave Churchill75.48%198594.22%180485.19%82752013 Dec 252016 Sep 27
Chris Coxe73.10%175481.19%180084.90%22012015 Sep 032016 Sep 27
Tomas Vajda79.37%216997.92%179084.15%83722013 Dec 252016 Sep 27
Flash65.69%145843.98%177783.13%9912016 Apr 182016 Sep 27
LetaBot IM noMCTS60.93%164569.73%176682.22%12262016 May 182016 Aug 01
Zia bot52.24%156859.66%175781.45%5362016 Jul 072016 Sep 27
A Jarocki62.77%171177.11%174180.02%9322015 Oct 042016 Jan 26
PeregrineBot57.29%169275.12%172878.79%12762016 Feb 092016 Sep 10
tscmoop78.16%189590.67%172178.11%19922015 Nov 112016 Sep 26
Andrew Smith65.00%170576.50%171877.81%83912013 Dec 252016 Sep 27
Florian Richoux62.11%177082.55%171677.62%82032013 Dec 252016 Sep 27
Carsten Nielsen66.08%170876.81%169575.45%47112015 Mar 172016 Sep 27
Soeren Klett63.62%206896.34%168774.58%82772013 Dec 252016 Sep 27
Vaclav Horazny37.35%10667.60%168674.47%64552013 Dec 252015 Nov 18
La Nuee51.61%149949.86%166271.76%5582015 Dec 132016 Mar 18
Jakub Trancik45.08%175581.27%165771.17%84162013 Dec 252016 Sep 27
Marek Suppa51.85%174680.47%165570.94%44132015 Jan 052016 Mar 18
Krasimir Krystev70.52%203395.56%165370.70%65102013 Dec 252016 Mar 10
ASPbot201149.78%167172.80%165270.58%2272015 Jan 292016 Feb 25
Marcin Bartnicki60.42%185588.53%163368.26%14352014 Nov 282016 Mar 18
Tomas Cere61.11%188890.32%163168.01%83732013 Dec 252016 Sep 27
MegaBot49.40%157660.77%163067.88%4192016 Aug 012016 Sep 27
Aurelien Lermant58.26%168874.69%162266.87%36872015 Jun 222016 Sep 27
Matej Kravjar49.57%172378.31%161966.49%32342013 Dec 252015 Feb 18
Daniel Blackburn43.79%165170.46%160564.67%68832013 Dec 252016 Jan 26
Gabriel Synnaeve45.96%173779.65%158461.86%16582013 Dec 252015 Nov 24
David Milec49.09%155257.43%156659.39%552015 Jan 132015 Jan 20
Odin201455.65%165971.41%156559.25%56482014 Dec 212016 Sep 11
Gaoyuan Chen48.05%158261.59%155958.41%51182015 Feb 102016 Sep 27
Henri Kumpulainen38.81%144742.43%155357.57%8942016 Jan 132016 May 31
Martin Dekar33.14%142939.92%153354.73%49102013 Dec 252016 Jan 25
Serega48.20%177182.64%150550.72%38032015 Jan 312016 Jan 26
Chris Ayers35.53%161065.32%148147.27%15202015 Aug 102016 Jan 26
Nathan a David39.34%144642.29%148147.27%10042016 Feb 232016 Aug 08
DAIDOES34.02%137032.12%147145.84%4852016 Jun 132016 Sep 08
FlashZerg0.00%147446.27%145944.13%72016 Apr 242016 May 12
Igor Lacik39.32%160865.06%145443.42%80732013 Dec 252016 Sep 08
Matej Istenik44.74%170976.91%144942.71%82972013 Dec 252016 Sep 27
EradicatumXVR40.88%153755.30%144341.87%46872013 Dec 252016 Jan 23
Ibrahim Awwal30.57%151051.44%143741.03%5302013 Dec 252014 Mar 24
Tomasz Michalski27.02%131425.53%143240.34%4332015 Dec 222016 Mar 18
Oleg Ostroumov48.75%171477.41%143140.20%36412013 Dec 252016 Jan 26
NUS Bot35.72%148247.41%142639.51%33372015 May 192016 Sep 06
Martin Pinter28.98%140937.20%142539.37%37402013 Dec 252015 Dec 11
Roman Danielis45.63%168874.69%141738.28%51552013 Dec 252016 Sep 26
ZerGreenBot22.22%140436.53%141638.14%362016 Sep 222016 Sep 27
Rafael Bocquet0.00%145042.85%141538.01%102015 Jun 232015 Jun 26
Flashrelease0.00%144942.71%141337.73%82016 Apr 242016 Apr 24
Marek Kadek37.29%155758.13%141337.73%76412013 Dec 252016 May 22
Ian Nicholas DaCosta37.12%139435.20%140436.53%29282015 Apr 272016 Sep 08
AwesomeBot29.81%132626.86%140336.39%4732016 Jun 162016 Sep 08
Radim Bobek23.37%131525.64%139034.68%11512015 Oct 012016 Mar 06
Adrian Sternmuller26.89%143640.89%137532.75%45292013 Dec 252016 Jul 22
Martin Strapko19.76%138834.42%136631.62%33862013 Dec 252016 Jan 26
Maja Nemsilajova23.81%136531.49%136331.25%42462013 Dec 252015 Nov 29
Johan Kayser24.46%129423.40%136131.00%4132016 Jul 292016 Sep 27
UPStarcraftAI24.75%134629.18%136030.88%6102015 Dec 242016 Apr 13
Martin Vlcak28.92%137032.12%135330.02%12242016 Feb 162016 Sep 07
Johannes Holzfuss35.04%153154.45%135129.78%6852016 Mar 052016 Jun 15
Vojtech Jirsa14.14%118614.09%135029.66%27862015 Jan 122015 Sep 05
JompaBot21.99%131625.75%134929.54%10552016 Feb 042016 Aug 13
Rob Bogie31.34%133527.89%134629.18%6512016 May 142016 Sep 06
Christoffer Artmann20.51%128922.89%134428.95%3952016 Aug 072016 Sep 27
Marek Gajdos22.69%125119.26%133127.43%13842016 Jan 302016 Sep 11
Travis Shelton23.59%139034.68%131425.53%12212016 Feb 282016 Sep 06
Peter Dobsa13.25%122717.20%130724.77%30272015 Jan 112015 Oct 02
VeRLab17.06%124118.38%130424.45%8972016 Feb 282016 Aug 01
Andrej Sekac11.76%135930.75%129623.61%682013 Dec 252014 Jan 04
Bjorn P Mattsson22.22%135129.78%129523.50%44422015 Apr 052016 Sep 27
Lukas Sedlacek22.86%134428.95%129323.30%702015 Jan 122015 Jan 20
Sergei Lebedinskij13.30%117813.55%129323.30%10832015 May 282015 Sep 03
Vladimir Jurenka38.45%163568.51%127821.79%61672013 Dec 252016 Sep 27
neverdieTRX20.66%126520.54%127221.21%3342016 Jul 192016 Sep 10
OpprimoBot21.85%132126.30%125619.71%20092015 Nov 182016 Sep 27
Marek Kruzliak14.45%115111.83%125519.62%9342013 Dec 252015 Jan 20
Sungguk Cha18.65%120715.62%125019.17%6972016 Jun 052016 Sep 27
Jacob Knudsen20.53%10838.31%124718.90%12572016 Feb 232016 Sep 10
Ludmila Nemsilajova16.04%113310.79%122817.28%5052013 Dec 252015 Jan 21
Karin Valisova17.68%123818.12%122617.12%11712013 Dec 252016 Jan 26
HoangPhuc15.67%113210.73%120915.77%3002016 Jul 182016 Sep 07
Sebastian Mahr15.06%120515.47%118213.82%12022016 Jan 132016 Aug 08
Jan Pajan14.48%121015.85%117913.61%11192013 Dec 252016 Jan 05
Pablo Garcia Sanchez12.20%112310.25%117413.28%5902015 Dec 242016 Apr 13
Ivana Kellyerova11.47%112910.57%113110.68%16302013 Dec 252015 Apr 01
Lucia Pivackova13.29%11119.63%10908.63%8352013 Dec 252015 Jan 20
Tae Jun Oh4.55%10697.72%10366.47%1542016 Mar 222016 Apr 11
Denis Ivancik10.76%11029.19%10226.00%5022013 Dec 252015 Jan 20
ButcherBoy4.74%9213.45%9704.52%4222016 Jun 212016 Sep 06
Jon W5.06%9203.43%9644.37%7902015 Apr 302015 Jul 09
Matyas Novy6.32%113010.62%8852.82%16932015 Feb 042015 Jul 09

How did I get the initial ratings? I had a cute idea. One of the issues with computing Elo ratings over time is: How do you initialize the ratings? Most systems either start everybody with the same rating, which makes an ugly graph, or use a different and less accurate method to estimate the rating in early games. But in this case I have the whole data set in hand. I set the final rating of every bot to the same rating and computed ratings backwards in time to find an initial rating. Then I threw away everything except the initial rating, and calculated the real ratings forward in time to find the ratings over time and the final ratings. That way every data point is equally good, from beginning to end. I doubt I’m the first to think of it, but it’s a cute idea and I’m pleased.

Next: I’ll find some sensible way to plot the curves. Stand by!

SSCAIT career records

Krasimir Krastev aka Krasi0 sent me a file of game results from SSCAIT, including 141,163 games recorded between 25 December 2013 and today. (Obviously it doesn’t include all games played today.) He’s particularly interested in the evolution of Elo ratings over time and my colorful crosstables per map.

It may take me a while to get to that stuff. Here’s a down payment. First, the career record of the 103 bots in the data, with win rates and dates. The top career win rate is IceBot from ICELab, followed by Tscmoo zerg and Tomas Vajda’s XIMP. Of course career win rate is not a fair comparison for bots which improved greatly over their careers, or which have shorter careers.

botwin %gamesearliestlatest
A Jarocki62.77%9322015 Oct 042016 Jan 26
Adrian Sternmuller26.89%45292013 Dec 252016 Jul 22
Andrej Sekac11.76%682013 Dec 252014 Jan 04
Andrew Smith65.00%83912013 Dec 252016 Sep 27
ASPbot201149.78%2272015 Jan 292016 Feb 25
Aurelien Lermant58.26%36872015 Jun 222016 Sep 27
AwesomeBot29.81%4732016 Jun 162016 Sep 08
Bjorn P Mattsson22.22%44422015 Apr 052016 Sep 27
ButcherBoy4.74%4222016 Jun 212016 Sep 06
Carsten Nielsen66.08%47112015 Mar 172016 Sep 27
Chris Ayers35.53%15202015 Aug 102016 Jan 26
Chris Coxe73.10%22012015 Sep 032016 Sep 27
Christoffer Artmann20.51%3952016 Aug 072016 Sep 27
DAIDOES34.02%4852016 Jun 132016 Sep 08
Daniel Blackburn43.79%68832013 Dec 252016 Jan 26
Dave Churchill75.48%82752013 Dec 252016 Sep 27
David Milec49.09%552015 Jan 132015 Jan 20
Denis Ivancik10.76%5022013 Dec 252015 Jan 20
EradicatumXVR40.88%46872013 Dec 252016 Jan 23
Flash65.69%9912016 Apr 182016 Sep 27
Flashrelease0.00%82016 Apr 242016 Apr 24
FlashTest69.44%2162016 Mar 222016 Jul 27
FlashZerg0.00%72016 Apr 242016 May 12
Florian Richoux62.11%82032013 Dec 252016 Sep 27
Gabriel Synnaeve45.96%16582013 Dec 252015 Nov 24
Gaoyuan Chen48.05%51182015 Feb 102016 Sep 27
Henri Kumpulainen38.81%8942016 Jan 132016 May 31
HoangPhuc15.67%3002016 Jul 182016 Sep 07
Ian Nicholas DaCosta37.12%29282015 Apr 272016 Sep 08
Ibrahim Awwal30.57%5302013 Dec 252014 Mar 24
ICELab81.12%83442013 Dec 252016 Sep 27
Igor Lacik39.32%80732013 Dec 252016 Sep 08
Iron bot77.74%19992015 Nov 272016 Sep 26
Ivana Kellyerova11.47%16302013 Dec 252015 Apr 01
Jacob Knudsen20.53%12572016 Feb 232016 Sep 10
Jakub Trancik45.08%84162013 Dec 252016 Sep 27
Jan Pajan14.48%11192013 Dec 252016 Jan 05
Johan Kayser24.46%4132016 Jul 292016 Sep 27
Johannes Holzfuss35.04%6852016 Mar 052016 Jun 15
JompaBot21.99%10552016 Feb 042016 Aug 13
Jon W5.06%7902015 Apr 302015 Jul 09
Karin Valisova17.68%11712013 Dec 252016 Jan 26
krasi068.77%21422015 Nov 302016 Sep 27
Krasimir Krystev70.52%65102013 Dec 252016 Mar 10
La Nuee51.61%5582015 Dec 132016 Mar 18
LetaBot CIG 201675.68%4442016 Aug 012016 Sep 27
LetaBot IM noMCTS60.93%12262016 May 182016 Aug 01
LetaBot SSCAI 2015 Final65.87%4162016 Aug 042016 Sep 27
Lucia Pivackova13.29%8352013 Dec 252015 Jan 20
Ludmila Nemsilajova16.04%5052013 Dec 252015 Jan 21
Lukas Sedlacek22.86%702015 Jan 122015 Jan 20
Maja Nemsilajova23.81%42462013 Dec 252015 Nov 29
Marcin Bartnicki60.42%14352014 Nov 282016 Mar 18
Marek Gajdos22.69%13842016 Jan 302016 Sep 11
Marek Kadek37.29%76412013 Dec 252016 May 22
Marek Kruzliak14.45%9342013 Dec 252015 Jan 20
Marek Suppa51.85%44132015 Jan 052016 Mar 18
Marian Devecka58.66%62892013 Dec 252016 Sep 27
Martin Dekar33.14%49102013 Dec 252016 Jan 25
Martin Pinter28.98%37402013 Dec 252015 Dec 11
Martin Rooijackers68.50%72902014 Jul 282016 Sep 27
Martin Strapko19.76%33862013 Dec 252016 Jan 26
Martin Vlcak28.92%12242016 Feb 162016 Sep 07
Matej Istenik44.74%82972013 Dec 252016 Sep 27
Matej Kravjar49.57%32342013 Dec 252015 Feb 18
Matyas Novy6.32%16932015 Feb 042015 Jul 09
MegaBot49.40%4192016 Aug 012016 Sep 27
Nathan a David39.34%10042016 Feb 232016 Aug 08
neverdieTRX20.66%3342016 Jul 192016 Sep 10
NUS Bot35.72%33372015 May 192016 Sep 06
Odin201455.65%56482014 Dec 212016 Sep 11
Oleg Ostroumov48.75%36412013 Dec 252016 Jan 26
OpprimoBot21.85%20092015 Nov 182016 Sep 27
Pablo Garcia Sanchez12.20%5902015 Dec 242016 Apr 13
PeregrineBot57.29%12762016 Feb 092016 Sep 10
Peter Dobsa13.25%30272015 Jan 112015 Oct 02
Radim Bobek23.37%11512015 Oct 012016 Mar 06
Rafael Bocquet0.00%102015 Jun 232015 Jun 26
Rob Bogie31.34%6512016 May 142016 Sep 06
Roman Danielis45.63%51552013 Dec 252016 Sep 26
Sebastian Mahr15.06%12022016 Jan 132016 Aug 08
Serega48.20%38032015 Jan 312016 Jan 26
Sergei Lebedinskij13.30%10832015 May 282015 Sep 03
Sijia Xu71.65%23282015 Oct 102016 Sep 27
Simon Prins55.48%54312015 Jan 252016 Sep 27
Soeren Klett63.62%82772013 Dec 252016 Sep 27
Sungguk Cha18.65%6972016 Jun 052016 Sep 27
Tae Jun Oh4.55%1542016 Mar 222016 Apr 11
Tomas Cere61.11%83732013 Dec 252016 Sep 27
Tomas Vajda79.37%83722013 Dec 252016 Sep 27
Tomasz Michalski27.02%4332015 Dec 222016 Mar 18
Travis Shelton23.59%12212016 Feb 282016 Sep 06
tscmoo72.06%57192015 Jan 222016 Sep 27
tscmoop78.16%19922015 Nov 112016 Sep 26
tscmooz79.80%50062015 Feb 272016 Sep 27
UPStarcraftAI24.75%6102015 Dec 242016 Apr 13
Vaclav Horazny37.35%64552013 Dec 252015 Nov 18
VeRLab17.06%8972016 Feb 282016 Aug 01
Vladimir Jurenka38.45%61672013 Dec 252016 Sep 27
Vojtech Jirsa14.14%27862015 Jan 122015 Sep 05
WuliBot72.76%9842016 Apr 192016 Sep 26
ZerGreenBot22.22%362016 Sep 222016 Sep 27
Zia bot52.24%5362016 Jul 072016 Sep 27

Also the maps. Games on 2014 October 24 and earlier did not specify the map; it is blank in the file. The first game with a map specified was 2014 October 29, so there’s a gap in the records (maybe downtime, or tournament stuff). Anyway, we can see that the maps are the usual SSCAIT map pack plus BGH for a small number of games on April Fools.

It is Most Curious that Electric Circuit has fewer games. It was last played on 2015 Feb 3, though I still see it in the map pack that they distribute.

mapgamesearliestlatest
(2)Benzene.scx82572014 Oct 292016 Sep 27
(2)Destination.scx81372014 Oct 292016 Sep 27
(2)HeartbreakRidge.scx82492014 Oct 292016 Sep 27
(3)NeoMoonGlaive.scx81572014 Oct 292016 Sep 27
(3)TauCross.scx81822014 Oct 292016 Sep 27
(4)Andromeda.scx82332014 Oct 292016 Sep 27
(4)CircuitBreaker.scx80832014 Oct 292016 Sep 27
(4)ElectricCircuit.scx9752014 Oct 292015 Feb 03
(4)EmpireoftheSun.scm83182014 Oct 292016 Sep 26
(4)FightingSpirit.scx82882014 Oct 292016 Sep 27
(4)Icarus.scm82372014 Oct 292016 Sep 27
(4)Jade.scx81542014 Oct 292016 Sep 27
(4)LaMancha1.1.scx81302014 Oct 292016 Sep 27
(4)Python.scx81752014 Oct 292016 Sep 27
(4)Roadrunner.scx81722014 Oct 292016 Sep 27
(8)BGH.scm4632015 Apr 012016 Apr 02
[none specified]249532013 Dec 252014 Oct 24

CIG 2016 - crosstables per map

Today I crush you under a mass of charts, crosstables for each of the 5 maps in CIG 2016. This is 4 dimensional data (bot 1, bot 2, map, winning rate) and I imagine there’s a clearer way to present it, but I don’t know what it is so you get it in the first form I thought of. At the end is a link to the software.

As a reminder, here are the maps.

  • (2)RideofValkyries1.0
  • (3)Alchemist1.0
  • (3)TauCross1.1
  • (4)LunaTheFinal2.3
  • (4)Python1.3

With 100 rounds and 5 maps, for each pairing 20 games were played on each map (minus a few games missing due to errors). So the percentages vary in steps of 5% (or more if games are missing), and the error bars are wide.

The qualifier tables are big. The first is the full tournament for comparison, the rest are the subtournaments played on each map.

overallIrontscmLetaOverMegaUAlbZZZKAiurTyrZiabTerrSRboOpprXelnBonjSals
Iron79.20%56%39%56%38%63%53%91%99%95%100%100%98%100%100%100%
tscmoo76.97%44%48%53%75%87%82%43%45%81%100%100%100%97%100%100%
LetaBot74.07%61%52%81%28%60%51%31%72%78%100%100%99%99%99%100%
Overkill70.98%44%47%19%84%32%56%79%31%88%98%95%93%99%100%100%
MegaBot70.11%62%25%72%16%52%7%66%85%99%96%95%87%91%99%100%
UAlbertaBot69.25%37%13%40%68%48%55%77%42%88%100%89%85%97%100%100%
ZZZKBot69.18%47%18%49%44%93%45%69%29%49%100%100%100%94%100%100%
Aiur63.15%9%57%69%21%34%23%31%44%89%86%96%99%94%96%100%
Tyr61.64%1%55%28%69%15%58%71%56%24%74%98%94%88%95%99%
Ziabot46.43%5%19%22%12%1%12%51%11%76%59%98%100%32%100%100%
TerranUAB33.51%0%0%0%2%4%0%0%14%26%41%81%76%90%70%98%
SRbotOne22.15%0%0%0%5%5%11%0%4%2%2%19%19%92%74%99%
OpprimoBot22.10%2%0%1%7%13%15%0%1%6%0%24%81%56%27%99%
XelnagaII20.71%0%3%1%1%9%3%6%6%12%68%10%8%44%56%83%
Bonjwa18.95%0%0%1%0%1%0%0%4%5%0%30%26%73%44%100%
Salsa1.47%0%0%0%0%0%0%0%0%1%0%2%1%1%17%0%
ValkyriesoverallIrontscmLetaOverMegaUAlbZZZKAiurTyrZiabTerrSRboOpprXelnBonjSals
Iron72.67%35%10%40%25%75%40%75%95%100%100%100%95%100%100%100%
tscmoo80.67%65%55%60%80%90%80%30%55%95%100%100%100%100%100%100%
LetaBot72.00%90%45%95%30%60%10%10%85%55%100%100%100%100%100%100%
Overkill71.33%60%40%5%85%25%50%95%45%70%95%100%100%100%100%100%
MegaBot70.33%75%20%70%15%30%0%65%90%100%95%95%100%100%100%100%
UAlbertaBot69.67%25%10%40%75%70%50%85%35%90%100%75%90%100%100%100%
ZZZKBot77.67%60%20%90%50%100%50%100%55%40%100%100%100%100%100%100%
Aiur63.00%25%70%90%5%35%15%0%70%70%80%95%100%90%100%100%
Tyr59.67%5%45%15%55%10%65%45%30%65%70%100%100%95%95%100%
Ziabot51.33%0%5%45%30%0%10%60%30%35%65%100%100%90%100%100%
TerranUAB34.67%0%0%0%5%5%0%0%20%30%35%80%80%90%80%95%
SRbotOne24.33%0%0%0%0%5%25%0%5%0%0%20%25%85%100%100%
OpprimoBot20.00%5%0%0%0%0%10%0%0%0%0%20%75%75%20%95%
XelnagaII12.00%0%0%0%0%0%0%0%10%5%10%10%15%25%40%65%
Bonjwa17.67%0%0%0%0%0%0%0%0%5%0%20%0%80%60%100%
Salsa3.00%0%0%0%0%0%0%0%0%0%0%5%0%5%35%0%
AlchemistoverallIrontscmLetaOverMegaUAlbZZZKAiurTyrZiabTerrSRboOpprXelnBonjSals
Iron77.00%80%45%80%40%40%0%95%100%75%100%100%100%100%100%100%
tscmoo69.90%20%35%75%50%80%75%15%35%75%100%100%100%89%100%100%
LetaBot72.33%55%65%55%15%40%80%15%75%90%100%100%100%100%95%100%
Overkill66.67%20%25%45%90%10%55%60%45%85%100%95%75%95%100%100%
MegaBot70.67%60%50%85%10%45%15%60%90%100%85%90%95%80%95%100%
UAlbertaBot77.00%60%20%60%90%55%40%85%80%95%100%85%85%100%100%100%
ZZZKBot72.67%100%25%20%45%85%60%65%50%45%100%100%100%95%100%100%
Aiur68.00%5%85%85%40%40%15%35%60%90%80%90%100%100%95%100%
Tyr51.33%0%65%25%55%10%20%50%40%10%60%90%80%80%85%100%
Ziabot47.33%25%25%10%15%0%5%55%10%90%50%100%100%25%100%100%
TerranUAB36.67%0%0%0%0%15%0%0%20%40%50%80%80%90%80%95%
SRbotOne23.67%0%0%0%5%10%15%0%10%10%0%20%5%100%80%100%
OpprimoBot22.33%0%0%0%25%5%15%0%0%20%0%20%95%35%20%100%
XelnagaII25.08%0%11%0%5%20%0%5%0%20%75%10%0%65%75%90%
Bonjwa18.33%0%0%5%0%5%0%0%5%15%0%20%20%80%25%100%
Salsa1.00%0%0%0%0%0%0%0%0%0%0%5%0%0%10%0%
Tau CrossoverallIrontscmLetaOverMegaUAlbZZZKAiurTyrZiabTerrSRboOpprXelnBonjSals
Iron82.33%65%40%75%15%55%95%90%100%100%100%100%100%100%100%100%
tscmoo77.33%35%35%40%100%90%95%45%35%85%100%100%100%100%100%100%
LetaBot80.67%60%65%90%25%80%80%60%50%100%100%100%100%100%100%100%
Overkill73.33%25%60%10%100%40%55%95%20%95%100%100%100%100%100%100%
MegaBot72.33%85%0%75%0%55%15%85%95%100%100%100%80%95%100%100%
UAlbertaBot67.33%45%10%20%60%45%65%75%35%85%100%95%75%100%100%100%
ZZZKBot57.67%5%5%20%45%85%35%25%5%55%100%100%100%85%100%100%
Aiur61.20%10%55%40%5%15%25%75%15%95%95%100%100%95%95%100%
Tyr68.33%0%65%50%80%5%65%95%85%10%80%100%100%90%100%100%
Ziabot43.00%0%15%0%5%0%15%45%5%90%65%95%100%10%100%100%
TerranUAB33.44%0%0%0%0%0%0%0%5%20%35%80%90%100%70%100%
SRbotOne21.00%0%0%0%0%0%5%0%0%0%5%20%20%95%70%100%
OpprimoBot20.67%0%0%0%0%20%25%0%0%0%0%10%80%55%20%100%
XelnagaII22.00%0%0%0%0%5%0%15%5%10%90%0%5%45%70%85%
Bonjwa18.33%0%0%0%0%0%0%0%5%0%0%30%30%80%30%100%
Salsa1.00%0%0%0%0%0%0%0%0%0%0%0%0%0%15%0%
LunaoverallIrontscmLetaOverMegaUAlbZZZKAiurTyrZiabTerrSRboOpprXelnBonjSals
Iron81.33%35%55%50%50%65%70%95%100%100%100%100%100%100%100%100%
tscmoo81.00%65%40%35%70%95%90%65%75%85%100%100%100%95%100%100%
LetaBot74.00%45%60%70%25%55%55%30%85%85%100%100%100%100%100%100%
Overkill68.90%50%65%30%70%35%55%65%0%95%100%80%89%100%100%100%
MegaBot71.24%50%30%75%30%70%0%65%75%95%100%95%90%95%100%100%
UAlbertaBot66.22%35%5%45%65%30%60%75%35%75%100%95%80%95%100%100%
ZZZKBot68.33%30%10%45%45%100%40%80%30%55%100%100%100%90%100%100%
Aiur60.67%5%35%70%35%35%25%20%35%90%85%95%95%90%95%100%
Tyr63.21%0%25%15%100%25%65%70%65%30%75%100%100%85%100%95%
Ziabot45.33%0%15%15%5%5%25%45%10%70%60%95%100%35%100%100%
TerranUAB31.67%0%0%0%0%0%0%0%15%25%40%85%65%80%65%100%
SRbotOne20.67%0%0%0%20%5%5%0%5%0%5%15%10%80%65%100%
OpprimoBot24.16%0%0%0%11%10%20%0%5%0%0%35%90%60%35%100%
XelnagaII22.07%0%5%0%0%5%5%10%10%15%65%20%20%40%45%90%
Bonjwa19.67%0%0%0%0%0%0%0%5%0%0%35%35%65%55%100%
Salsa1.01%0%0%0%0%0%0%0%0%5%0%0%0%0%10%0%
PythonoverallIrontscmLetaOverMegaUAlbZZZKAiurTyrZiabTerrSRboOpprXelnBonjSals
Iron82.67%65%45%35%60%80%60%100%100%100%100%100%95%100%100%100%
tscmoo75.92%35%75%55%75%80%70%60%25%65%100%100%100%100%100%100%
LetaBot71.33%55%25%95%45%65%30%40%65%60%100%100%95%95%100%100%
Overkill74.67%65%45%5%75%50%65%80%45%95%95%100%100%100%100%100%
MegaBot66.00%40%25%55%25%60%5%55%75%100%100%95%70%85%100%100%
UAlbertaBot66.00%20%20%35%50%40%60%65%25%95%100%95%95%90%100%100%
ZZZKBot69.57%40%30%70%35%95%40%75%5%53%100%100%100%100%100%100%
Aiur62.88%0%40%60%20%45%35%25%40%100%90%100%100%95%95%100%
Tyr65.67%0%75%35%55%25%75%95%60%5%85%100%90%90%95%100%
Ziabot45.12%0%35%40%5%0%5%47%0%95%53%100%100%0%100%100%
TerranUAB31.10%0%0%0%5%0%0%0%10%15%47%80%65%90%55%100%
SRbotOne21.07%0%0%0%0%5%5%0%0%0%0%20%35%100%55%95%
OpprimoBot23.33%5%0%5%0%30%5%0%0%10%0%35%65%55%40%100%
XelnagaII22.41%0%0%5%0%15%10%0%5%10%100%10%0%45%50%85%
Bonjwa20.74%0%0%0%0%0%0%0%5%5%0%45%45%60%50%100%
Salsa1.33%0%0%0%0%0%0%0%0%0%0%0%5%0%15%0%

The final tables are small. Again, the first is the full tournament, the rest are the maps.

overalltscmIronLetaZZZKOverUAlbMegaAiur
tscmoo65.14%52%44%79%71%77%83%50%
Iron54.43%48%38%49%49%74%30%93%
LetaBot53.71%56%62%49%81%69%30%29%
ZZZKBot53.08%21%51%51%42%35%93%78%
Overkill51.43%29%51%19%58%43%81%79%
UAlbertaBot49.07%23%26%31%65%57%76%66%
MegaBot38.00%17%70%70%7%19%24%59%
Aiur35.14%50%7%71%22%21%34%41%
ValkyriesoveralltscmIronLetaZZZKOverUAlbMegaAiur
tscmoo68.57%60%30%75%75%85%90%65%
Iron47.86%40%25%40%50%60%25%95%
LetaBot50.71%70%75%0%85%70%30%25%
ZZZKBot67.86%25%60%100%40%55%95%100%
Overkill52.14%25%50%15%60%40%100%75%
UAlbertaBot50.00%15%40%30%45%60%90%70%
MegaBot35.71%10%75%70%5%0%10%80%
Aiur27.14%35%5%75%0%25%30%20%
AlchemistoveralltscmIronLetaZZZKOverUAlbMegaAiur
tscmoo49.29%45%35%65%80%55%50%15%
Iron44.29%55%50%0%35%60%30%80%
LetaBot51.43%65%50%75%60%65%20%25%
ZZZKBot61.43%35%100%25%45%45%95%85%
Overkill51.43%20%65%40%55%45%75%60%
UAlbertaBot52.14%45%40%35%55%55%75%60%
MegaBot42.14%50%70%80%5%25%25%40%
Aiur47.86%85%20%75%15%40%40%60%
Tau CrossoveralltscmIronLetaZZZKOverUAlbMegaAiur
tscmoo61.43%25%45%90%45%100%95%30%
Iron66.43%75%55%95%50%85%15%90%
LetaBot61.43%55%45%85%90%80%35%40%
ZZZKBot29.29%10%5%15%50%25%75%25%
Overkill52.14%55%50%10%50%40%70%90%
UAlbertaBot45.00%0%15%20%75%60%75%70%
MegaBot37.86%5%85%65%25%30%25%30%
Aiur46.43%70%10%60%75%10%30%70%
LunaoveralltscmIronLetaZZZKOverUAlbMegaAiur
tscmoo71.43%70%60%80%75%75%90%50%
Iron55.00%30%30%55%50%80%40%100%
LetaBot51.43%40%70%65%75%65%20%25%
ZZZKBot52.14%20%45%35%60%25%100%80%
Overkill48.57%25%50%25%40%45%85%70%
UAlbertaBot50.00%25%20%35%75%55%70%70%
MegaBot40.00%10%60%80%0%15%30%85%
Aiur31.43%50%0%75%20%30%30%15%
PythonoveralltscmIronLetaZZZKOverUAlbMegaAiur
tscmoo75.00%60%50%85%80%70%90%90%
Iron58.57%40%30%55%60%85%40%100%
LetaBot53.57%50%70%20%95%65%45%30%
ZZZKBot54.68%15%45%80%15%26%100%100%
Overkill52.86%20%40%5%85%45%75%100%
UAlbertaBot48.20%30%15%35%74%55%70%60%
MegaBot34.29%10%60%55%0%25%30%60%
Aiur22.86%10%0%70%0%0%40%40%

The charts are full of small insights—more than I have time to examine. See for example how XelnagaII’s upset of Ziabot occurred on all maps except Ride of Valkyries; I’m sure that says something about at least one of those bots. We can tease out which pairings the map imbalances spring from. ZZZKBot did poorly on Tau Cross, as explained by Martin Rooijackers due to the long rush distance. And so on.

My strongest impression is how much results vary from map to map. I still think 5 maps are not enough to judge strength fairly. To my eye, the datapoint that stands out most is that ZZZKBot defeated the powerful Iron 100% of the time on Alchemist, in both the qualifier and the final, although otherwise Alchemist was a mediocre map for ZZZKBot. It looks as though Iron has a strategy bug on that map which ZZZKBot exploits. All bot authors who competed may want to eye the charts for hints about weaknesses to fix.

Download a zip file of the perl scripts with documentation.

CIG 2016 - the final hidden in the qualifier

Yesterday I claimed that the final stage of CIG 2016 produced little new information, because it was equivalent to drawing a subset from the qualifiers. Is it true? I wrote a script to render crosstables from subsets of game results.

Here’s my rendition of the real finals. I liked the red and green color coding of win rates in the original, but some people are red-green colorblind so my version has red and blue instead. I also went with a more contrasty color curve.

overalltscmIronLetaZZZKOverUAlbMegaAiur
tscmoo65.14%52%44%79%71%77%83%50%
Iron54.43%48%38%49%49%74%30%93%
LetaBot53.71%56%62%49%81%69%30%29%
ZZZKBot53.08%21%51%51%42%35%93%78%
Overkill51.43%29%51%19%58%43%81%79%
UAlbertaBot49.07%23%26%31%65%57%76%66%
MegaBot38.00%17%70%70%7%19%24%59%
Aiur35.14%50%7%71%22%21%34%41%

Here is the crosstable of the final hidden in the qualifier, which is to say the qualifier games played between finalists.

overalltscmIronLetaZZZKOverUAlbMegaAiur
tscmoo61.71%44%48%82%53%87%75%43%
Iron56.57%56%39%53%56%63%38%91%
LetaBot52.00%52%61%51%81%60%28%31%
ZZZKBot52.14%18%47%49%44%45%93%69%
Overkill51.57%47%44%19%56%32%84%79%
UAlbertaBot48.29%13%37%40%55%68%48%77%
MegaBot42.86%25%62%72%7%16%52%66%
Aiur34.86%57%9%69%31%21%23%34%

Overall results match closely. LetaBot and ZZZKBot have switched ranks, but that’s not a surprise because their scores were extremely close.

The 2 table cells with the largest differences are Tscmoo vs Overkill and MegaBot vs UAlbertaBot. The Tscmoo-Overkill numbers are within the expected range of statistical variation, according to spot checks with Fisher’s Exact Test, but the MegaBot-UAlbertaBot numbers are highly surprising, far outside the expected range. (The right way to do this would test both whole tables as a sample of samples of samples. :-) So there’s indication that something may be afoot.

I had a new thought. It’s theoretically possible that differences are caused by learning bots which generalize across opponents. Tscmoo and MegaBot are both learning bots (I verified it: they both wrote stuff to their learning files) and both seem as though they might be able to generalize across opponents. (Overkill is a learning bot but does not generalize.) So my original claim is not 100% true: The qualifiers don’t entirely duplicate the final in the presence of learning bots which generalize across opponents. Alternately, there could have been a problem with a big effect on that pairing (such as a bug in MegaBot related to its learning, an example which is equivalent to mis-generalizing across opponents). We have the source and the replays, so a sufficiently deep dig should turn up the issue if it is in the bots. There’s a chance that the issue is with the tournament operations, or with my script.

Here I combine the qualifier results with the final results to get the best numbers available. The organizers for whatever reason explicitly decided not to do this. Luckily, it doesn’t change the ranking of the bots.

overall
tscmoo63.43%
Iron55.50%
LetaBot52.86%
ZZZKBot52.61%
Overkill51.50%
UAlbertaBot48.68%
MegaBot40.43%
Aiur35.00%

Tomorrow: More map analysis. Also I’ll release the script for others to play with.

CIG 2016 results discussion

I got ahead of myself yesterday—I should step back and talk about the CIG 2016 results more generally! Martin Rooijackers aka LetaBot sent me a few observations by e-mail. They mostly match up with my observations, and I’ll add a few of my own.

• Terran Renaissance confirmed, as predicted (probably by everybody who cared to predict).

• The top 3 winners, besides being terran, are all bots with many updates over the last several months.

• 3 bots of the final 8 are carryovers from past years (#5 Overkill, #6 UAlbertaBot, and #8 AIUR). They scored in the lower half. #4 ZZZKBot seems to have been only slightly updated. The long work put into the top 3 paid off in playing strength.

• Martin Rooijackers observes that #7 MegaBot is the highest-scoring brand new bot. It’s true if you count Iron as a continuation of Stone. And given MegaBot’s self-description as a meta-bot that uses the strategies of others, MegaBot is arguably not brand new either. In any case, the point is that it seems to take a long period of work to get to the top. The competition is fierce.

• None of the final 8 bots dominated the others. Even tail-ender AIUR had an equal record against winner Tscmoo and a winning record against LetaBot. The CIG 2016 finals crosstable has upsets throughout. Comparing to the AIIDE 2015 crosstable with 22 participants, the rate of upsets of bots near each other in rank seems visually similar, so with only 8 final bots the upsets run all the way through. Generally, bot #n is not clearly better than bot #n+1; the ranking is not stable at that level. In the qualifying stage, the rate of upsets visually looks steady down to #9 Tyr and then falls. AIIDE 2015 did not have that pattern.

• I predicted that ZZZKBot still had a chance to make it into the top 3. It didn’t, but it scored 53.08% to make #4 in the finals versus #3 LetaBot’s 53.71%. I think the prediction was justified. This was its last chance, though, without big updates.

• The qualifier results and finals results look different. Iron was narrowly on top in the qualifiers, but Tscmoo pulled well ahead in the finals (a surprise to me). Apparently Tscmoo is better tuned to defeat strong opponents.

• The slides on the result page include a chart of win rates over time which shows that learning helps some, but (as in the past) not as much as you’d hope. To learn more we need smarter learning. I’ll drop a few suggestions in a future post.

The bottom line is that we’re making good progress, though we’re still not far along the path. Tscmoo’s long short term memory is a pioneering idea and Tscmoo finished #1, but we don’t know much about it. Did the memory help results? Meanwhile, LetaBot finished #3 here, and is in a strong position as Martin Rooijackers tries to pioneer a next step in another direction, a tactical search derived from MaasCraft. Will the search lead to the hoped-for jump in strength? Tune in next time!

I question the tournament design. They ran a 100-round round robin with 16 bots and used the results to accept half of the entrants into the final—a staged design with qualifier and finals. That’s perfectly reasonable; it says that they’re more interested in who beats the strong than who consistently beats the weak. Having selected the finalists, they discarded the qualifier results and ran an independent final with 100 more rounds on the same maps for the 8 finalists. They even discarded bot learning files from the qualifier, so that nothing carried over. The final duplicated the qualifiers, only with fewer bots, and produced little new information. They could have saved the time and extracted the final results from the qualifier stage. It would have been equivalent.

In a staged tournament, each stage should produce new information. It could add to the qualifier results. It could have more rounds. It could include seeded opponents that skipped the qualifiers (though I wouldn’t recommend that for an academic tournament). It could include different maps. It could follow harsher rules. But something!

I can understand why they didn’t pass the qualifier results through to the final stage. They had the software they had, and an organizer’s time is always short. But this final had no point. I hope future tournaments will remember the lesson.

map balance - bot balance in CIG 2016

CIG 2016 reported its results in the same format as AIIDE 2015 (I’m sure they used the same software), so I was able to compute the map balance with a few adjustments to my script. The tournament was run in two halves, qualifiers and finals, each with 100 rounds. With 5 maps, that makes 20 times through the map pool. They could have used twice as many maps without any disadvantage that I see.

The qualifiers, with 16 bots playing 12,000 games total (minus a few lost to errors):

mapTvZZvPPvT
winsnwinsnwinsn
(2)RideofValkyries.scx49%64061%24057%480
(3)Alchemist.scm50%64045%24060%479
(3)TauCross.scx56%64043%24053%479
(4)LunaTheFinal.scx53%63747%24053%480
(4)Python.scx49%63845%24050%478
overall51%319548%120055%2396

The 3 races came out remarkably even! We already know that’s more due to the strength distribution of bots in the tournament than to the fairness of the game. The low-high spread in TvZ was 56%-49% = 7%; in ZvP 18%, and in PvT 7%. Ride of Valkyries had strikingly different ZvP results than the other maps. I don’t know why. Can anybody guess? The human balance also showed one map standing out in ZvP, but it was Alchemist.

The final, with 8 bots playing 2800 games, looks considerably different:

mapTvZZvPPvT
winsnwinsnwinsn
(2)RideofValkyries.scx54%12092%8045%120
(3)Alchemist.scm52%12079%8063%120
(3)TauCross.scx76%12065%8049%120
(4)LunaTheFinal.scx67%12084%8046%120
(4)Python.scx66%12094%8034%120
overall63%60083%40048%600

Here, protoss did poorly because the protoss bots came out on the bottom this time. It’s interesting that the middle-of-the-table zergs did more to hold down the protoss than the winning terrans (but it fits with the game storyline :-). Beyond that, I’m reluctant to draw conclusions from this smaller number of games with fewer players.

I feel vindicated: Map balance can make a difference, even though we don’t understand what the difference is!

map balance - comparing pro and bot balance

I started to think about fancy ways to normalize map balance data so that the numbers could be compared—and then I realized, who the hell cares? The data’s not good enough in the first place, at least the bot data, which is based on only 21 bots with idiosyncratic play styles and big race imbalances regardless of the maps. We can only get a general idea of the comparison anyway.

So I decided on a simple subtraction of the average from each map balance number, so that a map with average balance has normalized balance 0%. Then we can compare maps to see if they have similar relative balance for pros and bots. After normalization, TvZ > 0 means that terran did better than average on that map, and TvZ < 0 means that terran did worse.

mapTvZZvPPvT
probotprobotprobot
Benzene10.8%-2.9%-5.3%1.3%-5.1%-0.4%
Destination-1.0%-1.9%2.6%2.3%0.7%-0.4%
Heartbreak Ridge-4.7%3.1%2.2%-0.7%5.3%-3.4%
Aztec-14.3%-1.9%-4.4%1.3%11.6%-0.4%
Tau Cross-3.3%-0.9%-4.4%-0.7%-1.8%-0.4%
Andromeda-10.6%1.1%4.4%-1.7%3.8%-4.4%
Circuit Breaker-0.4%-0.9%-2.6%-1.7%-0.8%2.6%
Empire of the Sun10.9%-4.9%-4.4%-1.7%-2.7%0.6%
Fortress11.0%8.1%12.3%-0.7%-2.6%4.6%
Python1.9%1.1%-0.5%2.3%-8.0%1.6%

There’s no “overall” row because, after normalization, it’s just a row of zeroes. Also, as I mentioned, the sizes of the imbalances can’t be compared directly. A relative balance of -5% in the bot ZvP column (average balance 71%) doesn’t mean the same thing as -5% in the pro ZvP column (average balance 54.4%).

No convincing pattern is visible. The pro and bot columns have the same sign in 12 cases, which is not distinguishable from 50% (15 cases). Sometimes a pro map with a large imbalance has a large imbalance for bots too; sometimes not. Here’s a scatter chart with relative pro balance on the x-axis and relative bot balance on the y. Remember that the signs are arbitrary: We arbitrarily chose to compare TvZ rather than ZvT, so + and - were chosen arbitrarily. If your eyes think they see a pattern, flip one or two of the symbol sets around one axis or the other before you decide it’s real.

scatter chart showing the lack of relationship between map balance for pros and for bots

What does it all mean in practice? There are some maps with apparent imbalances, which means we should have map pools large enough that imbalances tend to average out. Most maps are not far from balanced, so 10 maps should be enough; the 5 maps of CIG 2016 do not seem enough. Other than that, there’s no reason to change how we select maps. We don’t know whether last year’s relative map balances will carry over to this year, when the skill of the top bots is greater and they are terran rather than zerg. The main conclusion is the same as the conclusion of all studies since the invention of science: More research is needed!