Add depth based time limit
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -9,9 +9,9 @@ pub fn quiescence(
|
||||
mut alpha: i32,
|
||||
beta: i32,
|
||||
time: &TimeInfo,
|
||||
total_nodes_searched: &mut u64,
|
||||
nodes: &mut u64,
|
||||
) -> Result<i32> {
|
||||
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();
|
||||
|
||||
@@ -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
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user