From 4895d0eecf9ec4556e19cfbd2174677fbc768fe5 Mon Sep 17 00:00:00 2001 From: ZhuangYumin Date: Mon, 1 Jul 2024 02:54:20 +0000 Subject: [PATCH] q4 --- multiagent/multiAgents.py | 46 +++++++++++++++++++++++++++++++++++++-- 1 file changed, 44 insertions(+), 2 deletions(-) diff --git a/multiagent/multiAgents.py b/multiagent/multiAgents.py index 99d72e7..8c4234b 100644 --- a/multiagent/multiAgents.py +++ b/multiagent/multiAgents.py @@ -292,6 +292,47 @@ class ExpectimaxAgent(MultiAgentSearchAgent): Your expectimax agent (question 4) """ + def ExpectMaxSearch(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.ExpectMaxSearch(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 + val_list=[] + 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.ExpectMaxSearch(successorGameState,nxt_depth,(agentIndex+1)%gameState.getNumAgents()) + val_list.append(val) + if val