An evolved NNUE leaf, distilled from a depth-5 teacher
A compact neural leaf evaluator for the depth-3 fair search, warm-started by distilling a depth-5 teacher's sibling-complete root values and then refined by an evolutionary search whose fitness is whole-game score itself.
Try many slightly different versions, keep the ones that did best, make the next generation from them, and repeat; no gradient needed.
On this page
- Depth-5-distilled NNUE leaf refined by paired-fitness whole-game evolution inside the depth-3 fair search
- Depth-5-distilled NNUE leaf refined by paired-fitness whole-game evolution inside the depth-3 fair search (v2: operational parameters fixed in the record body)
- Continued whole-game evolution of the depth-5-distilled NNUE leaf from the first run's generation-60 population, with annealed mutation and a preregistered plateau stop (up to 1,000 generations)
- Second continuation of the depth-5-distilled NNUE leaf evolution: resume from the plateau population with a slower mutation-size decay (up to 1,000 further generations)
- Depth-5-distilled NNUE leaf refined by paired-fitness whole-game evolution inside the depth-3 fair search (v2: operational parameters fixed in the record body)
- Continued whole-game evolution of the depth-5-distilled NNUE leaf from the first run's generation-60 population, with annealed mutation and a preregistered plateau stop (up to 1,000 generations)
- Second continuation of the depth-5-distilled NNUE leaf evolution: resume from the plateau population with a slower mutation-size decay (up to 1,000 further generations)
The problem
Every search on this site has the same shape: imagine each legal column, imagine the next disc, imagine the reply, and so on for a few moves, then stop and ask a leaf evaluator how good the board at the end of each imagined line is. The points won along the way are known exactly; the leaf guesses the rest. The frozen fair leaf is a sum of eighteen hand-written terms.
How much the leaf matters was measured before any training signal was read. On a frozen snapshot of thirty teacher games, every root was searched twice at each depth, once with the fair leaf and once with a leaf that returns zero, so the only difference between the two sets of column values is the leaf term.
| search depth | roots | leaf's share of the column spread | in-tree score spread (points) | leaf-term spread (points) | decisions that change without the leaf | agreement with the depth-5 teacher, fair leaf / zero leaf |
|---|---|---|---|---|---|---|
| 3 plies | 400 | 0.97 | 393 | 4,033 | 55.5% | 72.0% / 45.0% |
| 4 plies | 80 | 0.95 | 643 | 4,093 | 43.8% | 73.8% / 47.5% |
| 5 plies | 8 | 0.97 | 1,141 | 3,813 | 50.0% | 100.0% / 50.0% |
At every depth the leaf term carries about nineteen twentieths of the spread between columns, and removing it changes the chosen column at roughly half of the roots. The search multiplies the leaf's influence, because the same evaluator is applied at every frontier position of every line. A better leaf is worth pursuing for the same reason a worse one is dangerous.
Two earlier lines of work had each failed in an instructive way. Networks trained to imitate a search learned the positions the teacher visited and then could not rank the six sibling moves it never played (the sibling trap). And the one time a leaf was tuned by evolution on whole-game score directly, the eighteen hand-written weights of the fair leaf under CMA-ES, the optimiser followed selection noise into a worse evaluator (the first leaf evolution). Its post-mortem found that with 32 games per candidate and a paired standard deviation near 200,000 points, fresh seeds every generation left selection noise alone to steer.
Proposed solution
Replace the formula, for the three-move search, with a small neural network of the kind chess engines call an NNUE, an "efficiently updatable neural network" (primer). It is sparse enough to evaluate in a microsecond, which a leaf called hundreds of thousands of times per decision can afford, and expressive enough to encode board patterns that eighteen linear terms cannot. The one on this page has about 572,000 weights, almost all of them in the first table.
The design keeps what each earlier failure taught. Imitation is used only as a warm start, from a corpus that records a depth-5 teacher's value for every legal column at every position, so the sibling-coverage hole is closed at the source. Evolution then refines the warm start on the deployed objective, the final score of complete games, with the noise handled: every candidate in a generation plays the same games (common random numbers), and selection compares ranks. The network reads only the visible board, the visible next disc, the moves until the next rise and whether the game is over, and the depth-5 teacher reads the same public state.
How it works
- Teacher corpus (stage A). The frozen fair evaluator, driven by the fast Rust bitboard engine, plays training games at depth 5 with seven chance strata. Five moves is one full row-rise cycle, so every rise consequence of a root move is inside the teacher's horizon. At every position the corpus records the board, the next disc, the moves until the rise, and the teacher's value for all seven columns; the search computes those anyway, so the corpus is sibling-complete for free. Each teacher game is capped at 500 moves, and the stage stops starting new games at a fixed wall-clock budget; whatever whole games have completed are the corpus.
- Warm start (stage B). The network is fitted to the teacher's values with the Adam optimiser on a Huber loss measured in rise units, with a whole-origin split so that validation never sees a position from a game it trained on. Training runs for 16 epochs and the epoch with the lowest validation loss is frozen. A deployment-faithful probe then puts that network inside the real depth-3 search on held-out positions and asks how often the search picks the teacher's column.
- Evolution (stage C). Generation 0 is the warm start plus 31 copies with Gaussian noise added to every weight. Each generation draws a fresh block of 32 seeds that no candidate has seen, and all 32 candidates play all 32 seeds as the leaf of the depth-3, seven-stratum fair search with the ordinary 2,000-move cap; the frozen fair leaf and the unevolved warm start play the same seeds as two controls that are never selected. A candidate's fitness is the plain mean of its 32 final scores. The four fittest are copied unchanged; the other 28 slots are filled by tournaments of three whose winner is copied and has every weight perturbed by Gaussian noise at 5% of its tensor's standard deviation. The next population is written to disk before the generation's artifact is committed, so a crash replays the generation from identical inputs.
- Re-selection. After the last generation, the eight fittest candidates each replay a fresh 128-game block, and the one with the highest mean is frozen as the candidate. Its SHA-256 is recorded before the screen block is opened, so the vector that is screened is provably the one that was selected. The best of thirty-two noisy estimates is biased upward, and 128 fresh games shrink that bias before anything is claimed.
- Screen (stage D). The frozen candidate plays 64 games on a seed block nothing has ever opened, against three arms on the identical seeds: the same depth-3 search with the frozen fair leaf (the comparator), the same search with the unevolved warm start (the ablation, isolating what evolution added), and the fair leaf at depth 4 (the program's standing reference, for context). The screen is played exactly once, whatever it shows. The network's output at every step is one number per board, in units of a row rise, consumed by the search.
What happened
RUN-20260902T035644Z-c1fd8987 under EX-20260902-nnue-evolution-d3-v2-49c18bc2 · run record lifecycle: completedsnapshot 2026-09-03T02:57:58Z- A · teacher corpusdone177 complete games, 21,618 labelled roots
- B · supervised warm startdonebest epoch 8 of 16, validation Huber 0.6873
- C · evolutiondone60 of up to 60 generations completed
- C · elite re-selectiondonecandidate frozen, SHA-256 edd0d2efd181…
- D · held-out screendonepreregistered gate not passed
Source
Values copied from the run snapshot web/content/figures/nnue-evolution/RUN-20260902T035644Z-c1fd8987.json, which web/scripts/extract-nnue-evolution.ts writes from the run's artifacts.
On the 64 never-read held-out games, the evolved leaf scored 106,964 points less per game than the frozen fair leaf inside the same depth-3 search (bootstrap 95% lower bound −146,580), so the preregistered gate fails and the theory's claim is not supported as tested (RS-20260903T025751Z-6577b33e, run valid, outcome fail, ledger-recorded). The same screen shows what evolution did do: the evolved leaf beat its own unevolved warm start by 35,375 points on the same seeds, a gain whose lower bound sits well above zero, from a warm start that played at about half the fair leaf's level.
The stages tell the rest. The depth-5 teacher ran four to seven times slower per position than the pilot had projected, so the corpus closed at about a third of the games the protocol allowed for. The warm start fitted the teacher's values closely and, placed inside the real depth-3 search, picked the teacher's column less than half the time, about what a leaf that returns zero manages. Evolution then separated the population from the warm start steadily across all sixty generations without ever approaching the fair control, and the curve had not flattened when the protocol stopped it.
Every teacher game the depth-5 search has completed
- complete games
- 177
- labelled roots
- 21,618
- mean score
- 433,131
- median score
- 348,847
- best game
- 1,889,608
- mean moves
- 122.1
- games stopped at the cap
- 3
- teacher time per root
- 77.5 s
- mean time per game
- 2.6 h
Source
Values copied from the run snapshot web/content/figures/nnue-evolution/RUN-20260902T035644Z-c1fd8987.json, which web/scripts/extract-nnue-evolution.ts writes from the run's artifacts:
runs/RUN-20260902T035644Z-c1fd8987/nnue-evolution/analysis.jsonruns/RUN-20260902T035644Z-c1fd8987/nnue-evolution/corpus/partsruns/RUN-20260902T035644Z-c1fd8987/nnue-evolution/corpus.err
Supervised warm start: loss by epoch on a whole-origin split
- training loss
- validation loss (whole-origin held-out games)
- roots / games
- 21,618 / 177
- train / validation roots
- 17,641 / 3,977
- epoch frozen
- 8 of 16
- validation Huber
- 0.6873
- ordering probe roots
- 256
- top-1 agreement with teacher
- 44.1%
- mean teacher-value regret
- 2,395 points
Source
Values copied from the run snapshot web/content/figures/nnue-evolution/RUN-20260902T035644Z-c1fd8987.json, which web/scripts/extract-nnue-evolution.ts writes from the run's artifacts:
runs/RUN-20260902T035644Z-c1fd8987/nnue-evolution/analysis.json
Fitness by generation against the two controls that played the same games
- population mean
- best candidate
- top-4 mean
- population range (lowest to highest candidate)
- fair leaf control (same seeds)
- unevolved init control (same seeds)
- generations completed
- 60
- latest best candidate
- 219,577
- latest population mean
- 185,958
- latest fair-leaf control
- 328,339
- latest init control
- 146,372
- mean above fair, last 10
- 0 of 10
- mean margin over fair
- -121,896
- training-signal falsifier
- no signal
- illegal / incomplete decisions
- 0 / 0
Source
Values copied from the run snapshot web/content/figures/nnue-evolution/RUN-20260902T035644Z-c1fd8987.json, which web/scripts/extract-nnue-evolution.ts writes from the run's artifacts:
runs/RUN-20260902T035644Z-c1fd8987/nnue-evolution/analysis.jsonruns/RUN-20260902T035644Z-c1fd8987/nnue-evolution/evolve/progress.jsonl
Every candidate in every generation
- one candidate
- fair leaf on the same 32 games
- unevolved init on the same 32 games
Source
Values copied from the run snapshot web/content/figures/nnue-evolution/RUN-20260902T035644Z-c1fd8987.json, which web/scripts/extract-nnue-evolution.ts writes from the run's artifacts:
runs/RUN-20260902T035644Z-c1fd8987/nnue-evolution/evolve/progress.jsonl
Held-out screen: evolved candidate minus fair leaf, both at depth 3
- candidate scored higher on that game
- reference scored higher on that game
- recorded paired mean -106,964 (band: 95 % bootstrap)
- paired mean difference
- -106,964 points
- bootstrap 95% lower bound
- -146,580
- Student-t 95% lower bound
- -145,890
- wins / ties / losses
- 14 / 0 / 50
- first half / second half
- -109,139 / -104,790
- paired sd
- 186,538
- detection floor
- 38,357
- lower-quartile difference
- -36,134
Source
Values copied from the run snapshot web/content/figures/nnue-evolution/RUN-20260902T035644Z-c1fd8987.json, which web/scripts/extract-nnue-evolution.ts writes from the run's artifacts:
runs/RUN-20260902T035644Z-c1fd8987/nnue-evolution/screen/heldout.jsonruns/RUN-20260902T035644Z-c1fd8987/nnue-evolution/screen/compare-candidate-vs-fair-d3s7.jsonruns/RUN-20260902T035644Z-c1fd8987/nnue-evolution/screen/compare-init-vs-fair-d3s7.jsonruns/RUN-20260902T035644Z-c1fd8987/nnue-evolution/screen/compare-candidate-vs-init.jsonruns/RUN-20260902T035644Z-c1fd8987/nnue-evolution/screen/compare-fair-d4s7-vs-fair-d3s7.json
The four arms on the same 64 held-out games, and the preregistered gate
| arm | mean | median | lower quartile | best game | mean moves | censored |
|---|---|---|---|---|---|---|
| evolved NNUE leaf, depth 3 | 190,961 | 160,108 | 122,253 | 477,758 | 58.5 | 0 |
| unevolved (supervised) NNUE leaf, depth 3 | 155,586 | 140,282 | 107,423 | 401,038 | 48.8 | 0 |
| frozen fair leaf, depth 3 | 297,926 | 255,000 | 158,387 | 844,318 | 88.0 | 0 |
| frozen fair leaf, depth 4 (reference) | 394,984 | 302,556 | 198,525 | 1,663,637 | 114.3 | 0 |
- screen artifact: illegalDecisions 0 and incompleteDecisions 0 in every arm
- bootstrap 95% lower bound of paired score delta > 0
- Student-t 95% lower bound > 0
- paired mean delta > 0 in both halves
- candidate Q25 >= fair-d3s7 Q25
- the preregistered gate was not passed
Source
Values copied from the run snapshot web/content/figures/nnue-evolution/RUN-20260902T035644Z-c1fd8987.json, which web/scripts/extract-nnue-evolution.ts writes from the run's artifacts:
runs/RUN-20260902T035644Z-c1fd8987/nnue-evolution/screen/heldout.jsonruns/RUN-20260902T035644Z-c1fd8987/nnue-evolution/screen/compare-candidate-vs-fair-d3s7.jsonruns/RUN-20260902T035644Z-c1fd8987/nnue-evolution/screen/compare-init-vs-fair-d3s7.jsonruns/RUN-20260902T035644Z-c1fd8987/nnue-evolution/screen/compare-candidate-vs-init.jsonruns/RUN-20260902T035644Z-c1fd8987/nnue-evolution/screen/compare-fair-d4s7-vs-fair-d3s7.json
Because the paired margin over the fair leaf was still rising at generation
60, a second, longer experiment was registered under the same theory,
EX-20260903-nnue-evolution-continuation-d3-f8ce9181,
and launched on 2026-09-03 as run RUN-20260903T032832Z-a76a6cf7. It starts
from the population the first run's final selection produced and never
played, adds the first run's frozen candidate as a third paired control so the
curve shows directly how far the population has moved, anneals the mutation
size from the first run's setting toward a floor, and stops when a straight
line fitted to the paired margin over the fair leaf across the last hundred
generations no longer has a positive lower bound on its slope, checked every
fifty generations from the hundredth, or at 1,000 generations or 72 hours. It
plays fresh training and screen leases and ends with the same one-shot
64-game screen.
The plateau rule stopped evolution after generation 149. On a fresh 64-game screen the continued leaf still lost to the fair leaf, and beat the first run's frozen candidate (RS-20260903T163321Z-733076b5, run valid, outcome fail, ledger-recorded). The figures below are the continuation's own artifacts.
RUN-20260903T032832Z-a76a6cf7 under EX-20260903-nnue-evolution-continuation-d3-f8ce9181 · run record lifecycle: completedsnapshot 2026-09-03T16:33:27Z- A · teacher corpusdoneinherited from the first run (177 games, 21,618 roots); no new teacher game
- B · supervised warm startdoneinherited from the first run; the population resumes from its generation-60 checkpoint
- C · evolutiondone150 of up to 1000 generations completed; stopped by the plateau rule
- C · elite re-selectiondonecandidate frozen, SHA-256 759084fab975…
- D · held-out screendonepreregistered gate not passed
Source
Values copied from the run snapshot web/content/figures/nnue-evolution/RUN-20260903T032832Z-a76a6cf7.json, which web/scripts/extract-nnue-evolution.ts writes from the run's artifacts.
Fitness by generation against the two controls that played the same games
- population mean
- best candidate
- top-4 mean
- population range (lowest to highest candidate)
- fair leaf control (same seeds)
- unevolved init control (same seeds)
- first run's frozen candidate (same seeds)
- generations completed
- 150
- latest best candidate
- 288,774
- latest population mean
- 232,897
- latest fair-leaf control
- 296,966
- latest init control
- 146,339
- mean above fair, last 10
- 0 of 10
- mean margin over fair
- -98,026
- training-signal falsifier
- no signal
- latest first-run-candidate control
- 237,283
- latest mean minus first run's candidate
- -4,385
- mutation sigma (latest)
- 0.0345
- plateau check after gen 149
- slope +37.31/gen, lower bound -158.88 → stop
- stopped by the plateau rule
- yes
- illegal / incomplete decisions
- 0 / 0
Source
Values copied from the run snapshot web/content/figures/nnue-evolution/RUN-20260903T032832Z-a76a6cf7.json, which web/scripts/extract-nnue-evolution.ts writes from the run's artifacts:
runs/RUN-20260903T032832Z-a76a6cf7/nnue-evolution/analysis.jsonruns/RUN-20260903T032832Z-a76a6cf7/nnue-evolution/evolve/progress.jsonl
Every candidate in every generation
- one candidate
- fair leaf on the same 32 games
- unevolved init on the same 32 games
Source
Values copied from the run snapshot web/content/figures/nnue-evolution/RUN-20260903T032832Z-a76a6cf7.json, which web/scripts/extract-nnue-evolution.ts writes from the run's artifacts:
runs/RUN-20260903T032832Z-a76a6cf7/nnue-evolution/evolve/progress.jsonl
Held-out screen: evolved candidate minus fair leaf, both at depth 3
- candidate scored higher on that game
- reference scored higher on that game
- recorded paired mean -68,441 (band: 95 % bootstrap)
- paired mean difference
- -68,441 points
- bootstrap 95% lower bound
- -112,090
- Student-t 95% lower bound
- -112,274
- wins / ties / losses
- 25 / 0 / 39
- first half / second half
- -112,383 / -24,500
- paired sd
- 210,055
- detection floor
- 43,193
- lower-quartile difference
- -17,974
Source
Values copied from the run snapshot web/content/figures/nnue-evolution/RUN-20260903T032832Z-a76a6cf7.json, which web/scripts/extract-nnue-evolution.ts writes from the run's artifacts:
runs/RUN-20260903T032832Z-a76a6cf7/nnue-evolution/screen/heldout.jsonruns/RUN-20260903T032832Z-a76a6cf7/nnue-evolution/screen/compare-candidate-vs-fair-d3s7.jsonruns/RUN-20260903T032832Z-a76a6cf7/nnue-evolution/screen/compare-init-vs-fair-d3s7.jsonruns/RUN-20260903T032832Z-a76a6cf7/nnue-evolution/screen/compare-candidate-vs-init.jsonruns/RUN-20260903T032832Z-a76a6cf7/nnue-evolution/screen/compare-fair-d4s7-vs-fair-d3s7.jsonruns/RUN-20260903T032832Z-a76a6cf7/nnue-evolution/screen/compare-candidate-vs-baseline-run1.jsonruns/RUN-20260903T032832Z-a76a6cf7/nnue-evolution/screen/compare-baseline-run1-vs-fair-d3s7.json
Held-out screen: continued candidate minus the first run's candidate, both at depth 3
- candidate scored higher on that game
- reference scored higher on that game
- recorded paired mean +36,278 (band: 95 % bootstrap)
- paired mean difference
- +36,278 points
- bootstrap 95% lower bound
- +9,085
- Student-t 95% lower bound
- +8,543
- wins / ties / losses
- 41 / 0 / 23
- first half / second half
- -7,140 / +79,697
- paired sd
- 132,910
- detection floor
- 27,330
- lower-quartile difference
- +33,068
Source
Values copied from the run snapshot web/content/figures/nnue-evolution/RUN-20260903T032832Z-a76a6cf7.json, which web/scripts/extract-nnue-evolution.ts writes from the run's artifacts:
runs/RUN-20260903T032832Z-a76a6cf7/nnue-evolution/screen/heldout.jsonruns/RUN-20260903T032832Z-a76a6cf7/nnue-evolution/screen/compare-candidate-vs-fair-d3s7.jsonruns/RUN-20260903T032832Z-a76a6cf7/nnue-evolution/screen/compare-init-vs-fair-d3s7.jsonruns/RUN-20260903T032832Z-a76a6cf7/nnue-evolution/screen/compare-candidate-vs-init.jsonruns/RUN-20260903T032832Z-a76a6cf7/nnue-evolution/screen/compare-fair-d4s7-vs-fair-d3s7.jsonruns/RUN-20260903T032832Z-a76a6cf7/nnue-evolution/screen/compare-candidate-vs-baseline-run1.jsonruns/RUN-20260903T032832Z-a76a6cf7/nnue-evolution/screen/compare-baseline-run1-vs-fair-d3s7.json
The four arms on the same 64 held-out games, and the preregistered gate
| arm | mean | median | lower quartile | best game | mean moves | censored |
|---|---|---|---|---|---|---|
| evolved NNUE leaf, depth 3 | 251,667 | 224,341 | 171,440 | 571,367 | 75.4 | 0 |
| first run's frozen candidate, depth 3 | 215,389 | 185,102 | 138,372 | 505,061 | 65.3 | 0 |
| unevolved (supervised) NNUE leaf, depth 3 | 143,674 | 123,543 | 107,000 | 341,054 | 45.3 | 0 |
| frozen fair leaf, depth 3 | 320,108 | 276,827 | 189,414 | 940,703 | 94.2 | 0 |
| frozen fair leaf, depth 4 (reference) | 391,907 | 351,132 | 215,823 | 962,024 | 113.3 | 0 |
- screen artifact: illegalDecisions 0 and incompleteDecisions 0 in every arm
- bootstrap 95% lower bound of paired score delta > 0
- Student-t 95% lower bound > 0
- paired mean delta > 0 in both halves
- candidate Q25 >= fair-d3s7 Q25
- the preregistered gate was not passed
Source
Values copied from the run snapshot web/content/figures/nnue-evolution/RUN-20260903T032832Z-a76a6cf7.json, which web/scripts/extract-nnue-evolution.ts writes from the run's artifacts:
runs/RUN-20260903T032832Z-a76a6cf7/nnue-evolution/screen/heldout.jsonruns/RUN-20260903T032832Z-a76a6cf7/nnue-evolution/screen/compare-candidate-vs-fair-d3s7.jsonruns/RUN-20260903T032832Z-a76a6cf7/nnue-evolution/screen/compare-init-vs-fair-d3s7.jsonruns/RUN-20260903T032832Z-a76a6cf7/nnue-evolution/screen/compare-candidate-vs-init.jsonruns/RUN-20260903T032832Z-a76a6cf7/nnue-evolution/screen/compare-fair-d4s7-vs-fair-d3s7.jsonruns/RUN-20260903T032832Z-a76a6cf7/nnue-evolution/screen/compare-candidate-vs-baseline-run1.jsonruns/RUN-20260903T032832Z-a76a6cf7/nnue-evolution/screen/compare-baseline-run1-vs-fair-d3s7.json
The second continuation resumed that plateau population with a slower decay in mutation size, keeping the same search and stopping rule. The run stopped at the same generation. On its fresh 64-game screen, the candidate still lost to the fair leaf, and its gain over the immediately prior candidate was not statistically distinguishable from zero (RS-20260904T090620Z-e5731bf0, run valid, outcome fail, ledger-recorded). This alternative schedule did not produce a confirmed further gain.
RUN-20260903T190433Z-a87fd7fc under EX-20260903-nnue-evolution-continuation2-d3-80eebad3 · run record lifecycle: completedsnapshot 2026-09-04T09:06:27Z- A · teacher corpusdoneinherited from the first run (177 games, 21,618 roots); no new teacher game
- B · supervised warm startdoneinherited from the first run; the population resumes from its generation-60 checkpoint
- C · evolutiondone150 of up to 1000 generations completed; stopped by the plateau rule
- C · elite re-selectiondonecandidate frozen, SHA-256 5318e70e8e1c…
- D · held-out screendonepreregistered gate not passed
Source
Values copied from the run snapshot web/content/figures/nnue-evolution/RUN-20260903T190433Z-a87fd7fc.json, which web/scripts/extract-nnue-evolution.ts writes from the run's artifacts.
Fitness by generation against the two controls that played the same games
- population mean
- best candidate
- top-4 mean
- population range (lowest to highest candidate)
- fair leaf control (same seeds)
- unevolved init control (same seeds)
- first run's frozen candidate (same seeds)
- generations completed
- 150
- latest best candidate
- 305,455
- latest population mean
- 244,380
- latest fair-leaf control
- 367,660
- latest init control
- 152,262
- mean above fair, last 10
- 0 of 10
- mean margin over fair
- -70,199
- training-signal falsifier
- no signal
- latest first-run-candidate control
- 229,454
- latest mean minus first run's candidate
- +14,926
- mutation sigma (latest)
- 0.0453
- plateau check after gen 149
- slope +164.02/gen, lower bound -28.52 → stop
- stopped by the plateau rule
- yes
- illegal / incomplete decisions
- 0 / 0
Source
Values copied from the run snapshot web/content/figures/nnue-evolution/RUN-20260903T190433Z-a87fd7fc.json, which web/scripts/extract-nnue-evolution.ts writes from the run's artifacts:
runs/RUN-20260903T190433Z-a87fd7fc/nnue-evolution/analysis.jsonruns/RUN-20260903T190433Z-a87fd7fc/nnue-evolution/evolve/progress.jsonl
Every candidate in every generation
- one candidate
- fair leaf on the same 32 games
- unevolved init on the same 32 games
Source
Values copied from the run snapshot web/content/figures/nnue-evolution/RUN-20260903T190433Z-a87fd7fc.json, which web/scripts/extract-nnue-evolution.ts writes from the run's artifacts:
runs/RUN-20260903T190433Z-a87fd7fc/nnue-evolution/evolve/progress.jsonl
Held-out screen: evolved candidate minus fair leaf, both at depth 3
- candidate scored higher on that game
- reference scored higher on that game
- recorded paired mean -85,509 (band: 95 % bootstrap)
- paired mean difference
- -85,509 points
- bootstrap 95% lower bound
- -128,482
- Student-t 95% lower bound
- -129,423
- wins / ties / losses
- 22 / 0 / 42
- first half / second half
- -59,644 / -111,374
- paired sd
- 210,440
- detection floor
- 43,272
- lower-quartile difference
- -19,573
Source
Values copied from the run snapshot web/content/figures/nnue-evolution/RUN-20260903T190433Z-a87fd7fc.json, which web/scripts/extract-nnue-evolution.ts writes from the run's artifacts:
runs/RUN-20260903T190433Z-a87fd7fc/nnue-evolution/screen/heldout.jsonruns/RUN-20260903T190433Z-a87fd7fc/nnue-evolution/screen/compare-candidate-vs-fair-d3s7.jsonruns/RUN-20260903T190433Z-a87fd7fc/nnue-evolution/screen/compare-init-vs-fair-d3s7.jsonruns/RUN-20260903T190433Z-a87fd7fc/nnue-evolution/screen/compare-candidate-vs-init.jsonruns/RUN-20260903T190433Z-a87fd7fc/nnue-evolution/screen/compare-fair-d4s7-vs-fair-d3s7.jsonruns/RUN-20260903T190433Z-a87fd7fc/nnue-evolution/screen/compare-candidate-vs-baseline-run1.jsonruns/RUN-20260903T190433Z-a87fd7fc/nnue-evolution/screen/compare-baseline-run1-vs-fair-d3s7.json
Held-out screen: continued candidate minus the first run's candidate, both at depth 3
- candidate scored higher on that game
- reference scored higher on that game
- recorded paired mean +13,573 (band: 95 % bootstrap)
- paired mean difference
- +13,573 points
- bootstrap 95% lower bound
- -30,165
- Student-t 95% lower bound
- -30,869
- wins / ties / losses
- 31 / 0 / 33
- first half / second half
- +2,355 / +24,790
- paired sd
- 212,968
- detection floor
- 43,791
- lower-quartile difference
- +15,137
Source
Values copied from the run snapshot web/content/figures/nnue-evolution/RUN-20260903T190433Z-a87fd7fc.json, which web/scripts/extract-nnue-evolution.ts writes from the run's artifacts:
runs/RUN-20260903T190433Z-a87fd7fc/nnue-evolution/screen/heldout.jsonruns/RUN-20260903T190433Z-a87fd7fc/nnue-evolution/screen/compare-candidate-vs-fair-d3s7.jsonruns/RUN-20260903T190433Z-a87fd7fc/nnue-evolution/screen/compare-init-vs-fair-d3s7.jsonruns/RUN-20260903T190433Z-a87fd7fc/nnue-evolution/screen/compare-candidate-vs-init.jsonruns/RUN-20260903T190433Z-a87fd7fc/nnue-evolution/screen/compare-fair-d4s7-vs-fair-d3s7.jsonruns/RUN-20260903T190433Z-a87fd7fc/nnue-evolution/screen/compare-candidate-vs-baseline-run1.jsonruns/RUN-20260903T190433Z-a87fd7fc/nnue-evolution/screen/compare-baseline-run1-vs-fair-d3s7.json
The four arms on the same 64 held-out games, and the preregistered gate
| arm | mean | median | lower quartile | best game | mean moves | censored |
|---|---|---|---|---|---|---|
| evolved NNUE leaf, depth 3 | 249,757 | 192,147 | 156,535 | 710,297 | 75.1 | 0 |
| first run's frozen candidate, depth 3 | 236,184 | 209,823 | 141,398 | 660,003 | 70.8 | 0 |
| unevolved (supervised) NNUE leaf, depth 3 | 142,911 | 124,024 | 106,530 | 269,984 | 45.3 | 0 |
| frozen fair leaf, depth 3 | 335,266 | 272,318 | 176,108 | 1,080,133 | 98.2 | 0 |
| frozen fair leaf, depth 4 (reference) | 333,857 | 285,125 | 194,039 | 800,130 | 97.2 | 0 |
- screen artifact: illegalDecisions 0 and incompleteDecisions 0 in every arm
- bootstrap 95% lower bound of paired score delta > 0
- Student-t 95% lower bound > 0
- paired mean delta > 0 in both halves
- candidate Q25 >= fair-d3s7 Q25
- the preregistered gate was not passed
Source
Values copied from the run snapshot web/content/figures/nnue-evolution/RUN-20260903T190433Z-a87fd7fc.json, which web/scripts/extract-nnue-evolution.ts writes from the run's artifacts:
runs/RUN-20260903T190433Z-a87fd7fc/nnue-evolution/screen/heldout.jsonruns/RUN-20260903T190433Z-a87fd7fc/nnue-evolution/screen/compare-candidate-vs-fair-d3s7.jsonruns/RUN-20260903T190433Z-a87fd7fc/nnue-evolution/screen/compare-init-vs-fair-d3s7.jsonruns/RUN-20260903T190433Z-a87fd7fc/nnue-evolution/screen/compare-candidate-vs-init.jsonruns/RUN-20260903T190433Z-a87fd7fc/nnue-evolution/screen/compare-fair-d4s7-vs-fair-d3s7.jsonruns/RUN-20260903T190433Z-a87fd7fc/nnue-evolution/screen/compare-candidate-vs-baseline-run1.jsonruns/RUN-20260903T190433Z-a87fd7fc/nnue-evolution/screen/compare-baseline-run1-vs-fair-d3s7.json
What we learned
Whole-game evolution with common random numbers moves a 572,000-weight leaf. That is the finding the first, CMA-ES leaf evolution could not produce. The population separated from its warm start steadily across all sixty generations, the ten-generation paired margins over the warm start rising from +4,682 to +40,431 for the population mean and reaching +76,679 for the best candidate in the last block, and the held-out ablation confirmed it out of sample at +35,375 on the 64 screen games (RS-20260903T025751Z-6577b33e).
Imitation of state values is the weak link. The warm start matched the teacher's numbers (validation Pearson 0.9504 at the frozen epoch) yet, placed inside the real depth-3 search, picked the teacher's column on 44.14% of 256 held-out roots, and on the screen it played 142,340 paired points behind the fair leaf; evolution closed 35,375 of that, about a quarter of the way (same record). The teacher is the expensive part: a depth-5, seven-stratum search cost 77.5 seconds per root at full parallelism, so the corpus closed at 177 games instead of 512, and whether a larger corpus would have produced a warm start that holds the ordering is untested. The leaf decides: the screen agrees with the leaf-swing diagnostic above, since swapping the leaf moved the mean by more than 100,000 points in both directions.
The continuation kept working for roughly a hundred more generations and then levelled. That plateau sits about 45,000 paired points above where the continuation started and about 90,000 below the fair leaf on the training blocks, and the screen agrees (RS-20260903T163321Z-733076b5). The design could not separate whether the leaf class ran out of improvement or the annealed step size, which had fallen from 0.050 to 0.034, starved the search. The second continuation tested a slower decay and still stopped at the same generation, with no confirmed further gain on its fresh screen (RS-20260904T090620Z-e5731bf0). It tested one alternative schedule. More games per candidate or a larger population remain open ways to ask whether selection can see the small differences left as candidates converge. The other open question is whether a warm start trained on the teacher's ordering, instead of its values, would start close enough to the fair leaf for evolution to finish the job.
Agent contextRecords and provenance
- Theory
TH-20260825-evolved-nnue-leaf-d3-0f47e46c;
frozen protocol
EX-20260902-nnue-evolution-d3-v2-49c18bc2
(successor to the frozen
EX-20260825-nnue-evolution-d3-bca7f330, whose scientific protocol it carries verbatim plus the operational parameters that record left open); runRUN-20260902T035644Z-c1fd8987, started 2026-09-02T04:24:10Z with 32 threads on the Ryzen AI MAX+ 395 workstation (research/system-profiles/MACH-20260902T035644Z-f5e59b6e.json). Result RS-20260903T025751Z-6577b33e (valid run, scientific outcome fail, assessment not-supported-as-tested, evidence tier public-development); compact evidence promoted with a manifest underartifacts/results/EX-20260902-nnue-evolution-d3-v2-49c18bc2/RUN-20260902T035644Z-c1fd8987/, including the frozen candidate and the warm start weights. - Seed leases: training
SL-20260825T063000Z-a52e0300(opened at launch; teacher corpus from0xa52e0300, fitness blocks from0xa52e0500, generationgplaying the 32 seeds from0xa52e0500 + 32·g, re-selection at0xa52e0c80) and screenSL-20260825T063000Z-a52e1300(64 seeds; opened only by the screen stage, at 2026-09-03T02:41:29Z, after the candidate's SHA-256 was recorded). Training and screen ranges are disjoint by construction. - Search: fair expectimax, depth 3, seven stratified chance samples, terminal
utility −1,000,000, policy seed
0xd7075eed, completion-guaranteeing work bound, 64k-entry depth-gated table; the teacher is the same search at depth 5 with the frozen fair leaf. Network: 8,902 sparse features, 135 active per position; EmbeddingBag(8,902 × 64) → ReLU → 32 → ReLU → 1, output scaled by 17,000 points; about 572k parameters. - Stage parameters. A: 512 seeds requested, 500-move cap, new games stop at
46,800 s of wall clock. B: Adam, learning rate 3e-4, batch 64, Huber δ = 1
rise, 16 epochs, seed
0x0e701e57, 256 probe roots. C: population 32, 60 generations, 32 paired games per candidate per generation, 4 elites, tournament size 3, per-tensor σ = 5% of tensor standard deviation (floor 1e-4), initial cloud 2σ, evolution seed0x0e701e58, 21,600 s sub-budget; top 8 re-evaluated on 128 fresh games. D: four arms on 64 seeds,compare.pywith 20,000 bootstrap resamples at seed0xb0071eaf. - Artifacts under
runs/RUN-20260902T035644Z-c1fd8987/nnue-evolution/:gates.log, the preflight logs,corpus/parts/*.jsonl(one file per teacher game, resumable),corpus.err(one line per completed game),pretrain/{init.bin,report.json,probe.json},evolve/{config.json,progress.jsonl,gen-*.json,population-*.bin,selection.json,candidate-weights.bin,candidate-weights.sha256},screen/{heldout.json,compare-*.json},rusage.jsonl(kernel resource usage per stage),analysis.jsonandanalysis.md, and the leaf-swing diagnostic (leaf-swing-d{3,4,5}.txtwith the frozen 30-game input underleaf-swing-input/). The page's figures readweb/content/figures/nnue-evolution/<run>.json, written byweb/scripts/extract-nnue-evolution.tsfrom the run's artifacts. - Implementation: a std-only Rust crate
(
approaches/lifetime-objective/nnue-evolution/) with a path dependency on the proven engine; the reference crate is not modified. Five binaries:gate(the CHECK-tier mechanics suite),teacher_corpus(stage A),pretrain(stage B),evolve(stage C, checkpointed and resumable, with--selectfor the elite re-selection), andscreen(stage D, emitting the population-artifact format the existingcompare.pyconsumes unchanged). The stages are driven byscripts/pipeline.sh(RUN_ID=… THREADS=32 scripts/pipeline.sh corpus|pretrain|evolve|select|screen|compare|chain), which wraps every stage inscripts/with-rusage.pyso wall, CPU and peak memory land inrusage.jsonl, opens the screen lease throughscripts/open-screen-lease.pyonly when the candidate hash file exists, refuses to run the screen twice, and passes the original total evolve allowance on every resume while the binary's durable deadline (wall-budget.json) prevents that allowance from starting over. ASTOPfile or the wall budget ends the loop at a generation boundary; a crash after the completion marker rebuilds any missing summary or plateau decision from the committed artifact before another seed can be read.scripts/analyze.py --run <run>summarises whatever artifacts exist intoanalysis.jsonandanalysis.md. - Continuation:
EX-20260903-nnue-evolution-continuation-d3-f8ce9181,
run
RUN-20260903T032832Z-a76a6cf7, started 2026-09-03T03:34:49Z. Result RS-20260903T163321Z-733076b5 (valid run, scientific outcome fail, assessment not-supported-as-tested, evidence tier public-development); compact evidence promoted with a manifest underartifacts/results/EX-20260903-nnue-evolution-continuation-d3-f8ce9181/RUN-20260903T032832Z-a76a6cf7/, including the frozen candidate, the plateau log and the launch script. The plateau rule stopped the run after generation 149. Leases: trainingSL-20260903T033000Z-a52e2000(fitness blocks from0xa52e2000, generationgplaying[0xa52e2000 + 32·g, +32); the re-selection block follows the last fitness block played) and screenSL-20260903T033000Z-a52ea000(64 seeds), both checked against every constant in the repository. Generation 0 isruns/RUN-20260902T035644Z-c1fd8987/nnue-evolution/evolve/population-060.bin(SHA-2563da5021531898f08254d35cad5486fbbc12092770216bcdaea988d3724422cb8) played exactly as saved, with no re-noising. Three paired controls, never selected: the frozen fair leaf, the first run's warm start (init.bin, SHA-2567d6fa5563de6716a4a895fb224bbe7f81c568391b6b737f85acc110872c075e0), and the first run's frozen candidate (candidate-weights.bin, SHA-256edd0d2efd181de43f35d62c4df784cb2c789db3ae296be93a1c6c59082034a9f). Evolution seed0x0e701e59. Annealed mutation: relative sigmamax(0.01, 0.05 × exp(−g / 400)), so 0.05 at generation 0, 0.030 at 200, 0.018 at 400, and the 0.01 floor from generation 644 onward. Plateau rule: after every 50th completed generation from the 100th, ordinary least squares regresses the paired margin over the fair control across the last 100 generations; the run stops when the slope's one-sided 95% lower bound (slope − 1.645 × standard error) is not greater than zero. From the first run's artifacts the residual scatter about the trend was 38,813 points, at which the window detects slopes of about 221 points per generation (22,100 per 100 generations); the first run's own slope of +676 points per generation (one-sided 95% lower bound +200) would have kept it going. Other stops: 1,000 generations, a 259,200 s (72 h) evolve wall budget, aSTOPfile. Every check is appended toplateau.jsonl. Since the launch, a code-review pass repaired two interruption-only faults in the continuation driver (a completed generation could be stranded without its progress row or plateau marker, and a restart granted a fresh wall allowance); the launched run remains attributable to its recorded source commit. - Second continuation:
EX-20260903-nnue-evolution-continuation2-d3-80eebad3,
run
RUN-20260903T190433Z-a87fd7fc, launched 2026-09-03. Result RS-20260904T090620Z-e5731bf0 (valid run, scientific outcome fail); compact evidence promoted underartifacts/results/EX-20260903-nnue-evolution-continuation2-d3-80eebad3/RUN-20260903T190433Z-a87fd7fc/. Generation 0 is the first continuation's generation-150 population. The mutation-decay time constant is 1,500 generations instead of 400, a 3.75-fold slowdown; sigma is still 0.045 at the equivalent point where the first continuation reached 0.034, and does not reach its floor within the 1,000-generation cap. The search, population, fitness blocks, plateau window and checks remain unchanged. The immediately prior candidate plays every block as the third control; the screen artifact calls this armbaseline-run1, with its identity recorded inevolve/config.json'sbaselineSha256field. Training and screen use fresh leases. - How to continue from here: every generation's population is on disk, so a
later experiment can resume the loop from any
population-NNN.bin, start a new run fromcandidate-weights.bin, or change one operator at a time. Doing so is a new experiment: it needs its own record, its own training lease (the fitness blocks above are spent), and a fresh never-read screen block.
Technical recordFull results table
Screen (stage D), 64 never-read games from 0xa52e1300, 2,000-move cap,
corrected 17,000-point Hardcore scoring, zero censored, illegal or incomplete
decisions in every arm:
| Arm (depth-3 search unless stated) | Mean | Median | Lower quartile | Mean moves | Clears/move | Reveals/move |
|---|---|---|---|---|---|---|
| evolved candidate | 190,961 | 160,108 | 122,253 | 58.50 | 1.7131 | 0.9124 |
| unevolved warm start (ablation) | 155,586 | 140,282 | 107,423 | 48.75 | 1.5510 | 0.7554 |
| frozen fair leaf (comparator) | 297,926 | 255,000 | 158,387 | 88.03 | 1.9549 | 1.0722 |
| frozen fair leaf, depth 4 (reference arm) | 394,984 | 302,556 | 198,525 | 114.30 | 2.0547 | 1.1494 |
Paired contrasts, 20,000 bootstrap resamples:
| Contrast | Mean delta | Bootstrap 95% bounds | Student-t lower 95% | Detection floor | W-T-L | Halves |
|---|---|---|---|---|---|---|
| candidate − fair leaf | −106,964 | −146,580 to −69,983 | −145,890 | 38,357 | 14-0-50 | −109,139 / −104,790 |
| warm start − fair leaf | −142,340 | −178,492 to −107,771 | −178,511 | 35,642 | 9-0-55 | −156,143 / −128,537 |
| candidate − warm start | +35,375 | lower +16,899 | 18,949 | 36-0-28 | both positive | |
| fair depth 4 − fair depth 3 | +97,059 | lower +29,330 | +27,011 | 69,023 | 41-0-23 | +75,458 / +118,660 |
The candidate's lower quartile (122,253) fell below the fair leaf's (158,387), a gate criterion in its own right.
Stage A: 177 complete teacher games (21,618 sibling-complete labelled roots, 3 stopped at the 500-move cap) before the 46,800 s new-game cutoff; 77.5 s per root, four to seven times slower than the pilot projected, so the corpus is about a third of the 512 games the protocol allowed for. Stage B: validation Huber 0.6873 rise units at epoch 8 of 16 on a whole-origin split of 17,641 / 3,977 roots; validation Pearson 0.9504 at that epoch; the deployment-faithful probe put the depth-3 search with the warm start at top-1 agreement 0.4414 with the teacher on 256 held-out roots, mean teacher-value regret 2,395 points. Stage C: 60 generations; ten-generation paired mean margins over the warm-start control +4,682, +15,853, +22,704, +32,278, +34,037, +40,431 points, best candidate +76,679 in the last block; the population mean was above the fair leaf in 0 of the final 10 generations and the best candidate in 0 (mean margin −121,896), so the theory's training-signal falsifier fails. Elite re-selection on 128 fresh games froze candidate-29 at 202,237 (finalists spanned 187,352 to 202,237).
Technical recordContinuation screen
Continuation screen (stage D), 64 never-read games from 0xa52ea000,
2,000-move cap, corrected 17,000-point Hardcore scoring, zero censored,
illegal or incomplete decisions in every arm:
| Arm (depth-3 search unless stated) | Mean | Median | Lower quartile | Mean moves | Clears/move | Reveals/move |
|---|---|---|---|---|---|---|
| continued candidate | 251,667 | 224,341 | 171,440 | 75.36 | 1.8868 | 1.0404 |
| first-run candidate | 215,389 | 185,102 | 138,372 | 65.33 | 1.7898 | 0.9589 |
| unevolved warm start | 143,674 | 123,543 | 107,000 | 45.31 | 1.5124 | 0.7314 |
| frozen fair leaf (comparator) | 320,108 | 276,827 | 189,414 | 94.17 | 1.9935 | 1.1120 |
| frozen fair leaf, depth 4 (reference arm) | 391,907 | 351,132 | 215,823 | 113.28 | 2.0526 | 1.1506 |
Paired contrasts, 20,000 bootstrap resamples:
| Contrast | Mean delta | Bootstrap 95% bounds | Student-t lower 95% | Detection floor | W-T-L | Halves |
|---|---|---|---|---|---|---|
| continued − fair leaf | −68,441 | −112,090 to −26,694 | −112,274 | 43,193 | 25-0-39 | −112,383 / −24,500 |
| continued − first-run candidate | +36,278 | lower +9,085 | +8,543 | 27,330 | 41-0-23 | −7,140 / +79,697 |
| continued − warm start | +107,994 | lower +82,769 | +82,119 | 25,497 | 54-0-10 | both positive |
| first-run candidate − fair leaf | −104,719 | lower −143,479 | −143,895 | 38,602 | 20-0-44 | both negative |
| fair depth 4 − fair depth 3 | +71,799 | lower +25,857 | +23,286 | 47,804 | 39-0-25 | +31,746 / +111,851 |
The plateau rule stopped the run after generation 149: slope +239 per generation (lower bound +30) at the generation-99 check, then +37 (lower bound −159) across generations 50 to 149. Fifty-generation averages of the population mean: 204,748, 228,706, 237,946. Elite re-selection on 128 fresh games froze candidate-12 at 264,466 (finalists spanned 228,212 to 264,466). The continued candidate's lower quartile (171,440) fell below the fair leaf's (189,414).
Technical recordSecond continuation screen
Second continuation screen (stage D), 64 fresh held-out games. Values below are recorded in RS-20260904T090620Z-e5731bf0:
| Arm (depth-3 search) | Mean | Lower quartile |
|---|---|---|
| second-continuation candidate | 249,757 | 156,534 |
| frozen fair leaf (comparator) | 335,266 | 176,108 |
| Paired contrast on the same 64 games | Mean delta | Bootstrap 95% lower bound |
|---|---|---|
| candidate − fair leaf | −85,509 | −128,482 |
| candidate − immediately prior candidate | +13,572 | −30,165 |
The gain over the prior candidate is not statistically distinguishable from zero. The first continuation's equivalent contrast against its own predecessor, on its separate 64-game screen, was +36,278 with a lower bound of +9,085 (RS-20260903T163321Z-733076b5).
The plateau rule stopped both continuations after generation 149. The second continuation's slope at that check was +164 points per generation, with a lower bound of −29, against the first continuation's +37. Its best candidate beat the fair control on 26 of 150 training blocks, against 9 before. The population mean rose through all three fifty-generation blocks (235,353, 238,797, 244,800). Each generation used 32 paired games per candidate. These training observations did not translate into a confirmed further gain on the screen.
The comparison tests one slower schedule. It cannot separate limited room for improvement in this leaf class at this population size and search depth from a schedule that still shrinks too quickly or selection noise that hides small improvements. A further schedule comparison, more games per candidate or a larger population would each require a new experiment.
Agent contextValidity, gates and limitations
- The preregistered gate, fixed before any leased seed was read: on the 64
held-out games the evolved candidate must beat the frozen fair leaf at the
identical depth-3 configuration with a paired mean difference whose
one-sided 95% bootstrap lower bound and Student-t lower bound are both above
zero, the difference must be positive in both halves of the block, and the
candidate's lower-quartile score may not fall below the fair leaf's. Every
generation artifact and the screen artifact must record zero illegal and
zero incomplete decisions, and the screened weights must hash to the value
recorded before the screen lease opened. Outcome: every pass criterion
except artifact integrity and candidate identity fails. The continuation
screen (
RS-20260903T163321Z-733076b5) fails the same gate on a fresh 64-game block. The second continuation (RS-20260904T090620Z-e5731bf0) also fails the same gate on its fresh 64-game block; the gain over the immediately prior candidate is unconfirmed. - What the rejection covers: this exact configuration, this model class, this teacher depth, this optimiser and budget, this deployment depth. It does not reject the idea of a learned leaf. Had the candidate passed while the unevolved warm start passed equally on the same seeds, the evolutionary stage would have contributed nothing and the theory's second leg would have been refuted even with the network standing. The retained corpus, warm start and populations remain available for a successor experiment with its own record and leases.
- Gates before the first leased seed: 11 CHECK gates on the already-open probe block (feature determinism and bounds, information-boundary blindness to score, level and move count, reflection consistency, fresh-searcher and multi-worker determinism, legality and completed depth under random, zero and saturated weights, leaf finiteness, serialisation round-trip), all passed; a seed-free SMT preflight on the same probe block chose 32 threads over 16. The information-boundary gate proves that states differing only in score, level or move count produce bit-identical evaluations.
- Limitations: the corpus reached about a third of its planned size, so the distillation leg was tested with less data than designed; 64 screen games with a paired standard deviation of 186,538 points give a detection floor of 38,357 for the primary contrast; the fitness blocks are development data and the screen block is now read.
Agent contextScoring mode
Corrected 17,000-point Hardcore scoring throughout: fitness blocks and the screen use the ordinary 2,000-move cap, teacher games a 500-move cap (3 of 177 stopped there). The network's output and the Huber loss are in units of one row rise, 17,000 points. No historical 7,000-point number appears on this page.
RecordsTheories, experiments and results that reference this directory
Claim: A leaf-affordable NNUE evaluator (the 8,902-feature, 135-active sparse class of approaches/lifetime-objective/learned-leaf), whose weights are (a) initialised by distilling the sibling-complete root values of a depth-5 seven-stratum fair-expectimax teacher and (b) then refined by a mutation-only genetic algorithm whose fitness is the mean score of complete paired depth-3 seven-stratum games, deployed as the leaf of that same depth-3 seven-stratum search, achieves a higher mean whole-game score on never-read paired development games than the identical search using the frozen fair leaf.
This theory is currently not-supported-as-tested at the public-development (a cohort for deciding what to try next, not confirmation) level.
It compares d3s7-evolved-nnue-leaf against fair-d3s7 at the SCREEN (a 32-game paired screen) level, using public-development data.
No result has been recorded for it.
It compares d3s7-evolved-nnue-leaf against fair-d3s7 at the SCREEN (a 32-game paired screen) level, using public-development data.
valid run outcome: fail The run was valid and the outcome was fail (public-development (a cohort for deciding what to try next, not confirmation)). Read the result.
It compares d3s7-evolved-nnue-leaf-continued against fair-d3s7 at the SCREEN (a 32-game paired screen) level, using public-development data.
valid run outcome: fail The run was valid and the outcome was fail (public-development (a cohort for deciding what to try next, not confirmation)). Read the result.
It compares d3s7-evolved-nnue-leaf-continued2 against fair-d3s7 at the SCREEN (a 32-game paired screen) level, using public-development data.
valid run outcome: fail The run was valid and the outcome was fail (public-development (a cohort for deciding what to try next, not confirmation)). Read the result.
The run was valid; the outcome was fail, at the public-development (a cohort for deciding what to try next, not confirmation) level. Of 9 preregistered checks, 4 passed and 4 failed.
Valid run of the frozen protocol EX-20260902-nnue-evolution-d3-v2-49c18bc2 on the whole workstation (32 threads), every stage completed, every artifact with zero illegal and zero incomplete decisions. Stage A: the depth-5 seven-stratum teacher played 177 complete games (21,618 sibling-complete labelled roots, 3 stopped at the 500-move cap) before the 46,800 s new-game cutoff; the teacher ran 77.5 s per root, four to seven times slower than the pilot projected, so the corpus is about a third of the 512 games the protocol allowed for. Stage B: the supervised warm start reached validation Huber 0.6873 rise units at epoch 8 of 16 on a whole-origin split (17,641/3,977 roots), and the deployment-faithful ordering probe put the depth-3 search with that leaf at top-1 agreement 0.4414 with the teacher on 256 held-out roots (mean teacher-value regret 2,395 points). Stage C: 60 generations of the mutation-only GA (population 32, 32 paired games per candidate per fresh block, fair-d3s7 and warm-start controls on every block). The population separated steadily from its warm start - ten-generation paired mean margins over the init control of +4,682, +15,853, +22,704, +32,278, +34,037, +40,431 points, best candidate +76,679 in the last block - but never approached the fair control: the population mean was above the fair leaf in 0 of the final 10 generations and the best candidate in 0 (mean margin -121,896), so the theory's training-signal falsifier fails. Elite re-selection on 128 fresh games froze candidate-29 at 202,237 (finalists spanned 187,352 to 202,237). Stage D: on the 64 never-read held-out games (0xa52e1300, opened once at 2026-09-03T02:41:29Z after the candidate's SHA-256 was recorded), the evolved candidate averaged 190,961 against the frozen fair leaf's 297,926 at the identical depth-3 configuration: paired delta -106,964 (bootstrap 95% bounds -146,580 to -69,983, Student-t lower bound -145,890, detection floor 38,357), W-T-L 14-0-50, both halves negative (-109,139 / -104,790), lower quartile 122,253 against 158,387. Every preregistered pass criterion except artifact integrity and candidate identity fails: scientific outcome fail for this exact configuration. The ablation arm shows what evolution did contribute: the unevolved warm start averaged 155,586 (-142,340 against the fair leaf), and the evolved candidate beat it on the same seeds by +35,375 (bootstrap lower bound +16,899, floor 18,949, W-T-L 36-0-28, both halves positive). Whole-game evolution with common random numbers therefore moves a 572k-weight leaf on the deployed objective, which the first (CMA-ES) leaf evolution could not show; it moved it about a quarter of the way from a warm start that plays at half the fair leaf's level. The reference arm reproduced the program's standing result: fair depth 4 over fair depth 3 +97,059 (lower bound +29,330). Read: the claim is not supported as tested; the mechanism's evolutionary leg is supported, its distillation leg is the weak link (a warm start that holds the teacher's values but not its ordering), and the budget (177 teacher games, 60 generations) was too small for evolution to cover the distance.
Technical recordLimitations recorded with the result
- Single 64-game held-out screen: the paired detection floor is about 38,000 points for the primary contrast and 19,000 for the ablation; the primary result is far outside its floor, the ablation clears its own.
- The teacher corpus reached 177 of the 512 games the protocol allowed for because the depth-5 teacher ran four to seven times slower than the pilot projected; the protocol makes the completed games the corpus, so the result is valid, but it rejects this configuration at this corpus size, not the design at 512 games.
- The supervised warm start plays at about half the fair leaf's level; the deployment-faithful probe (0.441 top-1) and the leaf-swing diagnostic (zero leaf 0.450 on a different sample) suggest imitation of state values barely improved the search's ordering over no leaf at all. Evolution then had roughly 150,000 paired points to make up in 60 generations and made up about 35,000 to 40,000.
- The per-game artifact holds four arms x 64 games (256 rows); the primary contrast pairs the candidate and fair-d3s7 rows by seed.
- The fair-d4s7 arm is diagnostic only and reproduces the standing depth-4-over-depth-3 result on these seeds; it is not part of the gate.
- Two operational faults during the unattended chain (a false liveness reading, then a script replacement that crashed the corpus stage's shell after its binary had exited 0) are recorded in the run record; the 'corpus: done' marker in pipeline.log was appended by hand with a note. No artifact was affected.
- The elite re-selection block (0xa52e0c80, 128 games) and every fitness block are training-lease seeds; the last generation's 32-game leaders read 20,000 to 60,000 above their 128-game re-selection means, which is the best-of-32 bias the re-selection exists to remove.
The run was valid; the outcome was fail, at the public-development (a cohort for deciding what to try next, not confirmation) level. Of 9 preregistered checks, 4 passed and 4 failed.
Valid run of the frozen protocol EX-20260903-nnue-evolution-continuation-d3-f8ce9181 (successor to RS-20260903T025751Z-6577b33e), every stage completed, every artifact with zero illegal and zero incomplete decisions. Stage C resumed from the first run's checkpointed generation-60 population (SHA-256 3da5021531898f08254d35cad5486fbbc12092770216bcdaea988d3724422cb8) with the first run's frozen candidate (SHA-256 edd0d2efd181de43f35d62c4df784cb2c789db3ae296be93a1c6c59082034a9f) as a third paired control and an annealed mutation size (sigma_rel from 0.05, time constant 400 generations, floor 0.01; it reached 0.0345 at the last generation). The preregistered plateau rule stopped the run after generation 149: the first check after generation 99 found the paired margin over the fair control rising at +238.6 points per generation (standard error 127.1, one-sided 95% lower bound +29.6) and continued; the second, after generation 149, found +37.3 per generation (standard error 119.3, lower bound -158.9), no detectable improvement over generations 50-149, and stopped. Fifty-generation averages of the population mean: 204,748, 228,706, 237,946; paired margin over the first run's candidate +8,982, +36,076, +45,613; over the fair control -116,503, -99,833, -88,948. The best candidate beat the fair control on 9 of 150 blocks (generations 59, 66, 73, 97, 100, 109, 115, 125, 137); the population mean beat it on none, so the theory's training-signal falsifier fails again (mean above fair in 0 of the last 10, margin -98,026). Elite re-selection on 128 fresh games (0xa52e32c0) froze candidate-12 at 264,466 (finalists 228,212 to 264,466). Stage D, 64 never-read games (0xa52ea000, opened once at 2026-09-03T16:21:00Z after the candidate's SHA-256 was recorded), five arms: the continued candidate averaged 251,667 against the frozen fair leaf's 320,108 at the identical depth-3 configuration, paired -68,441 (bootstrap 95% bounds -112,090 to -26,694, Student-t lower bound -112,274, floor 43,193), W-T-L 25-0-39, halves -112,383 / -24,500, lower quartile 171,440 against 189,414: every screen criterion fails, scientific outcome fail for this configuration. The preregistered secondary contrast answers the continuation's own question: the continued candidate beat the first run's frozen candidate on the same seeds by +36,278 (bootstrap lower bound +9,085, Student-t lower bound +8,543, floor 27,330, W-T-L 41-0-23, halves -7,140 / +79,697), so 150 further generations improved the leaf out of sample, by about a third of the remaining distance. The first run's candidate reproduced its earlier result on fresh seeds: -104,719 against the fair leaf here (lower bound -143,479) against -106,964 on the first screen. Over the warm start the continued candidate is +107,994 (lower bound +82,769, W-T-L 54-0-10). The reference arm gave fair depth 4 over fair depth 3 +71,799 (lower bound +25,857). Read: whole-game evolution keeps improving the leaf until roughly generation 100 of the continuation and then levels off about 70,000 paired points short of the frozen fair leaf on held-out games; the claim is not supported at this budget, and the plateau is the new fact. Whether the levelling is a property of the leaf class or of the annealed step size cannot be separated in this design.
Technical recordLimitations recorded with the result
- Single 64-game held-out screen: paired detection floors of about 43,000 points for the primary contrast and 27,000 for the continuation contrast; the primary result sits far outside its floor, the continuation contrast just outside its own, and its first-half estimate is negative, so 'improved out of sample' is established at the whole-block level only.
- The plateau rule and the annealed mutation size are confounded: the step size had fallen from 0.050 to 0.034 when the rule fired, so the design cannot say whether the leaf class ran out of improvement or the search did. A constant-sigma continuation from the same population would separate them.
- The plateau rule tests a fitted slope over 100 generations with a one-sided 95% lower bound; at the observed scatter it can miss real improvements below about 220 points per generation. The observed point estimate over generations 50-149 was +37 per generation.
- The per-game artifact holds five arms x 64 games (320 rows); each contrast pairs two arms by seed.
- The starting population, the warm-start control and the baseline control are products of the first run's training data; nothing in this run re-read that lease.
- The owner's commit e2b0d19 (wall-budget pinning and progress recovery on resume) landed on the branch mid-run; the run never resumed, the driver shells held the original script by an unlinked inode, and every stage ran the binaries built from commit e4fd018 as the run record states.
- The fair-d4s7 arm is diagnostic only. The first run's candidate reproduced its earlier screen result on these fresh seeds (-104,719 against -106,964), which is the closest thing to a replication the program has for that number.
The run was valid; the outcome was fail, at the public-development (a cohort for deciding what to try next, not confirmation) level. Of 8 preregistered checks, 3 passed and 4 failed.
Valid run of the frozen protocol EX-20260903-nnue-evolution-continuation2-d3-80eebad3 (second successor to the theory, third experiment in the series), every stage completed, every artifact with zero illegal and zero incomplete decisions. Stage C resumed from the second experiment's checkpointed generation-150 population (SHA-256 33dcc25b88ab56a0a80329bf11983b539883aa922900b03de3cea71e1da3529d) with that experiment's frozen candidate (SHA-256 759084fab97599818d01a5da6d18b9cc77172249f09a68d5104361bca385e09b) as the third paired control, testing whether a 3.75x slower mutation-size decay (time constant 1,500 generations vs. 400 before; sigma stayed at 0.0500 at generation 0, 0.0453 at the stop, versus 0.0345 at the equivalent generation last time) would let evolution get further past the point where the prior run plateaued. The identical preregistered plateau rule stopped this run at the identical generation as before, 149: the check after generation 99 found the paired margin over the fair control rising at +201.7 points per generation (lower bound +11.7, versus +239 and +30 in the second experiment) and continued; the check after generation 149 found +164.0 per generation (lower bound -28.5, versus +37 and -159 before) and stopped. The improvement rate at the stopping point was more than four times the prior run's (164 against 37 points/generation), and the best candidate beat the fair control on 26 of 150 blocks against 9 in the second experiment, but the lower bound of the fitted slope still crossed zero at the same 100-generation checkpoint, so the rule fired regardless. Fifty-generation population-mean averages: 235,353, 238,797, 244,800 (rising monotonically, unlike the second experiment's flat third block); paired margin over the immediately-prior candidate +4,301, -949, +13,589; over the fair control -99,479, -88,006, -77,654. Training-signal falsifier fails again (population mean above fair in 0 of the last 10 generations, margin -70,199; best above fair in 4 of the last 10). Elite re-selection on 128 fresh games (0xa52eb3c0) froze candidate-28 at 257,314 (finalists 232,499 to 257,314, a tighter spread than the second experiment's). Stage D, 64 never-read games (0xa52f2100, opened once at 2026-09-04T08:56:37Z after the candidate's SHA-256 was recorded), five arms: this candidate averaged 249,757 against the frozen fair leaf's 335,266, paired -85,509 (bootstrap 95% bounds -128,482 to -43,591, Student-t lower bound -129,423, floor 43,272), W-T-L 22-0-42, both halves negative (-59,644 / -111,374), lower quartile 156,534 against 176,108: every screen criterion fails, scientific outcome fail for this configuration, consistent with both prior screens. The preregistered secondary contrast is the key negative finding of this run: the candidate beat the immediately-prior (second experiment's) frozen candidate by only +13,572 on the same seeds, with a bootstrap 95% lower bound of -30,165 and a Student-t lower bound of -30,869 -- both crossing zero (detection floor 43,791), W-T-L 31-0-33. Unlike the second experiment's clearly positive +36,278 (lower bound +9,085) over the first experiment's candidate, this third experiment's gain over the second is NOT statistically distinguishable from zero at this screen size: three months of relatively larger mutations bought a point estimate about a third the size of the previous continuation's out-of-sample gain, and it is not confidently positive. The second experiment's candidate itself scored -99,081 against the fair leaf on this fresh block (lower bound -154,094), broadly consistent with its own screen result of -68,441 (lower bound -112,090), a second informal replication. Over the warm start the candidate is +106,846 (lower bound +76,970). The reference arm gave fair depth 4 minus fair depth 3 of -1,409 (bounds -62,290 to +58,933, crossing zero on this cohort, a diagnostic-only reading and not comparable across screens with different fresh seeds). Read together with the second experiment: slowing the mutation-size decay produced a visibly healthier training curve (a still-rising population mean through all three 50-generation blocks, more generations where the best candidate beat the fair control) but did NOT produce a statistically confirmed improvement over the immediately-prior candidate on held-out games, and the plateau rule still stopped the run at the same generation. The most defensible reading is that the annealing schedule was not the dominant cause of the earlier plateau -- something else (population size, games per candidate, or the leaf class's genuine ceiling under this search depth) is the binding constraint, though a schedule 3.75x slower is not proof that no schedule would help; a much slower schedule, or removing the anneal-driven exploration decay entirely in favour of a fixed sigma with more games per candidate, remains untested.
Technical recordLimitations recorded with the result
- Single 64-game held-out screen: paired detection floors of about 43,000 points for the primary contrast and 44,000 for the baseline contrast; the baseline-run1 (secondary) contrast's point estimate of +13,572 sits well inside its own floor, so 'no confirmed improvement over the prior candidate' is the correct reading, not 'no improvement occurred' -- a true effect below about 44,000 points could not be distinguished from zero at this sample size.
- The plateau rule fired at the identical generation (149) as the second experiment despite a 3.75x slower decay constant; this is evidence against the annealing schedule being the dominant cause of the second experiment's plateau, but it is a single comparison at one alternative time constant, not a sweep, and cannot rule out that some other (e.g. much slower, or non-exponential) schedule would behave differently.
- The per-game artifact holds five arms x 64 games (320 rows); each contrast pairs two arms by seed.
- The starting population and both controls are products of the first and second experiments' training data; nothing in this run re-read either prior lease.
- pipeline.sh's screen and compare stages hardcode the third control's arm name as 'baseline-run1' regardless of which run's candidate is actually supplied via $BASELINE; in this run that arm holds the SECOND experiment's frozen candidate, not the first. The mapping is recorded accurately in evolve/config.json's baselineSha256 field (matches the second experiment's candidate hash) and in this record's metrics.priorRuns; the label itself is cosmetic and should be parameterised in a future pipeline.sh edit made only while no stage is executing.
- The fair-d4s7 arm is diagnostic only and its contrast against fair-d3s7 crossed zero on this cohort's fresh seeds (-1,409, bounds -62,290 to +58,933); this is expected cohort-to-cohort variation on a small paired sample and is not comparable across the three screens, which drew different seed blocks.
Agent contextSource files, operational notes and how to reproduce
Directory: approaches/lifetime-objective/nnue-evolution