mirror of
https://github.com/sockspls/badfish
synced 2025-04-30 16:53:09 +00:00
Handle UCI command "mate in x moves"
Following a user request I added the handling of UCI: go mate x Currently we just return from a PV node if x moves have been done. Probably not the best approach. I have looked at Fruit/Toga sources and there is even simpler: engine falls back on a fixed depth search. No functional change.
This commit is contained in:
parent
3cf6471738
commit
ce063f59cd
3 changed files with 15 additions and 3 deletions
|
@ -194,7 +194,7 @@ void Search::think() {
|
|||
goto finalize;
|
||||
}
|
||||
|
||||
if (Options["OwnBook"] && !Limits.infinite)
|
||||
if (Options["OwnBook"] && !Limits.infinite && !Limits.mate)
|
||||
{
|
||||
Move bookMove = book.probe(RootPos, Options["Book File"], Options["Best Book Move"]);
|
||||
|
||||
|
@ -410,6 +410,12 @@ namespace {
|
|||
if (depth > 2 && BestMoveChanges)
|
||||
bestMoveNeverChanged = false;
|
||||
|
||||
// Do we have found a "mate in x"?
|
||||
if ( Limits.mate
|
||||
&& bestValue >= VALUE_MATE_IN_MAX_PLY
|
||||
&& VALUE_MATE - bestValue <= 2 * Limits.mate)
|
||||
Signals.stop = true;
|
||||
|
||||
// Do we have time for the next iteration? Can we stop searching now?
|
||||
if (Limits.use_time_management() && !Signals.stopOnPonderhit)
|
||||
{
|
||||
|
@ -602,6 +608,11 @@ namespace {
|
|||
ss->staticEval, ss->evalMargin);
|
||||
}
|
||||
|
||||
// Handling of UCI command 'mate in x moves'. We simply return if after
|
||||
// 'x' moves we still have not checkmated the opponent.
|
||||
if (PvNode && !RootNode && !inCheck && Limits.mate && ss->ply > 2 * Limits.mate)
|
||||
return eval;
|
||||
|
||||
// Update gain for the parent non-capture move given the static position
|
||||
// evaluation before and after the move.
|
||||
if ( (move = (ss-1)->currentMove) != MOVE_NULL
|
||||
|
|
|
@ -80,9 +80,9 @@ struct RootMove {
|
|||
struct LimitsType {
|
||||
|
||||
LimitsType() { memset(this, 0, sizeof(LimitsType)); }
|
||||
bool use_time_management() const { return !(movetime | depth | nodes | infinite); }
|
||||
bool use_time_management() const { return !(mate | movetime | depth | nodes | infinite); }
|
||||
|
||||
int time[COLOR_NB], inc[COLOR_NB], movestogo, depth, nodes, movetime, infinite, ponder;
|
||||
int time[COLOR_NB], inc[COLOR_NB], movestogo, depth, nodes, movetime, mate, infinite, ponder;
|
||||
};
|
||||
|
||||
|
||||
|
|
|
@ -215,6 +215,7 @@ namespace {
|
|||
else if (token == "depth") is >> limits.depth;
|
||||
else if (token == "nodes") is >> limits.nodes;
|
||||
else if (token == "movetime") is >> limits.movetime;
|
||||
else if (token == "mate") is >> limits.mate;
|
||||
else if (token == "infinite") limits.infinite = true;
|
||||
else if (token == "ponder") limits.ponder = true;
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue