EGreedyModule¶
- class torchrl.modules.EGreedyModule(*args, **kwargs)[source]¶
Epsilon-Greedy 探索模組。
此模組使用 epsilon greedy 探索策略隨機更新 tensordict 中的動作。 每次呼叫時,都會根據某個機率閾值執行隨機抽取(每個動作一個)。 如果成功,則相應的動作將被從提供的動作規格中抽取的隨機樣本替換。 其他保持不變。
- 參數:
spec (TensorSpec) – 用於抽樣動作的規格。
eps_init (scalar, optional) – 初始 epsilon 值。預設值:1.0
eps_end (scalar, optional) – 最終 epsilon 值。預設值:0.1
annealing_num_steps (int, optional) – epsilon 達到
eps_end
值所需的步數。預設為 1000。
- 關鍵字參數:
action_key (NestedKey, optional) – 可以在輸入 tensordict 中找到動作的鍵。預設值為
"action"
。action_mask_key (NestedKey, optional) – 可以在輸入 tensordict 中找到動作遮罩的鍵。預設值為
None
(對應於沒有遮罩)。
注意
在訓練迴圈中包含對
step()
的呼叫以更新探索因子至關重要。由於不容易捕捉到這種遺漏,如果省略了它,將不會引發任何警告或異常!範例
>>> import torch >>> from tensordict import TensorDict >>> from tensordict.nn import TensorDictSequential >>> from torchrl.modules import EGreedyModule, Actor >>> from torchrl.data import Bounded >>> torch.manual_seed(0) >>> spec = Bounded(-1, 1, torch.Size([4])) >>> module = torch.nn.Linear(4, 4, bias=False) >>> policy = Actor(spec=spec, module=module) >>> explorative_policy = TensorDictSequential(policy, EGreedyModule(eps_init=0.2)) >>> td = TensorDict({"observation": torch.zeros(10, 4)}, batch_size=[10]) >>> print(explorative_policy(td).get("action")) tensor([[ 0.0000, 0.0000, 0.0000, 0.0000], [ 0.0000, 0.0000, 0.0000, 0.0000], [ 0.9055, -0.9277, -0.6295, -0.2532], [ 0.0000, 0.0000, 0.0000, 0.0000], [ 0.0000, 0.0000, 0.0000, 0.0000], [ 0.0000, 0.0000, 0.0000, 0.0000], [ 0.0000, 0.0000, 0.0000, 0.0000], [ 0.0000, 0.0000, 0.0000, 0.0000], [ 0.0000, 0.0000, 0.0000, 0.0000], [ 0.0000, 0.0000, 0.0000, 0.0000]], grad_fn=<AddBackward0>)