mirror of
https://github.com/HChaZZY/Stockfish.git
synced 2025-12-22 01:56:58 +08:00
Refactor pv printing
Also fix the case which is currently printing depth 0. fixes #5019 closes https://github.com/official-stockfish/Stockfish/pull/5020 No functional change
This commit is contained in:
committed by
Joost VandeVondele
parent
13eb023fc0
commit
16afec0582
58
src/uci.cpp
58
src/uci.cpp
@@ -28,6 +28,7 @@
|
||||
#include <optional>
|
||||
#include <sstream>
|
||||
#include <vector>
|
||||
#include <cstdint>
|
||||
|
||||
#include "benchmark.h"
|
||||
#include "evaluate.h"
|
||||
@@ -365,63 +366,6 @@ std::string UCI::move(Move m, bool chess960) {
|
||||
return move;
|
||||
}
|
||||
|
||||
std::string UCI::pv(const Search::Worker& workerThread,
|
||||
TimePoint elapsed,
|
||||
uint64_t nodesSearched,
|
||||
uint64_t tb_hits,
|
||||
int hashfull,
|
||||
bool rootInTB) {
|
||||
std::stringstream ss;
|
||||
TimePoint time = elapsed + 1;
|
||||
const auto& rootMoves = workerThread.rootMoves;
|
||||
const auto& depth = workerThread.completedDepth;
|
||||
const auto& pos = workerThread.rootPos;
|
||||
size_t pvIdx = workerThread.pvIdx;
|
||||
size_t multiPV = std::min(size_t(workerThread.options["MultiPV"]), rootMoves.size());
|
||||
uint64_t tbHits = tb_hits + (rootInTB ? rootMoves.size() : 0);
|
||||
|
||||
|
||||
for (size_t i = 0; i < multiPV; ++i)
|
||||
{
|
||||
bool updated = rootMoves[i].score != -VALUE_INFINITE;
|
||||
|
||||
if (depth == 1 && !updated && i > 0)
|
||||
continue;
|
||||
|
||||
Depth d = updated ? depth : std::max(1, depth - 1);
|
||||
Value v = updated ? rootMoves[i].uciScore : rootMoves[i].previousScore;
|
||||
|
||||
if (v == -VALUE_INFINITE)
|
||||
v = VALUE_ZERO;
|
||||
|
||||
bool tb = rootInTB && std::abs(v) <= VALUE_TB;
|
||||
v = tb ? rootMoves[i].tbScore : v;
|
||||
|
||||
if (ss.rdbuf()->in_avail()) // Not at first line
|
||||
ss << "\n";
|
||||
|
||||
ss << "info"
|
||||
<< " depth " << d << " seldepth " << rootMoves[i].selDepth << " multipv " << i + 1
|
||||
<< " score " << value(v);
|
||||
|
||||
if (workerThread.options["UCI_ShowWDL"])
|
||||
ss << wdl(v, pos.game_ply());
|
||||
|
||||
if (i == pvIdx && !tb && updated) // tablebase- and previous-scores are exact
|
||||
ss << (rootMoves[i].scoreLowerbound
|
||||
? " lowerbound"
|
||||
: (rootMoves[i].scoreUpperbound ? " upperbound" : ""));
|
||||
|
||||
ss << " nodes " << nodesSearched << " nps " << nodesSearched * 1000 / time << " hashfull "
|
||||
<< hashfull << " tbhits " << tbHits << " time " << time << " pv";
|
||||
|
||||
for (Move m : rootMoves[i].pv)
|
||||
ss << " " << move(m, pos.is_chess960());
|
||||
}
|
||||
|
||||
return ss.str();
|
||||
}
|
||||
|
||||
namespace {
|
||||
// The win rate model returns the probability of winning (in per mille units) given an
|
||||
// eval and a game ply. It fits the LTC fishtest statistics rather accurately.
|
||||
|
||||
Reference in New Issue
Block a user