包装器¶
包装器是修改现有环境而不必直接更改底层代码的便捷方式。
使用包装器可以避免许多样板代码,并使您的环境更具模块化。重要的是,包装器可以链接以组合它们的效果,并且大多数通过 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: 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
环境。