From: VoyagerOne Date: Mon, 6 Jun 2016 13:39:26 +0000 (-0400) Subject: Tweak check extension condition X-Git-Url: https://git.sesse.net/?p=stockfish;a=commitdiff_plain;h=7c5d724724e826ff1fd9a97c8812d5a4bffaaa84 Tweak check extension condition There are two concepts with this patch: Limit check extensions by using move count. The idea is to limit search explosion. Always extend check if the first move gives check. The idea is to save expensive SEE calls, since the vast majority of first move will have SEE value >= 0, also first move may still be strong even if the SEE is negative. STC: LLR: 2.95 (-2.94,2.94) [0.00,5.00] Total: 16503 W: 3068 L: 2873 D: 10562 LTC: LLR: 2.97 (-2.94,2.94) [0.00,5.00] Total: 37202 W: 5261 L: 5014 D: 26927 bench: 8543366 --- diff --git a/src/search.cpp b/src/search.cpp index d03a251f..b24e8c4e 100644 --- a/src/search.cpp +++ b/src/search.cpp @@ -608,7 +608,7 @@ namespace { Depth extension, newDepth, predictedDepth; Value bestValue, value, ttValue, eval, nullValue; bool ttHit, inCheck, givesCheck, singularExtensionNode, improving; - bool captureOrPromotion, doFullDepthSearch; + bool captureOrPromotion, doFullDepthSearch, moveCountPruning; Piece moved_piece; int moveCount, quietCount; @@ -919,8 +919,13 @@ moves_loop: // When in check search starts from here ? ci.checkSquares[type_of(pos.piece_on(from_sq(move)))] & to_sq(move) : pos.gives_check(move, ci); + moveCountPruning = depth < 16 * ONE_PLY + && moveCount >= FutilityMoveCounts[improving][depth]; + // Step 12. Extend checks - if (givesCheck && pos.see_sign(move) >= VALUE_ZERO) + if ( givesCheck + && ( moveCount == 1 + || (!moveCountPruning && pos.see_sign(move) >= VALUE_ZERO))) extension = ONE_PLY; // Singular extension search. If all moves but one fail low on a search of @@ -956,8 +961,7 @@ moves_loop: // When in check search starts from here && bestValue > VALUE_MATED_IN_MAX_PLY) { // Move count based pruning - if ( depth < 16 * ONE_PLY - && moveCount >= FutilityMoveCounts[improving][depth]) + if (moveCountPruning) continue; // Countermoves based pruning