From 784263596ff9b01187341274b6f3cbd8971a2d2c Mon Sep 17 00:00:00 2001 From: Moez Jellouli <37274752+MJZ1977@users.noreply.github.com> Date: Sun, 31 May 2020 16:51:38 +0200 Subject: [PATCH] Minimal thinking time, even if only one rootMove. without search, the eval returned can be misleading (e.g. mate instead of draw), leading to wrong adjudication. With a minimal search, this is avoided. This patch leads to 1ms long searches if there is only 1 move, similar patches all indicate a small Elo gain. Fixes https://github.com/official-stockfish/Stockfish/issues/2707 Passed non-regression STC: LLR: 2.93 (-2.94,2.94) {-1.50,0.50} Total: 22312 W: 4350 L: 4204 D: 13758 Ptnml(0-2): 323, 2488, 5437, 2536, 372 https://tests.stockfishchess.org/tests/view/5ed562b0f29b40b0fc95a7d0 closes https://github.com/official-stockfish/Stockfish/pull/2709 Bench: 4733799 --- src/search.cpp | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/search.cpp b/src/search.cpp index 1e133447..35110538 100644 --- a/src/search.cpp +++ b/src/search.cpp @@ -556,9 +556,11 @@ void Thread::search() { } double bestMoveInstability = 1 + totBestMoveChanges / Threads.size(); - // Stop the search if we have only one legal move, or if available time elapsed - if ( rootMoves.size() == 1 - || Time.elapsed() > Time.optimum() * fallingEval * reduction * bestMoveInstability) + double totalTime = rootMoves.size() == 1 ? 0 : + Time.optimum() * fallingEval * reduction * bestMoveInstability; + + // Stop the search if we have exceeded the totalTime, at least 1ms search. + if (Time.elapsed() > totalTime) { // If we are allowed to ponder do not stop the search now but // keep pondering until the GUI sends "ponderhit" or "stop". @@ -569,7 +571,7 @@ void Thread::search() { } else if ( Threads.increaseDepth && !mainThread->ponder - && Time.elapsed() > Time.optimum() * fallingEval * reduction * bestMoveInstability * 0.6) + && Time.elapsed() > totalTime * 0.6) Threads.increaseDepth = false; else Threads.increaseDepth = true; -- 2.39.2