Skip to content

Commit

Permalink
tuned TM values
Browse files Browse the repository at this point in the history
bench 1379150
  • Loading branch information
xu-shawn committed Jan 13, 2025
1 parent c085670 commit fc76759
Show file tree
Hide file tree
Showing 2 changed files with 29 additions and 24 deletions.
22 changes: 12 additions & 10 deletions src/search.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -441,17 +441,19 @@ void Search::Worker::iterative_deepening() {
// Do we have time for the next iteration? Can we stop searching now?
if (limits.use_time_management() && !threads.stop && !mainThread->stopOnPonderhit)
{
int nodesEffort = rootMoves[0].effort * 100 / std::max(size_t(1), size_t(nodes));
int nodesEffort = rootMoves[0].effort * 100000 / std::max(size_t(1), size_t(nodes));

double fallingEval = (11 + 2 * (mainThread->bestPreviousAverageScore - bestValue)
+ (mainThread->iterValue[iterIdx] - bestValue))
/ 100.0;
fallingEval = std::clamp(fallingEval, 0.580, 1.667);
double fallingEval =
(11.396 + 2.035 * (mainThread->bestPreviousAverageScore - bestValue)
+ 0.968 * (mainThread->iterValue[iterIdx] - bestValue))
/ 100.0;
fallingEval = std::clamp(fallingEval, 0.5786, 1.6752);

// If the bestMove is stable over several iterations, reduce time accordingly
timeReduction = lastBestMoveDepth + 8 < completedDepth ? 1.495 : 0.687;
double reduction = (1.48 + mainThread->previousTimeReduction) / (2.17 * timeReduction);
double bestMoveInstability = 1 + 1.88 * totBestMoveChanges / threads.size();
timeReduction = lastBestMoveDepth + 8 < completedDepth ? 1.4857 : 0.7046;
double reduction =
(1.4540 + mainThread->previousTimeReduction) / (2.1593 * timeReduction);
double bestMoveInstability = 0.9929 + 1.8519 * totBestMoveChanges / threads.size();

double totalTime =
mainThread->tm.optimum() * fallingEval * reduction * bestMoveInstability;
Expand All @@ -462,7 +464,7 @@ void Search::Worker::iterative_deepening() {

auto elapsedTime = elapsed();

if (completedDepth >= 10 && nodesEffort >= 97 && elapsedTime > totalTime * 0.739
if (completedDepth >= 10 && nodesEffort >= 97056 && elapsedTime > totalTime * 0.6540
&& !mainThread->ponder)
threads.stop = true;

Expand All @@ -477,7 +479,7 @@ void Search::Worker::iterative_deepening() {
threads.stop = true;
}
else
threads.increaseDepth = mainThread->ponder || elapsedTime <= totalTime * 0.506;
threads.increaseDepth = mainThread->ponder || elapsedTime <= totalTime * 0.5138;
}

mainThread->iterValue[iterIdx] = bestValue;
Expand Down
31 changes: 17 additions & 14 deletions src/timeman.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -88,17 +88,19 @@ void TimeManagement::init(Search::LimitsType& limits,
const TimePoint scaledInc = limits.inc[us] / scaleFactor;

// Maximum move horizon of 50 moves
int mtg = limits.movestogo ? std::min(limits.movestogo, 50) : 50;
int centiMTG = limits.movestogo ? std::min(limits.movestogo * 100, 5000) : 5051;

// If less than one second, gradually reduce mtg
if (scaledTime < 1000 && double(mtg) / scaledInc > 0.05)
if (scaledTime < 1000 && double(centiMTG) / scaledInc > 5.051)
{
mtg = scaledTime * 0.05;
centiMTG = scaledTime * 5.051;
}

// Make sure timeLeft is > 0 since we may use it as a divisor
TimePoint timeLeft = std::max(TimePoint(1), limits.time[us] + limits.inc[us] * (mtg - 1)
- moveOverhead * (2 + mtg));
TimePoint timeLeft =
std::max(TimePoint(1),
limits.time[us]
+ (limits.inc[us] * (centiMTG - 100) - moveOverhead * (200 + centiMTG)) / 100);

// x basetime (+ z increment)
// If there is a healthy increment, timeLeft can exceed the actual available
Expand All @@ -107,31 +109,32 @@ void TimeManagement::init(Search::LimitsType& limits,
{
// Extra time according to timeLeft
if (originalTimeAdjust < 0)
originalTimeAdjust = 0.3285 * std::log10(timeLeft) - 0.4830;
originalTimeAdjust = 0.3128 * std::log10(timeLeft) - 0.4354;

// Calculate time constants based on current time left.
double logTimeInSec = std::log10(scaledTime / 1000.0);
double optConstant = std::min(0.00308 + 0.000319 * logTimeInSec, 0.00506);
double maxConstant = std::max(3.39 + 3.01 * logTimeInSec, 2.93);
double optConstant = std::min(0.0032116 + 0.000321123 * logTimeInSec, 0.00508017);
double maxConstant = std::max(3.3977 + 3.03950 * logTimeInSec, 2.94761);

optScale = std::min(0.0122 + std::pow(ply + 2.95, 0.462) * optConstant,
0.213 * limits.time[us] / timeLeft)
optScale = std::min(0.0121431 + std::pow(ply + 2.94693, 0.461073) * optConstant,
0.213035 * limits.time[us] / timeLeft)
* originalTimeAdjust;

maxScale = std::min(6.64, maxConstant + ply / 12.0);
maxScale = std::min(6.67704, maxConstant + ply / 11.9847);
}

// x moves in y seconds (+ z increment)
else
{
optScale = std::min((0.88 + ply / 116.4) / mtg, 0.88 * limits.time[us] / timeLeft);
maxScale = std::min(6.3, 1.5 + 0.11 * mtg);
optScale =
std::min((0.88 + ply / 116.4) / (centiMTG / 100.0), 0.88 * limits.time[us] / timeLeft);
maxScale = std::min(6.3, 1.5 + 0.11 * (centiMTG / 100.0));
}

// Limit the maximum possible time for this move
optimumTime = TimePoint(optScale * timeLeft);
maximumTime =
TimePoint(std::min(0.825 * limits.time[us] - moveOverhead, maxScale * optimumTime)) - 10;
TimePoint(std::min(0.825179 * limits.time[us] - moveOverhead, maxScale * optimumTime)) - 10;

if (options["Ponder"])
optimumTime += optimumTime / 4;
Expand Down

0 comments on commit fc76759

Please sign in to comment.