MultiAction¶
- class torchrl.envs.transforms.MultiAction(*, dim: int = 1, stack_rewards: bool = True, stack_observations: bool = False)[source]¶
一个执行父环境中多个动作的转换。
此转换沿特定维度解绑动作,并独立传递每个动作。返回的转换可以是收集到的观测值的堆栈,也可以仅是最后一个观测值(奖励同理,请参见下文参数)。
默认情况下,动作必须沿根 tensordict batch-dims 之后的第一个维度进行堆叠,即
>>> td = policy(td) >>> actions = td.select(*env.action_keys) >>> # Adapt the batch-size >>> actions = actions.auto_batch_size_(td.ndim + 1) >>> # Step-wise actions >>> actions = actions.unbind(-1)
如果遇到 “done” 条目,则跳过已达到该状态的 env 的后续步骤。
注意
如果 MultiAction 之前附加了转换,则该转换将被调用多次。如果它之后附加,则它将针对每个宏观步骤调用一次。
- 关键字参数:
dim (int, optional) – 相对于 tensordict
ndim
属性的堆叠维度。必须大于 0。默认为1
(batch-dims 之后的第一个维度)。stack_rewards (bool, optional) – 如果为
True
,则每个步骤的奖励将在输出 tensordict 中堆叠。如果为False
,则只返回最后一个奖励。奖励规范会相应调整。堆叠维度与动作堆叠维度相同。默认为True
。stack_observations (bool, optional) – 如果为
True
,则每个步骤的观测值将在输出 tensordict 中堆叠。如果为False
,则只返回最后一个观测值。观测值规范会相应调整。堆叠维度与动作堆叠维度相同。默认为False
。
- transform_input_spec(input_spec: TensorSpec) TensorSpec [source]¶
转换输入规范,使结果规范与转换映射匹配。
- 参数:
input_spec (TensorSpec) – 转换前的规范
- 返回:
转换后的预期规范