我最近参加了一个强化学习课程,正在为一个电力管理应用编写Q学习控制器,该应用具有连续状态和离散动作。我使用神经网络(Q网络)来近似动作值并选择最大动作值。像任何控制系统一样,我对变量有一些不能被代理违反的约束或界限。例如,如果我的控制器(代理)的动作是放电或充电电池,结果能量不能低于0或高于最大容量。
我想了解如何在动作选择或值近似过程中添加这样的约束?我想到了两种方法
(1) 假设我运行一个T步的回合。在每一步,我将当前状态输入到Q网络中并选择最大动作值。采取这个动作后,如果我的约束被违反,我可以分配一个巨大的负面奖励,如果没有,我可以分配相关的奖励。最终,所有获得巨大负面奖励的动作(对应于不良行为)都会被避免,因此代理将在模型约束内运行。然而,从优化角度来看,这样的动作永远不应该被采取,因为它们不落在允许的区域内。因此,理想情况下,我应该在那里停止迭代,因为所有后续动作都将不可接受。这将导致数据的严重浪费。
(2) 其次,我将当前状态输入到Q网络中,选择对应于最大Q值的动作并检查约束。如果违反,我将采取对应于第二高Q值的动作,并重复直到我的约束得到满足。但这是否会导致最优性?
我认为这可能是在训练涉及多个变量约束的自主控制系统时经常遇到的问题。非常希望得到您的反馈!
回答:
我认为选项(1)更可取,也是通常的做法。如果您真的不想执行某个动作,就不要执行并停止回合(并给予一个巨大的负面奖励)。关于选项(2),我认为它不会导致最优性。
另外,Q学习是一种离策略算法。这意味着您可以使用由其他“采样策略”收集的样本来训练您的目标策略,这些策略可以更“安全”并避免危险动作。然而,这可能需要更多时间,因为探索减少了。
无论如何,这是强化学习中一个非常常见的问题。我建议您在Google上搜索“成本敏感探索”,您会发现一些关于您问题的有趣研究。
回复评论
我不完全理解。你是否已经有了一组元组(s,a,r,s')
的数据集?(由任何代理/策略收集)。如果是,请不要停止回合,只需学习(使用批处理算法,如拟合Q迭代)。我建议您在需要在线收集数据时停止:您收集一个动作,通过Q学习更新规则更新策略,然后继续回合。如果是这种情况,并且安全是您的首要考虑因素,只要有不允许的事情即将发生,就停止回合。
我看到的唯一与“学习时间过长”相关的问题是,如果您的真正目标“在时间上较远”(例如,您在一定时间后给予正面奖励),对于代理来说体验它将是困难的。然而,这是不可避免的:在“安全/学习时间”和“探索/利用”之间总有一个折衷。