From f1c397b850edc48ea762bdb1a2bcce2d7316e38e Mon Sep 17 00:00:00 2001 From: "github-classroom[bot]" <66690702+github-classroom[bot]@users.noreply.github.com> Date: Sat, 25 Oct 2025 14:04:47 +0000 Subject: [PATCH 1/3] add deadline --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 8adb718..505e227 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,4 @@ +[![Review Assignment Due Date](https://classroom.github.com/assets/deadline-readme-button-22041afd0340ce965d47ae6ef1cefeee28c7c493a6346c4f15d667ab976d596c.svg)](https://classroom.github.com/a/FN98O3k7) ## Environment setup (Python 3.10+ recommended) - Clone repo - Open VSCode and go to the program folder From 077203826c8c01ecae0a41434e05e8ab1fe0d3cb Mon Sep 17 00:00:00 2001 From: Adam R Date: Sat, 25 Oct 2025 13:36:30 -0400 Subject: [PATCH 2/3] alpha beta pruning implemented --- homemade.py | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/homemade.py b/homemade.py index 8d7f558..97fab05 100644 --- a/homemade.py +++ b/homemade.py @@ -180,7 +180,7 @@ def evaluate(b: chess.Board) -> int: return score # --- plain minimax (no alpha-beta) --- - def minimax(b: chess.Board, depth: int, maximizing: bool) -> int: + def minimax(b: chess.Board, depth: int, maximizing: bool, alpha, beta) -> int: if depth == 0 or b.is_game_over(): return evaluate(b) @@ -188,19 +188,33 @@ def minimax(b: chess.Board, depth: int, maximizing: bool) -> int: best = -10**12 for m in b.legal_moves: b.push(m) - val = minimax(b, depth - 1, False) + val = minimax(b, depth - 1, False, alpha, beta) b.pop() if val > best: best = val + + if best > alpha: + alpha = best + + if beta <= alpha: + break + return best else: best = 10**12 for m in b.legal_moves: b.push(m) - val = minimax(b, depth - 1, True) + val = minimax(b, depth - 1, True, alpha, beta) b.pop() if val < best: best = val + + if best < beta: + beta = best + + if beta >= alpha: + break + return best # --- root move selection --- @@ -216,7 +230,7 @@ def minimax(b: chess.Board, depth: int, maximizing: bool) -> int: # Lookahead depth chosen by the simple time heuristic; subtract one for the root move for m in legal: board.push(m) - val = minimax(board, total_depth - 1, not maximizing) + val = minimax(board, total_depth - 1, not maximizing, -10**12, 10**12) board.pop() if maximizing and val > best_eval: From a6a9426264b976254fe9c106975f50ca4db37910 Mon Sep 17 00:00:00 2001 From: Adam R Date: Sat, 25 Oct 2025 13:44:34 -0400 Subject: [PATCH 3/3] fixed alpha beta pruning condition --- homemade.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/homemade.py b/homemade.py index 97fab05..2ef2e9b 100644 --- a/homemade.py +++ b/homemade.py @@ -212,7 +212,7 @@ def minimax(b: chess.Board, depth: int, maximizing: bool, alpha, beta) -> int: if best < beta: beta = best - if beta >= alpha: + if beta <= alpha: break return best