diff options
Diffstat (limited to 'src/search.c')
| -rwxr-xr-x | src/search.c | 24 |
1 files changed, 14 insertions, 10 deletions
diff --git a/src/search.c b/src/search.c index 3879d9f..4a153aa 100755 --- a/src/search.c +++ b/src/search.c @@ -165,7 +165,7 @@ Search(IN SEARCHER_THREAD_CONTEXT *ctx, MOVE mvLast = (pi-1)->mv; SCORE iBestScore = -INFINITY; SCORE iInitialAlpha; - SCORE iRoughEval; + SCORE iEval; MOVE mv, mvBest, mvHash; ULONG x = 0; SCORE iScore; @@ -337,19 +337,21 @@ Search(IN SEARCHER_THREAD_CONTEXT *ctx, } // Maybe do nullmove pruning - pi->iEval = iRoughEval = GetRoughEvalScore(ctx, iAlpha, iBeta, FALSE); + pi->iEval = iEval = GetRoughEvalScore(ctx, iAlpha, iBeta, FALSE); SCORE iImprovement = 0; if (ctx->uPly > 1) { - iImprovement = (iRoughEval - ctx->sPlyInfo[ctx->uPly - 2].iEval); + iImprovement = (iEval - ctx->sPlyInfo[ctx->uPly - 2].iEval); } + + GENERATE_NO_MOVES; if (!fSkipNull && !fThreat && WeShouldTryNullmovePruning(ctx, iAlpha, iBeta, - iRoughEval, + iEval, iImprovement, uNextDepth)) { @@ -525,16 +527,16 @@ Search(IN SEARCHER_THREAD_CONTEXT *ctx, { ASSERT(uDepth >= THREE_QUARTERS_PLY); if ((uDepth <= ONE_PLY + THREE_QUARTERS_PLY) && - (iRoughEval + VALUE_KNIGHT <= iAlpha)) + (iEval + VALUE_KNIGHT + iImprovement <= iAlpha)) { - uFutilityMargin = (iAlpha - iRoughEval) / 2; + uFutilityMargin = (iAlpha - iEval) / 2; ASSERT(uFutilityMargin); } else if ((uDepth > ONE_PLY + THREE_QUARTERS_PLY) && (uDepth <= TWO_PLY + THREE_QUARTERS_PLY) && - (iRoughEval + VALUE_ROOK <= iAlpha)) + (iEval + VALUE_ROOK + iImprovement <= iAlpha)) { - uFutilityMargin = (iAlpha - iRoughEval) / 2; + uFutilityMargin = (iAlpha - iEval) / 2; ASSERT(uFutilityMargin); } } @@ -649,6 +651,7 @@ Search(IN SEARCHER_THREAD_CONTEXT *ctx, iScore = StartParallelSearch(ctx, &iAlpha, iBeta, + iImprovement, &iBestScore, &mvBest, (x - 1), @@ -703,7 +706,7 @@ Search(IN SEARCHER_THREAD_CONTEXT *ctx, iAlpha, iBeta, (x - 1), // Note: x==0 if doing mvHash - iRoughEval, + iEval, uDepth, iCheckSee, &iExtend); @@ -721,9 +724,10 @@ Search(IN SEARCHER_THREAD_CONTEXT *ctx, // Decide how much (if any) to reduce this move's depth -- // graded LMR. { - INT iLMR = GetLMRReduction(iRoughEval, + INT iLMR = GetLMRReduction(iEval, iAlpha, iBeta, + iImprovement, ctx, uDepth, uLegalMoves, |
