复合空间

class gymnasium.spaces.Dict(spaces: None | dict[str, Space] | Sequence[tuple[str, Space]] = None, seed: dict | int | Generator | None = None, **spaces_kwargs: Space)[source]

Space 实例的字典。

此空间的元素是构成空间的元素的(有序)字典。

示例

>>> from gymnasium.spaces import Dict, Box, Discrete
>>> observation_space = Dict({"position": Box(-1, 1, shape=(2,)), "color": Discrete(3)}, seed=42)
>>> observation_space.sample()
{'color': np.int64(0), 'position': array([-0.3991573 ,  0.21649833], dtype=float32)}

带有嵌套字典

>>> from gymnasium.spaces import Box, Dict, Discrete, MultiBinary, MultiDiscrete
>>> Dict(  
...     {
...         "ext_controller": MultiDiscrete([5, 2, 2]),
...         "inner_state": Dict(
...             {
...                 "charge": Discrete(100),
...                 "system_checks": MultiBinary(10),
...                 "job_status": Dict(
...                     {
...                         "task": Discrete(5),
...                         "progress": Box(low=0, high=100, shape=()),
...                     }
...                 ),
...             }
...         ),
...     }
... )

如果你想让复杂的观测或动作更易读,使用 Dict 空间会很方便。通常,无法直接在学习代码中使用此空间的元素。但是,你可以通过使用 gymnasium.wrappers.FlattenObservation 包装器,轻松将 Dict 观测转换为扁平数组。可以实现类似的包装器来处理 Dict 动作。

参数:
  • spaces – 空间的字典。这指定了 Dict 空间的结构。

  • seed – 可选参数,你可以使用此参数来为构成 Dict 空间的随机数生成器 (RNG) 设置种子。

  • **spaces_kwargs – 如果 spacesNone,你需要将构成空间作为关键字参数传入,如上所述。

sample(mask: dict[str, Any] | None = None, probability: dict[str, Any] | None = None) dict[str, Any][source]

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

样本是构成空间的独立样本的有序字典。

参数:
  • mask – 各个子空间的(可选)掩码,期望与空间具有相同的键。

  • probability – 各个子空间的(可选)概率掩码,期望与空间具有相同的键。

返回:

一个字典,其中包含与 :attr:`self.spaces` 相同的键和采样的值。

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

为此空间和所有子空间的伪随机数生成器 (PRNG) 设置种子。

根据种子的类型,子空间将以不同的方式设置种子。

  • None - 所有子空间都将使用随机初始种子。

  • Int - 该整数用于为 Dict 空间设置种子,该空间用于为每个子空间生成种子值。警告:这不保证所有子空间的种子都是唯一的,尽管这种情况极不可能发生。

  • Dict - 一个包含每个子空间种子的字典,要求每个子空间都有一个种子键。这支持多个复合子空间的种子设置(例如 Dict["space": Dict[...], ...] 配合 {"space": {...}, ...})。

参数:

seed – 一个可选的整数或子空间键到整数的字典,用于为每个伪随机数生成器 (PRNG) 设置种子。详情请见上文。

返回:

子空间种子值的字典。

class gymnasium.spaces.Tuple(spaces: Iterable[Space[Any]], seed: int | Sequence[int] | Generator | None = None)[source]

Space 实例的元组(更精确地说:笛卡尔积)。

此空间的元素是构成空间的元素的元组。

示例

>>> from gymnasium.spaces import Tuple, Box, Discrete
>>> observation_space = Tuple((Discrete(2), Box(-1, 1, shape=(2,))), seed=42)
>>> observation_space.sample()
(np.int64(0), array([-0.3991573 ,  0.21649833], dtype=float32))
参数:
  • spaces (Iterable[Space]) – 参与笛卡尔积的空间。

  • seed – 可选参数,你可以使用此参数为 spaces 的随机数生成器 (RNG) 设置种子,以确保可复现的采样。

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

在此空间内生成单个随机样本。

此方法从子空间中抽取独立样本。

参数:
  • mask – 一个可选的元组,其中包含每个子空间样本的可选掩码,期望与空间具有相同数量的掩码。

  • probability – 一个可选的元组,其中包含每个子空间样本的可选概率掩码,期望与空间具有相同数量的概率掩码。

返回:

子空间样本的元组。

seed(seed: int | Sequence[int] | None = None) tuple[int, ...][source]

为此空间和所有子空间的伪随机数生成器 (PRNG) 设置种子。

根据种子的类型,子空间将以不同的方式设置种子。

  • None - 所有子空间都将使用随机初始种子。

  • Int - 该整数用于为 Tuple 空间设置种子,该空间用于为每个子空间生成种子值。警告:这不保证所有子空间的种子都是唯一的。

  • List / Tuple - 用于为子空间设置种子的值。这允许为多个复合子空间设置种子,例如 [42, 54, ...]

参数:

seed – 一个可选的整数列表或整数,用于为(子)空间设置种子。

返回:

所有子空间种子值的元组。

class gymnasium.spaces.Sequence(space: Space[Any], seed: int | Generator | None = None, stack: bool = False)[source]

此空间表示有限长度序列的集合。

此空间表示形式为 \((a_0, \dots, a_n)\) 的元组集合,其中 \(a_i\) 属于在初始化期间指定的某个空间,且整数 \(n\) 不是固定的。

示例

>>> from gymnasium.spaces import Sequence, Box
>>> observation_space = Sequence(Box(0, 1), seed=0)
>>> observation_space.sample()
(array([0.6822636], dtype=float32), array([0.18933342], dtype=float32), array([0.19049619], dtype=float32))
>>> observation_space.sample()
(array([0.83506], dtype=float32), array([0.9053838], dtype=float32), array([0.5836242], dtype=float32), array([0.63214064], dtype=float32))
堆叠观测的示例
>>> observation_space = Sequence(Box(0, 1), stack=True, seed=0)
>>> observation_space.sample()
array([[0.6822636 ],
       [0.18933342],
       [0.19049619]], dtype=float32)
参数:
  • space – 此空间表示的序列中的元素必须属于此空间。

  • seed – 可选参数,你可以使用此参数为用于从空间中采样的随机数生成器 (RNG) 设置种子。

  • stack – 如果为 True,则结果样本将被堆叠。

sample(mask: None | tuple[None | int | ndarray[tuple[Any, ...], dtype[integer]], Any] = None, probability: None | tuple[None | int | ndarray[tuple[Any, ...], dtype[integer]], Any] = None) tuple[Any] | Any[source]

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

参数:
  • mask

    一个可选的掩码,用于(可选地)序列的长度和(可选地)序列中的值。如果你指定 mask,它应是一个形如 (length_mask, sample_mask) 的元组,其中 length_mask

    • None - 长度将从几何分布中随机抽取。

    • int - 固定长度。

    • np.ndarray 的整数 - 采样序列的长度从此数组中随机抽取。

    元组 sample_mask 的第二个元素指定了特征空间将如何采样。根据使用掩码还是概率,这将影响所使用的参数。

  • probability – 参见上面的掩码描述,唯一的区别在于特征空间的 sample_mask 是概率而不是掩码。

返回:

一个随机长度的元组,其中包含从 :attr:`feature_space` 中随机采样的元素。

seed(seed: int | tuple[int, int] | None = None) tuple[int, int][source]

为序列空间和特征空间的伪随机数生成器 (PRNG) 设置种子。

根据种子的类型,子空间将以不同的方式设置种子。

  • None - 所有子空间都将使用随机初始种子。

  • Int - 该整数用于为 Sequence 空间设置种子,该空间用于为特征空间生成种子值。

  • Tuple of ints - 用于 Sequence 和特征空间的元组。

参数:

seed – 一个可选的整数或整数元组,用于为伪随机数生成器 (PRNG) 设置种子。详情请见上文。

返回:

序列和特征空间的种子值元组。

class gymnasium.spaces.Graph(node_space: Box | Discrete, edge_space: None | Box | Discrete, seed: int | Generator | None = None)[source]

一个表示图信息的空间,其中 nodes 通过 edges 连接,连接方式由一系列 edge_links 所表示的邻接矩阵决定。

示例

>>> from gymnasium.spaces import Graph, Box, Discrete
>>> observation_space = Graph(node_space=Box(low=-100, high=100, shape=(3,)), edge_space=Discrete(3), seed=123)
>>> observation_space.sample(num_nodes=4, num_edges=8)
GraphInstance(nodes=array([[ 36.47037 , -89.235794, -55.928024],
       [-63.125637, -64.81882 ,  62.4189  ],
       [ 84.669   , -44.68512 ,  63.950912],
       [ 77.97854 ,   2.594091, -51.00708 ]], dtype=float32), edges=array([2, 0, 2, 1, 2, 0, 2, 1]), edge_links=array([[3, 0],
       [0, 0],
       [0, 1],
       [0, 2],
       [1, 0],
       [1, 0],
       [0, 1],
       [0, 2]], dtype=int32))
参数:
  • node_space (Union[Box, Discrete]) – 节点特征的空间。

  • edge_space (Union[None, Box, Discrete]) – 边特征的空间。

  • seed – 可选参数,你可以使用此参数为用于从空间中采样的随机数生成器 (RNG) 设置种子。

sample(mask: None | tuple[ndarray[tuple[Any, ...], dtype[Any]] | tuple[Any, ...] | None, ndarray[tuple[Any, ...], dtype[Any]] | tuple[Any, ...] | None] = None, probability: None | tuple[ndarray[tuple[Any, ...], dtype[Any]] | tuple[Any, ...] | None, ndarray[tuple[Any, ...], dtype[Any]] | tuple[Any, ...] | None] = None, num_nodes: int = 10, num_edges: int | None = None) GraphInstance[source]

生成一个包含 110 个节点、从图中采样的单个样本图。

参数:
  • mask – 一个可选的元组,包含可选的节点和边掩码,这仅适用于离散空间(Box 空间不支持样本掩码)。如果未提供 num_edges,则 edge_mask 将乘以边的数量。

  • probability – 一个可选的元组,包含可选的节点和边概率掩码,这仅适用于离散空间(Box 空间不支持样本概率掩码)。如果未提供 num_edges,则 edge_mask 将乘以边的数量。

  • num_nodes – 将要采样的节点数量,默认是 10 个节点。

  • num_edges – 一个可选的边数量,否则,将是 0\(num_nodes^2\) 之间的随机数。

返回:

一个 :class:`GraphInstance`,具有 `.nodes`、`.edges` 和 `.edge_links` 属性。

seed(seed: int | tuple[int, int] | tuple[int, int, int] | None = None) tuple[int, int] | tuple[int, int, int][source]

为此空间和节点/边子空间的伪随机数生成器 (PRNG) 设置种子。

根据种子的类型,子空间将以不同的方式设置种子。

  • None - 根、节点和边空间的伪随机数生成器 (PRNG) 会被随机初始化。

  • Int - 该整数用于为 Graph 空间设置种子,该空间用于为节点和边子空间生成种子值。

  • Tuple[int, int] - 用特定值种子化 Graph 和节点子空间。仅当未指定边子空间时。

  • Tuple[int, int, int] - 用特定值种子化 Graph、节点和边子空间。

参数:

seed – 一个可选的整数或整数元组,用于此空间和节点/边子空间。详情请见上文。

返回:

一个包含两个或三个整数的元组,取决于是否指定了边子空间。

class gymnasium.spaces.OneOf(spaces: Iterable[Space[Any]], seed: int | Sequence[int] | Generator | None = None)[source]

Space 实例的互斥元组(更精确地说:直和)。

此空间的元素是构成空间之一的元素。

示例

>>> from gymnasium.spaces import OneOf, Box, Discrete
>>> observation_space = OneOf((Discrete(2), Box(-1, 1, shape=(2,))), seed=123)
>>> observation_space.sample()  # the first element is the space index (Discrete in this case) and the second element is the sample from Discrete
(np.int64(0), np.int64(0))
>>> observation_space.sample()  # this time the Box space was sampled as index=1
(np.int64(1), array([-0.00711833, -0.7257502 ], dtype=float32))
>>> observation_space[0]
Discrete(2)
>>> observation_space[1]
Box(-1.0, 1.0, (2,), float32)
>>> len(observation_space)
2
参数:
  • spaces (Iterable[Space]) – 参与笛卡尔积的空间。

  • seed – 可选参数,你可以使用此参数为 spaces 的随机数生成器 (RNG) 设置种子,以确保可复现的采样。

sample(mask: tuple[Any | None, ...] | None = None, probability: tuple[Any | None, ...] | None = None) tuple[int, Any][source]

在此空间内生成单个随机样本。

此方法从子空间中抽取独立样本。

参数:
  • mask – 一个可选的元组,其中包含每个子空间样本的可选掩码,期望与空间具有相同数量的掩码。

  • probability – 一个可选的元组,其中包含每个子空间样本的可选概率掩码,期望与空间具有相同数量的概率掩码。

返回:

子空间样本的元组。

seed(seed: int | tuple[int, ...] | None = None) tuple[int, ...][source]

为此空间和所有子空间的伪随机数生成器 (PRNG) 设置种子。

根据种子的类型,子空间将以不同的方式设置种子。

  • None - 所有子空间都将使用随机初始种子。

  • Int - 该整数用于为 Tuple 空间设置种子,该空间用于为每个子空间生成种子值。警告:这不保证所有子空间的种子都是唯一的。

  • Tuple[int, ...] - 用于为子空间设置种子的值,第一个值用于为 OneOf 设置种子,后续值用于为子空间设置种子。这允许为多个复合子空间设置种子,例如 [42, 54, ...]

参数:

seed – 一个可选的整数或整数元组,用于为 OneOf 空间和子空间设置种子。详情请见上文。

返回:

用于为 OneOf 空间和子空间设置种子的整数元组。