Repository navigation
Pygin v59
v59 -- lazy NNUE evaluation, and the first release measured as exactly the config that ships. The engine now skips the net's forward pass wherever a cheap bound already decides the node, and spends the saved time searching. One toggle, isolated for the first time, same net on both sides of the A/B.
Elo | +13.84 +/- 6.4 (pooled 51.99%; stopped early -- magnitude bound-biased)
SPRT | GSPRT[0,4] LLR +2.950 vs +/-2.944 -> ACCEPT H1 (stopped early)
Games | N: 4537 W: 1292 L: 1107 D: 2138
Penta | [69, 509, 975, 595, 116] 2,264 pairs, pair ratio 1.23
Conf | TIMED 50+0.50, x86 EPYC 7443, Threads=1, Hash=192MB
Base | vs Old Engine/58, SUBSET_SEED 58, corrected (post-fc82cb7) harness
Bench | 1,214,534 nodes (was 1,074,820 -- lazy trades net calls for nodes)
Search
- FI-106, lazy NNUE eval (
LAZY_NNUE = True): at nodes where a cheap bound
already brackets the decision, the net is not consulted at all. On the d11
bench that is +13% nodes for +2.2% NPS; on the clock the trade pays.
Why this one is different
- Every earlier number for lazy priced the whole NNUE-plus-lazy package against
HCE baselines. This A/B put the same v4 net on both sides with the toggle
as the only difference -- the first isolated measurement of the mechanism. - The candidate was byte-equivalent to the shipped engine plus this flip.
v58's own +19.11 turned out to have been measured with lazy ON while the
release ran it OFF (found 2026-08-09); v59 closes that gap by shipping
exactly what was measured. That rule is policy now.
Testing
- First release measured entirely on the corrected harness:
fc82cb7fixed a
bug where all three match runners claimed threefold draws that had merely
become available rather than actually occurred (419 of 2,000 games in one
A/B, zero real repetitions among them). Ladder re-pinned for the lazy
config; opening-sample rotation advanced to the v59 era.
Known limits
- The Elo magnitude is a bound-stopped estimate; a fixed-budget restatement is
owed if the number is ever quoted rather than the verdict. - Measured on x86 only. arm64 is still owed for v58's net arm as well.
Full Changelog: v58...v59