複合空間¶
- 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動作。- 引數:
- 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))
- 引數:
- 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]¶
生成一個包含
1到10個節點、從圖中取樣的單個樣本圖。- 引數:
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 空間和子空間設定種子的整數元組。