From 71cc01c2ef45bab91bdcd72c699f66e19dd518b3 Mon Sep 17 00:00:00 2001 From: AndyGrant Date: Mon, 26 Feb 2018 03:01:37 +0100 Subject: [PATCH] Shallow search to verify probcut Perform a preliminary shallow search to verify a probcut before doing the normal "depth - 4 plies" search. STC: LLR: 4.73 (-2.94,2.94) [0.00,5.00] Total: 36281 W: 8221 L: 7830 D: 20230 http://tests.stockfishchess.org/tests/view/5a921cb90ebc590297cc87f6 LTC: LLR: 2.97 (-2.94,2.94) [0.00,5.00] Total: 22907 W: 3954 L: 3738 D: 15215 http://tests.stockfishchess.org/tests/view/5a92672b0ebc590297cc8814 Happy to see something from Ethereal work for Stockfish :) Bench: 5882274 --- src/search.cpp | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/search.cpp b/src/search.cpp index f132e3ec..ca5a107e 100644 --- a/src/search.cpp +++ b/src/search.cpp @@ -742,7 +742,18 @@ namespace { assert(depth >= 5 * ONE_PLY); pos.do_move(move, st); - value = -search(pos, ss+1, -rbeta, -rbeta+1, depth - 4 * ONE_PLY, !cutNode, false); + + // Perform a preliminary search at depth 1 to verify that the move holds. + // We will only do this search if the depth is not 5, thus avoiding two + // searches at depth 1 in a row. + if (depth != 5 * ONE_PLY) + value = -search(pos, ss+1, -rbeta, -rbeta+1, ONE_PLY, !cutNode, true); + + // If the first search was skipped or was performed and held, perform + // the regular search. + if (depth == 5 * ONE_PLY || value >= rbeta) + value = -search(pos, ss+1, -rbeta, -rbeta+1, depth - 4 * ONE_PLY, !cutNode, false); + pos.undo_move(move); if (value >= rbeta) return value; -- 2.39.2