空格¶
此模块实现了各种空间。
空间描述数学集合,并在 Gym 中用于指定有效动作和观察。每个 Gym 环境必须具有 action_space 和 observation_space 属性。例如,如果您的环境中可以执行三个可能的动作(0,1,2),并且观察是二维单位立方体中的向量,则环境代码可能包含以下两行::
self.action_space = spaces.Discrete(3)
self.observation_space = spaces.Box(0, 1, shape=(2,))
所有空间都继承自 :class:空间 超类。
- class gymnasium.spaces.Space(shape: Sequence[int] | None = None, dtype: dtype[Any] | None | type[Any] | _SupportsDType[dtype[Any]] | str | tuple[Any, int] | tuple[Any, SupportsIndex | Sequence[SupportsIndex]] | list[Any] | _DTypeDict | tuple[Any, Any] = None, seed: int | Generator | None = None)[源代码]¶
用于定义观察和动作空间的超类。
在 Gym 中,空格被关键性地用于定义有效动作和观察的格式。它们有多种用途:
它们清晰地定义了如何与环境交互,即它们指定了需要什么样的动作和什么样的观察结果。
它们允许我们处理高度结构化的数据(例如以 :class:
Dict空间的元素形式),并将其无痛地转换为可以在学习代码中使用的扁平数组。它们提供了一种采样随机元素的方法。这在探索和调试中特别有用。
不同的空间可以通过容器空间(:class:
Tuple和 :class:Dict)进行层次化组合,以构建更具表现力的空间。警告
自定义观察和动作空间可以继承自
Space类。然而,大多数用例应由现有的空间类(例如 :class:Box、:class:Discrete等)和容器类(:class:Tuple和 :class:Dict)覆盖。请注意,参数化概率分布(通过 :meth:Space.sample()方法)和批处理函数(在 :class:gym.vector.VectorEnv中)仅对 gym 默认提供的空间实例有明确定义。此外,某些强化学习算法的实现可能无法正确处理自定义空间。使用自定义空间时请谨慎。- 参数:
shape (Optional[Sequence[int]]) – 如果空间的元素是numpy数组,这应该指定它们的形状。
dtype (Optional[Type | str]) – 如果空间的元素是 numpy 数组,这应该指定它们的 dtype。
seed – 可选地,您可以使用此参数来初始化用于从空间中采样的随机数生成器(RNG)。
属性¶
- property Space.shape: tuple[int, ...] | None¶
返回空间的形状作为一个不可变的属性。
- property Space.dtype¶
返回此空间的数据类型。
- property Space.is_np_flattenable: bool¶
检查此空间是否可以展平为 :class:
gymnasium.spaces.Box。
- property Space.np_random: Generator¶
由于这是昂贵的操作,并且仅在从此空间采样时才需要,因此延迟初始化PRNG。
由于 :meth:
seed不能保证为特定的种子设置_np_random。我们在 :meth:seed之后添加了一个检查,以设置一个新的随机数生成器。
方法¶
每个空间实现以下功能:
- Space.sample(mask: Any | None = None) T_cov[源代码]¶
随机从这个空间中抽取一个元素。
可以根据空间的边界性进行均匀或非均匀采样。
- 参数:
mask – 用于采样的掩码,期望
dtype=np.int8,并查看示例实现以了解预期的形状。- 返回:
来自太空的采样行动
基本空间¶
Gymnasium 有多个基本空间,这些空间被用作构建更复杂空间的积木。
:class:
Box- 支持连续(和离散)向量或矩阵,用于向量观测、图像等:class:
Discrete- 支持单个离散数值,可选地为这些值提供起始值:class:
MultiBinary- 支持单个或二进制值矩阵,用于表示按下按钮或代理是否持有对象:class:
MultiDiscrete- 支持具有多个轴的多个离散值,用于控制器动作:class:
文本- 支持字符串,用于传递代理消息、任务详情等
复合空间¶
通常,环境空间需要将基本空间结合起来,以便于向量化环境、分离代理或提高空间的可读性。
:class:
Dict- 支持键和子空间的字典,用于固定数量的无序空间:class:
Tuple- 支持子空间的元组,用于固定数量的有序空间:class:
Sequence- 支持单个子空间的可变数量实例,用于实体空间或选择可变数量的动作:class:
Graph- 支持基于图的操作或观察,具有离散或连续的节点和边值:class:
OneOf- 支持可选的动作空间,使得一个动作可以是N个可能的子空间之一
实用函数¶
Gymnasium 包含了许多用于扁平化和解扁平化空间的实用函数。这对于将信息传递给神经网络非常重要。
:class:
utils.flatdim- 展平空间将包含的维度数:class:
utils.flatten_space- 展平一个空间,其 :class:utils.flattened空间实例将包含:class:
utils.flatten- 将一个包含在空间扁平化版本中的空间实例扁平化:class:
utils.unflatten- :class:utils.flatten_space函数的反向操作
向量实用函数¶
在向量化环境时,需要为新的批量空间大小修改观察和动作空间。因此,Gymnasium 提供了一些额外的函数,用于在使用向量环境时使用空间。
:class:
vector.utils.batch_space- 将一个空间转换为n个用户的等效空间:class:
vector.utils.concatenate- 将一个空间的样本连接到预生成的空间中:class:
vector.utils.iterate- 遍历批量空间的样本:class:
vector.utils.create_empty_array- 创建一个空的样本用于空间(通常与concatenate一起使用):class:
vector.utils.create_shared_memory- 为异步(多进程)环境创建共享内存:class:
vector.utils.read_from_shared_memory- 读取异步(多进程)环境中的共享内存:class:
vector.utils.write_to_shared_memory- 写入共享内存以用于异步(多进程)环境