动作封装器¶
基类¶
- class gymnasium.ActionWrapper(env: Env[ObsType, ActType])[source]¶
可以修改在
step()
之前动作的封装器的超类。如果你想在将动作传递给基础环境之前对其应用一个函数,你可以简单地继承
ActionWrapper
并重写方法action()
来实现该变换。该方法中定义的变换必须在基础环境的动作空间内取值。然而,它的定义域可能与原始动作空间不同。在这种情况下,你需要通过在封装器的__init__()
方法中设置action_space
来指定封装器的新动作空间。除其他外,Gymnasium 提供了动作封装器
gymnasium.wrappers.ClipAction
和gymnasium.wrappers.RescaleAction
用于裁剪和重缩放动作。- 参数:
env – 要封装的环境。
可用的动作封装器¶
- class gymnasium.wrappers.TransformAction(env: Env[ObsType, ActType], func: Callable[[WrapperActType], ActType], action_space: Space[WrapperActType] | None)[source]¶
在将修改后的值传递给环境的
step
函数之前,对action
应用一个函数。该封装器的向量版本存在
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 – 应用于
step()
的action
的函数action_space – 根据函数更新后的封装器动作空间。
- class gymnasium.wrappers.ClipAction(env: Env[ObsType, ActType])[source]¶
将传递给
step
的action
裁剪到环境的 action_space 范围内。该封装器的向量版本存在
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: floating | integer | ndarray, max_action: floating | integer | ndarray)[source]¶
将环境的
Box
动作空间仿射(线性)重缩放,使其位于[min_action, max_action]
范围内。基础环境
env
的动作空间必须是spaces.Box
类型。如果min_action
或max_action
是 numpy 数组,则其形状必须与环境动作空间的形状匹配。该封装器的向量版本存在
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) np.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, repeat_action_duration: int | tuple[int, int] = 1)[source]¶
增加了在同一
step
函数中重复动作的概率。此封装器遵循 Machado 等人,2018 在第 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 - 首次添加
v1.1.0 - 添加 repeat_action_duration 参数以实现动态数量的粘滞动作
- 参数:
env (Env) – 被封装的环境,
repeat_action_probability (int | float) – 重复旧动作的概率,
repeat_action_duration (int | tuple[int, int]) – 动作重复的步数。它可以是一个整数(用于确定性重复),或者一个元组[int, int](用于随机数量重复的范围)。