我正在尝试使用stable-baselines
为RL问题设置环境。假设动作空间由如下几组动作组成。
第1组:30项行动第2组:30项行动第3组:10万次操作第4组:30次行动
在单个事件中,允许智能体从每个组中选择一个动作,直到从所有组中选择了一个动作。一旦从组中选择了一个动作,它就不能从该组中选择,直到情节结束和环境重置。还有一个“完成”动作,允许代理在从所有组中进行选择之前提前结束事件。
我的问题是,当使用稳定基线时,如何防止代理从同一组中选择多个操作?
我尝试在选择无效操作时将奖励惩罚为-inf
,但由于操作数量庞大,代理一直卡在第3组中,导致情节无限期持续。当我从纯PyTorch实现DQN时,我能够手动屏蔽模型的输出logits并将动作的概率设置为0,但当使用稳定基线时,我没有这种访问权限。
1条答案
按热度按时间33qvvth11#
在sb 3-contrib存储库中,有一个算法允许使用屏蔽无效操作:MaskablePPO。它不是DQN,但在某些环境中应该以类似的方式工作。
关于创建一个屏蔽的DQN实现,这仍然是一个悬而未决的问题,你可以找到here。