std::vector<RootMove> RootMoves;
Position RootPos;
Color RootColor;
- Time::point SearchTime;
+ Time::point SearchTime, IterationTime;
StateStackPtr SetupStates;
}
sync_cout << uci_pv(pos, depth, alpha, beta) << sync_endl;
}
+ IterationTime = Time::now() - SearchTime;
+
// If skill levels are enabled and time is up, pick a sub-optimal best move
if (skill.enabled() && skill.time_to_pick(depth))
skill.pick_move();
// Stop the search if most of the available time has been used. We
// probably don't have enough time to search the first move at the
// next iteration anyway.
- if (Time::now() - SearchTime > (TimeMgr.available_time() * 62) / 100)
+ if (IterationTime > (TimeMgr.available_time() * 62) / 100)
stop = true;
// Stop the search early if one move seems to be much better than others
Time::point elapsed = Time::now() - SearchTime;
bool stillAtFirstMove = Signals.firstRootMove
&& !Signals.failedLowAtRoot
- && elapsed > TimeMgr.available_time();
+ && elapsed > (TimeMgr.available_time() * 62) / 100
+ && elapsed > IterationTime * 1.4;
bool noMoreTime = elapsed > TimeMgr.maximum_time() - 2 * TimerThread::Resolution
|| stillAtFirstMove;