From a5869d8d2532c6bb8dbcba7d74331c0ac0230482 Mon Sep 17 00:00:00 2001 From: Uri Blass Date: Mon, 6 Jan 2014 08:06:39 +0200 Subject: [PATCH] Stop earlier if iteration is taking too long If we are still at first move, without a fail-low and current iteration is taking too long to complete then stop the search. Passed short TC: LLR: 2.97 (-2.94,2.94) [-1.50,4.50] Total: 26030 W: 4959 L: 4785 D: 16286 Long TC: LLR: 2.95 (-2.94,2.94) [0.00,6.00] Total: 18019 W: 2936 L: 2752 D: 12331 And performed well at 40/30 ELO: 4.33 +-2.8 (95%) LOS: 99.9% Total: 20000 W: 3480 L: 3231 D: 13289 bench: 8502826 --- src/search.cpp | 9 ++++++--- src/search.h | 2 +- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/src/search.cpp b/src/search.cpp index 7075c337..505e9ec2 100644 --- a/src/search.cpp +++ b/src/search.cpp @@ -43,7 +43,7 @@ namespace Search { std::vector RootMoves; Position RootPos; Color RootColor; - Time::point SearchTime; + Time::point SearchTime, IterationTime; StateStackPtr SetupStates; } @@ -396,6 +396,8 @@ namespace { 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(); @@ -429,7 +431,7 @@ namespace { // 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 @@ -1629,7 +1631,8 @@ void check_time() { 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; diff --git a/src/search.h b/src/search.h index dba5dd12..ab1076cd 100644 --- a/src/search.h +++ b/src/search.h @@ -98,7 +98,7 @@ extern LimitsType Limits; extern std::vector RootMoves; extern Position RootPos; extern Color RootColor; -extern Time::point SearchTime; +extern Time::point SearchTime, IterationTime; extern StateStackPtr SetupStates; extern void init(); -- 2.39.2