包裝器¶
包裝器是一種方便的方法,可以在不直接變更底層程式碼的情況下修改現有的環境。
使用包裝器可以讓您避免大量的樣板程式碼,並使您的環境更模組化。重要的是,包裝器可以串聯以結合它們的效果,並且大多數透過 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])[來源]¶
包裝
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]] [來源]¶
- Wrapper.reset(*, seed: int | None = None, options: dict[str, Any] | None = None) tuple[WrapperObsType, dict[str, Any]] [原始碼]¶
- classmethod Wrapper.wrapper_spec(**kwargs: Any) WrapperSpec [原始碼]¶
為 wrappers 產生 WrapperSpec。
屬性¶
- Wrapper.env¶
此 wrapper 底下的環境(低一層)。
這本身可能是一個被包裝的環境。若要取得所有層 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
。
- 屬性 Wrapper.unwrapped: Env[ObsType, ActType]¶
返回包裝器的基礎環境。
這將是赤裸的
gymnasium.Env
環境,在所有包裝層之下。