Skip to content

Commit

Permalink
Fix bestThread selection
Browse files Browse the repository at this point in the history
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 #4246

No functional change
  • Loading branch information
vondele committed Dec 2, 2022
1 parent c7118fb commit d60f5de
Showing 1 changed file with 7 additions and 5 deletions.
12 changes: 7 additions & 5 deletions src/thread.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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;
}
Expand Down

0 comments on commit d60f5de

Please sign in to comment.