1
0
Fork 0
mirror of https://github.com/sockspls/badfish synced 2025-04-29 16:23:09 +00:00

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.
This commit is contained in:
Joost VandeVondele 2017-08-18 09:38:27 +02:00 committed by Marco Costalba
parent 4d511512d2
commit daf0fe1f57
2 changed files with 22 additions and 14 deletions

View file

@ -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;

View file

@ -19,8 +19,6 @@
*/
#include <algorithm>
#include <cfloat>
#include <cmath>
#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);
}