Wrappers¶
Wrappers 是一種修改現有環境的便捷方式,無需直接更改底層程式碼。
使用 wrappers 可以讓您避免大量重複程式碼,並使您的環境更模組化。重要的是,wrappers 可以鏈式組合以結合它們的效果,並且大多數透過 gymnasium.make()
產生的環境預設已經被包裹 (wrapped) 了。
為了包裹 (wrap) 環境,您必須先初始化一個基礎環境。然後,您可以將此環境連同(可能可選的)參數傳遞給 wrapper 的建構子。
>>> import gymnasium as gym
>>> from gymnasium.wrappers import RescaleAction
>>> base_env = gym.make("Hopper-v4")
>>> base_env.action_space
Box(-1.0, 1.0, (3,), float32)
>>> wrapped_env = RescaleAction(base_env, min_action=0, max_action=1)
>>> wrapped_env.action_space
Box(0.0, 1.0, (3,), float32)
您可以使用 gymnasium.Wrapper.env
屬性存取 **第一個** wrapper 底下的環境。由於 gymnasium.Wrapper
類別繼承自 gymnasium.Env
,因此 gymnasium.Wrapper.env
可以是另一個 wrapper。
>>> wrapped_env
<RescaleAction<TimeLimit<OrderEnforcing<PassiveEnvChecker<HopperEnv<Hopper-v4>>>>>>
>>> wrapped_env.env
<TimeLimit<OrderEnforcing<PassiveEnvChecker<HopperEnv<Hopper-v4>>>>>
如果您想取得 **所有** wrapper 層級底下的環境,可以使用 gymnasium.Wrapper.unwrapped
屬性。如果環境已經是裸環境,則 gymnasium.Wrapper.unwrapped
屬性將只會回傳自身。
>>> wrapped_env
<RescaleAction<TimeLimit<OrderEnforcing<PassiveEnvChecker<HopperEnv<Hopper-v4>>>>>>
>>> wrapped_env.unwrapped
<gymnasium.envs.mujoco.hopper_v4.HopperEnv object at 0x7fbb5efd0490>
您可能希望 wrapper 執行的三種常見操作如下:
在將動作應用於基礎環境之前轉換動作
轉換基礎環境回傳的觀察
轉換基礎環境回傳的獎勵
此類 wrappers 可以透過繼承 gymnasium.ActionWrapper
、gymnasium.ObservationWrapper
或 gymnasium.RewardWrapper
並實作各自的轉換來輕鬆實作。如果您需要 wrapper 執行更複雜的任務,您可以直接繼承 gymnasium.Wrapper
類別。
如果您想實作自己的自訂 wrapper,請查看 相應的教學。
- class gymnasium.Wrapper(env: Env[ObsType, ActType])[source]¶
包裹 (Wraps)
gymnasium.Env
以允許模組化轉換step()
和reset()
方法。此類別是所有 wrapper 的基底類別,用於更改底層環境的行為。繼承自此類別的 Wrappers 可以修改
action_space
、observation_space
和metadata
屬性,而無需更改底層環境的屬性。此外,這些 wrappers 可以更改step()
和reset()
方法的行為。某些屬性(
spec
、render_mode
、np_random
)將指回 wrapper 的環境(即指向env
的相應屬性)。注意
如果您繼承自
Wrapper
,請不要忘記呼叫super().__init__(env)
- 參數:
env – 要包裹 (wrap) 的環境
方法¶
- Wrapper.step(action: WrapperActType) tuple[WrapperObsType, SupportsFloat, bool, bool, dict[str, Any]] [source]¶
- Wrapper.reset(*, seed: int | None = None, options: dict[str, Any] | None = None) tuple[WrapperObsType, dict[str, Any]] [source]¶
- classmethod Wrapper.wrapper_spec(**kwargs: Any) WrapperSpec [source]¶
為 wrappers 生成 WrapperSpec。
屬性¶
- Wrapper.env¶
此 wrapper 底下的環境(低一層級)。
這本身可能是一個被包裹 (wrapped) 的環境。若要取得所有 wrapper 層級底下的環境,請使用
gymnasium.Wrapper.unwrapped
。
- property Wrapper.action_space: spaces.Space[ActType] | spaces.Space[WrapperActType]¶
回傳
Env
action_space
,除非被覆寫,否則會使用 wrapper 的action_space
。
- property Wrapper.observation_space: spaces.Space[ObsType] | spaces.Space[WrapperObsType]¶
回傳
Env
observation_space
,除非被覆寫,否則會使用 wrapper 的observation_space
。
- property Wrapper.np_random_seed: int | None¶
回傳基礎環境的
np_random_seed
。
- property Wrapper.unwrapped: Env[ObsType, ActType]¶
回傳 wrapper 的基礎環境。
這將是裸露的
gymnasium.Env
環境,位於所有 wrapper 層級之下。