diff --git a/src/evaluation/mod.rs b/src/evaluation/mod.rs index 15b9f13..e154390 100644 --- a/src/evaluation/mod.rs +++ b/src/evaluation/mod.rs @@ -1,5 +1,5 @@ pub mod pesto; -pub const MAX_SCORE: i32 = 100000; -pub const MIN_SCORE: i32 = -100000; -pub const MATE_SCORE: i32 = 50000; +pub const MAX_SCORE: i16 = 10000; +pub const MIN_SCORE: i16 = -10000; +pub const MATE_SCORE: i16 = 5000; diff --git a/src/evaluation/pesto.rs b/src/evaluation/pesto.rs index 19f87f5..66d945e 100644 --- a/src/evaluation/pesto.rs +++ b/src/evaluation/pesto.rs @@ -224,7 +224,7 @@ impl Pesto { Self { mg_table, eg_table } } - pub fn eval(&self, game: &Game) -> i32 { + pub fn eval(&self, game: &Game) -> i16 { let mut mg = [0, 0]; let mut eg = [0, 0]; let mut phase = 0; @@ -243,7 +243,7 @@ impl Pesto { let mg_phase = std::cmp::min(phase, 24); let eg_phase = 24 - mg_phase; - (mg_score * mg_phase + eg_score * eg_phase) / 24 + ((mg_score * mg_phase + eg_score * eg_phase) / 24) as i16 } } diff --git a/src/search/iterative_deepening.rs b/src/search/iterative_deepening.rs index 5c13023..c8affb8 100644 --- a/src/search/iterative_deepening.rs +++ b/src/search/iterative_deepening.rs @@ -55,7 +55,7 @@ fn log_depth_results( seconds: u64, nodes: u64, nps: u64, - best_score: i32, + best_score: i16, best_move: Option, ) -> Response { Response::Info(format!( diff --git a/src/search/move_ordering.rs b/src/search/move_ordering.rs index a874514..6903b67 100644 --- a/src/search/move_ordering.rs +++ b/src/search/move_ordering.rs @@ -5,7 +5,7 @@ pub fn score_move( mv: Move, killer_move: Option, tt_move: Option, -) -> i32 { +) -> i16 { if Some(mv) == tt_move { return -100; } @@ -15,9 +15,11 @@ pub fn score_move( } let aggressor = mailbox.piece_at(mv.src()).expect("No aggressor found."); - mailbox.piece_at(mv.dst()).map_or(100, |victim| { - aggressor.0.idx() as i32 - (victim.0.idx() * 8) as i32 - }) + if let Some(victim) = mailbox.piece_at(mv.dst()) { + return (aggressor.0.idx() - 8 * victim.0.idx()) as i16; + } + + 100 } #[cfg(test)] diff --git a/src/search/negamax.rs b/src/search/negamax.rs index 438b4ce..2507258 100644 --- a/src/search/negamax.rs +++ b/src/search/negamax.rs @@ -14,14 +14,14 @@ use super::{ pub fn negamax( game: &mut Game, - mut alpha: i32, - beta: i32, + mut alpha: i16, + beta: i16, mut depth: u8, plies: u8, time: &TimeInfo, nodes: &mut u64, do_nmp: bool, -) -> Result { +) -> Result { if time.exceed_hard_limit() { bail!("Hard limit exceeded in negamax"); } @@ -137,7 +137,7 @@ pub fn negamax( if legal_moves == 0 { if in_check { - return Ok(-MATE_SCORE + plies as i32); + return Ok(-MATE_SCORE + plies as i16); } return Ok(0); } diff --git a/src/search/quiescence.rs b/src/search/quiescence.rs index ba79512..b8dec45 100644 --- a/src/search/quiescence.rs +++ b/src/search/quiescence.rs @@ -6,11 +6,11 @@ use super::{move_ordering::score_move, time::TimeInfo, transposition_table::Node pub fn quiescence( game: &mut Game, - mut alpha: i32, - beta: i32, + mut alpha: i16, + beta: i16, time: &TimeInfo, nodes: &mut u64, -) -> Result { +) -> Result { if *nodes & 1024 == 0 && time.exceed_hard_limit() { bail!("Hard limit exceeded in quiescence"); } diff --git a/src/search/transposition_table.rs b/src/search/transposition_table.rs index 0288803..9280467 100644 --- a/src/search/transposition_table.rs +++ b/src/search/transposition_table.rs @@ -31,7 +31,7 @@ pub struct TTEntry { pub hash: ZobristHash, pub mv: Option, pub depth: u8, - pub score: i32, + pub score: i16, pub node_type: NodeType, } @@ -40,7 +40,7 @@ impl TTEntry { hash: ZobristHash, mv: Option, depth: u8, - score: i32, + score: i16, node_type: NodeType, ) -> Self { Self {