From: Günther Demetz Date: Mon, 18 Dec 2017 15:30:27 +0000 (+0100) Subject: Enhanced verify search (#1338) X-Git-Url: https://git.sesse.net/?p=stockfish;a=commitdiff_plain;h=b53239d6410cfc87bf454370671390b04879ef05 Enhanced verify search (#1338) by disabling null-move-pruning for the side to move for first part of the remaining search tree. This helps to better recognize zugzwang. STC: LLR: 2.96 (-2.94,2.94) [-3.00,1.00] Total: 18220 W: 3379 L: 3253 D: 11588 http://tests.stockfishchess.org/tests/view/5a2fa6460ebc590ccbb8bc2f LTC: LLR: 2.96 (-2.94,2.94) [-3.00,1.00] Total: 41899 W: 5359 L: 5265 D: 31275 http://tests.stockfishchess.org/tests/view/5a2fcf440ebc590ccbb8bc47 For further detail see commit notes and discussion at https://github.com/pb00068/Stockfish/commit/6401a80ab91df5c54390ac357409fef2e51ff5bb bench: 5776193 --- diff --git a/src/search.cpp b/src/search.cpp index ed01e0de..8b3b8fb4 100644 --- a/src/search.cpp +++ b/src/search.cpp @@ -681,7 +681,8 @@ namespace { // Step 8. Null move search with verification search (is omitted in PV nodes) if ( !PvNode && eval >= beta - && ss->staticEval >= beta - 36 * depth / ONE_PLY + 225) + && ss->staticEval >= beta - 36 * depth / ONE_PLY + 225 + && (ss->ply >= thisThread->nmp_ply || ss->ply % 2 == thisThread->pair)) { assert(eval - beta >= 0); @@ -707,8 +708,17 @@ namespace { return nullValue; // Do verification search at high depths + R += ONE_PLY; + // disable null move pruning for side to move for the first part of the remaining search tree + int nmp_ply = thisThread->nmp_ply; + int pair = thisThread->pair; + thisThread->nmp_ply = ss->ply + 3 * (depth-R) / 4; + thisThread->pair = (ss->ply % 2) == 0; + Value v = depth-R < ONE_PLY ? qsearch(pos, ss, beta-1, beta) : search(pos, ss, beta-1, beta, depth-R, false, true); + thisThread->pair = pair; + thisThread->nmp_ply = nmp_ply; if (v >= beta) return nullValue; diff --git a/src/thread.cpp b/src/thread.cpp index 3f3f26cd..58d693cf 100644 --- a/src/thread.cpp +++ b/src/thread.cpp @@ -187,6 +187,8 @@ void ThreadPool::start_thinking(Position& pos, StateListPtr& states, th->rootDepth = th->completedDepth = DEPTH_ZERO; th->rootMoves = rootMoves; th->rootPos.set(pos.fen(), pos.is_chess960(), &setupStates->back(), th); + th->nmp_ply = 0; + th->pair = -1; } setupStates->back() = tmp; diff --git a/src/thread.h b/src/thread.h index 1780abe1..e2009a7d 100644 --- a/src/thread.h +++ b/src/thread.h @@ -61,7 +61,7 @@ public: Material::Table materialTable; Endgames endgames; size_t PVIdx; - int selDepth; + int selDepth, nmp_ply, pair; std::atomic nodes, tbHits; Position rootPos;