空间

此模块实现了各种空间。

空间描述了数学集合,并在 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 等)和容器类(TupleDict)覆盖。请注意,参数化概率分布(通过 Space.sample() 方法)和批处理函数(在 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

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

property Space.np_random: Generator

延迟设定 PRNG 的种子,因为这很耗费资源,并且仅在从此空间采样时才需要。

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

方法

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

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

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

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

二进制掩码和概率掩码不能同时使用。

参数:
  • mask – 用于随机采样的掩码,期望 dtype=np.int8 并查看样本实现以了解期望的形状。

  • probability – 用于根据给定的概率分布进行采样的概率掩码,期望 dtype=np.float64 并查看样本实现以了解期望的形状。

返回:

从此空间采样的动作

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]

将来自此空间的样本批次转换为 JSONable 数据类型。

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

将 JSONable 数据类型转换为来自此空间的样本批次。

基本空间

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

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

  • Discrete - 支持单个离散数值,并为这些值提供可选的起始值

  • MultiBinary - 支持单个或二进制值矩阵,用于按住按钮或智能体是否拥有对象

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

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

复合空间

通常,环境空间需要将基本空间连接在一起,以用于向量化环境、分离的智能体或空间的可读性。

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

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

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

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

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

实用工具函数

Gymnasium 包含许多有用的实用工具函数,用于展平和取消展平空间。这对于将信息传递到神经网络可能很重要。

向量实用工具函数

当向量化环境时,有必要修改观测空间和动作空间以适应新的批处理空间大小。因此,Gymnasium 提供了许多在使用向量环境的空间时使用的附加函数。