基本空間

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]]) – 形狀從 lowhigh np.ndarray`s 的形狀推斷,其中 `lowhigh 標量預設為形狀 (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 的種子值,對於複合空間,這可以是值元組或字典。

is_bounded(manner: str = 'both') bool[source]

檢查 Box 是否在某種意義上是有界的。

引數:

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)[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.int8np.ndarray,其中 1 表示有效動作,0 表示無效/不可行動作。如果沒有可能的動作(即 np.all(mask == 0)),則返回 space.start

  • probability – 一個可選的機率掩碼,描述每個動作被選擇的機率。期望形狀為 (n,) 且 dtype 為 np.float64np.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 個離散動作空間

  1. 方向鍵:離散 5 - NOOP[0](無操作),UP[1](上),RIGHT[2](右),DOWN[3](下),LEFT[4](左) - 引數:最小:0,最大:4

  2. A鍵:離散 2 - NOOP[0](無操作),Pressed[1](按下) - 引數:最小:0,最大:1

  3. 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_lengthmax_length 之間隨機選擇,並從 charset 中取樣字元。

引數:
  • mask – 文字長度和掩碼的可選元組。長度期望介於 min_lengthmax_length 之間。否則,將選擇 min_lengthmax_length 之間的隨機整數。對於掩碼,我們期望一個與傳入字元集長度相同的 numpy 陣列,且 dtype == np.int8。如果字元列表掩碼全為零,則無論 min_length 是多少,都返回空字串。

  • probability – 文字長度和機率掩碼的可選元組。長度期望介於 min_lengthmax_length 之間。否則,將選擇 min_lengthmax_length 之間的隨機整數。對於機率掩碼,我們期望一個與傳入字元集長度相同的 numpy 陣列,且 dtype == np.float64。機率掩碼的總和應為 1,否則會丟擲異常。

返回:

從空間中取樣的字串

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

為此空間及其(如果適用)子空間的偽隨機數生成器 (PRNG) 設定種子。

引數:

seed – 空間的種子值。對於複合空間,此引數會擴充套件以接受多個值。有關更多詳細資訊,請參閱空間的文件。

返回:

用於所有 PRNG 的種子值,對於複合空間,這可以是值元組或字典。