|| count(SearchMoves.begin(), SearchMoves.end(), ml.move()))
RootMoves.push_back(RootMove(ml.move()));
- if (Options["OwnBook"].value<bool>())
+ if (Options["OwnBook"])
{
- if (Options["Book File"].value<string>() != book.name())
- book.open(Options["Book File"].value<string>());
+ if (book.name() != (string)Options["Book File"])
+ book.open(Options["Book File"]);
- Move bookMove = book.probe(pos, Options["Best Book Move"].value<bool>());
+ Move bookMove = book.probe(pos, Options["Best Book Move"]);
if ( bookMove != MOVE_NONE
&& count(RootMoves.begin(), RootMoves.end(), bookMove))
read_evaluation_uci_options(pos.side_to_move());
Threads.read_uci_options();
- TT.set_size(Options["Hash"].value<int>());
- if (Options["Clear Hash"].value<bool>())
+ TT.set_size(Options["Hash"]);
+ if (Options["Clear Hash"])
{
Options["Clear Hash"] = false;
TT.clear();
}
- UCIMultiPV = Options["MultiPV"].value<size_t>();
- SkillLevel = Options["Skill Level"].value<int>();
+ UCIMultiPV = Options["MultiPV"];
+ SkillLevel = Options["Skill Level"];
// Do we have to play with skill handicap? In this case enable MultiPV that
// we will use behind the scenes to retrieve a set of possible moves.
SkillLevelEnabled = (SkillLevel < 20);
MultiPV = (SkillLevelEnabled ? std::max(UCIMultiPV, (size_t)4) : UCIMultiPV);
- if (Options["Use Search Log"].value<bool>())
+ if (Options["Use Search Log"])
{
- Log log(Options["Search Log Filename"].value<string>());
+ Log log(Options["Search Log Filename"]);
log << "\nSearching: " << pos.to_fen()
<< "\ninfinite: " << Limits.infinite
<< " ponder: " << Limits.ponder
Threads.set_timer(0);
Threads.set_size(1);
- if (Options["Use Search Log"].value<bool>())
+ if (Options["Use Search Log"])
{
int e = elapsed_time();
- Log log(Options["Search Log Filename"].value<string>());
+ Log log(Options["Search Log Filename"]);
log << "Nodes: " << pos.nodes_searched()
<< "\nNodes/second: " << (e > 0 ? pos.nodes_searched() * 1000 / e : 0)
<< "\nBest move: " << move_to_san(pos, RootMoves[0].pv[0]);
bestValue = delta = -VALUE_INFINITE;
ss->currentMove = MOVE_NULL; // Hack to skip update gains
- // Handle the special case of a mate/stalemate position
+ // Handle the special case of a mated/stalemate position
if (RootMoves.empty())
{
- cout << "info depth 0"
+ cout << "info depth 0 score "
<< score_to_uci(pos.in_check() ? -VALUE_MATE : VALUE_DRAW) << endl;
RootMoves.push_back(MOVE_NONE);
if (SkillLevelEnabled && depth == 1 + SkillLevel)
skillBest = do_skill_level();
- if (Options["Use Search Log"].value<bool>())
+ if (Options["Use Search Log"])
pv_info_to_log(pos, depth, bestValue, elapsed_time(), &RootMoves[0].pv[0]);
// Filter out startup noise when monitoring best move stability
// All legal moves have been searched. A special case: If we're in check
// and no legal moves were found, it is checkmate.
if (inCheck && bestValue == -VALUE_INFINITE)
- return mated_in(ss->ply);
+ return mated_in(ss->ply); // Plies to mate from the root
// Update transposition table
move = bestValue <= oldAlpha ? MOVE_NONE : ss->bestMove;
// value_to_tt() adjusts a mate score from "plies to mate from the root" to
- // "plies to mate from the current ply". Non-mate scores are unchanged. The
- // function is called before storing a value to the transposition table.
+ // "plies to mate from the current position". Non-mate scores are unchanged.
+ // The function is called before storing a value to the transposition table.
Value value_to_tt(Value v, int ply) {
}
- // value_from_tt() is the inverse of value_to_tt(): It adjusts a mate score from
- // the transposition table to a mate score corrected for the current ply.
+ // value_from_tt() is the inverse of value_to_tt(): It adjusts a mate score
+ // from the transposition table (where refers to the plies to mate/be mated
+ // from current position) to "plies to mate/be mated from the root".
Value value_from_tt(Value v, int ply) {
std::stringstream s;
- if (abs(v) < VALUE_MATE - PLY_MAX * ONE_PLY)
- s << " score cp " << int(v) * 100 / int(PawnValueMidgame); // Scale to centipawns
+ if (abs(v) < VALUE_MATE_IN_PLY_MAX)
+ s << "cp " << v * 100 / int(PawnValueMidgame);
else
- s << " score mate " << (v > 0 ? VALUE_MATE - v + 1 : -VALUE_MATE - v) / 2;
+ s << "mate " << (v > 0 ? VALUE_MATE - v + 1 : -VALUE_MATE - v) / 2;
s << (v >= beta ? " lowerbound" : v <= alpha ? " upperbound" : "");
cout << "info depth " << d
<< " seldepth " << selDepth
- << (i == PVIdx ? score_to_uci(v, alpha, beta) : score_to_uci(v))
+ << " score " << (i == PVIdx ? score_to_uci(v, alpha, beta) : score_to_uci(v))
<< " nodes " << pos.nodes_searched()
<< " nps " << (t > 0 ? pos.nodes_searched() * 1000 / t : 0)
<< " time " << t
while (m != pv)
pos.undo_move(*--m);
- Log l(Options["Search Log Filename"].value<string>());
+ Log l(Options["Search Log Filename"]);
l << s.str() << endl;
}