int current_search_time(int set = 0);
std::string score_to_uci(Value v, Value alpha, Value beta);
std::string speed_to_uci(int64_t nodes);
- std::string pv_to_uci(Move pv[], int pvNum);
+ std::string pv_to_uci(Move pv[], int pvNum, bool chess960);
std::string depth_to_uci(Depth depth);
void poll(const Position& pos);
void wait_for_stop_or_ponderhit();
<< depth_to_uci(depth * ONE_PLY)
<< score_to_uci(Rml[i].pv_score, alpha, beta)
<< speed_to_uci(pos.nodes_searched())
- << pv_to_uci(Rml[i].pv, i + 1) << endl;
+ << pv_to_uci(Rml[i].pv, i + 1, pos.is_chess960()) << endl;
// In case of failing high/low increase aspiration window and research,
// otherwise exit the fail high/low loop.
// Check for some early stop condition
if (!StopRequest && Limits.useTimeManagement())
{
- // Stop search early when the last two iterations returned a mate score
- if ( depth >= 5
- && abs(bestValues[depth]) >= VALUE_MATE_IN_PLY_MAX
- && abs(bestValues[depth - 1]) >= VALUE_MATE_IN_PLY_MAX)
- StopRequest = true;
-
// Stop search early if one move seems to be much better than the
// others or if there is only a single legal move. Also in the latter
// case we search up to some depth anyway to get a proper score.
// pv_to_uci() returns a string with information on the current PV line
// formatted according to UCI specification.
- std::string pv_to_uci(Move pv[], int pvNum) {
+ std::string pv_to_uci(Move pv[], int pvNum, bool chess960) {
std::stringstream s;
- s << " multipv " << pvNum << " pv ";
+ s << " multipv " << pvNum << " pv " << set960(chess960);
for ( ; *pv != MOVE_NONE; pv++)
s << *pv << " ";
while ( (tte = TT.probe(pos.get_key())) != NULL
&& tte->move() != MOVE_NONE
&& pos.move_is_pl(tte->move())
- && pos.pl_move_is_legal(tte->move(), pos.pinned_pieces(pos.side_to_move()))
+ && pos.pl_move_is_legal(tte->move(), pos.pinned_pieces())
&& ply < PLY_MAX
&& (!pos.is_draw<false>() || ply < 2))
{