我最近参加了RL课程,我正在为电源管理应用程序编写一个Q-learning控制器,我有连续状态和离散动作。我正在使用神经网络(Q网络)来近似动作值并选择最大动作值。像任何控制系统一样,我对代理不能违反的变量有一定的约束或界限。比如,如果我的控制器(代理)动作要对电池放电或充电,则所产生的能量分别不能小于或大于最大容量。
我想了解如何在动作选择或值近似例程中添加这些约束?想到两种方法
(1)假设我正在为T步骤运行一集。在每一步,我将当前状态输入到Q网络并选择最大动作值。采取此行动后,如果我的约束被违反,我可以分配一个巨大的负面奖励,如果不是,我可以分配相关的奖励。最终将避免所有获得巨大负面回报(对应于不良行为)的行为,因此代理将在模型约束内操作。但是,如果我从最优化的角度考虑,不应该采取这样的行动,因为它们不属于允许的区域。理想情况下,我应该停止迭代,因为所有顺序操作都是不可接受的。这将导致严重的数据浪费。
(2)其次,我将当前状态提供给Q-network,选择与最大Q值对应的动作并检查约束。如果违反IF,我将采取与第二高Q值相对应的动作并重复,直到我的约束满足为止。但这会导致最优性吗?
我认为这可能是一个反复出现的问题,同时训练涉及多个变量约束的自动控制系统。非常高兴得到您的反馈!
答案 0 :(得分:1)
我会说选项(1)更可取,通常会做什么。如果你真的不想执行某个动作,就不要停止这一集(并给予巨大的负面奖励)。关于选项(2),我认为它不会导致最优。
此外,Q-learning是一种非策略算法。这意味着您可以使用其他采样器策略收集的样本来训练目标策略,这些策略可以更安全"并避免危险的行为。然而,由于勘探减少,这可能需要更多时间。
无论如何,这是RL中一个非常常见的问题。我建议你看看成本敏感的探索"在Google上,你会发现一些关于你的问题的有趣研究。
回复评论
我没有完全明白。您是否已经拥有元组(s,a,r,s')
的数据集? (由任何代理/政策收集)。如果是这样,请不要停止剧集,只是学习(使用批量算法,如拟合Q迭代)。如果您必须在线收集数据,我建议您停止:您收集一个操作,通过Q-learning更新规则更新策略,然后继续该剧集。如果是这种情况,并且安全是您最关心的问题,那么只要发生不允许发生的事情,就停止这一集。
我看到的唯一问题与&#34相关;需要学习很多东西"如果你的真正目标是"远在时间" (例如,你在一段时间后给予积极的奖励)并且代理人很难体验它。然而,这是不可避免的:在安全/学习时间和#34;之间始终存在妥协。以及"勘探/开采"。