From beaadd65474c7cf09b13b8cbeeca769e2737f049 Mon Sep 17 00:00:00 2001 From: Joost VandeVondele Date: Thu, 24 May 2018 18:26:21 +0200 Subject: [PATCH] Correctly prevent recursive verification in nmp. As discussed with @pb00068, the condition to prevent recursive verification was not completely correct. This patch corrects that condition, and adds an assert. In the current implementation, recursive verification needs to be avoided in order not to break the verification of the move closer to the root (i.e. to not set thisThread->nmp_min_ply to zero prematurely). This patch is tested as a bug fix, based on and tested against PR #1609 . passed STC: http://tests.stockfishchess.org/tests/view/5b050f170ebc5914abc129c5 LLR: 2.95 (-2.94,2.94) [-3.00,1.00] Total: 7875 W: 1669 L: 1523 D: 4683 passed LTC: http://tests.stockfishchess.org/tests/view/5b0513970ebc5914abc129cd LLR: 3.00 (-2.94,2.94) [-3.00,1.00] Total: 24048 W: 3525 L: 3407 D: 17116 Bench changes at high depth. Closes https://github.com/official-stockfish/Stockfish/pull/1610 and https://github.com/official-stockfish/Stockfish/pull/1609 Bench: 4484288 --- src/search.cpp | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/search.cpp b/src/search.cpp index 31b6967c..1bf855d5 100644 --- a/src/search.cpp +++ b/src/search.cpp @@ -773,11 +773,13 @@ namespace { if (nullValue >= VALUE_MATE_IN_MAX_PLY) nullValue = beta; - if (abs(beta) < VALUE_KNOWN_WIN && (depth < 12 * ONE_PLY || thisThread->nmp_min_ply)) + if (thisThread->nmp_min_ply || (abs(beta) < VALUE_KNOWN_WIN && depth < 12 * ONE_PLY)) return nullValue; - // Do verification search at high depths. Disable null move pruning - // for side to move for the first part of the remaining search tree. + assert(!thisThread->nmp_min_ply); // Recursive verification is not allowed + + // Do verification search at high depths, with null move pruning disabled + // for us, until ply exceeds nmp_min_ply. thisThread->nmp_min_ply = ss->ply + 3 * (depth-R) / 4 - 1; thisThread->nmp_color = us; -- 2.39.2