Wrappers¶
Wrappers 是一种方便的方式来修改现有环境,而无需直接更改底层代码。
使用 wrappers 将允许您避免大量样板代码,并使您的环境更模块化。重要的是,wrappers 可以链接起来以组合它们的效果,并且大多数通过 gymnasium.make()
生成的环境默认情况下已经包装。
为了包装环境,您必须首先初始化一个基础环境。然后,您可以将此环境以及(可能可选的)参数传递给 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 执行三个常见的操作
在将动作应用于基础环境之前转换动作
转换基础环境返回的观测
转换基础环境返回的奖励
通过继承 gymnasium.ActionWrapper
、gymnasium.ObservationWrapper
或 gymnasium.RewardWrapper
并实现相应的转换,可以轻松实现此类 wrappers。如果您需要 wrapper 执行更复杂的任务,可以直接从 gymnasium.Wrapper
类继承。
如果您想实现自己的自定义 wrapper,请查看相应的教程。
- class gymnasium.Wrapper(env: Env[ObsType, ActType])[source]¶
包装
gymnasium.Env
以允许模块化地转换step()
和reset()
方法。此类是所有用于更改底层环境行为的 wrappers 的基类。继承自此类的 wrappers 可以修改
action_space
、observation_space
和metadata
属性,而无需更改底层环境的属性。此外,这些 wrappers 可以更改step()
和reset()
方法的行为。一些属性(
spec
,render_mode
,np_random
)将指向 wrapper 的环境(即指向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: spaces.Space[ActType] | spaces.Space[WrapperActType]¶
返回
Env
的action_space
,除非被覆盖,否则使用包装器的action_space
。
- property Wrapper.observation_space: spaces.Space[ObsType] | spaces.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
环境,位于所有包装层之下。