动作包装器

基类

class gymnasium.ActionWrapper(env: Env[ObsType, ActType])[源代码]

包装器的超类,可以在执行 :meth:step 方法之前修改动作。

如果你想在将动作传递给基础环境之前对其应用一个函数,你可以简单地继承 :class:ActionWrapper 并重写 :meth:action 方法来实现该转换。在该方法中定义的转换必须采用基础环境的动作空间中的值。然而,其定义域可能与原始动作空间不同。在这种情况下,你需要通过在你的包装器的 :meth:__init__ 方法中设置 :attr:action_space 来指定包装器的新动作空间。

其中,Gymnasium 提供了动作包装器 :class:gymnasium.wrappers.ClipAction 和 :class:gymnasium.wrappers.RescaleAction 用于裁剪和重新缩放动作。

参数:

env – 要包装的环境。

action(action: WrapperActType) ActType[源代码]

在调用 :meth:step 之前返回一个修改后的动作。

参数:

action – 原始的 :meth:步骤 操作

返回:

修改后的操作

可用的操作包装器

class gymnasium.wrappers.TransformAction(env: Env[ObsType, ActType], func: Callable[[WrapperActType], ActType], action_space: Space[WrapperActType] | None)[源代码]

在将修改后的值传递给环境 step 函数之前,对 action 应用一个函数。

存在一个包装器的向量化版本 :class:gymnasium.wrappers.vector.TransformAction

示例

>>> import numpy as np
>>> import gymnasium as gym
>>> env = gym.make("MountainCarContinuous-v0")
>>> _ = env.reset(seed=123)
>>> obs, *_= env.step(np.array([0.0, 1.0]))
>>> obs
array([-4.6397772e-01, -4.4808415e-04], dtype=float32)
>>> env = gym.make("MountainCarContinuous-v0")
>>> env = TransformAction(env, lambda a: 0.5 * a + 0.1, env.action_space)
>>> _ = env.reset(seed=123)
>>> obs, *_= env.step(np.array([0.0, 1.0]))
>>> obs
array([-4.6382770e-01, -2.9808417e-04], dtype=float32)
变更日志:
  • v1.0.0 - 最初添加

参数:
  • env – 要包装的环境

  • func – 应用于 :meth:stepaction 的函数

  • action_space – 给定函数后,包装器的更新动作空间。

class gymnasium.wrappers.ClipAction(env: Env[ObsType, ActType])[源代码]

action 传递给 step 时,将其裁剪到环境的 action_space 范围内。

存在一个包装器的向量化版本 :class:gymnasium.wrappers.vector.ClipAction

示例

>>> import gymnasium as gym
>>> from gymnasium.wrappers import ClipAction
>>> import numpy as np
>>> env = gym.make("Hopper-v4", disable_env_checker=True)
>>> env = ClipAction(env)
>>> env.action_space
Box(-inf, inf, (3,), float32)
>>> _ = env.reset(seed=42)
>>> _ = env.step(np.array([5.0, -2.0, 0.0], dtype=np.float32))
... # Executes the action np.array([1.0, -1.0, 0]) in the base environment
变更日志:
  • v0.12.6 - 最初添加

  • v1.0.0 - 动作空间已更新为无限边界,这在技术上是正确的

参数:

env – 要包装的环境

class gymnasium.wrappers.RescaleAction(env: Env[ObsType, ActType], min_action: float | int | ndarray, max_action: float | int | ndarray)[源代码]

将环境的 Box 动作空间仿射(线性)重新缩放到 [min_action, max_action] 范围内。

基础环境 :attr:env 必须有一个类型为 :class:spaces.Box 的动作空间。如果 :attr:min_action 或 :attr:max_action 是 numpy 数组,形状必须与环境动作空间的形状匹配。

存在一个包装器的向量版本 :class:gymnasium.wrappers.vector.RescaleAction

示例

>>> import gymnasium as gym
>>> from gymnasium.wrappers import RescaleAction
>>> import numpy as np
>>> env = gym.make("Hopper-v4", disable_env_checker=True)
>>> _ = env.reset(seed=42)
>>> obs, _, _, _, _ = env.step(np.array([1, 1, 1], dtype=np.float32))
>>> _ = env.reset(seed=42)
>>> min_action = -0.5
>>> max_action = np.array([0.0, 0.5, 0.75], dtype=np.float32)
>>> wrapped_env = RescaleAction(env, min_action=min_action, max_action=max_action)
>>> wrapped_env_obs, _, _, _, _ = wrapped_env.step(max_action)
>>> np.all(obs == wrapped_env_obs)
True
变更日志:
  • v0.15.4 - 最初添加

参数:
  • env (Env) – 要包装的环境

  • min_action (float, int or np.ndarray) – 每个动作的最小值。这可能是一个 numpy 数组或一个标量。

  • max_action (float, int or np.ndarray) – 每个动作的最大值。这可能是一个numpy数组或一个标量。

class gymnasium.wrappers.StickyAction(env: Env[ObsType, ActType], repeat_action_probability: float)[源代码]

为同一 step 函数添加动作重复的概率。

这个包装器遵循 Machado 等人, 2018 <https://arxiv.org/pdf/1709.06009.pdf>_ 在第12页的5.2节中提出的实现。

不存在包装器的矢量版本。

示例

>>> import gymnasium as gym
>>> env = gym.make("CartPole-v1")
>>> env = StickyAction(env, repeat_action_probability=0.9)
>>> env.reset(seed=123)
(array([ 0.01823519, -0.0446179 , -0.02796401, -0.03156282], dtype=float32), {})
>>> env.step(1)
(array([ 0.01734283,  0.15089367, -0.02859527, -0.33293587], dtype=float32), 1.0, False, False, {})
>>> env.step(0)
(array([ 0.0203607 ,  0.34641072, -0.03525399, -0.6344974 ], dtype=float32), 1.0, False, False, {})
>>> env.step(1)
(array([ 0.02728892,  0.5420062 , -0.04794393, -0.9380709 ], dtype=float32), 1.0, False, False, {})
>>> env.step(0)
(array([ 0.03812904,  0.34756234, -0.06670535, -0.6608303 ], dtype=float32), 1.0, False, False, {})
变更日志:
  • v1.0.0 - 最初添加

参数:
  • env (Env) – 包装环境

  • repeat_action_probability (int | float) – 重复旧行动的概率。