我曾尝试在 Keras 中使用 DQN,但我不确定我使用的是正确的状态变量/奖励。
您有多种有效的选择。由于它是一个简单的控制和学习场景,只要您涵盖了基础知识(稍后描述),那么您选择的不同之处在于您使代理学习变得多么容易。您可能实际上想要设置一些东西,以便有一定的难度级别,这样您就可以比较不同的代理设计。您不一定需要这里的“最佳”状态表示和奖励函数设计。只是一些工作。
国家代表
最重要的因素是您的状态具有马尔可夫属性- 它包含足够的信息,代理确实可以预测预期的未来奖励。
存在随机性是可以的,但通常不存在对结果产生重大影响的重要隐藏变量。如果环境中有这样的变量,但在状态表示中没有,那么像 DQN 这样的简单代理就会遇到困难。
奖励功能
奖励功能应该捕获您感兴趣的最终目标,并且理想情况下尽可能简单和纯粹。大多数 RL 方法的目的是最大化预期的奖励总和,它们是为处理稀疏性而构建的——你不需要两次帮助或发出相同的信号或为“接近”等给予奖励,尽管有时这如果做得好可以提高学习速度。
我还写了一个关于奖励函数设计的更全面的答案,作为在给定状态下决定每个动作的奖励的答案(Q-learning)
目前,状态变量是狼的速度向量,狼到兔子的距离向量。
这似乎是合理的。请考虑对于神经网络,您将希望将这些规模保持在一个不错的范围内,例如所有特征的 -1 到 +1。因此,您可能希望从用于环境中的值的任何内容进行扩展。
您可以通过使用极坐标使这个问题更容易学习。这消除了神经网络在决定左转或右转更好时解决固有三角问题的需要。我已经解决了一个非常相似的追踪 RL 问题,并在笛卡尔坐标和极坐标之间进行了比较,基于 DQN 的代理的两种表示之间的差异非常大。
特别是对于最简单的学习,您需要代理当前航向和目标之间的差异向量,表示为航向差加上要走的距离。如果你这样做,有时最初的随机神经网络已经可以有效地解决问题。
但是,您可能会很感兴趣,看看不同的代理如何解决将矢量坐标和速度的差异转换为转向方向的三角问题。您甚至可以让它变得更难,并为代理和目标提供绝对位置坐标,加上代理速度(3 个向量而不是 2 个),这需要神经网络在解决问题之前逼近更复杂的数学。
每个时间点的奖励为负当前时间。当狼抓到兔子时,奖励是 1000 - 当前时间(狼跑太久会受到惩罚)。
这应该可行,但似乎比您需要的要复杂。您已经在追逐过程中的每个时间步对狼进行了惩罚,因此没有必要为最终奖励制定任何额外的公式。事实上,如果你达到了令人满意的目标,你可以只得到 0 的最终奖励(假设没有你希望它避免的不令人满意的终点——也许你以后可能会让环境变得更棘手?)。代理将简单地尝试快速解决事件,因为这仍然会使(负总)回报最大化。
另一种方法可能是奖励一些捕捉兔子的价值,例如+10,每个时间步为零。然后,为了鼓励快速解决,您需要使用折扣,以便代理认为离兔子更近而不是更远,因为潜在的奖励是更少的时间步长。
也不需要使用大的值。价值观是相对的,所以如果你有一些小问题要解决加上一个主要目标,有时值得拥有广泛的价值观。在这里你不需要它。具有 1000 的值可能会挑战您的神经网络以正确学习(因为狼第一次抓到兔子时的误差会很大,可能会导致权重大步 - 足以破坏 NN 中的学习),没有真正的益处。
对于您的第一个奖励方案,我建议使用固定奖励,例如每个时间步 -1,并在狼抓到兔子时结束这一集。没有乘法或偏移。
如果你有一个非常大的区域可供狼探索,而狼需要与兔子之间的距离才能抓住它,那么靠近兔子可能会有所帮助。最简单的实现和学习就是狼和兔子之间的距离差异吨和t + 1乘以一些小因素,将其置于与每个时间步的惩罚相似的范围内。请注意,如果您将此奖励扩展到任何显着距离,它应该会使学习问题变得更加容易(结合极坐标和这个奖励系统将使 DQN 学习变得非常容易 - 它应该只需要几集就可以接近最优行为,如果你的学习超参数对 DQN 有好处)。
在没有任何接近奖励的情况下,你将依赖狼通过随机行为直接撞到兔子,然后它才会有任何数据示例表明它与兔子之间的向量接近 (0,0) 是一件好事。您可能需要具有相对较大的捕获半径,并限制狼(最终是兔子)可以探索的区域,以避免最初没有学到任何东西的非常长的随机行为序列。