]> git.sesse.net Git - stockfish/commitdiff
Shallow search to verify probcut
authorAndyGrant <Andrew@grantnet.us>
Mon, 26 Feb 2018 02:01:37 +0000 (03:01 +0100)
committerStéphane Nicolet <cassio@free.fr>
Mon, 26 Feb 2018 02:01:46 +0000 (03:01 +0100)
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

index f132e3ecc03307269030299443dcf931233b5108..ca5a107ea2853df9b3648eeb3f4e56bb23c039b6 100644 (file)
@@ -742,7 +742,18 @@ namespace {
                 assert(depth >= 5 * ONE_PLY);
 
                 pos.do_move(move, st);
-                value = -search<NonPV>(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<NonPV>(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<NonPV>(pos, ss+1, -rbeta, -rbeta+1, depth - 4 * ONE_PLY, !cutNode, false);
+
                 pos.undo_move(move);
                 if (value >= rbeta)
                     return value;