From: Joost VandeVondele Date: Fri, 18 Aug 2017 07:38:27 +0000 (+0200) Subject: Collect more corrections to optimum/maximum X-Git-Url: https://git.sesse.net/?p=stockfish;a=commitdiff_plain;h=daf0fe1f57337d33f9e0af5a8aa8ef0868b20417 Collect more corrections to optimum/maximum The only call site of Time.maximum() corrected by 10. Do this directly in remaining(). Ponder increased Time.optimum by 25% in init(). Idem. Delete unused includes. No functional change. --- diff --git a/src/search.cpp b/src/search.cpp index fbcae460..7b3fd18b 100644 --- a/src/search.cpp +++ b/src/search.cpp @@ -1491,7 +1491,7 @@ moves_loop: // When in check search starts from here if (Threads.ponder) return; - if ( (Limits.use_time_management() && elapsed > Time.maximum() - 10) + if ( (Limits.use_time_management() && elapsed > Time.maximum()) || (Limits.movetime && elapsed >= Limits.movetime) || (Limits.nodes && Threads.nodes_searched() >= (uint64_t)Limits.nodes)) Threads.stop = true; diff --git a/src/timeman.cpp b/src/timeman.cpp index 55d98c1f..b5d1a66c 100644 --- a/src/timeman.cpp +++ b/src/timeman.cpp @@ -19,8 +19,6 @@ */ #include -#include -#include #include "search.h" #include "timeman.h" @@ -32,14 +30,14 @@ namespace { enum TimeType { OptimumTime, MaxTime }; - int remaining(int myTime, int myInc, int moveOverhead, - int movesToGo, int ply, TimeType type) { + int remaining(int myTime, int myInc, int moveOverhead, int movesToGo, + int ply, bool ponder, TimeType type) { if (myTime <= 0) return 0; int moveNumber = (ply + 1) / 2; - double ratio; // Which ratio of myTime we are going to use. It is <= 1 + double ratio; // Which ratio of myTime we are going to use. It's <= 1 if not ponder double sd = 8.5; // Usage of increment follows quadratic distribution with the maximum at move 25 @@ -65,7 +63,17 @@ namespace { ratio = std::min(1.0, ratio * (1 + inc / (myTime * sd))); - return int(ratio * std::max(0, myTime - moveOverhead)); + assert(ratio <= 1); + + if (ponder && type == OptimumTime) + ratio *= 1.25; + + int time = int(ratio * (myTime - moveOverhead)); + + if (type == OptimumTime) + time -= 10; // Keep always at least 10 millisecs on the clock + + return std::max(0, time); } } // namespace @@ -82,8 +90,9 @@ namespace { void TimeManagement::init(Search::LimitsType& limits, Color us, int ply) { - int moveOverhead = Options["Move Overhead"]; - int npmsec = Options["nodestime"]; + int moveOverhead = Options["Move Overhead"]; + int npmsec = Options["nodestime"]; + bool ponder = Options["Ponder"]; // If we have to play in 'nodes as time' mode, then convert from time // to nodes, and use resulting values in time management formulas. @@ -101,9 +110,8 @@ void TimeManagement::init(Search::LimitsType& limits, Color us, int ply) } startTime = limits.startTime; - optimumTime = remaining(limits.time[us], limits.inc[us], moveOverhead, limits.movestogo, ply, OptimumTime); - maximumTime = remaining(limits.time[us], limits.inc[us], moveOverhead, limits.movestogo, ply, MaxTime); - - if (Options["Ponder"]) - optimumTime += optimumTime / 4; + optimumTime = remaining(limits.time[us], limits.inc[us], moveOverhead, + limits.movestogo, ply, ponder, OptimumTime); + maximumTime = remaining(limits.time[us], limits.inc[us], moveOverhead, + limits.movestogo, ply, ponder, MaxTime); }