獎勵封裝器

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

可以修改步驟回傳獎勵的封裝器的超類別。

如果您想在將基礎環境回傳的獎勵傳遞給學習程式碼之前對其應用函數,您可以簡單地繼承 RewardWrapper 並覆寫 reward() 方法以實作該轉換。

參數:

env – 要封裝的環境。

reward(reward: SupportsFloat) SupportsFloat[source]

回傳修改後的環境 reward

參數:

reward – `env` 的 step() 獎勵

回傳:

修改後的 `reward`

已實作的封裝器

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: gym.Env[ObsType, ActType], min_reward: float | np.ndarray | None = None, max_reward: float | np.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]) – 要應用的上限