Repository navigation
Pygin v60
v60 -- the first net trained on real games, not generated ones. Every net
before this learned from self-play positions manufactured for the purpose. v12
learned from 24.8M positions harvested out of Pygin's own A/B match logs,
labelled by the search those games actually ran at depth 12-16 rather than a
5,000-node budget. It is also the first net trained with the game-result term
switched off entirely, because that column could not be trusted.
Elo | +42.50 +/- 17.3 (56.09%; stopped early -- magnitude bound-biased)
SPRT | GSPRT[0,4] LLR +2.957 vs +/-2.944 -> ACCEPT H1 (stopped early)
Games | N: 1594 W: 553 L: 359 D: 682
Penta | [27, 137, 301, 272, 56] 793 pairs, pair ratio 2.00, norm Elo +63.91
Conf | TIMED 50+0.50, x86 EPYC 7443, workers 48, Threads=1, Hash=192MB
Base | vs Old Engine/59 (which ships nnue_v4), SUBSET_SEED 59
Bench | 1,140,099 nodes (was 1,214,534)
What changed
- The net, and only the net.
NNUE_FILEmoves fromnnue_v4to
nnue_v12. No search change, no toggle, no C change -- v59's engine with a
different evaluation. - Trained on
ab_logs: 24,825,823 positions from real A/B games
(24,587,037 from pre-v49 campaigns plus 238,786 from two 2026-08-09 screens),
every contributing side predating FI-29 so the cycle bound cannot
draw-flatten a label through path history the features cannot see. - LAMBDA 1.0 -- search scores only, game result discarded. Not a tuning
choice. Those logs predate the phantom-repetition fix, and replay showed
1,479/1,479 and 2,215/2,215 of their repetition draws were phantom: the game
ended a ply before the position actually repeated. It shows in the
distribution -- W/D/L 39.0/41.9/19.1 against a clean corpus's
41.7/18.6/39.7, both inflated and skewed. The cp column is sound, so it is
kept and the result column is dropped.
Known limits
- The magnitude is not trustworthy; the verdict is. The run stopped at a
bound, so +42.50 is taken at a favourable fluctuation by construction. It
says v12 beats v59. It does not say by how much, and the ledger is NOT
advanced on it -- that needs a fixed-budget re-run. - v12 was not measured to be the best net available. Against v10 it drew:
+3.75 +/- 6.8 over a full 10,000 games, LLR +1.235, no decision. v12 ships
as the point-estimate leader of two nets that could not be separated, not as
a winner. - The attribution behind this net is unsettled. v10 shares v4's corpus,
recipe, dimensions and default seed and still beat the baseline carrying
v4's net. Two runs of one recipe landing that far apart is wide enough to
explain any single-net verdict on this ladder, this one included. An
eight-net seed screen is running to size that spread. - It does not know basic endgame theory.
tuning/eval_bench.pyagainst
Stockfish at depth 16 puts 39.6% of positions more than 10 percentage points
apart in win probability, and the worst cases share one signature: rook+
bishop vs rook and rook+knight vs rook -- textbook draws -- scored at +400
to +475 while Stockfish reads 0.00. Six of the top ten offenders are that
shape, all at phase 0-9. - Not confirmed on arm64. Every number here is x86.
Full Changelog: v59...v60