StepCounter¶
- class torchrl.envs.transforms.StepCounter(max_steps: Optional[int] = None, truncated_key: str | None = 'truncated', step_count_key: str | None = 'step_count', update_done: bool = True)[原始碼]¶
計算從重置開始的步數,並可選擇在特定步數後將 truncated 狀態設定為
True
。也會相應地調整
"done"
狀態(因為 done 是任務完成和提早截斷的析取)。- 參數:
max_steps (int, optional) – 一個正整數,表示在將
truncated_key
條目設定為True
之前要採取的最大步數。truncated_key (str, optional) – 應寫入截斷條目的索引鍵。預設為
"truncated"
,資料收集器會將其識別為重置訊號。此引數只能是字串(不是巢狀索引鍵),因為它將與父環境中的每個葉 done 索引鍵相符(例如,如果使用"truncated"
索引鍵名稱,則("agent", "done")
索引鍵將伴隨("agent", "truncated")
)。step_count_key (str, optional) – 應寫入步數計數條目的索引鍵。預設為
"step_count"
。此引數只能是字串(不是巢狀索引鍵),因為它將與父環境中的每個葉 done 索引鍵相符(例如,如果使用"step_count"
索引鍵名稱,則("agent", "done")
索引鍵將伴隨("agent", "step_count")
)。update_done (bool, optional) – 如果
True
,則會更新"truncated"
層級的"done"
布林張量。 此訊號表示軌跡已到達其終點,可能是因為任務已完成("completed"
條目的值為True
),或者是因為它已被截斷("truncated"
條目的值為True
)。 預設值為True
。
注意
為了確保與具有多個 done_key 的環境相容,此轉換將為 tensordict 中的每個 done 條目寫入一個 step_count 條目。
範例
>>> import gymnasium >>> from torchrl.envs import GymWrapper >>> base_env = GymWrapper(gymnasium.make("Pendulum-v1")) >>> env = TransformedEnv(base_env, ... StepCounter(max_steps=5)) >>> rollout = env.rollout(100) >>> print(rollout) TensorDict( fields={ action: Tensor(shape=torch.Size([5, 1]), device=cpu, dtype=torch.float32, is_shared=False), done: Tensor(shape=torch.Size([5, 1]), device=cpu, dtype=torch.bool, is_shared=False), completed: Tensor(shape=torch.Size([5, 1]), device=cpu, dtype=torch.bool, is_shared=False)}, next: TensorDict( fields={ done: Tensor(shape=torch.Size([5, 1]), device=cpu, dtype=torch.bool, is_shared=False), completed: Tensor(shape=torch.Size([5, 1]), device=cpu, dtype=torch.bool, is_shared=False)}, observation: Tensor(shape=torch.Size([5, 3]), device=cpu, dtype=torch.float32, is_shared=False), reward: Tensor(shape=torch.Size([5, 1]), device=cpu, dtype=torch.float32, is_shared=False), step_count: Tensor(shape=torch.Size([5, 1]), device=cpu, dtype=torch.int64, is_shared=False), truncated: Tensor(shape=torch.Size([5, 1]), device=cpu, dtype=torch.bool, is_shared=False)}, batch_size=torch.Size([5]), device=cpu, is_shared=False), observation: Tensor(shape=torch.Size([5, 3]), device=cpu, dtype=torch.float32, is_shared=False), step_count: Tensor(shape=torch.Size([5, 1]), device=cpu, dtype=torch.int64, is_shared=False), truncated: Tensor(shape=torch.Size([5, 1]), device=cpu, dtype=torch.bool, is_shared=False)}, batch_size=torch.Size([5]), device=cpu, is_shared=False) >>> print(rollout["next", "step_count"]) tensor([[1], [2], [3], [4], [5]])
- transform_input_spec(input_spec: Composite) Composite [source]¶
轉換輸入規格,使產生的規格與轉換映射匹配。
- 參數:
input_spec (TensorSpec) – 轉換前的規格
- 傳回:
轉換後預期的規格
- transform_observation_spec(observation_spec: Composite) Composite [source]¶
轉換觀測規格,使產生的規格與轉換映射匹配。
- 參數:
observation_spec (TensorSpec) – 轉換前的規格
- 傳回:
轉換後預期的規格
- transform_output_spec(output_spec: Composite) Composite [source]¶
轉換輸出規格,使產生的規格與轉換映射匹配。
此方法通常應保持不變。 變更應使用
transform_observation_spec()
、transform_reward_spec()
和transformfull_done_spec()
實作。 :param output_spec: 轉換前的規格 :type output_spec: TensorSpec- 傳回:
轉換後預期的規格