From b4f61f65043ddc4334af64ed507a51b2bfbd78ec Mon Sep 17 00:00:00 2001 From: stefiosif Date: Mon, 27 Jan 2025 22:20:45 +0200 Subject: [PATCH] Add depth based time limit --- src/search/iterative_deepening.rs | 2 +- src/search/mod.rs | 6 +++--- src/search/quiescence.rs | 6 +++--- src/search/time.rs | 6 +++++- 4 files changed, 12 insertions(+), 8 deletions(-) diff --git a/src/search/iterative_deepening.rs b/src/search/iterative_deepening.rs index 9e6d825..2fcaba9 100644 --- a/src/search/iterative_deepening.rs +++ b/src/search/iterative_deepening.rs @@ -17,7 +17,7 @@ pub fn iterative_deepening( let mut best_move = None; for depth in 1..=max_depth { - if time.exceed_hard_limit() { + if time.exceed_soft_limit() { return Ok(best_move); } diff --git a/src/search/mod.rs b/src/search/mod.rs index db4304a..b94e492 100644 --- a/src/search/mod.rs +++ b/src/search/mod.rs @@ -9,6 +9,6 @@ pub mod transposition_table; pub const MAX_DEPTH: u8 = 50; pub const TIME: u128 = 1000; pub const INC: u128 = 1000; -pub const HARD_LIMIT_DIVISION: u128 = 10; -pub const SOFT_LIMIT_DIVISION: u128 = HARD_LIMIT_DIVISION * 2; -pub const MAX_TT_SIZE: u64 = 750000; +pub const HARD_LIMIT_DIVISION: u128 = 3; +pub const SOFT_LIMIT_DIVISION: u128 = 20; +pub const MAX_TT_SIZE: u64 = 3000000; diff --git a/src/search/quiescence.rs b/src/search/quiescence.rs index dbc7817..49de54c 100644 --- a/src/search/quiescence.rs +++ b/src/search/quiescence.rs @@ -9,9 +9,9 @@ pub fn quiescence( mut alpha: i32, beta: i32, time: &TimeInfo, - total_nodes_searched: &mut u64, + nodes: &mut u64, ) -> Result { - if time.exceed_hard_limit() { + if *nodes & 1024 == 0 && time.exceed_hard_limit() { bail!("Hard limit exceeded in quiescence"); } @@ -52,7 +52,7 @@ pub fn quiescence( game.unmake_move(); continue; } - *total_nodes_searched += 1; + *nodes += 1; let score = -quiescence(game, -beta, -alpha, time, &mut 0)?; game.unmake_move(); diff --git a/src/search/time.rs b/src/search/time.rs index bb7b210..c5c3389 100644 --- a/src/search/time.rs +++ b/src/search/time.rs @@ -1,6 +1,6 @@ use std::time::Instant; -use super::HARD_LIMIT_DIVISION; +use super::{HARD_LIMIT_DIVISION, SOFT_LIMIT_DIVISION}; pub struct TimeInfo { pub instant: Instant, @@ -20,4 +20,8 @@ impl TimeInfo { pub fn exceed_hard_limit(&self) -> bool { self.instant.elapsed().as_millis() >= self.time / HARD_LIMIT_DIVISION + self.inc / 2 } + + pub fn exceed_soft_limit(&self) -> bool { + self.instant.elapsed().as_millis() >= self.time / SOFT_LIMIT_DIVISION + self.inc / 2 + } }