包裝器¶
包裝器是一種方便的方式,可以在不直接修改底層程式碼的情況下修改現有環境。
使用包裝器可以避免大量樣板程式碼,並使您的環境更具模組化。重要的是,包裝器可以被鏈式組合以合併其效果,並且大多數透過 gymnasium.make() 生成的環境預設情況下已經包裝過了。
為了包裝一個環境,您必須首先初始化一個基礎環境。然後,您可以將此環境連同(可能可選的)引數傳遞給包裝器的建構函式。
>>> 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 屬性來訪問**第一個**包裝器下的環境。由於 gymnasium.Wrapper 類繼承自 gymnasium.Env,因此 gymnasium.Wrapper.env 可以是另一個包裝器。
>>> wrapped_env
<RescaleAction<TimeLimit<OrderEnforcing<PassiveEnvChecker<HopperEnv<Hopper-v4>>>>>>
>>> wrapped_env.env
<TimeLimit<OrderEnforcing<PassiveEnvChecker<HopperEnv<Hopper-v4>>>>>
如果您想訪問**所有**包裝層下的環境,可以使用 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>
包裝器通常有以下三種用途:
在將動作應用於基礎環境之前進行轉換
轉換基礎環境返回的觀測值
轉換基礎環境返回的獎勵
此類包裝器可以透過繼承 gymnasium.ActionWrapper、gymnasium.ObservationWrapper 或 gymnasium.RewardWrapper 並實現相應的轉換來輕鬆實現。如果您需要包裝器執行更復雜的任務,可以直接繼承 gymnasium.Wrapper 類。
如果您想實現自己的自定義包裝器,請檢視相應的教程。
- class gymnasium.Wrapper(env: Env[ObsType, ActType])[source]¶
包裝一個
gymnasium.Env,以允許對step()和reset()方法進行模組化轉換。該類是所有包裝器的基類,用於改變底層環境的行為。繼承自該類的包裝器可以修改
action_space、observation_space和metadata屬性,而無需更改底層環境的屬性。此外,step()和reset()方法的行為也可以透過這些包裝器進行改變。某些屬性(
spec、render_mode、np_random)將指向包裝器的環境(即env的相應屬性)。注意
如果您繼承自
Wrapper,請不要忘記呼叫super().__init__(env)- 引數:
env – 要包裝的環境
方法¶
- 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]¶
為包裝器生成一個 WrapperSpec。
屬性¶
- Wrapper.env¶
此包裝器下方的環境(下一層)。
這本身可能是一個被包裝的環境。要獲取所有包裝層下的環境,請使用
gymnasium.Wrapper.unwrapped。
- property Wrapper.action_space: Space[ActType] | Space[WrapperActType]¶
返回
Env的action_space,除非被重寫,此時使用包裝器的action_space。
- property Wrapper.observation_space: Space[ObsType] | Space[WrapperObsType]¶
返回
Env的observation_space,除非被重寫,此時使用包裝器的observation_space。
- property Wrapper.np_random_seed: int | None¶
返回基礎環境的
np_random_seed。
- property Wrapper.unwrapped: Env[ObsType, ActType]¶
返回包裝器的基礎環境。
這將是所有包裝層下的裸
gymnasium.Env環境。