DiscreteActionProjection¶
- class torchrl.envs.transforms.DiscreteActionProjection(num_actions_effective: int, max_actions: int, action_key: NestedKey = 'action', include_forward: bool = True)[原始碼]¶
將離散動作從高維空間投影到低維空間。
給定一個編碼為獨熱向量的離散動作(從 1 到 N)和一個最大動作索引 num_actions(其中 num_actions < N),則轉換動作,使其 action_out 最多為 num_actions。
如果輸入動作大於 num_actions,則將其替換為 0 到 num_actions-1 之間的隨機值。否則,保持相同的動作。這旨在與應用於多個具有不同動作空間的離散控制環境的策略一起使用。
呼叫 DiscreteActionProjection.forward(例如,從回放緩衝區呼叫或在 nn.Modules 序列中呼叫)將在
"in_keys"上呼叫轉換 num_actions_effective -> max_actions,而呼叫 _call 將被忽略。事實上,轉換後的環境被指示僅為內部 base_env 更新輸入鍵,但原始輸入鍵將保持不變。- 引數:
num_actions_effective (int) – 考慮的最大動作數量。
max_actions (int) – 該模組可以讀取的最大動作數量。
action_key (NestedKey, optional) – 動作的鍵名。預設為“action”。
include_forward (bool, optional) – 如果為
True,當模組被回放緩衝區或 nn.Module 鏈呼叫時,呼叫 forward 也會將動作從一個域對映到另一個域。預設為 True。
示例
>>> torch.manual_seed(0) >>> N = 3 >>> M = 2 >>> action = torch.zeros(N, dtype=torch.long) >>> action[-1] = 1 >>> td = TensorDict({"action": action}, []) >>> transform = DiscreteActionProjection(num_actions_effective=M, max_actions=N) >>> _ = transform.inv(td) >>> print(td.get("action")) tensor([1])
- transform_input_spec(input_spec: Composite)[原始碼]¶
轉換輸入規範,使結果規範與轉換對映匹配。
- 引數:
input_spec (TensorSpec) – 轉換前的規範
- 返回:
轉換後的預期規範