Wrappers#
Wrappers are a convenient way to modify an existing environment without having to alter the underlying code directly.
Using wrappers will allow you to avoid a lot of boilerplate code and make your environment more modular.
Importantly wrappers can be chained to combine their effects and most environments that are generated via
gymnasium.make() will already be wrapped by default.
In order to wrap an environment, you must first initialize a base environment. Then you can pass this environment along with (possibly optional) parameters to the wrapper’s constructor.
>>> 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)
You can access the environment underneath the first wrapper by using the gymnasium.Wrapper.env attribute.
As the gymnasium.Wrapper class inherits from gymnasium.Env then gymnasium.Wrapper.env can be another wrapper.
>>> wrapped_env
<RescaleAction<TimeLimit<OrderEnforcing<PassiveEnvChecker<HopperEnv<Hopper-v4>>>>>>
>>> wrapped_env.env
<TimeLimit<OrderEnforcing<PassiveEnvChecker<HopperEnv<Hopper-v4>>>>>
If you want to get to the environment underneath all of the layers of wrappers, you can use the
gymnasium.Wrapper.unwrapped attribute.
If the environment is already a bare environment, the gymnasium.Wrapper.unwrapped attribute will just return itself.
>>> wrapped_env
<RescaleAction<TimeLimit<OrderEnforcing<PassiveEnvChecker<HopperEnv<Hopper-v4>>>>>>
>>> wrapped_env.unwrapped
<gymnasium.envs.mujoco.hopper_v4.HopperEnv object at 0x7fbb5efd0490>
There are three common things you might want a wrapper to do:
Transform actions before applying them to the base environment
Transform observations that are returned by the base environment
Transform rewards that are returned by the base environment
Such wrappers can be easily implemented by inheriting from gymnasium.ActionWrapper,
gymnasium.ObservationWrapper, or gymnasium.RewardWrapper and implementing the respective transformation.
If you need a wrapper to do more complicated tasks, you can inherit from the gymnasium.Wrapper class directly.
If you’d like to implement your own custom wrapper, check out the corresponding tutorial.
- class gymnasium.Wrapper(env: Env[ObsType, ActType])[source]#
Wraps a
gymnasium.Envto allow a modular transformation of thestep()andreset()methods.This class is the base class of all wrappers to change the behavior of the underlying environment. Wrappers that inherit from this class can modify the
action_space,observation_space,reward_rangeandmetadataattributes, without changing the underlying environment’s attributes. Moreover, the behavior of thestep()andreset()methods can be changed by these wrappers.Some attributes (
spec,render_mode,np_random) will point back to the wrapper’s environment (i.e. to the corresponding attributes ofenv).Note
If you inherit from
Wrapper, don’t forget to callsuper().__init__(env)- Parameters:
env – The environment to wrap
Methods#
- Wrapper.step(action: WrapperActType) tuple[WrapperObsType, SupportsFloat, bool, bool, dict[str, Any]][source]#
Uses the
step()of theenvthat can be overwritten to change the returned data.
- Wrapper.reset(*, seed: int | None = None, options: dict[str, Any] | None = None) tuple[WrapperObsType, dict[str, Any]][source]#
Uses the
reset()of theenvthat can be overwritten to change the returned data.
- Wrapper.render() RenderFrame | list[RenderFrame] | None[source]#
Uses the
render()of theenvthat can be overwritten to change the returned data.
- classmethod Wrapper.wrapper_spec(**kwargs: Any) WrapperSpec[source]#
Generates a WrapperSpec for the wrappers.
Attributes#
- Wrapper.env#
The environment (one level underneath) this wrapper.
This may itself be a wrapped environment. To obtain the environment underneath all layers of wrappers, use
gymnasium.Wrapper.unwrapped.
- property Wrapper.action_space: spaces.Space[ActType] | spaces.Space[WrapperActType]#
Return the
Envaction_spaceunless overwritten then the wrapperaction_spaceis used.
- property Wrapper.observation_space: spaces.Space[ObsType] | spaces.Space[WrapperObsType]#
Return the
Envobservation_spaceunless overwritten then the wrapperobservation_spaceis used.
- property Wrapper.spec: EnvSpec | None#
Returns the
Envspecattribute with the WrapperSpec if the wrapper inherits from EzPickle.
- property Wrapper.unwrapped: Env[ObsType, ActType]#
Returns the base environment of the wrapper.
This will be the bare
gymnasium.Envenvironment, underneath all layers of wrappers.