def __init__(self, config, port): print("single agent", port) self.server_port = port self.hfo_path = hfo_py.get_hfo_path() self.env = hfo_py.HFOEnvironment() if "feature_set" in config: self.env.connectToServer(feature_set=config['feature_set'], config_dir=hfo_py.get_config_path(), server_port=self.server_port) else: self.env.connectToServer(config_dir=hfo_py.get_config_path(), server_port=self.server_port) self.observation_space = spaces.Box( low=-1, high=1, shape=((self.env.getStateSize(), )), dtype=np.float32) print("single agent init", self.observation_space) self.action_space = spaces.Discrete(14) self.status = hfo_py.IN_GAME self._seed = -1 self.old_ball_prox = 0 self.old_kickable = 0 self.old_ball_dist_goal = 0 self.got_kickable_reward = False self.first_step = True self.unum = self.env.getUnum( ) # uniform number (identifier) of our lone agent
def __init__(self, config): self.viewer = None self.server_process = None self.server_port = None self.hfo_path = hfo_py.get_hfo_path() print(self.hfo_path) self._configure_environment(config) self.env = hfo_py.HFOEnvironment() if "feature_set" in config : self.env.connectToServer( feature_set=config['feature_set'], config_dir=hfo_py.get_config_path(), server_port=self.server_port) else : self.env.connectToServer( config_dir=hfo_py.get_config_path(), server_port=self.server_port) print("Shape =",self.env.getStateSize()) self.observation_space = spaces.Box(low=-1, high=1, shape=((self.env.getStateSize(),)), dtype=np.float32) # Action space omits the Tackle/Catch actions, which are useful on defense # 包括: # Go To Ball() # Move() # Shoot() # Dribble() self.action_space = spaces.Discrete(4) self.status = hfo_py.IN_GAME self._seed = -1
def __init__(self): self.viewer = None self.server_process = None self.server_port = None self.hfo_path = hfo_py.get_hfo_path() # need to check unused port sock, port2use = self.bind_unused_port() num_offense_agents = 1 num_offense_agents_npcs = 1 self._configure_environment(port2use, num_offense_agents, num_offense_agents_npcs) #process = subprocess.Popen(self.hfo_path+' --offense-agents=1 --defense-npcs=1', shell=True, stdout=subprocess.PIPE) self.env = hfo_py.HFOEnvironment() self.env.connectToServer(feature_set=hfo_py.HIGH_LEVEL_FEATURE_SET, config_dir=hfo_py.get_config_path(), server_port=port2use) self.observation_space = spaces.Box(low=-1, high=1, shape=(self.env.getStateSize())) # Action space omits the Tackle/Catch actions, which are useful on defense self.action_space = spaces.Tuple( (spaces.Discrete(3), spaces.Box(low=0, high=100, shape=1), spaces.Box(low=-180, high=180, shape=1), spaces.Box(low=-180, high=180, shape=1), spaces.Box(low=0, high=100, shape=1), spaces.Box(low=-180, high=180, shape=1))) # self.action_space = spaces.Tuple(spaces.Discrete(3), # spaces.Box(low=np.array([0,-180,-180,0,-180]), high=np.array([100,180,180,100,180]))) self.status = hfo_py.IN_GAME
def __init__(self): self.viewer = None self.server_process = None self.server_port = None self.hfo_path = hfo_py.get_hfo_path() self._configure_environment() self.env = hfo_py.HFOEnvironment() self.env.connectToServer(config_dir=hfo_py.get_config_path()) self.observation_space = spaces.Box(low=-1, high=1, shape=(self.env.getStateSize())) # Action space omits the Tackle/Catch actions, which are useful on defense # self.action_space = spaces.Tuple((spaces.Discrete(3), # spaces.Box(low=0, high=100, shape=1), # spaces.Box(low=-180, high=180, shape=1), # spaces.Box(low=-180, high=180, shape=1), # spaces.Box(low=0, high=100, shape=1), # spaces.Box(low=-180, high=180, shape=1))) # Modified action space, this modification will combine the parameter for the # same discrete action into a single action spaces self.action_space = spaces.Tuple( (spaces.Discrete(3), spaces.Box(low=np.array([0.0, -180.0]), high=np.array([100.0, 180.0])), spaces.Box(low=np.array([-180.0]), high=np.array([180.0])), spaces.Box(low=np.array([0.0, -180.0]), high=np.array([100.0, 180.0])))) self.status = hfo_py.IN_GAME
def __init__(self): self.viewer = None self.server_process = None self.server_port = None self.hfo_path = hfo_py.get_hfo_path() self._configure_environment() if hasattr(self, '_static_keeper') and self._static_keeper: print('\n\nstatic\n\n') self._static_keeper_process = Process( target=self._start_static_keeper, args=[self.server_port]) self._static_keeper_process.start() self.env = hfo_py.HFOEnvironment() self.env.connectToServer(config_dir=hfo_py.get_config_path(), server_port=self.server_port) self.observation_space = spaces.Box(low=-1, high=1, shape=(self.env.getStateSize())) # Action space omits the Tackle/Catch actions, which are useful on defense self.action_space = spaces.Tuple( (spaces.Discrete(3), spaces.Box(low=0, high=100, shape=1), spaces.Box(low=-180, high=180, shape=1), spaces.Box(low=-180, high=180, shape=1), spaces.Box(low=0, high=100, shape=1), spaces.Box(low=-180, high=180, shape=1))) self.status = hfo_py.IN_GAME
def __init__(self): super(hfoENV, self) self.viewer = None self.server_process = None self.server_port = None self.hfo_path = hfo_py.get_hfo_path() self.configure() self.env = hfo_py.HFOEnvironment() self.env.connectToServer(feature_set=LOW_LEVEL_FEATURE_SET, config_dir=hfo_py.get_config_path(), ) self.game_info = GameInfo(1)
def __init__(self): self.discrete_action_size = 6 self.continuous_action_size = 7 self.viewer = None self.server_process = None self.server_port = None self.hfo_path = hfo_py.get_hfo_path() self._configure_environment() self.env = hfo_py.HFOEnvironment() self.env.connectToServer(config_dir=hfo_py.get_config_path()) self.observation_space = spaces.Box( low=-1, high=1, shape=((self.env.getStateSize(), ))) # Action space omits the Tackle/Catch actions, which are useful on defense action_dim = self.continuous_action_size + self.discrete_action_size self.action_space = spaces.Box(low=0, high=1, shape=(action_dim, )) self.status = hfo_py.IN_GAME
def __init__(self): self.viewer = None self.server_process = None self.server_port = None self.hfo_path = hfo_py.get_hfo_path() self._configure_environment() self.env = hfo_py.HFOEnvironment() self.env.connectToServer(config_dir=hfo_py.get_config_path()) self.observation_space = spaces.Box(low=-1, high=1, shape=(self.env.getStateSize())) # Action space omits the Tackle/Catch actions, which are useful on defense self.action_space = spaces.Tuple((spaces.Discrete(3), spaces.Box(low=0, high=100, shape=1), spaces.Box(low=-180, high=180, shape=1), spaces.Box(low=-180, high=180, shape=1), spaces.Box(low=0, high=100, shape=1), spaces.Box(low=-180, high=180, shape=1))) self.status = hfo_py.IN_GAME
def __init__(self): self.viewer = None self.server_process = None self.server_port = None self.hfo_path = hfo_py.get_hfo_path() self._configure_environment() self.env = hfo_py.HFOEnvironment() self.env.connectToServer(config_dir=hfo_py.get_config_path()) # ここでgetStateSize()がint型だとこの先のSpaces.Boxの__init()でtuple(shape)つまりtuple(int型)になるためTypeErrorでる #self.observation_space = spaces.Box(low=-1, high=1, # shape=(self.env.getStateSize())) #そのため以下に変更 self.observation_space = spaces.Box(low=-1, high=1, shape=(self.env.getStateSize(), )) # Action space omits the Tackle/Catch actions, which are useful on defense # action_spaceもshapeでTypeErrrorがでる #self.action_space = spaces.Tuple((spaces.Discrete(3), # spaces.Box(low=0, high=100, shape=(1,)), # spaces.Box(low=-180, high=180, shape=(1,)), # spaces.Box(low=-180, high=180, shape=(1,)), # spaces.Box(low=0, high=100, shape=(1,)), # spaces.Box(low=-180, high=180, shape=(1,)))) #そのため以下に変更、参考:https://github.com/cycraig/gym-soccer/blob/master/gym_soccer/envs/soccer_env.py low0 = np.array([0, -180], dtype=np.float32) high0 = np.array([100, 180], dtype=np.float32) low1 = np.array([-180], dtype=np.float32) high1 = np.array([180], dtype=np.float32) low2 = np.array([0, -180], dtype=np.float32) high2 = np.array([100, 180], dtype=np.float32) low3 = np.array([-180], dtype=np.float32) high3 = np.array([180], dtype=np.float32) self.action_space = spaces.Tuple((spaces.Discrete(3), spaces.Box(low=low0, high=high0, dtype=np.float32), spaces.Box(low=low1, high=high1, dtype=np.float32), spaces.Box(low=low2, high=high2, dtype=np.float32))) self.status = hfo_py.IN_GAME
def __init__(self): self.viewer = None self.server_process = None self.server_port = None self.hfo_path = hfo_py.get_hfo_path() print(self.hfo_path) self._configure_environment() self.env = hfo_py.HFOEnvironment() self.env.connectToServer(config_dir=hfo_py.get_config_path(), server_port=self.server_port) print("Shape =", self.env.getStateSize()) self.observation_space = spaces.Box( low=-1, high=1, shape=((self.env.getStateSize(), )), dtype=np.float32) # Action space omits the Tackle/Catch actions, which are useful on defense # 这个比如说 动作0有两个参数,第一个参数的范围是0-100 ,第二个参数的范围是-180,180 那么最低值为[0, -180] 最高值的集合为[180,180] low0 = np.array([0, -180], dtype=np.float32) high0 = np.array([100, 180], dtype=np.float32) low1 = np.array([-180], dtype=np.float32) high1 = np.array([180], dtype=np.float32) low2 = np.array([0, -180], dtype=np.float32) high2 = np.array([100, 180], dtype=np.float32) low3 = np.array([-180], dtype=np.float32) high3 = np.array([180], dtype=np.float32) self.action_space = spaces.Tuple((spaces.Discrete(3), spaces.Box(low=low0, high=high0, dtype=np.float32), spaces.Box(low=low1, high=high1, dtype=np.float32), spaces.Box(low=low2, high=high2, dtype=np.float32))) self.status = hfo_py.IN_GAME self._seed = -1
def _start_static_keeper(port): env_static = hfo_py.HFOEnvironment() env_static.connectToServer(config_dir=hfo_py.get_config_path(), server_port=port, team_name='base_right', play_goalie=True) time.sleep(10) for _ in itertools.count(): status = hfo_py.IN_GAME counter = 0 while status == hfo_py.IN_GAME: # Grab the state features from the environment features = env_static.getState() # Take an action and get the current game status r = random.choice([-1, 1]) if counter < 0 else 0 counter += 1 env_static.act(hfo_py.DASH, 100. * r, 90.) # Advance the environment and get the game status status = env_static.step() # Check the outcome of the episode # print(('Episode %d ended with %s'%(episode, hfo.statusToString(status)))) # Quit if the server goes down if status == hfo_py.SERVER_DOWN: env_static.act(hfo_py.QUIT) exit()
def __init__(self): self.viewer = None self.server_process = None self.server_port = None self.hfo_path = hfo_py.get_hfo_path() print(self.hfo_path) self._configure_environment() self.env = hfo_py.HFOEnvironment() self.env.connectToServer(team_name="base_right", play_goalie=True, config_dir=hfo_py.get_config_path(), server_port=self.server_port) print("Shape =",self.env.getStateSize()) self.observation_space = spaces.Box(low=-1, high=1, shape=((self.env.getStateSize(),)), dtype=np.float32) # Action space omits the Tackle/Catch actions, which are useful on defense low0 = np.array([0, -180], dtype=np.float32) high0 = np.array([100, 180], dtype=np.float32) low1 = np.array([-180], dtype=np.float32) high1 = np.array([180], dtype=np.float32) low2 = np.array([0, -180], dtype=np.float32) high2 = np.array([100, 180], dtype=np.float32) low3 = np.array([0], dtype=np.float32) high3 = np.array([100], dtype=np.float32) self.action_space = spaces.Tuple((spaces.Discrete(5), spaces.Box(low=low0, high=high0, dtype=np.float32), spaces.Box(low=low1, high=high1, dtype=np.float32), spaces.Box(low=low2, high=high2, dtype=np.float32), spaces.Box(low=low3, high=high3, dtype=np.float32))) self.status = hfo_py.IN_GAME self._seed = -1