From: Joost VandeVondele Date: Mon, 28 Nov 2022 19:59:38 +0000 (+0100) Subject: Fix bestThread selection X-Git-Url: https://git.sesse.net/?a=commitdiff_plain;ds=sidebyside;h=d60f5de9670cc84ba7940b5815bc3e128da9423f;p=stockfish Fix bestThread selection If multiple threads have the same best move, pick the thread with the largest contribution to the confidence vote. This thread will later be used to display PV, so this patch is about user-friendliness and/or least surprises, it non-functional for playing strenght. closes https://github.com/official-stockfish/Stockfish/pull/4246 No functional change --- diff --git a/src/thread.cpp b/src/thread.cpp index 9ce408e0..b7471f60 100644 --- a/src/thread.cpp +++ b/src/thread.cpp @@ -221,11 +221,14 @@ Thread* ThreadPool::get_best_thread() const { minScore = std::min(minScore, th->rootMoves[0].score); // Vote according to score and depth, and select the best thread + auto thread_value = [minScore](Thread* th) { + return (th->rootMoves[0].score - minScore + 14) * int(th->completedDepth); + }; + for (Thread* th : *this) - { - votes[th->rootMoves[0].pv[0]] += - (th->rootMoves[0].score - minScore + 14) * int(th->completedDepth); + votes[th->rootMoves[0].pv[0]] += thread_value(th); + for (Thread* th : *this) if (abs(bestThread->rootMoves[0].score) >= VALUE_TB_WIN_IN_MAX_PLY) { // Make sure we pick the shortest mate / TB conversion or stave off mate the longest @@ -236,9 +239,8 @@ Thread* ThreadPool::get_best_thread() const { || ( th->rootMoves[0].score > VALUE_TB_LOSS_IN_MAX_PLY && ( votes[th->rootMoves[0].pv[0]] > votes[bestThread->rootMoves[0].pv[0]] || ( votes[th->rootMoves[0].pv[0]] == votes[bestThread->rootMoves[0].pv[0]] - && th->rootMoves[0].pv.size() > bestThread->rootMoves[0].pv.size())))) + && thread_value(th) > thread_value(bestThread))))) bestThread = th; - } return bestThread; }