空間

此模組實現了各種空間。

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

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

所有空間都繼承自 Space 超類。

class gymnasium.spaces.Space(shape: Sequence[int] | None = None, dtype: type[Any] | dtype[Any] | _SupportsDType[dtype[Any]] | tuple[Any, Any] | list[Any] | _DTypeDict | str | None = None, seed: int | Generator | None = None)[source]

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

空間在 Gym 中被關鍵地用於定義有效動作和觀察的格式。它們有多種用途:

  • 它們清楚地定義瞭如何與環境互動,即指定了動作和觀察的預期形式

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

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

不同的空間可以透過容器空間(TupleDict)進行分層組合,以構建更具表現力的空間

警告

自定義觀察和動作空間可以繼承自 Space 類。然而,大多數用例應該由現有空間類(例如 BoxDiscrete 等)和容器類(TupleDict)覆蓋。請注意,引數化機率分佈(透過 Space.sample() 方法)和批處理函式(在 gym.vector.VectorEnv 中)僅對 Gym 預設提供的空間例項有明確定義。此外,一些強化學習演算法的實現可能無法正確處理自定義空間。請謹慎使用自定義空間。

引數:
  • shape (可選[序列[int]]) – 如果空間元素是 numpy 陣列,則應指定其形狀。

  • dtype (可選[型別 | 字串]) – 如果空間元素是 numpy 陣列,則應指定其資料型別。

  • seed – 可選地,您可以使用此引數為用於從空間取樣的 RNG 設定種子

屬性

屬性 Space.shape: tuple[int, ...] | None

以不可變屬性的形式返回空間的形狀。

屬性 Space.dtype

返回此空間的資料型別。

屬性 Space.is_np_flattenable: bool

檢查此空間是否可以展平為 gymnasium.spaces.Box

屬性 Space.np_random: Generator

延遲為 PRNG 設定種子,因為這很昂貴,並且只有在從該空間取樣時才需要。

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

方法

每個空間都實現了以下函式

Space.sample(mask: Any | None = None, probability: Any | None = None) T_cov

從此空間隨機取樣一個元素。

可以是均勻取樣或非均勻取樣,具體取決於空間的有界性。

二進位制掩碼和機率掩碼不能同時使用。

引數:
  • mask – 用於隨機取樣的掩碼,預期 dtype=np.int8,有關預期形狀,請參閱示例實現。

  • probability – 用於根據給定機率分佈進行取樣的機率掩碼,預期 dtype=np.float64,有關預期形狀,請參閱示例實現。

返回:

從空間取樣的動作

Space.contains(x: Any) bool

返回布林值,指示 x 是否為此空間的有效成員,等同於 sample in space

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

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

引數:

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

返回:

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

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

將此空間的一批樣本轉換為可 JSON 化的資料型別。

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

將可 JSON 化的資料型別轉換為此空間的一批樣本。

基本空間

Gymnasium 包含許多基本空間,這些空間被用作構建更復雜空間的積木。

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

  • Discrete - 支援單個離散值,並可選地指定值的起始點

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

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

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

複合空間

通常,環境空間需要將基本空間連線起來,以實現向量化環境、分離智慧體或提高空間的可讀性。

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

  • Tuple - 支援子空間的元組,用於固定數量的多個有序空間

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

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

  • OneOf - 支援可選的動作空間,使得一個動作可以是 N 個可能的子空間之一

工具函式

Gymnasium 包含許多有用的工具函式,用於展平(flattening)和非展平(unflattening)空間。這對於將資訊傳遞給神經網路可能很重要。

向量工具函式

在向量化環境時,需要修改觀察和動作空間以適應新的批處理空間大小。因此,Gymnasium 提供了許多在使用空間與向量環境時使用的附加函式。