如何修改Acme DQN策略网络适配字典观测空间实现非法动作掩蔽
字典观测空间下为DQN智能体修改掩蔽贪心策略的实现方法
- 调整策略网络的输入处理逻辑
你可以选择两种修改方式,按需选用即可:- 直接修改网络前向方法:在DQN网络的
call方法最开头添加代码obs = observation["your_key_for_observation"],后续所有特征计算、Q值输出逻辑都基于提取后的obs完成,不改动原有网络的核心计算逻辑。 - 新增输入包装层:如果不想侵入原有网络代码,可以在网络最外层加一个Lambda层做键值提取,示例代码为
tf.keras.layers.Lambda(lambda x: x["your_key_for_observation"]),包装后的网络会自动从字典观测中提取对应字段作为输入,耦合度更低。
- 直接修改网络前向方法:在DQN网络的
- 适配非法动作掩蔽的mask提取逻辑
因为你的观测是字典类型,合法动作标识存储在观测的另一个自定义键中,需要同步修改masked_epsilon_greedy逻辑中的mask读取部分:假设你存储合法动作标识的键为action_mask,把原有逻辑中取mask的代码替换为action_mask = observation["action_mask"]即可,不需要改动掩蔽计算、epsilon-greedy采样的核心逻辑,注意保持mask维度和动作空间维度完全匹配。 - 验证修改有效性
修改完成后先做单步前向测试:传入符合格式的字典观测,确认网络输出的Q值维度和动作空间一致,掩蔽后非法动作对应的Q值会被置为极小值,不会被采样策略选中即可。
内容的提问来源于stack exchange,提问作者Echo
相关产品推荐
相关产品推荐

