rllib 示例中提供了参数/可变长度动作模型。该示例假设输出是单个分类操作 dist 的 logits。如何使用更复杂的输出来完成这项工作?
例如,一个盒子里有 200 个不同的球。每步 2 球被捡起并放回。动作空间可以定义为 Multidiscrete([200, 200]) 或 Tuple((spaces.Discrete(200), spaces.Discrete(200)))。
有 3 个限制使某些操作无效。
- 每次2个球都不一样。所以像 (1,1) 或 (2,2) 这样的动作是无效的。
- 相同颜色的球不允许一起捡。比如2号球和3号球都是黄色的,所以在某些状态下不能一起捡。所以 action(1,2) 在那个状态下是无效的。
- 有些球在特定状态下是不允许捡的。例如,当 2 号球被标记为不允许捡球时,所有与 2 号球类似的动作 (1, n) 或 (n,1) 的动作都无效。
如何通过 rllib 中的动作屏蔽来强制执行这 3 个约束。
假设我们的 obs 空间有 2 个部分。第一个约束是隐含的。可以在没有观察空间的情况下确定无效动作。对于第二个约束,A real_obs用一个表示颜色的数字标记每个球。相同号码的球不允许一起捡。对于第三个约束,一个指示是否允许捡球的action_mask 。
具体来说,如何在自定义模型中实现动作/观察空间和前向功能?
如果我对 obs 空间的假设是不可行的。您可以定义您的 obs 空间和相应的自定义模型。