summaryrefslogtreecommitdiff
path: root/src/chess.h
diff options
context:
space:
mode:
authorScott Gasch <[email protected]>2026-10-24 09:07:03 -0700
committerScott Gasch <[email protected]>2026-10-24 09:07:03 -0700
commit5f901d737b17c5f99b6e456d6c0c7d5e3c093dc4 (patch)
tree6601dadbd36c8f45991c5dd821a3dbb2059baafe /src/chess.h
parent69525eb2f42ea9cca8255f6cc3b85e6b1312fd05 (diff)
More aggressive move reductions; Wilson bound overrides static signal when available
SPRT playtest (2000 games, sd/depth matched): -535 =875 +590, score=0.514, llr=+1.04 (floated around +1.0 the whole run, never went negative) toward H1=+2.94. Not a confirmed win, but searches meaningfully deeper (avg depth 14.35 vs 13.50, EBF 3.131 vs 3.305) at no measurable strength cost -- worth banking and continuing to accumulate games against. Co-Authored-By: Claude Sonnet 5 <[email protected]>
Diffstat (limited to 'src/chess.h')
-rwxr-xr-xsrc/chess.h32
1 files changed, 32 insertions, 0 deletions
diff --git a/src/chess.h b/src/chess.h
index 189e0a4..05052c6 100755
--- a/src/chess.h
+++ b/src/chess.h
@@ -1187,6 +1187,18 @@ typedef struct _COUNTERS
UINT64 u64LeftoverTries; // leftover (sub-GOOD_MOVE) move tried
UINT64 u64LeftoverAlpha; // ...raised alpha (didn't fail high)
UINT64 u64LeftoverFH; // ...failed high
+#ifdef HASHCAP_COLLECTION
+ // 2026-10-23, one-off measurement: P(leftover move fails high |
+ // hash move at this node was a capture, node type guess). See
+ // GNUmakefile's HASHCAP_COLLECTION comment for what's being
+ // measured and why -- not a permanent production signal, this
+ // is purely to find out whether IS_CAPTURE(mvHash) (optionally
+ // && eNodeType==NODE_CUT) is worth baking into the joint table
+ // as a real axis before building anything around it.
+ // Indexed [fHashMoveIsCapture][eNodeType==NODE_CUT].
+ UINT64 u64HashCapTries[2][2];
+ UINT64 u64HashCapFH[2][2];
+#endif
UINT64 u64CMEvidenceTries[CM_EVIDENCE_BUCKETS];
UINT64 u64CMEvidenceFH[CM_EVIDENCE_BUCKETS];
UINT64 u64HangEstimateTries[HANG_CP_BUCKETS];
@@ -1759,6 +1771,16 @@ typedef struct _PLY_INFO
MOVE mvBest;
MOVE PV[MAX_PLY_PER_SEARCH];
+ // 2026-10-23, one-off diagnostic support: was the hash move at
+ // THIS node a capture/promotion? Set once per node, right after
+ // mvHash is established (search.c), read back by SearchOneMove
+ // (searchsup.c) to bucket the HASHCAP_COLLECTION measurement --
+ // see that macro's own comment (GNUmakefile) for what it's
+ // measuring and why. FALSE (not just unset) whenever there was no
+ // hash move at all, same as IS_CAPTURE_OR_PROMOTION on a null move
+ // would read.
+ FLAG fHashMoveIsCapture;
+
// Stamped with (pos->u64NonPawnSig ^ pos->u64PawnSig) the instant a
// full (not lazy/super-lazy) Eval() call finishes for the position
// currently sitting at this ply -- see Eval()'s own comment near
@@ -2229,6 +2251,10 @@ typedef struct _GAME_OPTIONS
UINT64 u64LeftoverTries;
UINT64 u64LeftoverAlpha;
UINT64 u64LeftoverFH;
+#ifdef HASHCAP_COLLECTION
+ UINT64 u64HashCapTries[2][2];
+ UINT64 u64HashCapFH[2][2];
+#endif
UINT64 u64CMEvidenceTries[CM_EVIDENCE_BUCKETS];
UINT64 u64CMEvidenceFH[CM_EVIDENCE_BUCKETS];
UINT64 u64HangEstimateTries[HANG_CP_BUCKETS];
@@ -4338,6 +4364,12 @@ extern SCORE g_iLMRQuietReduction[MAX_PLY_PER_SEARCH + 1][LMR_TABLE_MAX_MOVES +
void
InitializeLMRTable(void);
+void
+InitializeWilsonBoundTable(void);
+
+ULONG
+GetMoveFailHighWilsonUpperBoundThousandths(MOVE mv);
+
FLAG
CanWeReduceOrPruneMove(IN SEARCHER_THREAD_CONTEXT *ctx,
IN MOVE mv,