Feat: hw2 done
This commit is contained in:
49
HW2_pacman/pacmanAgents.py
Normal file
49
HW2_pacman/pacmanAgents.py
Normal file
@@ -0,0 +1,49 @@
|
||||
from pacman import Directions
|
||||
from game import Agent
|
||||
import random
|
||||
import game
|
||||
import util
|
||||
|
||||
|
||||
class LeftTurnAgent(game.Agent):
|
||||
"An agent that turns left at every opportunity"
|
||||
|
||||
def getAction(self, state):
|
||||
legal = state.getLegalPacmanActions()
|
||||
current = state.getPacmanState().configuration.direction
|
||||
if current == Directions.STOP:
|
||||
current = Directions.NORTH
|
||||
left = Directions.LEFT[current]
|
||||
if left in legal:
|
||||
return left
|
||||
if current in legal:
|
||||
return current
|
||||
if Directions.RIGHT[current] in legal:
|
||||
return Directions.RIGHT[current]
|
||||
if Directions.LEFT[left] in legal:
|
||||
return Directions.LEFT[left]
|
||||
return Directions.STOP
|
||||
|
||||
|
||||
class GreedyAgent(Agent):
|
||||
def __init__(self, evalFn="scoreEvaluation"):
|
||||
self.evaluationFunction = util.lookup(evalFn, globals())
|
||||
assert self.evaluationFunction != None
|
||||
|
||||
def getAction(self, state):
|
||||
# Generate candidate actions
|
||||
legal = state.getLegalPacmanActions()
|
||||
if Directions.STOP in legal:
|
||||
legal.remove(Directions.STOP)
|
||||
|
||||
children = [(state.getNextState(0, action), action)
|
||||
for action in legal]
|
||||
scored = [(self.evaluationFunction(state), action)
|
||||
for state, action in children]
|
||||
bestScore = max(scored)[0]
|
||||
bestActions = [pair[1] for pair in scored if pair[0] == bestScore]
|
||||
return random.choice(bestActions)
|
||||
|
||||
|
||||
def scoreEvaluation(state):
|
||||
return state.getScore()
|
||||
Reference in New Issue
Block a user