From 744050c4b4747ac4645480e2f4a935a027b8350f Mon Sep 17 00:00:00 2001 From: Mike White Date: Mon, 6 Sep 2021 08:02:51 -0400 Subject: Alpha-beta pruning --- ai/src/lib.rs | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) (limited to 'ai') diff --git a/ai/src/lib.rs b/ai/src/lib.rs index 583c50b..405c88d 100644 --- a/ai/src/lib.rs +++ b/ai/src/lib.rs @@ -26,7 +26,7 @@ fn eval_position(board: CheckersBitBoard) -> f32 { } } -pub fn eval(depth: usize, board: CheckersBitBoard) -> f32 { +pub fn eval(depth: usize, mut alpha: f32, beta: f32, board: CheckersBitBoard) -> f32 { if depth == 0 { eval_position(board) } else { @@ -35,14 +35,21 @@ pub fn eval(depth: usize, board: CheckersBitBoard) -> f32 { for current_move in PossibleMoves::moves(board) { let board = unsafe { current_move.apply_to(board) }; let current_eval = if board.turn() != turn { - 1.0 - eval(depth - 1, board) + 1.0 - eval(depth - 1, 1.0 - beta, 1.0 - alpha, board) } else { - eval(depth - 1, board) + eval(depth - 1, alpha, beta, board) }; + if current_eval >= beta { + return beta; + } + if best_eval < current_eval { best_eval = current_eval; } + if alpha < best_eval { + alpha = best_eval; + } } best_eval -- cgit v1.2.3