From 008b4d969b07f67194e3e9b650ccbcbe0477d19c Mon Sep 17 00:00:00 2001 From: fredrikr79 Date: Tue, 21 Oct 2025 13:38:32 +0200 Subject: [PATCH] ass3: implement `minimax_search` --- assignment3/halving_game.py | 26 ++++++++++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) diff --git a/assignment3/halving_game.py b/assignment3/halving_game.py index b34e74c..fd2b41d 100644 --- a/assignment3/halving_game.py +++ b/assignment3/halving_game.py @@ -47,8 +47,30 @@ class Game: def minimax_search(game: Game, state: State) -> Action | None: - # YOUR CODE HERE - assert False, "Not implemented" + _, result = max_value(game, state) + return result + + +def max_value(game: Game, state: State) -> tuple[float, Action | None]: + if game.is_terminal(state): + return game.utility(state, player), None + v, move = float("-inf"), float("-inf") + for a in game.actions(state): + v2, a2 = min_value(game, game.result(state, a)) + if v2 > v: + v, move = v2, a + return float(v), Action(move) + + +def min_value(game: Game, state: State) -> tuple[float, Action | None]: + if game.is_terminal(state): + return game.utility(state, player), None + v, move = float("+inf"), float("+inf") + for a in game.actions(state): + v2, a2 = max_value(game, game.result(state, a)) + if v2 < v: + v, move = v2, a + return float(v), Action(move) game = Game(5)