基本空間¶
- class gymnasium.spaces.Box(low: SupportsFloat | ndarray[tuple[Any, ...], dtype[Any]], high: SupportsFloat | ndarray[tuple[Any, ...], dtype[Any]], shape: Sequence[int] | None = None, dtype: type[floating[Any]] | type[integer[Any]] = np.float32, seed: int | Generator | None = None)[source]¶
一個 \(\mathbb{R}^n\) 中的(可能無界的)盒子。
具體來說,Box 表示 n 個閉區間的笛卡爾積。每個區間具有 \([a, b]\)、\((-\infty, b]\)、\([a, \infty)\) 或 \((-\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]]) – 形狀從 low 或 high np.ndarray`s 的形狀推斷,其中 `low 和 high 標量預設為形狀 (1,)
dtype – 空間元素的 dtype。如果這是整數型別,則
Box本質上是一個離散空間。seed – 可選引數,您可以使用此引數為用於從空間中取樣的 RNG 設定種子。
- 丟擲:
ValueError – 如果未提供形狀資訊(形狀為 None,low 為 None,high 為 None),則丟擲 ValueError。
- sample(mask: None = None, probability: None = None) ndarray[tuple[Any, ...], dtype[Any]][source]¶
在 Box 內部生成一個隨機樣本。
在建立 Box 樣本時,每個座標都根據區間的形式從選定的分佈中獨立取樣。
\([a, b]\) : 均勻分佈
\([a, \infty)\) : 移位指數分佈
\((-\infty, b]\) : 移位負指數分佈
\((-\infty, \infty)\) : 正態分佈
- 引數:
mask – 用於從 Box 空間中取樣值的掩碼,當前不支援。
probability – 用於從 Box 空間中取樣值的機率掩碼,當前不支援。
- 返回:
從 Box 中取樣的值
- seed(seed: int | None = None) int | list[int] | dict[str, int]¶
為此空間及其(如果適用)子空間的偽隨機數生成器 (PRNG) 設定種子。
- 引數:
seed – 空間的種子值。對於複合空間,此引數會擴充套件以接受多個值。有關更多詳細資訊,請參閱空間的文件。
- 返回:
用於所有 PRNG 的種子值,對於複合空間,這可以是值元組或字典。
- class gymnasium.spaces.Discrete(n: int | integer[Any], seed: int | Generator | None = None, start: int | integer[Any] = 0)[source]¶
由有限多個元素組成的空間。
此類別表示整數的有限子集,更具體地說,是形如 \(\{ a, a+1, \dots, a+n-1 \}\) 的集合。
示例
>>> from gymnasium.spaces import Discrete >>> observation_space = Discrete(2, seed=42) # {0, 1} >>> observation_space.sample() np.int64(0) >>> observation_space = Discrete(3, start=-1, seed=42) # {-1, 0, 1} >>> observation_space.sample() np.int64(-1) >>> observation_space.sample(mask=np.array([0,0,1], dtype=np.int8)) np.int64(1) >>> observation_space.sample(probability=np.array([0,0,1], dtype=np.float64)) np.int64(1) >>> observation_space.sample(probability=np.array([0,0.3,0.7], dtype=np.float64)) np.int64(1)
- 引數:
n (int) – 此空間的元素數量。
seed – 可選引數,您可以使用此引數為用於從
Dict空間中取樣的 RNG 設定種子。start (int) – 此空間的最小元素。
- sample(mask: ndarray[tuple[Any, ...], dtype[int8]] | None = None, probability: ndarray[tuple[Any, ...], dtype[int8]] | None = None) int64[source]¶
從此空間生成一個隨機樣本。
如果提供了掩碼,樣本將從均勻隨機選擇;如果提供了機率掩碼,樣本將根據指定的機率分佈選擇。
- 引數:
mask – 一個可選掩碼,用於指示是否可以選擇某個動作。期望形狀為
(n,)且 dtype 為np.int8的 np.ndarray,其中1表示有效動作,0表示無效/不可行動作。如果沒有可能的動作(即np.all(mask == 0)),則返回space.start。probability – 一個可選的機率掩碼,描述每個動作被選擇的機率。期望形狀為
(n,)且 dtype 為np.float64的 np.ndarray,其中每個值都在[0, 1]範圍內,並且所有值的總和為 1。如果值的總和不為 1,則會丟擲異常。
- 返回:
從空間中取樣的整數
- seed(seed: int | None = None) int | list[int] | dict[str, int]¶
為此空間及其(如果適用)子空間的偽隨機數生成器 (PRNG) 設定種子。
- 引數:
seed – 空間的種子值。對於複合空間,此引數會擴充套件以接受多個值。有關更多詳細資訊,請參閱空間的文件。
- 返回:
用於所有 PRNG 的種子值,對於複合空間,這可以是值元組或字典。
- class gymnasium.spaces.MultiBinary(n: ndarray[tuple[Any, ...], dtype[integer[Any]]] | Sequence[int] | int, seed: int | Generator | None = None)[source]¶
一個 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 – 可選引數,您可以使用此引數為用於從空間中取樣的 RNG 設定種子。
- sample(mask: ndarray[tuple[Any, ...], dtype[int8]] | None = None, probability: ndarray[tuple[Any, ...], dtype[int8]] | None = None) ndarray[tuple[Any, ...], dtype[int8]][source]¶
從此空間生成一個隨機樣本。
樣本透過獨立、公平的擲硬幣(空間中每個二進位制變數一次)生成。
- 引數:
mask – 一個可選的
np.ndarray,用於掩蓋樣本,期望形狀為space.shape。當mask == 0時,樣本將為0;當mask == 1時,樣本將為1。對於隨機樣本,使用掩碼值2。期望的掩碼形狀是空間形狀,掩碼 dtype 是np.int8。probability – 一個可選的
np.ndarray,用於掩蓋樣本,期望形狀為 space.shape,其中每個元素表示對應樣本元素為 1 的機率。期望的掩碼形狀是空間形狀,掩碼 dtype 是np.float64。
- 返回:
從空間中取樣的值
- seed(seed: int | None = None) int | list[int] | dict[str, int]¶
為此空間及其(如果適用)子空間的偽隨機數生成器 (PRNG) 設定種子。
- 引數:
seed – 空間的種子值。對於複合空間,此引數會擴充套件以接受多個值。有關更多詳細資訊,請參閱空間的文件。
- 返回:
用於所有 PRNG 的種子值,對於複合空間,這可以是值元組或字典。
- class gymnasium.spaces.MultiDiscrete(nvec: ndarray[tuple[Any, ...], dtype[integer[Any]]] | list[int], dtype: str | type[integer[Any]] = np.int64, seed: int | Generator | None = None, start: ndarray[tuple[Any, ...], dtype[integer[Any]]] | list[int] | None = None)[source]¶
這表示任意
Discrete空間的笛卡爾積。它對於表示遊戲控制器或鍵盤非常有用,其中每個按鍵都可以表示為一個離散動作空間。
注意
一些環境包裝器假設值 0 始終表示 NOOP 動作(無操作動作)。
例如:任天堂遊戲控制器 - 可以被概念化為 3 個離散動作空間
方向鍵:離散 5 - NOOP[0](無操作),UP[1](上),RIGHT[2](右),DOWN[3](下),LEFT[4](左) - 引數:最小:0,最大:4
A鍵:離散 2 - NOOP[0](無操作),Pressed[1](按下) - 引數:最小:0,最大:1
B鍵:離散 2 - NOOP[0](無操作),Pressed[1](按下) - 引數:最小:0,最大:1
它可以被初始化為
MultiDiscrete([ 5, 2, 2 ]),這樣樣本可能就是array([3, 1, 0])。儘管這個特性很少使用,但如果
nvec包含多個軸,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 – 可選引數,您可以使用此引數為用於從空間中取樣的 RNG 設定種子。
start – 可選引數,每個類別的元素將採用的起始值(預設為 0)。
- sample(mask: tuple[ndarray[tuple[Any, ...], dtype[int8]], ...] | None = None, probability: tuple[ndarray[tuple[Any, ...], dtype[int8]], ...] | None = None) ndarray[tuple[Any, ...], dtype[integer[Any]]][source]¶
從此空間生成一個隨機樣本。
- 引數:
mask – 多離散空間的可選掩碼,期望一個元組,其中每個動作位置都帶有一個形狀為
(n,)的np.ndarray掩碼,其中n是動作的數量,dtype=np.int8。只有mask values == 1的值才可能被取樣,除非某個動作的所有掩碼值都為0,在這種情況下會取樣預設動作self.start(最小元素)。probability – 多離散空間的可選機率掩碼,期望一個元組,其中每個動作位置都帶有一個形狀為
(n,)的np.ndarray機率掩碼,其中n是動作的數量,dtype=np.float64。只要所有值的總和為1,就只有[0,1]範圍內的機率掩碼值才可能被取樣。
- 返回:
一個
np.ndarray型別的 :meth:`Space.shape`
- seed(seed: int | None = None) int | list[int] | dict[str, int]¶
為此空間及其(如果適用)子空間的偽隨機數生成器 (PRNG) 設定種子。
- 引數:
seed – 空間的種子值。對於複合空間,此引數會擴充套件以接受多個值。有關更多詳細資訊,請參閱空間的文件。
- 返回:
用於所有 PRNG 的種子值,對於複合空間,這可以是值元組或字典。
- class gymnasium.spaces.Text(max_length: int, *, min_length: int = 1, charset: frozenset[str] | str = alphanumeric, seed: int | Generator | None = None)[source]¶
一個表示由給定字元集中的字元組成的字串的空間。
示例
>>> 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[tuple[Any, ...], dtype[int8]] | None] = None, probability: None | tuple[int | None, ndarray[tuple[Any, ...], dtype[float64] | None] = None) str[source]¶
從此空間生成一個隨機樣本,預設情況下長度在
min_length和max_length之間隨機選擇,並從charset中取樣字元。- 引數:
mask – 文字長度和掩碼的可選元組。長度期望介於
min_length和max_length之間。否則,將選擇min_length和max_length之間的隨機整數。對於掩碼,我們期望一個與傳入字元集長度相同的 numpy 陣列,且dtype == np.int8。如果字元列表掩碼全為零,則無論min_length是多少,都返回空字串。probability – 文字長度和機率掩碼的可選元組。長度期望介於
min_length和max_length之間。否則,將選擇min_length和max_length之間的隨機整數。對於機率掩碼,我們期望一個與傳入字元集長度相同的 numpy 陣列,且dtype == np.float64。機率掩碼的總和應為 1,否則會丟擲異常。
- 返回:
從空間中取樣的字串
- seed(seed: int | None = None) int | list[int] | dict[str, int]¶
為此空間及其(如果適用)子空間的偽隨機數生成器 (PRNG) 設定種子。
- 引數:
seed – 空間的種子值。對於複合空間,此引數會擴充套件以接受多個值。有關更多詳細資訊,請參閱空間的文件。
- 返回:
用於所有 PRNG 的種子值,對於複合空間,這可以是值元組或字典。