獎勵封裝器¶
- class gymnasium.RewardWrapper(env: Env[ObsType, ActType])[source]¶
封裝器的超類,可以修改步驟返回的獎勵。
如果您想在將基礎環境返回的獎勵傳遞給學習程式碼之前對其應用函式,您可以簡單地繼承
RewardWrapper並重寫reward()方法來實現該轉換。- 引數:
env – 要封裝的環境。
已實現的封裝器¶
- class gymnasium.wrappers.TransformReward(env: Env[ObsType, ActType], func: Callable[[SupportsFloat], SupportsFloat])[source]¶
將一個函式應用於從環境的
step接收到的reward。此封裝器存在向量版本:
gymnasium.wrappers.vector.TransformReward。示例
>>> import gymnasium as gym >>> from gymnasium.wrappers import TransformReward >>> env = gym.make("CartPole-v1") >>> env = TransformReward(env, lambda r: 2 * r + 1) >>> _ = env.reset() >>> _, rew, _, _, _ = env.step(0) >>> rew 3.0
- 更新日誌
v0.15.0 - 初次新增
- 引數:
env (Env) – 要封裝的環境
func – (Callable):要應用於獎勵的函式
- class gymnasium.wrappers.NormalizeReward(env: Env[ObsType, ActType], gamma: float = 0.99, epsilon: float = 1e-8)[source]¶
標準化即時獎勵,使其指數移動平均值具有近似固定的方差。
屬性 _update_running_mean 允許凍結/繼續獎勵統計資訊的執行平均值計算。如果為 True (預設值),則每次呼叫 self.normalize() 時,RunningMeanStd 都會更新。如果為 False,則使用已計算的統計資訊但不再更新;這可以在評估期間使用。
此封裝器存在向量版本:
gymnasium.wrappers.vector.NormalizeReward。注意
在 v0.27 中,NormalizeReward 已更新,因為 Gym v0.25+ 中前向折扣獎勵估計的計算不正確。更多詳情請閱讀 [#3154](https://github.com/openai/gym/pull/3152)。
注意
縮放取決於過去的軌跡,如果封裝器是新例項化的或策略最近已更改,則獎勵將無法正確縮放。
- 不使用標準化獎勵封裝器的示例
>>> import numpy as np >>> import gymnasium as gym >>> env = gym.make("MountainCarContinuous-v0") >>> _ = env.reset(seed=123) >>> _ = env.action_space.seed(123) >>> episode_rewards = [] >>> terminated, truncated = False, False >>> while not (terminated or truncated): ... observation, reward, terminated, truncated, info = env.step(env.action_space.sample()) ... episode_rewards.append(reward) ... >>> env.close() >>> np.var(episode_rewards) np.float64(0.0008876301247721108)
- 使用標準化獎勵封裝器的示例
>>> import numpy as np >>> import gymnasium as gym >>> env = gym.make("MountainCarContinuous-v0") >>> env = NormalizeReward(env, gamma=0.99, epsilon=1e-8) >>> _ = env.reset(seed=123) >>> _ = env.action_space.seed(123) >>> episode_rewards = [] >>> terminated, truncated = False, False >>> while not (terminated or truncated): ... observation, reward, terminated, truncated, info = env.step(env.action_space.sample()) ... episode_rewards.append(reward) ... >>> env.close() >>> np.var(episode_rewards) np.float64(0.010162116476634746)
- 更新日誌
v0.21.0 - 初次新增
v1.0.0 - 新增 update_running_mean 屬性以允許停用執行平均值/標準差的更新
- 引數:
env (env) – 應用封裝器的環境
epsilon (float) – 穩定性引數
gamma (float) – 指數移動平均中使用的折扣因子。
- class gymnasium.wrappers.ClipReward(env: Env[ObsType, ActType], min_reward: float | ndarray | None = None, max_reward: float | ndarray | None = None)[source]¶
將環境的獎勵裁剪到上限和下限之間。
此封裝器存在向量版本:
gymnasium.wrappers.vector.ClipReward。示例
>>> import gymnasium as gym >>> from gymnasium.wrappers import ClipReward >>> env = gym.make("CartPole-v1") >>> env = ClipReward(env, 0, 0.5) >>> _ = env.reset() >>> _, rew, _, _, _ = env.step(1) >>> rew np.float64(0.5)
- 更新日誌
v1.0.0 - 初次新增
- 引數:
env (Env) – 要封裝的環境
min_reward (Union[float, np.ndarray]) – 要應用的下限
max_reward (Union[float, np.ndarray]) – 要應用的上限