複合空間

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 空間和子空間設定種子的整數元組。