Reports · 2026-09-19
A self-play pool of setups beats the prior where it never played and is the harder source to exploit
The setup-source contrasts
| Row | Value | Low | High | n |
|---|---|---|---|---|
| Pool against the prior | 0.315 | 0.223 | 0.407 | 200 |
| Pool against uniform | 0.792 | 0.728 | 0.857 | 200 |
| The pool's exploiter against the pool | 0.15 | 0.043 | 0.257 | 200 |
| The prior's exploiter against the prior | 0.458 | 0.364 | 0.551 | 200 |
| Pool against the prior, greedy | 0.23 | 0.111 | 0.349 | 100 |
The mechanism (the setups binary, documented in the server's
docs/setups.md) draws
1,024 setups from the structured prior and halves them under the move
policy: every surviving setup plays eight paired games a round against
four fresh prior opponents, both seats, and from the second round a
quarter of the survivors is replaced by mutants, two pieces swapped and
rejected when the mutant breaks the prior's rules. Five rounds and 15,872
games on 8 threads produced 32 distinct setups, 17 of them mutants. The
evaluation cells then replay the pool against the prior and against
uniform draws on seeds disjoint from the procedure's, and the same
procedure run down to a single setup against each source measures how
exploitable the source is.
| Cell (400 paired games, seeds 0 to 199) | Pool-side effective | 95% Wilson | Per-seed contrast | 95% interval |
|---|---|---|---|---|
| pool against the prior, held-out | 0.658 | 0.610 to 0.702 | 0.315 | 0.223 to 0.407 |
| pool against uniform | 0.896 | 0.863 to 0.923 | 0.792 | 0.728 to 0.857 |
| the pool's exploiter against the pool | 0.575 | 0.526 to 0.623 | 0.150 | 0.043 to 0.257 |
| the prior's exploiter against the prior | 0.729 | 0.683 to 0.770 | 0.458 | 0.364 to 0.551 |
The prior's registered contrast against uniform on these seeds and this policy was 0.670 (0.589 to 0.751); the pool scores 0.792 (0.728 to 0.857) against the same baseline, a higher point estimate with overlapping intervals. Selection keeps roughly half of what the prior still gives away to uniform: the pool beats the prior by 0.315, and the prior beats uniform by 0.670. The greedy transfer cell, 200 paired games with greedy in both seats, reads 0.230 (0.111 to 0.349) for the pool, above zero under a move policy the pool was not selected under, with a draw share of 34% as greedy against greedy stalls into quiet-move draws.
Diversity and what selection did
The selected pool
Spy: percent of setups with the piece on each square, front row at the top, back row at the bottom.
The structured prior
Spy: percent of setups with the piece on each square, front row at the top, back row at the bottom.
Selection's strongest pressure is on the Flag: all 32 Flags sit on the back row, where the prior draws 74.7%, for 3.2 bits of entropy on the Flag's square against the prior's 4.14 (uniform: 5.32). The Miners follow the Flag back, with 50.6% on the back row against the prior's 38%, and the Scouts crowd forward. The pool keeps less diversity than the source it narrows, which is the trade the exploitability measurement exists to price, and the price came out in the pool's favour: the best opposing setup the procedure could find scores well below half against the pool while the prior's own exploiter takes nearly three games in four. Both exploiters are mutants of earlier candidates, found from 1,024 draws over ten rounds and 16,368 games each.
No game of the pool-against-prior cell ended within 20 plies, and in the pool-against-uniform cell all 38 early games were lost by the uniform side. The worst setup in the pool still scored 0.675 in selection and the best 0.917, so the pool holds no arrangement that loses the opening to the prior.
What this changes
The approach page's rule for selection is met: the pool beats the prior
on held-out opposing setups by an interval above zero, and its
exploitability proxy is no worse than the prior's. For native engine
players the pool is the strongest measured setup source, sampled
uniformly through the registry's "setup":"pool:<path>". Whether it
replaces the prior as the default is the user's call, and the browser
build cannot follow: it has no files and rejects pool paths, so the prior
stays the portable choice and the registry default remains uniform
until the user changes it. The learned setup network of the scaled run
now has to beat this pool to justify its cost, as the
program demands of T5.
Replays from the library, seed 0 from both seats: pool beating the prior, prior holding the pool to a draw, the pool's exploiter winning as Red, the pool winning the return seat, the prior's exploiter winning as Red, the prior losing the return seat.
Run records: selection, exploit procedures, pool against prior, pool against uniform, the pool's exploiter, the prior's exploiter, greedy transfer.
Reproduction
Registrations experiments/0b727d71-5100-4b8b-8fc2-f8fe9d7386a1.toml
(the selection procedure),
experiments/9fbb92bf-2969-4683-855f-6d0721346e94.toml (the two exploit
procedures), experiments/c75d346c-11fc-4cb1-af21-d993b87172f3.toml,
experiments/6fb87c90-d869-46d2-8a57-eb2b367a74a0.toml,
experiments/ca2fd11a-ff2c-40d5-b5e6-f8a2370e5962.toml,
experiments/1cea5672-b0f9-48eb-83dc-72f7525e67e2.toml and
experiments/be95e294-19d1-4663-821b-95441bbce000.toml (the five
evaluation cells). Server commit 0eb994c, research commit 19c62a6.
The pool file is the committed asset content/assets/setup-pool.json.
Commands, from the repository root:
cd server && target/release/setups select --policy 'expectimax:{"samples":16,"depth":2}' --n 1024 --games 8 --target 32 --seed 20260919 --rules training --threads 8 --out ../research/runs/setup-selection/pool.json
cd server && target/release/setups exploit --policy 'expectimax:{"samples":16,"depth":2}' --against ../research/content/assets/setup-pool.json --n 1024 --games 8 --seed 20260920 --rules training --threads 8 --out ../research/runs/setup-selection/exploiter-pool.json
cd server && target/release/setups exploit --policy 'expectimax:{"samples":16,"depth":2}' --against structured --n 1024 --games 8 --seed 20260921 --rules training --threads 8 --out ../research/runs/setup-selection/exploiter-prior.json
cd server && target/release/matchup -- --red 'pool=expectimax:{"samples":16,"depth":2,"setup":"pool:../research/content/assets/setup-pool.json"}' --blue 'prior=expectimax:{"samples":16,"depth":2,"setup":"structured"}' --games 400 --seed 0 --rules training --threads 8 --out ../research/runs/setup-selection/cell-pool-v-prior.json
cd research && python3 scripts/setup_selection_assets.py runs/setup-selection/pool.json runs/setup-selection/cell-pool-v-prior.json runs/setup-selection/cell-pool-v-uniform.json runs/setup-selection/cell-exploiter-v-pool.json runs/setup-selection/cell-exploiter-v-prior.json runs/setup-selection/cell-greedy-pool-v-prior.jsonThe five cells and both exploits together played 49,472 games of expectimax self-play on 8 threads in about two hours, beside other agents' jobs; the per-move clocks in the records are shared-machine numbers. Each record carries the SHA-256 of its archived JSON.