動作封裝器

基類

class gymnasium.ActionWrapper(env: Env[ObsType, ActType])[source]

可以修改在 step() 之前動作的封裝器的超類。

如果你想在將動作傳遞給基礎環境之前對其應用一個函式,你可以簡單地繼承 ActionWrapper 並重寫方法 action() 來實現該變換。該方法中定義的變換必須在基礎環境的動作空間內取值。然而,它的定義域可能與原始動作空間不同。在這種情況下,你需要透過在封裝器的 __init__() 方法中設定 action_space 來指定封裝器的新動作空間。

除其他外,Gymnasium 提供了動作封裝器 gymnasium.wrappers.ClipActiongymnasium.wrappers.RescaleAction 用於裁剪和重縮放動作。

引數:

env – 要封裝的環境。

action(action: WrapperActType) ActType[source]

在呼叫 step() 之前返回一個修改後的動作。

引數:

action – 原始的 step() 動作

返回:

修改後的動作

可用的動作封裝器

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]

將傳遞給 stepaction 裁剪到環境的 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_actionmax_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](用於隨機數量重複的範圍)。