向量化

Gymnasium.vector.VectorEnv

class gymnasium.vector.VectorEnv[原始碼]

用於並行運行同一環境的多個獨立副本的向量化環境基類。

向量化環境透過同時對多個子環境進行取樣,可以實現每秒步數的線性加速。Gymnasium 包含兩種通用向量化環境:AsyncVectorEnvSyncVectorEnv,以及若干自定義向量化環境實現。對於 reset()step(),它們會批次處理每個子環境的觀測獎勵終止截斷資訊,詳情請參見以下示例。對於獎勵終止截斷,資料被打包成形狀為 (num_envs,) 的 NumPy 陣列。對於觀測(和動作),批處理過程取決於觀測(和動作)空間的型別,通常針對神經網路的輸入/輸出進行最佳化。對於資訊,資料以字典形式儲存,其中一個鍵將提供所有子環境的資料。

為了建立環境,make_vec() 是與 make() 等效的向量環境函式,可以輕鬆建立包含多個獨特引數的向量環境,以修改環境質量、環境數量、向量化器型別和向量化器引數。

為了避免在重置之前必須等待所有子環境終止,實現在回合結束時(terminated or truncated 為 True)可以自動重置子環境。這對於正確實現向量環境的訓練演算法至關重要。預設情況下,Gymnasium 的實現使用下一步自動重置,並以 AutoresetMode 列舉作為選項。向量環境使用的模式應在 metadata["autoreset_mode"] 中可用。警告:某些向量實現或訓練演算法僅支援特定的自動重置模式。欲瞭解更多資訊,請閱讀 https://farama.org/Vector-Autoreset-Mode

注意

在 v0.25 之前,reset()step()info 引數最初是為每個子環境實現為一個字典列表。然而,在 v0.25+ 中,這被修改為每個鍵對應一個 NumPy 陣列的字典。要使用舊的 info 格式,請使用 DictInfoToList 封裝器。

示例

>>> import gymnasium as gym
>>> envs = gym.make_vec("CartPole-v1", num_envs=3, vectorization_mode="sync", wrappers=(gym.wrappers.TimeAwareObservation,))
>>> envs = gym.wrappers.vector.ClipReward(envs, min_reward=0.2, max_reward=0.8)
>>> envs
<ClipReward, SyncVectorEnv(CartPole-v1, num_envs=3)>
>>> envs.num_envs
3
>>> envs.action_space
MultiDiscrete([2 2 2])
>>> envs.observation_space
Box([[-4.80000019        -inf -0.41887903        -inf  0.        ]
 [-4.80000019        -inf -0.41887903        -inf  0.        ]
 [-4.80000019        -inf -0.41887903        -inf  0.        ]], [[4.80000019e+00            inf 4.18879032e-01            inf
  5.00000000e+02]
 [4.80000019e+00            inf 4.18879032e-01            inf
  5.00000000e+02]
 [4.80000019e+00            inf 4.18879032e-01            inf
  5.00000000e+02]], (3, 5), float64)
>>> observations, infos = envs.reset(seed=123)
>>> observations
array([[ 0.01823519, -0.0446179 , -0.02796401, -0.03156282,  0.        ],
       [ 0.02852531,  0.02858594,  0.0469136 ,  0.02480598,  0.        ],
       [ 0.03517495, -0.000635  , -0.01098382, -0.03203924,  0.        ]])
>>> infos
{}
>>> _ = envs.action_space.seed(123)
>>> actions = envs.action_space.sample()
>>> observations, rewards, terminations, truncations, infos = envs.step(actions)
>>> observations
array([[ 0.01734283,  0.15089367, -0.02859527, -0.33293587,  1.        ],
       [ 0.02909703, -0.16717631,  0.04740972,  0.3319138 ,  1.        ],
       [ 0.03516225, -0.19559774, -0.01162461,  0.25715804,  1.        ]])
>>> rewards
array([0.8, 0.8, 0.8])
>>> terminations
array([False, False, False])
>>> truncations
array([False, False, False])
>>> infos
{}
>>> envs.close()

向量環境具有以下附加屬性,供使用者理解其實現:

方法

VectorEnv.step(actions: ActType) tuple[ObsType, ArrayType, ArrayType, ArrayType, dict[str, Any]][原始碼]

對每個並行環境執行一個動作。

引數

actions – 具有 action_space 形狀的動作批次。

返回

批次 (觀測, 獎勵, 終止, 截斷, 資訊)

注意

由於向量環境會自動重置終止和截斷的子環境,這將在terminated 或 truncated 為 True之後的下一步發生。

示例

>>> import gymnasium as gym
>>> import numpy as np
>>> envs = gym.make_vec("CartPole-v1", num_envs=3, vectorization_mode="sync")
>>> _ = envs.reset(seed=42)
>>> actions = np.array([1, 0, 1], dtype=np.int32)
>>> observations, rewards, terminations, truncations, infos = envs.step(actions)
>>> observations
array([[ 0.02727336,  0.18847767,  0.03625453, -0.26141977],
       [ 0.01431748, -0.24002443, -0.04731862,  0.3110827 ],
       [-0.03822722,  0.1710671 , -0.00848456, -0.2487226 ]],
      dtype=float32)
>>> rewards
array([1., 1., 1.])
>>> terminations
array([False, False, False])
>>> terminations
array([False, False, False])
>>> infos
{}
VectorEnv.reset(*, seed: int | None = None, options: dict[str, Any] | None = None) tuple[ObsType, dict[str, Any]][原始碼]

重置所有並行環境,並返回初始觀測和資訊批次。

引數
  • seed – 環境重置的種子

  • options – 是否返回選項

返回

來自向量化環境的觀測和資訊批次。

示例

>>> import gymnasium as gym
>>> envs = gym.make_vec("CartPole-v1", num_envs=3, vectorization_mode="sync")
>>> observations, infos = envs.reset(seed=42)
>>> observations
array([[ 0.0273956 , -0.00611216,  0.03585979,  0.0197368 ],
       [ 0.01522993, -0.04562247, -0.04799704,  0.03392126],
       [-0.03774345, -0.02418869, -0.00942293,  0.0469184 ]],
      dtype=float32)
>>> infos
{}
VectorEnv.render() tuple[RenderFrame, ...] | None[原始碼]

返回並行環境的渲染幀。

返回

一個包含並行環境渲染幀的元組

VectorEnv.close(**kwargs: Any)[原始碼]

關閉所有並行環境並釋放資源。

它還會關閉所有現有的影像檢視器,然後呼叫 close_extras() 並將 closed 設定為 True

警告

此函式本身不關閉環境,環境關閉應在 close_extras() 中處理。這對於同步和異步向量化環境都是通用的。

注意

這將在垃圾回收或程式退出時自動呼叫。

引數

**kwargs – 傳遞給 close_extras() 的關鍵字引數

屬性

VectorEnv.num_envs: int

向量環境中的子環境數量。

VectorEnv.action_space: gym.Space

(批次)動作空間。step 的輸入動作必須是 action_space 的有效元素。

VectorEnv.observation_space: gym.Space

(批次)觀測空間。resetstep 返回的觀測是 observation_space 的有效元素。

VectorEnv.single_action_space: gym.Space

子環境的動作空間。

VectorEnv.single_observation_space: gym.Space

子環境的觀測空間。

VectorEnv.spec: EnvSpec | None = None

環境的 EnvSpec,通常在 gymnasium.make_vec() 期間設定

VectorEnv.metadata: dict[str, Any] = {}

環境的元資料,包含渲染模式、渲染幀率等

VectorEnv.render_mode: str | None = None

環境的渲染模式,應遵循與 Env.render_mode 相似的規範。

VectorEnv.closed: bool = False

向量環境是否已關閉。

附加方法

屬性 VectorEnv.unwrapped

返回基礎環境。

屬性 VectorEnv.np_random: Generator

返回環境的內部 _np_random,如果未設定,將使用隨機種子初始化。

返回

`np.random.Generator` 的例項

屬性 VectorEnv.np_random_seed: int | None

返回環境的內部 _np_random_seed,如果未設定,將首先使用隨機整數作為種子進行初始化。

如果 np_random_seed 是直接設定的,而不是透過 reset()set_np_random_through_seed() 設定的,則種子值將為 -1。

返回

int – 當前 np_random 的種子,如果 rng 的種子未知則為 -1

建立向量環境

為了建立向量環境,Gymnasium 提供了 gymnasium.make_vec() 作為與 gymnasium.make() 等效的函式。