EGreedyWrapper¶
- class torchrl.modules.tensordict_module.EGreedyWrapper(*args, **kwargs)[source]¶
[已弃用] Epsilon-Greedy PO 包装器。
- 参数:
policy (TensorDictModule) – 确定性策略。
- 关键字参数:
eps_init (标量, 可选) – 初始 epsilon 值。默认为 1.0
eps_end (标量, 可选) – 最终 epsilon 值。默认为 0.1
annealing_num_steps (int, 可选) – epsilon 达到 eps_end 值所需步数
action_key (嵌套键, 可选) – 输入 tensordict 中可以找到动作的键。默认为
"action"
。action_mask_key (嵌套键, 可选) – 输入 tensordict 中可以找到动作掩码的键。默认为
None
(对应于无掩码)。spec (TensorSpec, 可选) – 如果提供,则采样动作将从此动作空间中获取。如果没有提供,则探索包装器将尝试从策略中恢复它。
注意
一旦模块被包装在
EGreedyWrapper
中,务必在训练循环中包含对step()
的调用以更新探索因子。由于很难捕捉到这种遗漏,因此如果省略了此操作,将不会发出警告或引发异常!示例
>>> import torch >>> from tensordict import TensorDict >>> from torchrl.modules import EGreedyWrapper, Actor >>> from torchrl.data import BoundedTensorSpec >>> torch.manual_seed(0) >>> spec = BoundedTensorSpec(-1, 1, torch.Size([4])) >>> module = torch.nn.Linear(4, 4, bias=False) >>> policy = Actor(spec=spec, module=module) >>> explorative_policy = EGreedyWrapper(policy, 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>)