def __init__(self, env_fns, start_method=None): self.waiting = False self.closed = False n_envs = len(env_fns) if start_method is None: # Fork is not a thread safe method (see issue #217) # but is more user friendly (does not require to wrap the code in # a `if __name__ == "__main__":`) forkserver_available = 'forkserver' in multiprocessing.get_all_start_methods( ) start_method = 'forkserver' if forkserver_available else 'spawn' ctx = multiprocessing.get_context(start_method) self.remotes, self.work_remotes = zip( *[ctx.Pipe(duplex=True) for _ in range(n_envs)]) self.processes = [] for work_remote, remote, env_fn in zip(self.work_remotes, self.remotes, env_fns): args = (work_remote, remote, CloudpickleWrapper(env_fn)) # daemon=True: if the main process crashes, we should not cause things to hang process = ctx.Process(target=_worker, args=args, daemon=True) process.start() self.processes.append(process) work_remote.close() self.remotes[0].send(('get_spaces', None)) observation_space, action_space = self.remotes[0].recv() VecEnv.__init__(self, len(env_fns), observation_space, action_space)
def __init__(self, args): self.env = PepperRLEnv(args) # Assumes merged lidar # no direct obstacle positions from gym.spaces.box import Box self.observation_space = Box( low=-100., high=100., shape=(self.env.kObsBufferSize, self.env.kStateSize + self.env.kMergedScanSize), dtype=np.float32, ) VecEnv.__init__(self, self.env.n_agents(), self.observation_space, self.env.action_space) self.keys, shapes, dtypes = obs_space_info(self.observation_space) self.buf_obs = OrderedDict([(k, np.zeros( (self.num_envs, ) + tuple(shapes[k]), dtype=dtypes[k])) for k in self.keys]) self.buf_dones = np.zeros((self.num_envs, ), dtype=np.bool) self.buf_rews = np.zeros((self.num_envs, ), dtype=np.float32) self.buf_infos = [{} for _ in range(self.num_envs)] self.actions = None self.metadata = self.env.metadata
def __init__(self, args): self.envs = [None for _ in range(args.n_envs)] map2d = None tsdf = None for env_idx in range(args.n_envs): self.envs[env_idx] = PepperRLEnv(args, map_=map2d, tsdf_=tsdf) map2d = self.envs[env_idx].map2d tsdf = self.envs[env_idx].tsdf # Assumes merged lidar # no direct obstacle positions from gym.spaces.box import Box self.observation_space = Box( low=-100., high=100., shape=(self.envs[0].kObsBufferSize, self.envs[0].kStateSize + self.envs[0].kMergedScanSize), dtype=np.float32, ) VecEnv.__init__(self, len(self.envs), self.observation_space, self.envs[0].action_space) self.keys, shapes, dtypes = obs_space_info(self.observation_space) self.buf_obs = OrderedDict([(k, np.zeros( (self.num_envs, ) + tuple(shapes[k]), dtype=dtypes[k])) for k in self.keys]) self.buf_dones = np.zeros((self.num_envs, ), dtype=np.bool) self.buf_rews = np.zeros((self.num_envs, ), dtype=np.float32) self.buf_infos = [{} for _ in range(self.num_envs)] self.actions = None self.metadata = [env.metadata for env in self.envs]
def __init__(self, env_fns): self.envs = [fn() for fn in env_fns] env = self.envs[0] VecEnv.__init__(self, len(env_fns), env.observation_space, env.action_space) obs_space = env.observation_space self.keys, shapes, dtypes = obs_space_info(obs_space) self.buf_obs = OrderedDict([ (k, np.zeros((self.num_envs,) + tuple(shapes[k]), dtype=dtypes[k])) for k in self.keys]) self.buf_dones = np.zeros((self.num_envs,), dtype=np.bool) self.buf_rews = np.zeros((self.num_envs,), dtype=np.float32) self.buf_infos = [{} for _ in range(self.num_envs)] self.actions = None self.metadata = env.metadata
def __init__(self, *args): self.env = MultiIARLEnv(*args) VecEnv.__init__(self, self.env.n_envs, self.env.observation_space, self.env.action_space) obs_space = self.env.observation_space self.keys, shapes, dtypes = obs_space_info(obs_space) self.buf_obs = OrderedDict([(k, np.zeros( (self.num_envs, ) + tuple(shapes[k]), dtype=dtypes[k])) for k in self.keys]) self.buf_dones = np.zeros((self.num_envs, ), dtype=np.bool) self.buf_rews = np.zeros((self.num_envs, ), dtype=np.float32) self.buf_infos = [{} for _ in range(self.num_envs)] self.actions = None self.metadata = self.env.metadata
def __init__(self, env_fns, start_method=None): self.waiting = False self.closed = False n_envs = len(env_fns) # In some cases (like on GitHub workflow machine when running tests), # "forkserver" method results in an "connection error" (probably due to mpi) # We allow to bypass the default start method if an environment variable # is specified by the user if start_method is None: start_method = os.environ.get("DEFAULT_START_METHOD") # No DEFAULT_START_METHOD was specified, start_method may still be None if start_method is None: # Fork is not a thread safe method (see issue #217) # but is more user friendly (does not require to wrap the code in # a `if __name__ == "__main__":`) forkserver_available = 'forkserver' in multiprocessing.get_all_start_methods( ) start_method = 'forkserver' if forkserver_available else 'spawn' ctx = multiprocessing.get_context(start_method) self.remotes, self.work_remotes = zip( *[ctx.Pipe(duplex=True) for _ in range(n_envs)]) self.processes = [] for work_remote, remote, env_fn in zip(self.work_remotes, self.remotes, env_fns): args = (work_remote, remote, CloudpickleWrapper(env_fn)) # daemon=True: if the main process crashes, we should not cause things to hang process = ctx.Process(target=_worker, args=args, daemon=True) # pytype:disable=attribute-error process.start() self.processes.append(process) work_remote.close() self.remotes[0].send(('get_spaces', None)) observation_space, action_space = self.remotes[0].recv() VecEnv.__init__(self, len(env_fns), observation_space, action_space)