SyncVectorEnv

class gymnasium.vector.SyncVectorEnv(env_fns: Iterator[Callable[[], Env]] | Sequence[Callable[[], Env]], copy: bool = True, observation_mode: str | Space = 'same', autoreset_mode: str | AutoresetMode = AutoresetMode.NEXT_STEP)[source]

串行运行多个环境的向量化环境。

示例

>>> import gymnasium as gym
>>> envs = gym.make_vec("Pendulum-v1", num_envs=2, vectorization_mode="sync")
>>> envs
SyncVectorEnv(Pendulum-v1, num_envs=2)
>>> envs = gym.vector.SyncVectorEnv([
...     lambda: gym.make("Pendulum-v1", g=9.81),
...     lambda: gym.make("Pendulum-v1", g=1.62)
... ])
>>> envs
SyncVectorEnv(num_envs=2)
>>> obs, infos = envs.reset(seed=42)
>>> obs
array([[-0.14995256,  0.9886932 , -0.12224312],
       [ 0.5760367 ,  0.8174238 , -0.91244936]], dtype=float32)
>>> infos
{}
>>> _ = envs.action_space.seed(42)
>>> actions = envs.action_space.sample()
>>> obs, rewards, terminates, truncates, infos = envs.step(actions)
>>> obs
array([[-0.1878752 ,  0.98219293,  0.7695615 ],
       [ 0.6102389 ,  0.79221743, -0.8498053 ]], dtype=float32)
>>> rewards
array([-2.96562607, -0.99902063])
>>> terminates
array([False, False])
>>> truncates
array([False, False])
>>> infos
{}
>>> envs.close()
参数:
  • env_fns – 可调用函数的可迭代对象,用于创建环境。

  • copy – 如果为 True,则 reset()step() 方法返回观测的副本。

  • observation_mode – 定义环境观测空间应如何批量处理。'same' 定义应有 n 个相同空间的副本。'different' 定义可以有多个观测空间,它们长度相同但高/低值不同,可以批量处理。传递 Space 对象允许用户设置 'same' 或 'different' 未涵盖的自定义观测空间模式。

  • autoreset_mode – 使用的自动重置模式,更多信息请参阅 https://farama.org/Vector-Autoreset-Mode

抛出:

RuntimeError – 如果某些子环境的观测空间与 observation_space 不匹配(或者,默认情况下,与第一个子环境的观测空间不匹配)。

reset(*, seed: int | list[int | None] | None = None, options: dict[str, Any] | None = None) tuple[ObsType, dict[str, Any]][source]

重置每个子环境并将结果合并。

参数:
  • seed – 用于重置子环境的种子,可以是: * None - 所有环境的随机种子 * int - [seed, seed+1, ..., seed+n] * int 列表 - [1, 2, 3, ..., n]

  • options – 用于每个子环境的选项信息。

返回:

每个子环境的合并观测和信息。

step(actions: ActType) tuple[ObsType, ArrayType, ArrayType, ArrayType, dict[str, Any]][source]

逐步执行每个环境并返回批量结果。

返回:

批量环境步进结果。

close(**kwargs: Any)

关闭所有并行环境并释放资源。

它还会关闭所有现有的图像查看器,然后调用 close_extras() 并将 closed 设置为 True

警告

此函数本身不关闭环境,应在 close_extras() 中处理。这对于同步和异步向量化环境都是通用的。

注意

当垃圾回收或程序退出时,此函数将自动调用。

参数:

**kwargs – 传递给 close_extras() 的关键字参数。

call(name: str, *args: Any, **kwargs: Any) tuple[Any, ...][source]

调用一个带有 name 的子环境方法,并应用 argskwargs

参数:
  • name – 方法名称。

  • *args – 方法参数。

  • **kwargs – 方法关键字参数。

返回:

结果元组。

get_attr(name: str) tuple[Any, ...][source]

从每个并行环境获取一个属性。

参数:

name (str) – 要从每个独立环境获取的属性名称。

返回:

带有 name 的属性。

set_attr(name: str, values: list[Any] | tuple[Any, ...] | Any)[source]

设置子环境的一个属性。

参数:
  • name – 要更改的属性名称。

  • values – 要设置的属性值。如果 values 是列表或元组,则它对应于每个独立环境的值;否则,将为所有环境设置单个值。

抛出:

ValueErrorvalues 必须是列表或元组,其长度等于环境数量。

附加方法

property SyncVectorEnv.np_random: tuple[Generator, ...]

返回封装环境的 NumPy 伪随机数生成器元组。

property SyncVectorEnv.np_random_seed: tuple[int, ...]

返回封装环境的 NumPy 随机种子元组。