From 04941856e36b4a33fae9543f571b268017ce8bda Mon Sep 17 00:00:00 2001 From: sanmit <sanmit@cs.utexas.edu> Date: Fri, 29 Jan 2016 15:03:57 -0600 Subject: [PATCH] Edits to team names --- bin/HFO | 8 ++--- bin/Trainer.py | 86 +++++++++++--------------------------------------- 2 files changed, 22 insertions(+), 72 deletions(-) diff --git a/bin/HFO b/bin/HFO index 5d35f07..22376ac 100755 --- a/bin/HFO +++ b/bin/HFO @@ -120,10 +120,10 @@ def parseArgs(): help='Number of offensive uncontrolled players. Default: 0.') p.add_argument('--defense-npcs', dest='defenseNPCs', type=int, default=0, help='Number of defensive uncontrolled players. Default: 0.') - p.add_argument('--offense-team', dest='offenseTeam', type=str, default='left', - help='Team name to pull offensive NPCs from. Default: left.') - p.add_argument('--defense-team', dest='defenseTeam', type=str, default='right', - help='Team name to pull defensive NPCs from. Default: right') + p.add_argument('--offense-team', dest='offenseTeam', type=str, default='base', + help='Team name to pull offensive NPCs from. Options: {base, helios} Default: base.') + p.add_argument('--defense-team', dest='defenseTeam', type=str, default='base', + help='Team name to pull defensive NPCs from. Options: {base, helios} Default: base') p.add_argument('--no-sync', dest='sync', action='store_false', default=True, help='Run server in non-sync mode.') p.add_argument('--port', dest='port', type=int, default=6000, diff --git a/bin/Trainer.py b/bin/Trainer.py index 7552c13..e838ab9 100755 --- a/bin/Trainer.py +++ b/bin/Trainer.py @@ -51,38 +51,6 @@ class Trainer(object): self._connectedPlayers = [] self.initMsgHandlers() - def launch_npc(self, player_num, play_offense, wait_until_join=True): - """ - OBSOLETE -- Should we delete this method? - Launches a player using sample_player binary - - Returns a Popen process object - """ - print 'Launch npc %s-%d'%(self._offenseTeamName if play_offense - else self._defenseTeamName, player_num) - if play_offense: - team_name = self._offenseTeamName - else: - team_name = self._defenseTeamName - binary_dir = os.path.dirname(os.path.realpath(__file__)) - config_dir = os.path.join(binary_dir, '../config/formations-dt') - player_conf = os.path.join(binary_dir, '../config/player.conf') - player_cmd = os.path.join(binary_dir, 'sample_player') - player_cmd += ' -t %s -p %i --config_dir %s ' \ - ' --log_dir %s --player-config %s' \ - %(team_name, self._serverPort, config_dir, - self._logDir, player_conf) - if self._record: - player_cmd += ' --record' - if player_num == 1: - player_cmd += ' -g' - kwargs = {'stdout':open('/dev/null', 'w'), - 'stderr':open('/dev/null', 'w')} - p = subprocess.Popen(player_cmd.split(' '), shell = False, **kwargs) - if wait_until_join: - self.waitOnPlayer(player_num, play_offense) - return p - def launch_agent(self, agent_num, agent_ext_num, play_offense, port, wait_until_join=True): """Launches a learning agent using the agent binary @@ -129,49 +97,33 @@ class Trainer(object): self.waitOnPlayer(agent_ext_num, play_offense) return p - def getDefensiveRoster(self, team_name): - """ - OBSOLETE -- Should we delete this method? - Returns a list of player numbers on a given team that are thought - to prefer defense. This map is not set in stone as the players on - some teams can adapt and change their roles. - - """ - if team_name == 'Borregos': - return [9,10,8,11,7,4,6,2,3,5] - elif team_name == 'WrightEagle': - return [5,2,8,9,10,6,3,11,4,7] - else: - return [2,3,4,5,6,7,8,11,9,10] - - def getOffensiveRoster(self, team_name): - """ - OBSOLETE -- Should we delete this method? - Returns a list of player numbers on a given team that are thought - to prefer offense. This map is not set in stone as the players on - some teams can adapt and change their roles. - - """ - if team_name == 'Borregos': - return [2,4,6,5,3,7,9,10,8,11] - elif team_name == 'WrightEagle': - return [11,4,7,3,6,10,8,9,2,5] - else: - return [11,7,8,9,10,6,3,2,4,5] - def addTeam(self, team_name): """ Adds a team to the team list""" - self._teams.append(team_name) + # Check whether team name valid, and map to a format acceptable to third party binary + nameMap = {'base':'base', 'helios':'HELIOS'} + if team_name not in nameMap.keys(): + print 'Invalid team name: ', team_name + sys.exit(1) + # Create side specific team + if len(self._teams) == 0: + self._teams.append(nameMap[team_name] + '_left') + elif len(self._teams) == 1: + self._teams.append(nameMap[team_name] + '_right') + else: + print 'Too many teams added!' + sys.exit(1) def createTeam(self, name): teamDir = os.path.join(os.path.dirname(os.path.realpath(__file__)), 'teams') if 'HELIOS' in name: print 'Creating team HELIOS' return teams.Helios(name, os.path.join(teamDir, 'helios', 'helios-13Eindhoven'), os.path.join(teamDir, 'helios', 'local', 'lib'), 'helios_player', host='localhost', port=self._serverPort) - # Agent2d (base) is the default - else: + elif 'base' in name: print 'Creating team Agent2d (base)' return teams.Agent2d(name, os.path.join(teamDir, 'base'), None, 'sample_player', self._logDir, self._record, host='localhost', port=self._serverPort) + else: + print 'Invalid team found' + sys.exit(1) def getTeams(self): """ Sets the offensive and defensive teams and player rosters. """ @@ -180,11 +132,9 @@ class Trainer(object): self._defenseTeamName = self._teams[1-self._offenseTeamInd] # set up offense offenseTeam = self.createTeam(self._offenseTeamName) + self._offenseOrder = [1] + offenseTeam._offense_order # 1 for goalie # set up defense defenseTeam = self.createTeam(self._defenseTeamName) -# offensive_roster = self.getOffensiveRoster(self._offenseTeamName) -# defensive_roster = self.getDefensiveRoster(self._defenseTeamName) - self._offenseOrder = [1] + offenseTeam._offense_order # 1 for goalie self._defenseOrder = [1] + defenseTeam._defense_order # 1 for goalie return (offenseTeam, defenseTeam) -- 2.24.1