diff options
author | Neil Kollack <nkollack@gmail.com> | 2021-11-07 14:34:08 -0600 |
---|---|---|
committer | Neil Kollack <nkollack@gmail.com> | 2021-11-07 14:34:08 -0600 |
commit | 5b27e9d273c43fd59905a7f126ddf8edfab7fae7 (patch) | |
tree | 489011e86a50a7d7bd4fd0c1c7be09d634d1de45 /src/pacmanAgents.py | |
parent | 90d43312138b00ddbe547aef667869915fd10a0a (diff) |
initial commit
Diffstat (limited to 'src/pacmanAgents.py')
-rw-r--r-- | src/pacmanAgents.py | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/src/pacmanAgents.py b/src/pacmanAgents.py new file mode 100644 index 0000000..ae97634 --- /dev/null +++ b/src/pacmanAgents.py @@ -0,0 +1,52 @@ +# pacmanAgents.py +# --------------- +# Licensing Information: You are free to use or extend these projects for +# educational purposes provided that (1) you do not distribute or publish +# solutions, (2) you retain this notice, and (3) you provide clear +# attribution to UC Berkeley, including a link to http://ai.berkeley.edu. +# +# Attribution Information: The Pacman AI projects were developed at UC Berkeley. +# The core projects and autograders were primarily created by John DeNero +# (denero@cs.berkeley.edu) and Dan Klein (klein@cs.berkeley.edu). +# Student side autograding was added by Brad Miller, Nick Hay, and +# Pieter Abbeel (pabbeel@cs.berkeley.edu). + + +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) + + successors = [(state.generateSuccessor(0, action), action) for action in legal] + scored = [(self.evaluationFunction(state), action) for state, action in successors] + 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() |