快捷方式

EGreedyModule

class torchrl.modules.EGreedyModule(*args, **kwargs)[source]

Epsilon-Greedy 探索模块。

此模块根据 epsilon 贪婪探索策略随机更新 tensordict 中的动作。在每次调用时,都会根据一定的概率阈值执行随机抽取(每个动作一次)。如果成功,则相应的动作将被从提供的动作规范中抽取的随机样本替换。其他动作保持不变。

参数:
  • spec (TensorSpec) – 用于采样动作的规范。

  • eps_init (标量, 可选) – 初始 epsilon 值。默认值:1.0

  • eps_end (标量, 可选) – 最终 epsilon 值。默认值:0.1

  • annealing_num_steps (int, 可选) – epsilon 达到 eps_end 值所需的步数。默认为 1000

关键字参数:
  • action_key (NestedKey, 可选) – 在输入 tensordict 中可以找到动作的键。默认值为 "action"

  • action_mask_key (NestedKey, 可选) – 在输入 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>)
forward(tensordict: TensorDictBase) TensorDictBase[source]

定义每次调用时执行的计算。

应被所有子类重写。

注意

尽管前向传递的配方需要在该函数内定义,但之后应该调用 Module 实例而不是此函数,因为前者负责运行注册的钩子,而后者会静默地忽略它们。

step(frames: int = 1) None[source]

epsilon 衰减的一个步骤。

self.annealing_num_steps 次调用此方法后,后续调用将无效。

参数:

frames (int, 可选) – 自上次步骤以来的帧数。默认为 1

文档

访问 PyTorch 的全面开发者文档

查看文档

教程

获取面向初学者和高级开发者的深入教程

查看教程

资源

查找开发资源并获得问题解答

查看资源