在rllib示例中提供了一个参数/可变长度的动作模型。该示例假设输出为单个分类操作dist的逻辑。如何用更复杂的输出来完成这项工作?
例如,一个盒子里有200个不同的球。每一步第2步球都会被摘下来放回去。动作空间可以定义为多重离散(200,200)或元组(spaces.Discrete(200),spaces.Discrete(200))。
有3种限制使某些操作无效。
如何通过rllib中的动作掩蔽来强制执行这三个约束。
假设我们的obs空间有两个部分。第一个约束是内嵌的。无效动作可以在没有观察空间的情况下确定。对于第二个约束,A real_obs用指示其颜色的数字标记每个球。同一号码的球不允许一起摘。对于第三个约束,一个action_mask,它指示是否允许选择球。
具体来说,如何在自定义模型中实现动作/观察空间和前向函数?
如果我的obs空间假设是不可行的。您可以定义您的obs空间和相应的自定义模型。
发布于 2021-05-05 10:41:42
我也遇到过同样的问题。最大的问题是你的两个动作之间的依赖性(例如不能两次接同一个球)。所以你能做的一件事就是把它们相乘,这样你就有了一个很大的200x200=40000动作空间。然后,您可以在env中创建完整的掩码,并将其传递给掩蔽的前向函数。其他明智的做法是,您需要使用依赖的动作采样和分布。
对我来说,乘法不是一个选项,因为它将是巨大的。所以我做了如下的方法:
https://stackoverflow.com/questions/66405687
复制相似问题