From cd93c2f3c9a85ef2adf4c6cb8c58d38e2ef30e0b Mon Sep 17 00:00:00 2001 From: James Tan Juan Whei Date: Sat, 9 Apr 2022 02:06:07 -0400 Subject: [PATCH] Set up move ordering in alpha beta search (#21) --- src/engine/search.rs | 26 ++++++++++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) diff --git a/src/engine/search.rs b/src/engine/search.rs index 2b1faeb..c6cac98 100644 --- a/src/engine/search.rs +++ b/src/engine/search.rs @@ -117,9 +117,31 @@ impl Searcher { } } - let legal_moves = self.game.current_legal_moves().clone(); + // Move ordering + // 1. Good captures + // 2. Bad captures + // 3. Non-captures + let mut legal_moves = self + .game + .current_legal_moves() + .clone() + .into_iter() + .map(|m| { + ( + m, + if m.is_capture { + static_exchange_evaluation_capture(self.game.current_board().clone(), &m) + } else { + // Give non-captures a low score for them to be evaluated last + i32::MIN + }, + ) + }) + .collect::>(); - for m in legal_moves { + legal_moves.sort_by(|(_, score1), (_, score2)| score2.cmp(score1)); + + for (m, _) in legal_moves { self.nodes_searched += 1; self.game.apply_move(&m); // Whether or not a node can be pruned depends on whether