Skip to content

Pygin v62

Choose a tag to compare

@IchNukeDichWeg IchNukeDichWeg released this 31 Aug 16:24
· 151 commits to main since this release

CORRECTION (2026-09-05). The sentence below claiming the C core is
byte-identical to v61 is wrong. v62 as released also carries b4339ae +
a1a31cd, the b05 FI-115 completion, which had already measured ACCEPT H0
(LLR -5.98 at 1,500 pairs) against v61 in this same campaign and should have
been reverted before the release. The verdict was recorded; the code was not
reverted. It has been reverted since, and the current tree's csearch.so is
byte-identical to v61's.

The +18.40 below still stands for what it measured. Both arms of that A/B
were Python shims over the same binary, so the b05 core sat on both sides and
cancelled out. It is an honest reading of the aspiration-window change
relative to that core. What was never measured, and is claimed nowhere in
these notes, is v62-as-released against v61-as-released.

Every routine check was blind to this by construction: bench (1,203,792) and
kiwipete d12 (670,778) are identical on both cores, because they reset the
transposition table, and a replacement rule only runs when the table is full
and carried across moves. A 28-ply retained-TT probe separates them cleanly
(3,294,864 against 2,479,366) and is now pinned in selftest.py.

v62 -- the aspiration window stopped fighting itself. The root window opened flat at 30cp whatever the position and widened 2x on every failure, and a fail-low left beta where it was -- so a position could oscillate low/high and pay the whole ladder out to the 1920 full-window fallback. Three riders replace that as one policy. Driver-only: the C core is byte-identical to v61. (see the correction above)

Elo   | +18.40 +/- 7.6 (52.65%; SPRT-stopped, so the magnitude is biased up)
SPRT  | [0,4] normalized, LLR +2.959 -> ACCEPT H1 (stopped early)
Games | N: 3439  W: 1037  L: 855  D: 1547
Penta | [62, 361, 735, 450, 109]   1717 pairs, pair ratio 1.32, norm Elo +28.25
Conf  | TIMED 50+0.50, x86, workers 48, Threads=1, Hash=192MB BOTH SIDES
Base  | vs v61 engine_v61b_deadtag (same nnue_v12 net both arms), SUBSET_SEED 59
Bench | 1,203,792 nodes (was 1,140,099 -- see Known limits)

What changed

  • Score-scaled opening window. delta = 14 + prev^2/16384 instead of a flat 30cp, so a decided position opens wide and a balanced one opens tight.
  • Fail-low pulls beta to the midpoint before alpha drops -- Stockfish's order. This is the piece that kills the oscillation; previously a fail-low widened downward while beta stayed put, so the next fail-high widened back up and the pair could walk the whole ladder.
  • 1.5x growth instead of 2x, so the ladder has more rungs and overshoots less.
  • The three are one mechanism and were measured as one change, not three toggles. ASPIRATION_FI21 = False restores the v61 window for A/B.

Testing

  • Confirmed at both time controls against v61 with the same nnue_v12 net on both arms, so the window policy is the only variable: 10+0.1 screen ACCEPT H1 (LLR +2.969, 6,687 games), then the shipping 50+0.5 instrument ACCEPT H1 (LLR +2.959, 3,439 games, ptnml 62/361/735/450/109, nElo +28.25).
  • The ported cengine reproduces the measured shim node-for-node on three positions -- what ships is what was measured.
  • Old Engine/62 is node-exact against the live engine in a fresh process at d10/d12/d14.

Known limits

  • Both runs stopped at a bound, so +18.40 is biased upward and the ledger is deliberately NOT advanced on it. FI-115 read +33.83 the same way and came back +19.11 at a fixed budget. A fixed-budget 50+0.5 re-run is owed before this magnitude is treated as settled.
  • Expected value for this change was +1-4. The measured value is far above that, which is itself a reason to re-run rather than celebrate.
  • Measured on x86 (EPYC 7443). The M2 is unmeasured.
  • The 2026-08-31 campaign that produced it was otherwise barren: eleven candidates, six rejections, four nulls, one skipped. The NNUE corpus lane is now closed on all three axes (volume, schedule, label depth), and completing the FI-115 victim rule measured -43.36 and must not be retried.