mirror of
https://github.com/official-stockfish/Stockfish.git
synced 2026-07-23 13:17:12 +00:00
Time management: move faster if PV is stable
Move faster but compensate by allocating more time when the best move changes. Passed short TC at 15+0.05 LLR: 2.93 (-2.94,2.94) Total: 13895 W: 3030 L: 2882 D: 798 Long TC at 60+0.05 LLR: 2.96 (-2.94,2.94) Total: 9266 W: 1777 L: 1624 D: 5865 At time increment 30+0.5 LLR: 2.96 (-2.94,2.94) Total: 6703 W: 1238 L: 1134 D: 4331 And at fixed game number, longer TC 120+0.05 ELO: 5.17 +-2.8 (95%) LOS: 100.0% Total: 19306 W: 3378 L: 3091 D: 12837 bench: 4728533
This commit is contained in:
committed by
Marco Costalba
parent
6e6c5b6103
commit
e6482b7d97
+8
-7
@@ -84,7 +84,7 @@ namespace {
|
||||
|
||||
size_t PVSize, PVIdx;
|
||||
TimeManager TimeMgr;
|
||||
int BestMoveChanges;
|
||||
float BestMoveChanges;
|
||||
Value DrawValue[COLOR_NB];
|
||||
HistoryStats History;
|
||||
GainsStats Gains;
|
||||
@@ -304,13 +304,14 @@ namespace {
|
||||
void id_loop(Position& pos) {
|
||||
|
||||
Stack stack[MAX_PLY_PLUS_6], *ss = stack+2; // To allow referencing (ss-2)
|
||||
int depth, prevBestMoveChanges;
|
||||
int depth;
|
||||
Value bestValue, alpha, beta, delta;
|
||||
|
||||
std::memset(ss-2, 0, 5 * sizeof(Stack));
|
||||
(ss-1)->currentMove = MOVE_NULL; // Hack to skip update gains
|
||||
|
||||
depth = BestMoveChanges = 0;
|
||||
depth = 0;
|
||||
BestMoveChanges = 0;
|
||||
bestValue = delta = alpha = -VALUE_INFINITE;
|
||||
beta = VALUE_INFINITE;
|
||||
|
||||
@@ -332,14 +333,14 @@ namespace {
|
||||
// Iterative deepening loop until requested to stop or target depth reached
|
||||
while (++depth <= MAX_PLY && !Signals.stop && (!Limits.depth || depth <= Limits.depth))
|
||||
{
|
||||
// Age out PV variability metric
|
||||
BestMoveChanges *= 0.8;
|
||||
|
||||
// Save last iteration's scores before first PV line is searched and all
|
||||
// the move scores but the (new) PV are set to -VALUE_INFINITE.
|
||||
for (size_t i = 0; i < RootMoves.size(); i++)
|
||||
RootMoves[i].prevScore = RootMoves[i].score;
|
||||
|
||||
prevBestMoveChanges = BestMoveChanges; // Only sensible when PVSize == 1
|
||||
BestMoveChanges = 0;
|
||||
|
||||
// MultiPV loop. We perform a full root search for each PV line
|
||||
for (PVIdx = 0; PVIdx < PVSize; PVIdx++)
|
||||
{
|
||||
@@ -437,7 +438,7 @@ namespace {
|
||||
|
||||
// Take in account some extra time if the best move has changed
|
||||
if (depth > 4 && depth < 50 && PVSize == 1)
|
||||
TimeMgr.pv_instability(BestMoveChanges, prevBestMoveChanges);
|
||||
TimeMgr.pv_instability(BestMoveChanges);
|
||||
|
||||
// Stop search if most of available time is already consumed. We
|
||||
// probably don't have enough time to search the first move at the
|
||||
|
||||
Reference in New Issue
Block a user