// If the TT move is at least SingleReplyMargin better then the
// remaining ones we will extend it.
- const Value SingleReplyMargin = Value(0x64);
+ const Value SingleReplyMargin = Value(0x20);
// Margins for futility pruning in the quiescence search, and at frontier
// and near frontier nodes.
Problem = false;
ExactMaxTime = maxTime;
+ if (button_was_pressed("New Game"))
+ loseOnTime = false; // reset at the beginning of a new game
+
// Read UCI option values
TT.set_size(get_option_value_int("Hash"));
if (button_was_pressed("Clear Hash"))
- {
TT.clear();
- loseOnTime = false; // reset at the beginning of a new game
- }
bool PonderingEnabled = get_option_value_bool("Ponder");
MultiPV = get_option_value_int("MultiPV");
// searchMoves are verified, copied, scored and sorted
RootMoveList rml(p, searchMoves);
+ if (rml.move_count() == 0)
+ {
+ if (PonderSearch)
+ wait_for_stop_or_ponderhit();
+
+ return pos.is_check()? -VALUE_MATE : VALUE_DRAW;
+ }
+
// Print RootMoveList c'tor startup scoring to the standard output,
// so that we print information also for iteration 1.
std::cout << "info depth " << 1 << "\ninfo depth " << 1
continue;
// Value based pruning
- if (approximateEval < beta)
- {
- if (futilityValue == VALUE_NONE)
- futilityValue = evaluate(pos, ei, threadID) + FutilityValueMargin;
+ if (futilityValue == VALUE_NONE)
+ futilityValue = evaluate(pos, ei, threadID) + FutilityValueMargin;
- futilityValueScaled = futilityValue - moveCount * IncrementalFutilityMargin;
+ futilityValueScaled = futilityValue - moveCount * IncrementalFutilityMargin;
- if (futilityValueScaled < beta)
- {
- if (futilityValueScaled > bestValue)
- bestValue = futilityValueScaled;
- continue;
- }
+ if (futilityValueScaled < beta)
+ {
+ if (futilityValueScaled > bestValue)
+ bestValue = futilityValueScaled;
+ continue;
}
}