Add move ordering heuristic MVV/LVA

This commit is contained in:
stefiosif
2024-09-14 20:29:53 +03:00
parent d3c4078fcc
commit b26357a205
4 changed files with 72 additions and 11 deletions

View File

@@ -4,6 +4,8 @@ use crate::{
movegen::r#move::{Move, MoveType},
};
use super::move_ordering::score_by_mvv_lva;
pub fn quiescence(game: &mut Game, mut alpha: i32, beta: i32) -> (Option<Move>, i32) {
let color = game.current_player();
let stand_pat = evaluate_position(&game.board);
@@ -16,11 +18,14 @@ pub fn quiescence(game: &mut Game, mut alpha: i32, beta: i32) -> (Option<Move>,
alpha = stand_pat;
}
let captures = game
.board
.pseudo_moves_all()
.into_iter()
.filter(|m| !matches!(m.move_type, MoveType::Quiet));
let mut captures: Vec<_> = game.board.pseudo_moves_all().into_iter().filter(|m| {
matches!(
m.move_type,
MoveType::Capture | MoveType::PromotionCapture(_)
)
}).collect();
captures.sort_unstable_by_key(|mv| score_by_mvv_lva(&game.board, *mv));
for mv in captures {
let move_parameters = MoveParameters::build(&game.board, &mv);
@@ -41,5 +46,5 @@ pub fn quiescence(game: &mut Game, mut alpha: i32, beta: i32) -> (Option<Move>,
alpha = alpha.max(move_score);
}
(None, 0)
(None, alpha)
}