包装器¶
包装器是一种方便的方式,可以在不直接修改底层代码的情况下修改现有环境。
使用包装器可以避免大量样板代码,并使您的环境更具模块化。重要的是,包装器可以被链式组合以合并其效果,并且大多数通过 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环境。