Spaces

此模組實作了各種空間。

Spaces 描述數學集合,並在 Gym 中用於指定有效的動作和觀察。每個 Gym 環境都必須具有 action_spaceobservation_space 屬性。例如,如果您的環境中可以執行三種可能的動作 (0,1,2),並且觀察是二維單位立方體中的向量,則環境程式碼可能包含以下兩行

self.action_space = spaces.Discrete(3)
self.observation_space = spaces.Box(0, 1, shape=(2,))

所有 space 都繼承自 Space 父類別。

class gymnasium.spaces.Space(shape: Sequence[int] | None = None, dtype: npt.DTypeLike | None = None, seed: int | np.random.Generator | None = None)[原始碼]

用於定義觀察和動作空間的父類別。

Spaces 在 Gym 中至關重要,用於定義有效動作和觀察的格式。它們有多種用途

  • 它們清楚地定義了如何與環境互動,即它們指定了動作應該是什麼樣子,以及觀察結果將會是什麼樣子

  • 它們讓我們能夠處理高度結構化的資料(例如,以 Dict space 元素的形式),並輕鬆地將其轉換為可用於學習程式碼的平面陣列

  • 它們提供了一種採樣隨機元素的方法。這對於探索和偵錯特別有用。

不同的 space 可以透過容器 space (TupleDict) 以階層方式組合,以建立更具表現力的 space

警告

自訂觀察和動作 space 可以繼承自 Space 類別。但是,大多數使用案例應由現有的 space 類別(例如 BoxDiscrete 等)和容器類別(TupleDict)涵蓋。請注意,參數化機率分佈(透過 Space.sample() 方法)和批次處理函數(在 gym.vector.VectorEnv 中)僅針對預設在 gym 中提供的 space 實例明確定義。此外,某些強化學習演算法的實作可能無法正確處理自訂 space。請謹慎使用自訂 space。

參數:
  • shape (Optional[Sequence[int]]) – 如果 space 的元素是 numpy 陣列,則應指定其形狀。

  • dtype (Optional[Type | str]) – 如果 space 的元素是 numpy 陣列,則應指定其 dtype。

  • seed – (可選)您可以使用此引數為用於從 space 採樣的 RNG 設定種子

屬性

property Space.shape: tuple[int, ...] | None

以不可變屬性傳回 space 的形狀。

property Space.dtype

傳回此 space 的資料類型。

property Space.is_np_flattenable: bool

檢查此 space 是否可以扁平化為 gymnasium.spaces.Box

property Space.np_random: Generator

延遲設定 PRNG 的種子,因為這很耗費資源,而且只有在從此 space 採樣時才需要。

由於 seed() 無法保證為特定種子設定 _np_random。我們在 seed() 之後新增檢查,以設定新的隨機數字產生器。

方法

每個 space 都實作了以下函數

Space.sample(mask: Any | None = None, probability: Any | None = None) T_cov[原始碼]

隨機採樣此 space 的元素。

可以根據 space 的邊界進行均勻或非均勻採樣。

二進位遮罩和機率遮罩不能同時使用。

參數:
  • mask – 用於隨機採樣的遮罩,預期 dtype=np.int8,並參閱樣本實作以了解預期的形狀。

  • probability – 用於根據給定的機率分佈進行採樣的機率遮罩,預期 dtype=np.float64,並參閱樣本實作以了解預期的形狀。

傳回:

從 space 採樣的動作

Space.contains(x: Any) bool[原始碼]

傳回布林值,指定 x 是否為此 space 的有效成員,相當於 sample in space

Space.seed(seed: int | None = None) int | list[int] | dict[str, int][原始碼]

為此 space 的虛擬隨機數字產生器 (PRNG) 以及(如果適用)子 space 的 PRNG 設定種子。

參數:

seed – space 的種子值。這會針對複合 space 擴展以接受多個值。如需更多詳細資訊,請參閱 space 的文件。

傳回:

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

Space.to_jsonable(sample_n: Sequence[T_cov]) list[Any][原始碼]

將此 space 的一批樣本轉換為可 JSON 化的資料類型。

Space.from_jsonable(sample_n: list[Any]) list[T_cov][原始碼]

將可 JSON 化的資料類型轉換為此 space 的一批樣本。

基本 Spaces

Gymnasium 有許多基本 space,可用作更複雜 space 的建構塊。

  • Box - 支援連續(和離散)向量或矩陣,用於向量觀察、影像等

  • Discrete - 支援單個離散數值,並可選擇數值的起始值

  • MultiBinary - 支援單個或二進位值的矩陣,用於按住按鈕或智能體是否具有物件

  • MultiDiscrete - 支援具有多個軸的多個離散值,用於控制器動作

  • Text - 支援字串,用於傳遞智能體訊息、任務詳細資訊等

複合 Spaces

通常,環境 space 需要將基本 space 連接在一起,以用於向量化環境、獨立智能體或 space 的可讀性。

  • Dict - 支援鍵和子 space 的字典,用於固定數量的無序 space

  • Tuple - 支援子 space 的組,用於固定數量的有序 space

  • Sequence - 支援單個子 space 的可變數量實例,用於實體 space 或選擇可變數量的動作

  • Graph - 支援基於圖形的動作或觀察,具有離散或連續節點和邊緣值

  • OneOf - 支援可選的動作 space,以便動作可以是 N 個可能的子 space 之一

實用函數

Gymnasium 包含許多有用的實用函數,用於扁平化和取消扁平化 space。這對於將資訊傳遞到神經網路可能很重要。

向量實用函數

當向量化環境時,有必要修改觀察和動作 space 以獲得新的批次 space 大小。因此,Gymnasium 提供了許多在使用向量環境的 space 時使用的額外函數。