mirror of
https://github.com/HChaZZY/Stockfish.git
synced 2025-12-22 18:17:02 +08:00
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
This commit is contained in:
@@ -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
|
||||
for (Thread* th : *this)
|
||||
{
|
||||
votes[th->rootMoves[0].pv[0]] +=
|
||||
(th->rootMoves[0].score - minScore + 14) * int(th->completedDepth);
|
||||
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]] += 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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user