Untitled
unknown
python
5 months ago
3.4 kB
4
Indexable
def getAction(self, gameState): """ Returns the minimax action from the current gameState using self.depth and self.evaluationFunction. Here are some method calls that might be useful when implementing minimax. gameState.getLegalActions(agentIndex): Returns a list of legal actions for an agent agentIndex=0 means Pacman, ghosts are >= 1 gameState.generateSuccessor(agentIndex, action): Returns the successor game state after an agent takes an action gameState.getNumAgents(): Returns the total number of agents in the game """ def minimax(state, agent = 0, play_depth = 0): ''' A state is considered a terminal state when the the max depth is reached or the game is over The max depth is defined by the self.depth attribute The returned value is a dictionary with the score and the action to take ''' if play_depth == self.depth or state.isWin() or state.isLose(): return {'score': self.evaluationFunction(state), 'action': None} if agent == 0: return max_value(state, agent, play_depth) else: return min_value(state, agent, play_depth) def max_value(state, agent, play_depth): # Initialize the value as negative infinity, get the legal actions and the best action (action to take) as None value = float('-inf') actions = state.getLegalActions(agent) best_action = None for action in actions: # Save the previous value to compare with the new value and update the best action if the new value is greater previous_value = value successor = state.generateSuccessor(agent, action) next_agent = (agent + 1) % state.getNumAgents() # Get the next agent next_depth = play_depth + 1 if next_agent == 0 else play_depth # Increae the depth if an agent roration is completed value = max(value, minimax(successor, next_agent, next_depth)['score']) if value > previous_value: best_action = action return {'score': value, 'action': best_action} def min_value(state, agent, play_depth): # Initialize the value as positive infinity, get the legal actions and the best action (action to take) as None value = float('inf') actions = state.getLegalActions(agent) best_action = None for action in actions: # Save the previous value to compare with the new value and update the best action if the new value is greater previous_value = value successor = state.generateSuccessor(agent, action) # Get the next agent next_agent = (agent + 1) % state.getNumAgents() # Increae the depth if an agent roration is completed next_depth = play_depth + 1 if next_agent == 0 else play_depth value = min(value, minimax(successor, next_agent, next_depth)['score']) if value < previous_value: best_action = action return {'score': value, 'action': best_action} return minimax(gameState)['action']
Editor is loading...
Leave a Comment