快捷方式

DiscreteActionProjection

torchrl.envs.transforms.DiscreteActionProjection(num_actions_effective: int, max_actions: int, action_key: NestedKey = 'action', include_forward: bool = True)[source]

将离散动作从高维空间投影到低维空间。

给定一个编码为独热向量(从 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, 可选) – 动作的键名。默认为“action”。

  • include_forward (bool, 可选) – 如果为 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)[source]

变换输入规范,使结果规范与变换映射匹配。

参数:

input_spec (TensorSpec) – 变换前的规范

返回:

变换后预期的规范

文档

查阅全面的 PyTorch 开发者文档

查看文档

教程

获取适合初学者和高级开发者的深度教程

查看教程

资源

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

查看资源