空格

此模块实现了各种空间。

空间描述数学集合,并在 Gym 中用于指定有效动作和观察。每个 Gym 环境必须具有 action_spaceobservation_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 ,并查看示例实现以了解预期的形状。

返回:

来自太空的采样行动

Space.contains(x: Any) bool[源代码]

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

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

为这个空间的伪随机数生成器(PRNG)播种,如果适用,也为子空间的PRNG播种。

参数:

seed – 空间的种子值。对于复合空间,这会被扩展以接受多个值。更多详情,请参阅空间的文档。

返回:

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

Space.to_jsonable(sample_n: Sequence[T_cov]) list[Any][源代码]

将此空间中的一批样本转换为可JSON化的数据类型。

Space.from_jsonable(sample_n: list[Any]) list[T_cov][源代码]

将可JSON化的数据类型转换为此空间的批量样本。

基本空间

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 - 写入共享内存以用于异步(多进程)环境