def __init__(self, env_spec, env_space, e=0): self.env_spec = env_spec self.env_space = env_space self.info_space = env_space.info_space self.e = e util.set_attr(self, self.env_spec) self.name = self.env_spec['name'] self.body_e = None self.nanflat_body_e = None # nanflatten version of bodies self.body_num = None worker_id = int(f'{os.getpid()}{self.e+int(ps.unique_id())}'[-4:]) self.u_env = UnityEnvironment(file_name=util.get_env_path(self.name), worker_id=worker_id) # spaces for NN auto input/output inference logger.warn( 'Unity environment observation_space and action_space are constructed with invalid range. Use only their shapes.' ) self.observation_spaces = [] self.action_spaces = [] for a in range(len(self.u_env.brain_names)): observation_shape = (self.get_observable_dim(a)['state'], ) if self.get_brain(a).state_space_type == 'discrete': observation_space = gym.spaces.Box(low=0, high=1, shape=observation_shape, dtype=np.int32) else: observation_space = gym.spaces.Box(low=0.0, high=1.0, shape=observation_shape, dtype=np.float32) self.observation_spaces.append(observation_space) if self.is_discrete(a): action_space = gym.spaces.Discrete(self.get_action_dim(a)) else: action_space = gym.spaces.Box(low=0.0, high=1.0, shape=(1, ), dtype=np.float32) self.action_spaces.append(action_space) for observation_space, action_space in zip(self.observation_spaces, self.action_spaces): set_gym_space_attr(observation_space) set_gym_space_attr(action_space) # TODO experiment to find out optimal benchmarking max_timestep, set # TODO ensure clock_speed from env_spec self.clock_speed = 1 self.clock = Clock(self.clock_speed) self.done = False
def __init__(self, spec, e=None, env_space=None): super(UnityEnv, self).__init__(spec, e, env_space) util.set_attr(self, self.env_spec, ['unity']) worker_id = int(f'{os.getpid()}{self.e+int(ps.unique_id())}'[-4:]) self.u_env = UnityEnvironment(file_name=util.get_env_path(self.name), worker_id=worker_id) self.patch_gym_spaces(self.u_env) self._set_attr_from_u_env(self.u_env) if env_space is None: # singleton mode pass else: self.space_init(env_space) logger.info(util.self_desc(self))
def __init__(self, spec, env_space, e=0): self.spec = spec util.set_attr(self, self.spec) self.name = self.spec['name'] self.env_space = env_space self.e = e self.body_e = None self.flat_nonan_body_e = None # flatten_nonan version of bodies worker_id = int(f'{os.getpid()}{self.e+int(_.unique_id())}'[-4:]) self.u_env = UnityEnvironment(file_name=util.get_env_path(self.name), worker_id=worker_id) # TODO experiment to find out optimal benchmarking max_timestep, set # TODO ensure clock_speed from spec self.clock_speed = 1 self.clock = Clock(self.clock_speed) self.done = False
def __init__(self, env_spec, env_space, e=0): self.env_spec = env_spec self.env_space = env_space self.info_space = env_space.info_space self.e = e util.set_attr(self, self.env_spec) self.name = self.env_spec['name'] self.body_e = None self.nanflat_body_e = None # nanflatten version of bodies self.body_num = None worker_id = int(f'{os.getpid()}{self.e+int(ps.unique_id())}'[-4:]) self.u_env = UnityEnvironment(file_name=util.get_env_path(self.name), worker_id=worker_id) # spaces for NN auto input/output inference logger.warn('Unity environment observation_space and action_space are constructed with invalid range. Use only their shapes.') self.observation_spaces = [] self.action_spaces = [] for a in range(len(self.u_env.brain_names)): observation_shape = (self.get_observable_dim(a)['state'],) if self.get_brain(a).state_space_type == 'discrete': observation_space = gym.spaces.Box(low=0, high=1, shape=observation_shape, dtype=np.int32) else: observation_space = gym.spaces.Box(low=0.0, high=1.0, shape=observation_shape, dtype=np.float32) self.observation_spaces.append(observation_space) if self.is_discrete(a): action_space = gym.spaces.Discrete(self.get_action_dim(a)) else: action_space = gym.spaces.Box(low=0.0, high=1.0, shape=(1,), dtype=np.float32) self.action_spaces.append(action_space) for observation_space, action_space in zip(self.observation_spaces, self.action_spaces): set_gym_space_attr(observation_space) set_gym_space_attr(action_space) # TODO experiment to find out optimal benchmarking max_timestep, set # TODO ensure clock_speed from env_spec self.clock_speed = 1 self.clock = Clock(self.clock_speed) self.done = False
def test_get_env_path(): assert 'node_modules/slm-env-3dball/build/3dball' in util.get_env_path( '3dball')
def test_get_env_path(): assert 'node_modules/slm-env-3dball/build/3dball' in util.get_env_path( '3dball')
''' from slm_lab.lib import util from unityagents import UnityEnvironment import numpy as np import time # # Multiple env classes simultaneously # env_path = environment.get_env_path('3dball') # env_1 = UnityEnvironment(file_name=env_path, worker_id=1) # env_path = environment.get_env_path('gridworld') # env_2 = UnityEnvironment(file_name=env_path, worker_id=2) # env_1.reset(train_mode=False) # env_2.reset(train_mode=False) env_path = util.get_env_path('gridworld') # use train_mode = False to debug, i.e. render env at real size, real time train_mode = False # UnityEnvironment interfaces python with Unity, # and contains brains for controlling connected agents. env = UnityEnvironment(file_name=env_path) print(str(env)) # get the default brain default_brain = env.brain_names[0] brain = env.brains[default_brain] env_info = env.reset(train_mode=train_mode)[default_brain] ''' is_continuous = (brain.action_space_type == 'continuous') use_observations = (brain.number_observations > 0)
''' from slm_lab.lib import util from unityagents import UnityEnvironment import numpy as np import time # # Multiple env classes simultaneously # env_path = environment.get_env_path('3dball') # env_1 = UnityEnvironment(file_name=env_path, worker_id=1) # env_path = environment.get_env_path('gridworld') # env_2 = UnityEnvironment(file_name=env_path, worker_id=2) # env_1.reset(train_mode=False) # env_2.reset(train_mode=False) env_path = util.get_env_path('gridworld') # use train_mode = False to debug, i.e. render env at real size, real time train_mode = False # UnityEnvironment interfaces python with Unity, # and contains brains for controlling connected agents. env = UnityEnvironment(file_name=env_path) print(str(env)) # get the default brain default_brain = env.brain_names[0] brain = env.brains[default_brain] env_info = env.reset(train_mode=train_mode)[default_brain] ''' is_continuous = (brain.action_space_type == 'continuous') use_observations = (brain.number_observations > 0)