def aaStar(self, gameState, whereLostFood): from util import PriorityQueue from util import manhattanDistance closed = [] directions = {} costs = {} priorityQ = PriorityQueue() priorityQ.push(gameState, 0) startState = gameState.getAgentState(self.index) startPosition = startState.getPosition() closed.append(startPosition) directions[startPosition] = [] costs[startPosition] = 0 while not priorityQ.isEmpty(): cur_State = priorityQ.pop() cur_Position = cur_State.getAgentState(self.index).getPosition() actions = cur_State.getLegalActions(self.index) if cur_Position == whereLostFood: return directions[cur_Position] for action in actions: nextState = self.getSuccessor(cur_State, action) nextPosition = nextState.getAgentState( self.index).getPosition() Actions = directions[cur_Position][:] nextCost = costs[cur_Position] + 1 if nextPosition not in closed or nextCost < costs[nextPosition]: costs[nextPosition] = nextCost directions[nextPosition] = [] Actions.append(action) directions[nextPosition].extend(Actions) closed.append(nextPosition) g = nextCost h = manhattanDistance(nextPosition, whereLostFood) f = g + h priorityQ.push(nextState, f) return []