Skip to content

Pygin v63

Choose a tag to compare

@IchNukeDichWeg IchNukeDichWeg released this 11 Sep 15:54
· 86 commits to main since this release

v63 -- losing captures near the leaves are skipped, and v62's rejected TT rule is gone. v62 shipped a transposition-table replacement rule that had already been rejected; v63 reverts it, so the core is v61's again. On that clean core it adds FI-38: a capture that loses material by static exchange is not searched when it loses more than 50cp per remaining ply near the leaves.

Elo   | +9.50 +/- 6.0 for FI-38 K=50 on the clean core (SPRT-stopped, biased up)
      | +20.95 +/- 7.9 for the clean core + v62's window vs v61 (SPRT-stopped)
SPRT  | [0,4] normalized, LLR +2.961 -> ACCEPT H1 (stopped early)
      | and LLR +3.049 -> ACCEPT H1 for the clean-core run (stopped early)
Games | N: 6802  W: 1893  L: 1707  D: 3202      (FI-38, two tranches)
      | N: 3006  W: 880   L: 699   D: 1427      (clean core vs v61)
Penta | [121, 759, 1491, 860, 165]   3396 pairs, pair ratio 1.16, norm Elo +15.19
      | [49, 309, 620, 453, 69]      1500 pairs, pair ratio 1.46, norm Elo +33.53
Conf  | TIMED 50+0.50, x86, workers 48, Threads=1, Hash=192MB BOTH SIDES
Base  | vs Old Engine/61 (same nnue_v12 net both arms), SUBSET_SEED 62
      | ledger HELD at ~+354 -- every verdict here stopped at a bound
Bench | 1,123,567 nodes (was 1,203,792)

What changed

  • The b05 TT rule is reverted. v62 carried b4339ae + a1a31cd, the FI-115 completion, which had measured ACCEPT H0 (LLR -5.98) against v61 before the release. The C core is v61's again, plus the FI-38 setter.
  • FI-38 depth-scaled SEE pruning of captures. At depth 6 or less, off the PV, not in check and not giving check, a capture whose SEE is below -50 x depth is skipped. SEE_SCALED_K = 0 restores v61's tree node-for-node.
  • Carries v62's aspiration-window repair (FI-21) unchanged.

Testing

  • HEAD with v62's settings vs v61 at 50+0.5, same net both sides: ACCEPT H1 at 3,006 games, ptnml 49/309/620/453/69, nElo +33.53.
  • FI-38 K=50 vs that: 10+0.1 screen ACCEPT H1 (LLR +2.946, 7,813 games, +9.34 +/- 5.3), then 50+0.5 ACCEPT H1 (LLR +2.961, 6,802 games over two tranches, ptnml 121/759/1491/860/165, nElo +15.19).
  • The K sweep around 50: K=25 +6.15 at the 10k cap, K=75 +2.74 and K=100 +0.63, both NULL at the full budget. 50 is the setting.
  • selftest.py now pins a retained-TT probe (28 plies at d10 with the table kept), the one check that sees a TT replacement rule: 2,479,366 on this core against v62's 3,294,864.
  • Old Engine/63 is node-exact against the live engine in a fresh process at d10/d12/d14.

Known limits

  • Every verdict in this release stopped at an SPRT bound, so both magnitudes are biased upward and the ledger is NOT advanced on them. A fixed-budget 50+0.5 run of v63 vs v61 is owed for the size.
  • Measured on x86 (2x EPYC 7443). The Mac is unmeasured.
  • Rejected on the way: the FI-38 quiets half (K2=24 and K2=50, both ACCEPT H0) and E-04 material-scaled net output (-10.64 +/- 6.3, fixed-node).
  • PGO (+3.9% NPS measured on x86) is not in this build; it ships separately with its own measurement.

Full Changelog: v62...v63