diff options
Diffstat (limited to 'src/search.c')
| -rwxr-xr-x | src/search.c | 32 |
1 files changed, 21 insertions, 11 deletions
diff --git a/src/search.c b/src/search.c index 31220e1..807f69d 100755 --- a/src/search.c +++ b/src/search.c @@ -486,7 +486,21 @@ Search(IN SEARCHER_THREAD_CONTEXT *ctx, ctx->sSearchFlags.fAvoidNullmove = TRUE; RescoreMovesViaSearch(ctx, uDepth, iAlpha, iBeta); ctx->sSearchFlags.fAvoidNullmove = FALSE; - ASSERT(TRUE == pi->fMovesRescoredByIID); + // NOT always TRUE here -- pre-existing bug, found + // via debug_smoke_test.sh (a deeper/larger-than- + // usual sample finally hit the rare path). + // RescoreMovesViaSearch's own fail-high branch + // (searchsup.c) deliberately leaves this FALSE by + // design -- a fail-high only proves uBest is good + // enough, not honest eval-axis scores for every + // move, so claiming fMovesRescoredByIID would be a + // lie. This assert demanded the opposite of that + // documented contract; DO_IID is unconditionally + // compiled in (chess.h) so this could fire on any + // DEBUG build given an unlucky enough rescore -- + // ASSERT is a no-op in release, so this never + // crashed in production, but it made the DEBUG/ + // TEST harness itself unreliable at random. } } #endif @@ -727,15 +741,12 @@ Search(IN SEARCHER_THREAD_CONTEXT *ctx, iCheckSee, &iExtend); - // Cap how many extension plies this line may spend in total - // (root to here) so that a chain of checks/threats/etc. can't - // stall uDepth's descent indefinitely and burn the entire - // MAX_PLY_PER_SEARCH ply budget on one forcing sequence. - if (iExtend > 0) - { - iExtend = MIN(iExtend, - MAX(MAX_EXTEND_PER_LINE - pf->iCumulativeExtend, 0)); - } + // Note: MAX_EXTEND_PER_LINE (a flat, non-depth-relative cap on + // total extension spent per line) used to be applied here. + // Removed -- g_uExtensionReduction[] (consumed inside + // ComputeMoveExtension, scaled off g_uIterateDepth) is the + // sole extension-runaway guard now; see root.c's construction + // of that table. // Decide how much (if any) to reduce this move's depth -- // graded LMR. @@ -799,7 +810,6 @@ Search(IN SEARCHER_THREAD_CONTEXT *ctx, ULONG uFHAttempts = 0; ULONG uFHPct = GetMoveFailHighPercentage(mv, &uFHAttempts); fThisMoveEFPPruned = - (mv.cFrom != FindEnprisePiece(ctx, pos->uToMove)) && ((uFHAttempts < EFP_FH_MIN_SAMPLES) || (uFHPct <= EFP_FH_PRUNE_THRESHOLD)) && (!IS_SAME_MOVE(mv, ctx->mvKiller[ctx->uPly-1][0])) && |
