if (Options["Use Search Log"])
{
Log log(Options["Search Log Filename"]);
- log << "\nSearching: " << RootPos.to_fen()
+ log << "\nSearching: " << RootPos.fen()
<< "\ninfinite: " << Limits.infinite
<< " ponder: " << Limits.ponder
<< " time: " << Limits.time[RootColor]
// Sort the PV lines searched so far and update the GUI
sort<RootMove>(RootMoves.begin(), RootMoves.begin() + PVIdx + 1);
- sync_cout << uci_pv(pos, depth, alpha, beta) << sync_endl;
+ if (PVIdx + 1 == PVSize || Time::now() - SearchTime > 3000)
+ sync_cout << uci_pv(pos, depth, alpha, beta) << sync_endl;
}
// Do we need to pick now the sub-optimal best move ?
{
Signals.firstRootMove = (moveCount == 1);
- if (thisThread == Threads.main_thread() && Time::now() - SearchTime > 2000)
+ if (thisThread == Threads.main_thread() && Time::now() - SearchTime > 3000)
sync_cout << "info depth " << depth / ONE_PLY
<< " currmove " << move_to_uci(move, pos.is_chess960())
<< " currmovenumber " << moveCount + PVIdx << sync_endl;
alpha = value; // Update alpha here! Always alpha < beta
if (SpNode) sp->alpha = value;
}
- else // Fail high
+ else
{
+ assert(value >= beta); // Fail high
+
if (SpNode) sp->cutoff = true;
break;
}
if (futilityValue < beta)
{
- if (futilityValue > bestValue)
- bestValue = futilityValue;
-
+ bestValue = std::max(bestValue, futilityValue);
continue;
}
if ( futilityBase < beta
&& depth < DEPTH_ZERO
&& pos.see(move) <= 0)
+ {
+ bestValue = std::max(bestValue, futilityBase);
continue;
+ }
}
// Detect non-capture evasions that are candidate to be pruned