空间

此模块实现各种空间。

空间描述数学集合,并在 Gym 中用于指定有效的动作和观测。每个 Gym 环境都必须具有属性 action_spaceobservation_space。例如,如果在你的环境中可以执行三个可能的动作 (0,1,2),并且观测是在二维单位立方体中的向量,则环境代码可能包含以下两行

self.action_space = spaces.Discrete(3)
self.observation_space = spaces.Box(0, 1, shape=(2,))

所有空间都继承自 Space 超类。

class gymnasium.spaces.Space(shape: Sequence[int] | None = None, dtype: npt.DTypeLike | None = None, seed: int | np.random.Generator | None = None)[source]

用于定义观测和动作空间的超类。

空间在 Gym 中被至关重要地用于定义有效动作和观测的格式。它们服务于多种目的

  • 它们清晰地定义了如何与环境交互,即它们指定了动作应该是什么样子以及观测应该是什么样子

  • 它们允许我们处理高度结构化的数据(例如,以 Dict 空间元素的形式),并轻松地将它们转换为可用于学习代码的扁平数组

  • 它们提供了一种从空间中随机采样元素的方法。这对探索和调试特别有用。

不同的空间可以通过容器空间 (TupleDict) 层次组合以构建更具表现力的空间

警告

自定义观测和动作空间可以继承自 Space 类。但是,大多数用例应该由现有的空间类(例如 BoxDiscrete 等)和容器类 (Tuple & Dict) 来涵盖。请注意,参数化概率分布(通过 Space.sample() 方法)和批量函数(在 gym.vector.VectorEnv 中)仅针对 gym 默认提供的空间实例定义良好。此外,某些强化学习算法的实现可能无法正确处理自定义空间。请谨慎使用自定义空间。

参数:
  • shape (可选[序列[int]]) – 如果空间的元素是 numpy 数组,则应指定其形状。

  • dtype (可选[类型 | str]) – 如果空间的元素是 numpy 数组,则应指定其 dtype。

  • seed – 可选地,你可以使用此参数来为用于从空间采样的 RNG 设置种子

属性

property Space.shape: tuple[int, ...] | None

将空间的形状作为不可变属性返回。

property Space.dtype

返回此空间的数据类型。

property Space.is_np_flattenable: bool

检查此空间是否可以扁平化为 gymnasium.spaces.Box

property Space.np_random: Generator

延迟设置 PRNG 的种子,因为这很昂贵,并且只有在从此空间采样时才需要。

由于 seed() 并不保证为特定种子设置 _np_random。我们在 seed() 之后添加了一个检查来设置新的随机数生成器。

方法

每个空间都实现了以下函数

Space.sample(mask: Any | None = None) T_cov[source]

从此空间随机采样一个元素。

可以是基于空间有界性的均匀或非均匀采样。

参数:

mask – 用于采样的掩码,预期 dtype=np.int8,并且请参见采样实现以了解预期的形状。

返回:

从空间中采样的动作

Space.contains(x: Any) bool[source]

返回一个布尔值,指示 x 是否是此空间的有效成员,等效于 sample in space

Space.seed(seed: int | None = None) int | list[int] | dict[str, int][source]

为该空间的伪随机数生成器 (PRNG) 以及子空间的 PRNG(如果适用)播种。

参数:

seed – 该空间的种子值。此值将扩展以接受复合空间的多个值。有关更多详细信息,请参阅空间的文档。

返回:

用于所有 PRNG 的种子值,对于复合空间,这可以是值元组或字典。

Space.to_jsonable(sample_n: Sequence[T_cov]) list[Any][source]

将来自该空间的一批样本转换为 JSON 可序列化数据类型。

Space.from_jsonable(sample_n: list[Any]) list[T_cov][source]

将 JSON 可序列化数据类型转换为来自该空间的一批样本。

基础空间

Gymnasium 有许多基础空间,用作更复杂空间的构建块。

  • Box - 支持连续(和离散)向量或矩阵,用于向量观测、图像等

  • Discrete - 支持具有可选起始值的单个离散数值

  • MultiBinary - 支持二进制值的单个值或矩阵,用于保持按钮按下状态或代理是否拥有某个物体

  • MultiDiscrete - 支持具有多个轴的多个离散值,用于控制器操作

  • Text - 支持字符串,用于传递代理消息、任务详细信息等

复合空间

环境空间通常需要将基础空间组合在一起,以用于向量化环境、独立代理或空间的可读性。

  • Dict - 支持键和子空间的字典,用于固定数量的无序空间

  • Tuple - 支持子空间元组,用于固定数量的有序空间

  • Sequence - 支持单个子空间的可变数量的实例,用于实体空间或选择可变数量的操作

  • Graph - 支持具有离散或连续节点和边值的基于图的操作或观测

  • OneOf - 支持可选操作空间,以便操作可以是 N 个可能子空间中的一个

实用函数

Gymnasium 包含一些有用的实用函数,用于平铺和取消平铺空间。这对于将信息传递给神经网络可能很重要。

向量实用函数

向量化环境时,需要为新的批次空间大小修改观测空间和操作空间。因此,Gymnasium 提供了一些在使用具有 Vector 环境的空间时使用的附加函数。