Add move ordering heuristic MVV/LVA
This commit is contained in:
@@ -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)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user