diff options
| author | Scott Gasch <[email protected]> | 2026-10-05 09:01:25 -0700 |
|---|---|---|
| committer | Scott Gasch <[email protected]> | 2026-10-05 09:01:25 -0700 |
| commit | 64b5d3307a7a95975f7f8c0248f3f1febedd8617 (patch) | |
| tree | 993fffd62a68bec962261caf033a8f05c6370ea9 /src/generate.c | |
| parent | bbdf1bda8f410df6aa9be0a38e71b7db04982198 (diff) | |
Continue dynamic move-ordering/LMR session: SPRT-validated at 1770+ games
Gate match vs head (st4.0) shows LLR=+2.89 approaching the H1=+2.94
bound, candidate score 0.5324 (LOWER95=0.5092, ELO=+22.6+/-16.2),
candidate depth/ebf both improved (13.98 vs 13.61 avg depth, ebf 3.324
vs 3.464) with comparable nps -- consistent with real search-efficiency
gains rather than noise. match_play.py gets additional instrumentation
to report these stats; search.c/searchsup.c/generate.c/chess.h/eval.c
carry the underlying move-ordering/LMR changes from this session's
line of work.
Co-Authored-By: Claude Sonnet 5 <[email protected]>
Diffstat (limited to 'src/generate.c')
| -rw-r--r-- | src/generate.c | 28 |
1 files changed, 23 insertions, 5 deletions
diff --git a/src/generate.c b/src/generate.c index dd9fba5..f41a3b6 100644 --- a/src/generate.c +++ b/src/generate.c @@ -4215,9 +4215,20 @@ Return value: #ifdef DEBUG else { + // 2026-10-04: no longer subtracts VALUE_KING here. + // That made this capture's stored iValue differ + // between DEBUG and release builds for no checked + // reason (the ASSERT it fed was tautological -- + // already true by construction, this being the + // else of `s >= 0` above) -- a silent landmine: + // ComputeMoveScore/DecodeMoveValueEstimate's + // MOVE_SCORING_NORMAL case trusts this value + // directly for a losing capture (MIN0(iRawValue)), + // so a DEBUG build fed EstimateHangingMaterialCp a + // ~VALUE_KING-inflated "hang" estimate for an + // ordinary losing capture, release builds never + // saw it. The real check is the bound just above. ASSERT((s & STRIP_OFF_FLAGS) > -VALUE_KING); - s -= VALUE_KING; - ASSERT(s < 0); } #endif } @@ -4441,11 +4452,18 @@ Return value: #ifdef DEBUG else { - // Losing capture + // Losing capture. No `s -= VALUE_KING` here -- + // same landmine, same fix as _ScoreAllMoves' twin + // of this block (2026-10-04): currently harmless in + // practice (DecodeMoveValueEstimate's + // MOVE_SCORING_ESCAPE case recomputes a capture's + // value straight from mv.pCaptured/mv.pMoved rather + // than trusting iValue), but there's no reason for + // this capture's stored iValue to differ between + // DEBUG and release builds when nothing checks the + // difference. ASSERT(!IS_KING(mv.pMoved)); ASSERT((s & STRIP_OFF_FLAGS) > -VALUE_KING); - s -= VALUE_KING; - ASSERT(s < 0); } #endif } |
