【发布时间】:2020-08-17 06:51:28
【问题描述】:
我还是 ML 新手,最近我学习了 Q-Learning 并手动编码(不使用 Keras 或 TensorFlow 之类的库),我面临的问题是知道如何编写一个好的奖励函数对于我的代理,我首先编写了以下简单的奖励函数:
从 X、Y 移动到 X1、Y1 时: 返回(距离(从 X、Y 到目标)- 距离(从 X1、Y1 到目标))
这意味着它在向目标移动时获得了正奖励,并且在空的 2D 平原上运行良好。
但是当我添加障碍物时,该功能没有帮助,代理采取最短路径到达目标,永远卡在障碍物中,我增加了停留在原地的惩罚,它再次卡在墙上,但这次走了来回,因为惩罚+奖励的总和为0,并且已经得到了正奖励,所以这是有利的路径。 然后我加了两次通过同一个方块的惩罚,但我还是觉得这可能太复杂了,必须有更简单的方法来做到这一点
起始位置(绿色为代理,红色为目标)
陷入阻塞的最短直接路径
在阅读了一点奖励之后,我意识到我对奖励的理解/做错了很多事情,从让我的奖励一次性提高到 2k,而不是在 [-1, 1] 范围内,并且没有明确区分何时使用负奖励和正奖励。
我的状态与动作的内存数组包含 n 个状态,其中 n=rows*columns 和 5 个动作(上、右、下、左、原地)。
所以,知道我的代理应该找到到目标的最短可用路径(未阻塞),我的奖励函数应该是什么样的?为什么? 同样按照我学习的算法,他们并没有真正指定 Epsilon、Gamma 和 LearningRate 的值,所以我将它们分别设置为 0.2、0.85、0.75。
如果你想在代码中发送奖励函数,我的代码是在 python 中的。
PS:我在 StackOverflow 上和下搜索了这个问题,我发现的只是参考资料和文章,所有这些都解释了奖励函数应该做什么,但没有详细说明如何做到这一点,或者将我的查询变成奖励函数。
这是我在 Github 上的代码文件(无 GUI):https://github.com/EjHam98/LearningMachineLearning/blob/master/QLearning.py
【问题讨论】:
-
尝试使用:-1 奖励形式每一步(这迫使代理学习最短路径),一些更多的负面奖励来击中障碍和一些积极的奖励达到目标
-
我尝试每一步都返回 -1,或者返回 -1*n,其中 n 是到目前为止的步数,两者都不起作用,我知道它不起作用,因为我需要最短可用路径,不一定是到目标的最短距离,如图中的示例所示,因此惩罚较长的路径意味着不鼓励代理使用正确的路径,因为它更长。基本上,代理必须与回溯类似地工作
-
“惩罚更长的路径意味着不鼓励机器人走正确的路径,因为它更长”我不认为这是真的。 -1 奖励阻止它重复相同的步骤并鼓励代理尽快达到目标。当您正在训练 DQN 代理时,您所考虑的
observation也很重要,请检查一下。 -
最好将表示环境状态的二维网格作为观察。并将其与之前的一些观察结果叠加,形成 Agent 的状态表示。并使用 CNN 作为函数逼近器。
-
我开始认为我的代码/理解非常错误,我已经研究过 CNN,但是在学习 Qlearning 时没有提到 CNN,这是我的代码所遵循的链接:towardsdatascience.com/…。好吗?够了吗?
标签: python q-learning