我们从Python开源项目中,提取了以下7个代码示例,用于说明如何使用game.Agent()。
def __init__( self, index, timeForComputing = .1 ): """ Lists several variables you can query: self.index = index for this agent self.red = true if you're on the red team, false otherwise self.agentsOnTeam = a list of agent objects that make up your team self.distancer = distance calculator (contest code provides this) self.observationHistory = list of GameState objects that correspond to the sequential order of states that have occurred so far this game self.timeForComputing = an amount of time to give each turn for computing maze distances (part of the provided distance calculator) """ # Agent index for querying state self.index = index # Whether or not you're on the red team self.red = None # Agent objects controlling you and your teammates self.agentsOnTeam = None # Maze distance calculator self.distancer = None # A history of observations self.observationHistory = [] # Time to spend each turn on computing maze distances self.timeForComputing = timeForComputing # Access to the graphics self.display = None
def getAction(self, state): """ From game.py: The Agent will receive a GameState and must return an action from Directions.{North, South, East, West, Stop} """ "*** YOUR CODE HERE ***" util.raiseNotDefined()
def execute(self, grades, moduleDict, solutionDict): # load student code and staff code solutions multiAgents = moduleDict['multiAgents'] studentAgent = getattr(multiAgents, self.alg)(depth=self.depth) allActions = map(lambda x: json.loads(x), solutionDict['optimalActions'].split('\n')) altDepthActions = map(lambda x: json.loads(x), solutionDict['altDepthActions'].split('\n')) partialPlyBugActions = map(lambda x: json.loads(x), solutionDict['partialPlyBugActions'].split('\n')) # set up game state and play a game random.seed(self.seed) lay = layout.Layout([l.strip() for l in self.layout_text.split('\n')]) pac = GradingAgent(self.seed, studentAgent, allActions, altDepthActions, partialPlyBugActions) # check return codes and assign grades disp = self.question.getDisplay() stats = run(lay, self.layout_name, pac, [DirectionalGhost(i + 1) for i in range(2)], disp, name=self.alg) if stats['timeouts'] > 0: self.addMessage('Agent timed out on smallClassic. No credit') return self.testFail(grades) if stats['crashes'] > 0: self.addMessage('Agent crashed on smallClassic. No credit') return self.testFail(grades) code = pac.checkFailure() if code == 0: return self.testPass(grades) elif code == -3: if pac.getWrongStatesExplored() >=0: self.addMessage('Bug: Wrong number of states expanded.') return self.testFail(grades) else: return self.testPass(grades) elif code == -2: self.addMessage('Bug: Partial Ply Bug') return self.testFail(grades) elif code == -1: self.addMessage('Bug: Search depth off by 1') return self.testFail(grades) elif code > 0: moves = pac.getSuboptimalMoves() state, studentMove, optMove = random.choice(moves) self.addMessage('Bug: Suboptimal moves') self.addMessage('State:%s\nStudent Move:%s\nOptimal Move:%s' % (state, studentMove, optMove)) return self.testFail(grades)
def checkDeath( state, agentIndex): agentState = state.data.agentStates[agentIndex] if state.isOnRedTeam(agentIndex): otherTeam = state.getBlueTeamIndices() else: otherTeam = state.getRedTeamIndices() if agentState.isPacman: for index in otherTeam: otherAgentState = state.data.agentStates[index] if otherAgentState.isPacman: continue ghostPosition = otherAgentState.getPosition() if ghostPosition == None: continue if manhattanDistance( ghostPosition, agentState.getPosition() ) <= COLLISION_TOLERANCE: # award points to the other team for killing Pacmen if otherAgentState.scaredTimer <= 0: AgentRules.dumpFoodFromDeath(state, agentState, agentIndex) score = KILL_POINTS if state.isOnRedTeam(agentIndex): score = -score state.data.scoreChange += score agentState.isPacman = False agentState.configuration = agentState.start agentState.scaredTimer = 0 else: score = KILL_POINTS if state.isOnRedTeam(agentIndex): score = -score state.data.scoreChange += score otherAgentState.isPacman = False otherAgentState.configuration = otherAgentState.start otherAgentState.scaredTimer = 0 else: # Agent is a ghost for index in otherTeam: otherAgentState = state.data.agentStates[index] if not otherAgentState.isPacman: continue pacPos = otherAgentState.getPosition() if pacPos == None: continue if manhattanDistance( pacPos, agentState.getPosition() ) <= COLLISION_TOLERANCE: #award points to the other team for killing Pacmen if agentState.scaredTimer <= 0: AgentRules.dumpFoodFromDeath(state, otherAgentState, agentIndex) score = KILL_POINTS if not state.isOnRedTeam(agentIndex): score = -score state.data.scoreChange += score otherAgentState.isPacman = False otherAgentState.configuration = otherAgentState.start otherAgentState.scaredTimer = 0 else: score = KILL_POINTS if state.isOnRedTeam(agentIndex): score = -score state.data.scoreChange += score agentState.isPacman = False agentState.configuration = agentState.start agentState.scaredTimer = 0
def runGames( layouts, agents, display, length, numGames, record, numTraining, redTeamName, blueTeamName, muteAgents=False, catchExceptions=False ): rules = CaptureRules() games = [] if numTraining > 0: print 'Playing %d training games' % numTraining for i in range( numGames ): beQuiet = i < numTraining layout = layouts[i] if beQuiet: # Suppress output and graphics import textDisplay gameDisplay = textDisplay.NullGraphics() rules.quiet = True else: gameDisplay = display rules.quiet = False g = rules.newGame( layout, agents, gameDisplay, length, muteAgents, catchExceptions ) g.run() if not beQuiet: games.append(g) g.record = None if record: import time, cPickle, game #fname = ('recorded-game-%d' % (i + 1)) + '-'.join([str(t) for t in time.localtime()[1:6]]) #f = file(fname, 'w') components = {'layout': layout, 'agents': [game.Agent() for a in agents], 'actions': g.moveHistory, 'length': length, 'redTeamName': redTeamName, 'blueTeamName':blueTeamName } #f.close() print "recorded" g.record = cPickle.dumps(components) with open('replay-%d'%i,'wb') as f: f.write(g.record) if numGames > 1: scores = [game.state.data.score for game in games] redWinRate = [s > 0 for s in scores].count(True)/ float(len(scores)) blueWinRate = [s < 0 for s in scores].count(True)/ float(len(scores)) print 'Average Score:', sum(scores) / float(len(scores)) print 'Scores: ', ', '.join([str(score) for score in scores]) print 'Red Win Rate: %d/%d (%.2f)' % ([s > 0 for s in scores].count(True), len(scores), redWinRate) print 'Blue Win Rate: %d/%d (%.2f)' % ([s < 0 for s in scores].count(True), len(scores), blueWinRate) print 'Record: ', ', '.join([('Blue', 'Tie', 'Red')[max(0, min(2, 1 + s))] for s in scores]) return games