예제 #1
0
    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
예제 #2
0
    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
예제 #3
0
    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
예제 #4
0
    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
예제 #5
0
    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
예제 #6
0
    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
예제 #7
0
파일: Utils.py 프로젝트: yx3110/hfo_ac_v2
 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
예제 #9
0
def make_env(player, server_port, team, scale_actions):
    # Create the HFO Environment
    hfo = hfo_py.HFOEnvironment()
    # Connect to the server
    agent_args = configure_agent(player=player, team=team, port=server_port)

    hfo.connectToServer(**agent_args)

    if player == 'offense':
        env = SoccerOffenseEnv(hfo)
    # elif player == 'defense':
    #     env = SoccerDefenseEnv(hfo)
    elif player == 'goalie':
        env = SoccerGoalieEnv(hfo)
    else:
        raise ValueError('Wrong player type')
    return env
예제 #10
0
 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
예제 #11
0
 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
예제 #12
0
 def __init__(self, config):
     self.viewer = None
     self.server_process = None
     self.rcspid = 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()
     self.one_hot_state_encoding = config.get("one_hot_state_encoding",
                                              False)
     # num = config.pop("num_agents", 1)
     self.num = config["server_config"]["offense_agents"]
     
     self.agents = []
     for i in range(self.num):
         self.agents.append(env_name_or_creator.remote(config, self.server_port))
         time.sleep(2)
     self.dones = set()
예제 #13
0
    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
예제 #14
0
    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()