動作包裝器¶
基底類別¶
- 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: gym.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: gym.Env[ObsType, ActType], min_action: np.floating | np.integer | np.ndarray, max_action: np.floating | np.integer | np.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: gym.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 (用於確定性重複) 或 tuple[int, int] (用於隨機重複次數的範圍)。