Add depth limit on quiescence, add node/timer measurements
This commit is contained in:
@@ -1,12 +1,20 @@
|
||||
use crate::{
|
||||
board::game::Game,
|
||||
evaluation::evaluation::evaluate_position,
|
||||
movegen::r#move::{Move, MoveType},
|
||||
};
|
||||
use crate::{board::game::Game, evaluation::evaluation::evaluate_position, movegen::r#move::Move};
|
||||
|
||||
use super::move_ordering::score_by_mvv_lva;
|
||||
|
||||
pub fn quiescence(game: &mut Game, mut alpha: i32, beta: i32) -> (Option<Move>, i32) {
|
||||
pub fn quiescence(
|
||||
game: &mut Game,
|
||||
mut alpha: i32,
|
||||
beta: i32,
|
||||
nodes: &mut u64,
|
||||
depth: u8,
|
||||
) -> (Option<Move>, i32) {
|
||||
*nodes += 1;
|
||||
|
||||
if depth == 0 {
|
||||
return (None, evaluate_position(&game.board));
|
||||
}
|
||||
|
||||
let color = game.current_player();
|
||||
let stand_pat = evaluate_position(&game.board);
|
||||
|
||||
@@ -18,18 +26,7 @@ pub fn quiescence(game: &mut Game, mut alpha: i32, beta: i32) -> (Option<Move>,
|
||||
alpha = stand_pat;
|
||||
}
|
||||
|
||||
let mut captures: Vec<_> = game
|
||||
.board
|
||||
.pseudo_moves_all()
|
||||
.into_iter()
|
||||
.filter(|m| {
|
||||
matches!(
|
||||
m.move_type,
|
||||
MoveType::Capture | MoveType::PromotionCapture(_)
|
||||
)
|
||||
})
|
||||
.collect();
|
||||
|
||||
let mut captures: Vec<_> = game.board.pseudo_moves_all_captures();
|
||||
captures.sort_unstable_by_key(|mv| score_by_mvv_lva(&game.mailbox, *mv));
|
||||
|
||||
for mv in captures {
|
||||
@@ -40,7 +37,7 @@ pub fn quiescence(game: &mut Game, mut alpha: i32, beta: i32) -> (Option<Move>,
|
||||
continue;
|
||||
}
|
||||
|
||||
let move_score = -quiescence(game, -beta, -alpha).1;
|
||||
let move_score = -quiescence(game, -beta, -alpha, nodes, depth - 1).1;
|
||||
game.unmake_move();
|
||||
|
||||
if move_score >= beta {
|
||||
|
||||
Reference in New Issue
Block a user