基本空间

class gymnasium.spaces.Box(low: SupportsFloat | ndarray[Any, dtype[Any]], high: SupportsFloat | ndarray[Any, dtype[Any]], shape: Sequence[int] | None = None, dtype: type[floating[Any]] | type[integer[Any]] = np.float32, seed: int | Generator | None = None)[源代码]

一个(可能是无界的)在 :math:\mathbb{R}^n 中的盒子。

具体来说,一个Box表示n个闭区间的笛卡尔积。每个区间具有以下形式之一::math:[a, b]、:math:(-\infty, b]、:math:[a, \infty) 或 :math:(-\infty, \infty)

有两种常见的使用情况:

  • 每个维度的相同边界::

    >>> Box(low=-1.0, high=2.0, shape=(3, 4), dtype=np.float32)
    Box(-1.0, 2.0, (3, 4), float32)
    
  • 每个维度的独立边界::

    >>> Box(low=np.array([-1.0, -2.0]), high=np.array([2.0, 4.0]), dtype=np.float32)
    Box([-1. -2.], [2. 4.], (2,), float32)
    
参数:
  • low (SupportsFloat | np.ndarray) – 区间的下限。如果是整数,必须至少为 -2**63

  • high (SupportsFloat | np.ndarray]) – 区间的上界。如果是整数,必须最多为 2**63 - 2

  • shape (Optional[Sequence[int]]) – 形状是从 lowhighnp.ndarray 的形状推断出来的,lowhigh 标量默认为 (1,) 的形状。

  • dtype – 空间的元素的 dtype。如果这是一个整数类型,那么 :class:Box 本质上是一个离散空间。

  • seed – 可选地,您可以使用此参数来初始化用于从空间中采样的随机数生成器。

抛出:

ValueError – 如果没有提供形状信息(shape 为 None,low 为 None 且 high 为 None),则会引发值错误。

sample(mask: None = None) ndarray[Any, dtype[Any]][源代码]

在Box内生成一个随机样本。

在创建盒子的样本时,每个坐标都是从根据区间形式选择的分布中独立采样的:

  • :math:[a, b] : 均匀分布

  • :math:[a, \infty) : 移位指数分布

  • :math:(-\infty, b] : 偏移负指数分布

  • :math:(-\infty, \infty) : 正态分布

参数:

mask – 从 Box 空间采样值的掩码,目前不支持。

返回:

从Box中采样的值

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

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

参数:

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

返回:

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

is_bounded(manner: str = 'both') bool[源代码]

检查盒子在某种意义上是否被限制。

参数:

manner (str) – "both""below""above" 之一。

返回:

如果空间是有限的

抛出:

ValueError – 如果 manner 既不是 "both" 也不是 "below""above"

class gymnasium.spaces.Discrete(n: int | integer[Any], seed: int | Generator | None = None, start: int | integer[Any] = 0)[源代码]

一个由有限多个元素组成的集合。

这个类表示一个整数的有限子集,更具体地说,是一个形如 :math:\{ a, a+1, \dots, a+n-1 \} 的集合。

示例

>>> from gymnasium.spaces import Discrete
>>> observation_space = Discrete(2, seed=42) # {0, 1}
>>> observation_space.sample()
0
>>> observation_space = Discrete(3, start=-1, seed=42)  # {-1, 0, 1}
>>> observation_space.sample()
-1
参数:
  • n (int) – 这个空间中元素的数量。

  • seed – 可选地,您可以使用此参数来初始化用于从 Dict 空间采样的随机数生成器(RNG)。

  • start (int) – 这个空间的最小元素。

sample(mask: ndarray[Any, dtype[int8]] | None = None) int64[源代码]

从此空间生成一个随机样本。

如果提供了掩码,将随机均匀地选择一个样本

参数:

mask – 一个可选的掩码,用于指示是否可以选择某个动作。预期的 np.ndarray 形状为 (n,) 且数据类型为 np.int8,其中 1 表示有效动作,0 表示无效或不可行动作。如果没有可能的动作(即 np.all(mask == 0)),则将返回 space.start

返回:

从空间中采样的整数

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

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

参数:

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

返回:

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

class gymnasium.spaces.MultiBinary(n: ndarray[Any, dtype[integer[Any]]] | Sequence[int] | int, seed: int | Generator | None = None)[源代码]

一个 n 形二进制空间。

此空间中的元素是形状在构造期间固定的二进制数组。

示例

>>> from gymnasium.spaces import MultiBinary
>>> observation_space = MultiBinary(5, seed=42)
>>> observation_space.sample()
array([1, 0, 1, 0, 1], dtype=int8)
>>> observation_space = MultiBinary([3, 2], seed=42)
>>> observation_space.sample()
array([[1, 0],
       [1, 0],
       [1, 1]], dtype=int8)
参数:
  • n – 这将修复空间元素的形状。它可以是一个整数(如果空间是平坦的),或者某种序列(元组、列表或 np.ndarray)如果有多轴的话。

  • seed – 可选地,您可以使用此参数来初始化用于从空间中采样的随机数生成器。

sample(mask: ndarray[Any, dtype[int8]] | None = None) ndarray[Any, dtype[int8]][源代码]

从此空间生成一个随机样本。

通过独立、公平的抛硬币(每个二进制变量的空间抛一次)来抽取样本。

参数:

mask – 一个可选的 np.ndarray 用于屏蔽样本,预期形状为 space.shape。对于 mask == 0,样本将为 0,而对于 mask == 1,将生成随机样本。预期的掩码形状是空间形状,掩码 dtype 为 np.int8

返回:

来自太空的采样值

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

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

参数:

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

返回:

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

class gymnasium.spaces.MultiDiscrete(nvec: ndarray[Any, dtype[integer[Any]]] | list[int], dtype: str | type[integer[Any]] = np.int64, seed: int | Generator | None = None, start: ndarray[Any, dtype[integer[Any]]] | list[int] | None = None)[源代码]

这表示任意 :class:离散 空间的笛卡尔积。

在表示游戏控制器或键盘时非常有用,其中每个按键都可以表示为一个离散的动作空间。

备注

一些环境包装器假设值0始终代表NOOP动作。

例如,任天堂游戏控制器 - 可以概念化为 3 个离散的动作空间:

  1. 方向键: 离散 5 - NOOP[0], 上[1], 右[2], 下[3], 左[4] - 参数: 最小值: 0, 最大值: 4

  2. 按钮 A: 离散 2 - 无操作[0], 按下[1] - 参数: 最小值: 0, 最大值: 1

  3. 按钮 B: 离散 2 - 无操作[0], 按下[1] - 参数: 最小值: 0, 最大值: 1

它可以被初始化为 MultiDiscrete([ 5, 2, 2 ]) ,这样样本可能是 array([3, 1, 0])

尽管这个功能很少使用,但如果 nvec 有多个轴,:class:MultiDiscrete 空间也可能有多个轴:

示例

>>> from gymnasium.spaces import MultiDiscrete
>>> import numpy as np
>>> observation_space = MultiDiscrete(np.array([[1, 2], [3, 4]]), seed=42)
>>> observation_space.sample()
array([[0, 0],
       [2, 2]])
参数:
  • nvec – 每个分类变量的计数向量。这通常是一个整数列表。然而,如果你希望空间有多个轴,你也可以传递一个更复杂的 numpy 数组。

  • dtype – 这应该是一种整数类型。

  • seed – 可选地,您可以使用此参数来初始化用于从空间中采样的随机数生成器。

  • start – 可选地,每个类的元素将采用的起始值(默认为0)。

sample(mask: tuple[ndarray[Any, dtype[int8]], ...] | None = None) ndarray[Any, dtype[integer[Any]]][源代码]

生成此空间中的单个随机样本。

参数:

mask – 一个可选的掩码用于多离散动作,期望元组中每个动作位置包含一个形状为 (n,)np.ndarray 掩码,其中 n 是动作的数量,且 dtype=np.int8。只有 掩码值 == 1 的动作是可能被采样的,除非某个动作的所有掩码值都是 0,此时将采样默认动作 self.start(最小的元素)。

返回:

一个 :meth:Space.shapenp.ndarray

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

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

参数:

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

返回:

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

class gymnasium.spaces.Text(max_length: int, *, min_length: int = 1, charset: frozenset[str] | str = alphanumeric, seed: int | Generator | None = None)[源代码]

一个代表由给定字符集中的字符组成的字符串的空间。

示例

>>> from gymnasium.spaces import Text
>>> # {"", "B5", "hello", ...}
>>> Text(5)
Text(1, 5, charset=0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz)
>>> # {"0", "42", "0123456789", ...}
>>> import string
>>> Text(min_length = 1,
...      max_length = 10,
...      charset = string.digits)
Text(1, 10, charset=0123456789)
参数:
  • min_length (int) – 最小文本长度(以字符为单位)。默认为1以防止空字符串。

  • max_length (int) – 最大文本长度(以字符为单位)。

  • charset (Union[set], str) – 字符集,默认为小写和大写英文字母加上拉丁数字。

  • seed – 从空间中采样的种子。

sample(mask: None | tuple[int | None, ndarray[Any, dtype[int8]] | None] = None) str[源代码]

通过默认在 min_lengthmax_length 之间随机生成一个长度,并从 charset 中采样,生成此空间中的一个随机样本。

参数:

mask – 一个可选的元组,包含文本的长度和掩码。长度应在 min_lengthmax_length 之间,否则将在 min_lengthmax_length 之间选择一个随机整数。对于掩码,我们期望一个与传递的字符集长度相同的 numpy 数组,且 dtype == np.int8。如果字符列表掩码全为零,则无论 min_length 如何,都将返回一个空字符串。

返回:

从太空采样的字符串

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

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

参数:

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

返回:

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