From 274ad5685f6e9b5fe4bedf83c3a19dd16d759a68 Mon Sep 17 00:00:00 2001 From: ZhuangYumin Date: Mon, 1 Jul 2024 02:05:09 +0000 Subject: [PATCH] q2 --- multiagent/multiAgents.py | 43 +++++++++++++++++++++++++++++++++++++-- 1 file changed, 41 insertions(+), 2 deletions(-) diff --git a/multiagent/multiAgents.py b/multiagent/multiAgents.py index e887de1..678a830 100644 --- a/multiagent/multiAgents.py +++ b/multiagent/multiAgents.py @@ -161,6 +161,44 @@ class MinimaxAgent(MultiAgentSearchAgent): Your minimax agent (question 2) """ + def MinMaxSearch(self,gameState: GameState,depth_remain:int,agentIndex:int) -> tuple[int, list[Actions]]: + if depth_remain==0: + # print(f"depth_remain:{depth_remain}") + # print(f"returning leaf {self.evaluationFunction(gameState)}, {[]}") + return self.evaluationFunction(gameState),[] + legal_actions = gameState.getLegalActions(agentIndex) + if len(legal_actions)==0: + # print(f"depth_remain:{depth_remain}") + # print(f"returning leaf {self.evaluationFunction(gameState)}, {[]}") + return self.evaluationFunction(gameState),[] + kInf=1e100 + res_action=[] + res_val=0 + if agentIndex==0: + # Max + res_val = -kInf + for action in legal_actions: + successorGameState = gameState.generateSuccessor(agentIndex,action) + nxt_depth=depth_remain-1 if agentIndex==gameState.getNumAgents()-1 else depth_remain + val,action_list=self.MinMaxSearch(successorGameState,nxt_depth,(agentIndex+1)%gameState.getNumAgents()) + if val>res_val: + res_val=val + # print(f"action:{action}, action_list:{action_list}") + res_action=[action]+action_list + else: + # Mins + res_val = kInf + for action in legal_actions: + successorGameState = gameState.generateSuccessor(agentIndex,action) + nxt_depth=depth_remain-1 if agentIndex==gameState.getNumAgents()-1 else depth_remain + val,action_list=self.MinMaxSearch(successorGameState,nxt_depth,(agentIndex+1)%gameState.getNumAgents()) + if val