Reports · 2026-09-18

The self-play smoke run trains but does not yet beat random

Self-play smoke network after twenty iterations

Self-play smoke network after twenty iterations0.0019.3538.6958.0477.39network vs random60.00 n=40network vs greedy17.50 n=40
Self-play smoke network after twenty iterations
RowValueLowHighn
network vs random6044.673.740
network vs greedy17.58.73240
The saved move network sampling moves directly, 40 games each with alternating seats, 95% Wilson intervals; built by scripts/build_experiment_assets.py from the evaluation output.

Entropy did not collapse

The registration named one failure mode: the paper's damping schedules annealing too fast on a tiny run and collapsing the policy. The opposite happened. Move entropy started at 2.70 nats, rose to 3.23 by iteration 7 and ended at 3.08; the lowest value was the first one, far above the half-of-initial floor. The importance-ratio clip rate stayed under 5% and the reverse KL to the magnet policy fell slowly from 0.135 to 0.093. The policy moved little in twenty iterations, which is what small updates under strong regularisation should do at the start of the paper's schedule.

Move entropy and clip rate over the smoke run

Move entropy and clip rate over the smoke run00.511.522.532.557.51012.51517.520iterationentropy (nats) or clip rate
  • move entropy
  • clip rate
  • KL to magnet
Move entropy and clip rate over the smoke run
Seriesiterationentropy (nats) or clip rate
move entropy12.7007
move entropy23.0273
move entropy33.1233
move entropy43.1743
move entropy53.1957
move entropy63.2272
move entropy73.2317
move entropy83.2019
move entropy93.2301
move entropy103.2217
move entropy113.1736
move entropy123.1942
move entropy133.1887
move entropy143.1757
move entropy153.1363
move entropy163.1132
move entropy173.124
move entropy183.1339
move entropy193.1634
move entropy203.0788
clip rate10.0241
clip rate20.0438
clip rate30.0128
clip rate40.02
clip rate50.0038
clip rate60.0122
clip rate70.0091
clip rate80.0112
clip rate90.0063
clip rate100.0056
clip rate110.0072
clip rate120.0064
clip rate130.0083
clip rate140.0087
clip rate150.0042
clip rate160.0037
clip rate170.0014
clip rate180.0004
clip rate190.0018
clip rate200.0234
KL to magnet10.1348
KL to magnet20.1386
KL to magnet30.1418
KL to magnet40.1442
KL to magnet50.1342
KL to magnet60.1392
KL to magnet70.1205
KL to magnet80.1289
KL to magnet90.12
KL to magnet100.113
KL to magnet110.115
KL to magnet120.1208
KL to magnet130.116
KL to magnet140.1061
KL to magnet150.1055
KL to magnet160.1076
KL to magnet170.1041
KL to magnet180.0997
KL to magnet190.0991
KL to magnet200.0926
Mean policy entropy (nats) and importance-ratio clip rate per iteration of the registered smoke run; the entropy never fell below half its first value; built by scripts/build_experiment_assets.py from history.jsonl.

The network stalls rather than loses

Twenty-six of the forty games against random ended without a Flag capture, which under the training rules means the 100-move battleless limit. A network that has learned little about attacking plays quiet moves, random play rarely finds the Flag, and the game times out. The three losses and the seven wins against greedy show the network can lose material and can take a Flag; it has not learned to force either. The paper's own training used 100 battleless moves for the same reason it gives: to discourage dawdling. On this scale the counter plane alone did not do that in twenty iterations.

28%11/40, 16% to 43%

Deviations recorded

The evaluator alternates the network's seat by game parity with one fresh seed per game, so the forty games are seat-balanced but not paired on identical setups; the network's own setups came from its setup network rather than being uniform, because the run saved one. Neither changes the outcome. The next registration scales the run (more iterations, the small preset) and adds the draw-counter diagnostic before any claim about the Ataraxos rung.

Run record

Reproduction

Registration experiments/db0047e7-dd11-4f65-8928-fcee3f1c0a6b.toml. Commands, from the research directory with the virtualenv from just setup and the bindings from just build-env:

.venv/bin/python -m armies_train train --preset smoke --iterations 20 --out runs/db0047e7-dd11-4f65-8928-fcee3f1c0a6b/smoke --seed 0
.venv/bin/python -m armies_train evaluate --run runs/db0047e7-dd11-4f65-8928-fcee3f1c0a6b/smoke --opponent random --games 40 --seed 0
.venv/bin/python -m armies_train evaluate --run runs/db0047e7-dd11-4f65-8928-fcee3f1c0a6b/smoke --opponent greedy --games 40 --seed 0
python3 scripts/build_experiment_assets.py

The record carries the SHA-256 of the history, configuration and evaluation files; the weights are kept out of git.