Skip to content

Commit

Permalink
Improve compatibility with Shredder Classic GUI
Browse files Browse the repository at this point in the history
This commit fixes two issues:

1) Don't print PVs after the search has been interrupted

    This solves the "mate 0 upperbound" scores that sometimes
    creep up when a multi-PV analysis gets interrupted with
    the `stop` command.

2) Print multipv before score

    Shredder Classic fails to identify the main PV
    (the one with multipv 1) if `score` comes first.
    This leads to an eval graph that doesn't reflect
    the scores actually reported by Stockfish when
    doing a multiPV analysis.

No functional change

Closes #76
  • Loading branch information
promaret authored and zamar committed Oct 27, 2014
1 parent 5ab5582 commit f135984
Showing 1 changed file with 4 additions and 2 deletions.
6 changes: 4 additions & 2 deletions src/search.cpp
Expand Up @@ -341,7 +341,9 @@ namespace {
// Sort the PV lines searched so far and update the GUI
std::stable_sort(RootMoves.begin(), RootMoves.begin() + PVIdx + 1);

if (PVIdx + 1 == std::min(multiPV, RootMoves.size()) || Time::now() - SearchTime > 3000)
if ( !Signals.stop
&& ( PVIdx + 1 == std::min(multiPV, RootMoves.size())
|| Time::now() - SearchTime > 3000))
sync_cout << uci_pv(pos, depth, alpha, beta) << sync_endl;
}

Expand Down Expand Up @@ -1326,11 +1328,11 @@ namespace {

ss << "info depth " << d
<< " seldepth " << selDepth
<< " multipv " << i + 1
<< " score " << (i == PVIdx ? UCI::format_value(v, alpha, beta) : UCI::format_value(v))
<< " nodes " << pos.nodes_searched()
<< " nps " << pos.nodes_searched() * 1000 / elapsed
<< " time " << elapsed
<< " multipv " << i + 1
<< " pv";

for (size_t j = 0; RootMoves[i].pv[j] != MOVE_NONE; ++j)
Expand Down

0 comments on commit f135984

Please sign in to comment.