RewardSum¶
- class torchrl.envs.transforms.RewardSum(in_keys: Optional[Sequence[NestedKey]] = None, out_keys: Optional[Sequence[NestedKey]] = None, reset_keys: Optional[Sequence[NestedKey]] = None, *, reward_spec: bool = False)[原始碼]¶
追蹤回合的累積獎勵。
此轉換接受 tensordict 獎勵鍵的清單 (即 ´in_keys´),並追蹤每個回合沿著時間維度的累積值。
當呼叫時,轉換會為每個名為
episode_{in_key}
的in_key
寫入一個新的 tensordict 條目,其中寫入累積值。- 參數:
in_keys (NestedKeys 列表, 選填) – 輸入獎勵金鑰。所有的 ´in_keys´ 都應該是環境 reward_spec 的一部分。如果沒有指定
in_keys
,這個轉換會假設"reward"
作為輸入金鑰。然而,也可以指定多個獎勵 (例如"reward1"
和"reward2""
)。out_keys (NestedKeys 列表, 選填) – 輸出加總金鑰,每個輸入金鑰應該對應一個。
reset_keys (NestedKeys 列表, 選填) – 要使用的 reset_keys 列表,如果找不到父環境。 如果提供,此值將優先於環境的
reset_keys
。
- 關鍵字參數:
reward_spec (bool, 選填) – 如果
True
,新的獎勵條目將會註冊到獎勵規格中。預設為False
(註冊到observation_specs
中)。
範例
>>> from torchrl.envs.transforms import RewardSum, TransformedEnv >>> from torchrl.envs.libs.gym import GymEnv >>> env = TransformedEnv(GymEnv("CartPole-v1"), RewardSum()) >>> env.set_seed(0) >>> torch.manual_seed(0) >>> td = env.reset() >>> print(td["episode_reward"]) tensor([0.]) >>> td = env.rollout(3) >>> print(td["next", "episode_reward"]) tensor([[1.], [2.], [3.]])
- transform_input_spec(input_spec: TensorSpec) TensorSpec [source]¶
轉換輸入規格,使得結果規格符合轉換映射。
- 參數:
input_spec (TensorSpec) – 轉換前的規格
- 回傳:
轉換後預期的規格
- transform_observation_spec(observation_spec: TensorSpec) TensorSpec [source]¶
轉換 observation spec,新增 RewardSum 產生之金鑰。
- transform_reward_spec(reward_spec: TensorSpec) TensorSpec [source]¶
轉換 reward spec,使得結果規格符合轉換映射。
- 參數:
reward_spec (TensorSpec) – 轉換前的規格
- 回傳:
轉換後預期的規格