From: Joona Kiiski Date: Fri, 22 Jan 2010 20:54:28 +0000 (+0200) Subject: Fix some silly bugs X-Git-Url: https://git.sesse.net/?p=stockfish;a=commitdiff_plain;h=ea53006a9ded671c5f9deb27c1262d77f9722177 Fix some silly bugs SelectiveDepth was ignored Test results for the whole futility pruning series: 4CPU: Orig - Mod: 959 - 1027 (+12 elo) 1CPU: Orig - Mod: 763 - 830 (+15 elo) Signed-off-by: Marco Costalba --- diff --git a/src/search.cpp b/src/search.cpp index f259ab70..6bc77d3b 100644 --- a/src/search.cpp +++ b/src/search.cpp @@ -1359,7 +1359,7 @@ namespace { Move ttMove, move; Depth ext, newDepth; Value bestValue, staticValue, nullValue, value, futilityValue, futilityValueScaled; - bool isCheck, useFutilityPruning, singleEvasion, moveIsCheck, captureOrPromotion, dangerous; + bool isCheck, singleEvasion, moveIsCheck, captureOrPromotion, dangerous; bool mateThreat = false; int moveCount = 0; futilityValue = staticValue = bestValue = value = -VALUE_INFINITE; @@ -1430,7 +1430,7 @@ namespace { } // Post futility pruning - if (staticValue - PostFutilityValueMargin >= beta) + if (depth < SelectiveDepth && staticValue - PostFutilityValueMargin >= beta) return (staticValue - PostFutilityValueMargin); // Null move search @@ -1510,7 +1510,6 @@ namespace { // to search all moves. MovePicker mp = MovePicker(pos, ttMove, depth, H, &ss[ply]); CheckInfo ci(pos); - useFutilityPruning = depth < SelectiveDepth && !isCheck; // Loop through all legal moves until no moves remain or a beta cutoff occurs while ( bestValue < beta @@ -1559,7 +1558,8 @@ namespace { // Futility pruning for captures Color them = opposite_color(pos.side_to_move()); - if ( useFutilityPruning + if ( !isCheck + && newDepth < SelectiveDepth && !dangerous && pos.move_is_capture(move) && !pos.move_is_check(move, ci) @@ -1579,7 +1579,7 @@ namespace { // Futility pruning - if ( useFutilityPruning + if ( !isCheck && !dangerous && !captureOrPromotion && !move_is_castle(move) @@ -1599,19 +1599,22 @@ namespace { if (red >= 1.0) predictedDepth -= int(floor(red * int(OnePly))); - int preFutilityValueMargin = 0; - if (predictedDepth >= OnePly) - preFutilityValueMargin = 112 * bitScanReverse32(int(predictedDepth) * int(predictedDepth) / 2); + if (predictedDepth < SelectiveDepth) + { + int preFutilityValueMargin = 0; + if (predictedDepth >= OnePly) + preFutilityValueMargin = 112 * bitScanReverse32(int(predictedDepth) * int(predictedDepth) / 2); - preFutilityValueMargin += MG.retrieve(pos.piece_on(move_from(move)), move_from(move), move_to(move)) + 45; + preFutilityValueMargin += MG.retrieve(pos.piece_on(move_from(move)), move_from(move), move_to(move)) + 45; - futilityValueScaled = ss[ply].eval + preFutilityValueMargin - moveCount * IncrementalFutilityMargin; + futilityValueScaled = ss[ply].eval + preFutilityValueMargin - moveCount * IncrementalFutilityMargin; - if (futilityValueScaled < beta) - { - if (futilityValueScaled > bestValue) - bestValue = futilityValueScaled; - continue; + if (futilityValueScaled < beta) + { + if (futilityValueScaled > bestValue) + bestValue = futilityValueScaled; + continue; + } } }