From: VoyagerOne Date: Mon, 22 May 2017 01:25:20 +0000 (-0700) Subject: Evasion Pruning Tweak X-Git-Url: https://git.sesse.net/?p=stockfish;a=commitdiff_plain;h=1d31065e1d1f04ecf47fc959523c560e8657fbfa;hp=c216dcbe7bfc5e326d260d1b7c1271fb4ffc67c9 Evasion Pruning Tweak Use moveCount to decide when to prune for evasion pruning STC: LLR: 2.95 (-2.94,2.94) [0.00,5.00] Total: 24476 W: 4518 L: 4289 D: 15669 LTC: LLR: 2.96 (-2.94,2.94) [0.00,5.00] Total: 18362 W: 2476 L: 2298 D: 13588 Bench: 6469989 Closes #1120 --- diff --git a/src/search.cpp b/src/search.cpp index de487e57..2e8d5c6f 100644 --- a/src/search.cpp +++ b/src/search.cpp @@ -1165,6 +1165,7 @@ moves_loop: // When in check search starts from here Value bestValue, value, ttValue, futilityValue, futilityBase, oldAlpha; bool ttHit, givesCheck, evasionPrunable; Depth ttDepth; + int moveCount; if (PvNode) { @@ -1175,6 +1176,7 @@ moves_loop: // When in check search starts from here ss->currentMove = bestMove = MOVE_NONE; ss->ply = (ss-1)->ply + 1; + moveCount = 0; // Check for an instant draw or if the maximum ply has been reached if (pos.is_draw(ss->ply) || ss->ply >= MAX_PLY) @@ -1258,6 +1260,8 @@ moves_loop: // When in check search starts from here ? pos.check_squares(type_of(pos.piece_on(from_sq(move)))) & to_sq(move) : pos.gives_check(move); + moveCount++; + // Futility pruning if ( !InCheck && !givesCheck @@ -1283,7 +1287,7 @@ moves_loop: // When in check search starts from here // Detect non-capture evasions that are candidates to be pruned evasionPrunable = InCheck - && depth != DEPTH_ZERO + && (depth != DEPTH_ZERO || moveCount > 2) && bestValue > VALUE_MATED_IN_MAX_PLY && !pos.capture(move); @@ -1298,7 +1302,10 @@ moves_loop: // When in check search starts from here // Check for legality just before making the move if (!pos.legal(move)) + { + moveCount--; continue; + } ss->currentMove = move;