我想为Chrome的恐龙游戏(你可以在离线时玩的那个)实现Q-Learning算法。
我定义的状态包括:到下一个障碍物的距离、速度以及下一个障碍物的大小。
对于奖励,我希望使用成功通过的障碍物数量作为奖励,但可能出现相同状态下有不同即时奖励的情况。同一类型的障碍物可能会在游戏后期再次出现,但通过它的奖励会更高,因为已经通过了更多的障碍物。
我的问题是:这是否会造成问题,Q-Learning还能正常工作吗?如果不能,有没有更好的方法?
回答:
MDP的定义指出,奖励r(s,a,s')
被定义为在状态s
中采取行动a
到达状态s'
的期望奖励。这意味着给定的(s,a,s')
可以有恒定的奖励,或者有一定的奖励分布,只要它有一个明确定义的期望。正如你所定义的,奖励与通过的障碍物数量成比例。由于游戏可以无限进行下去,某些(s,a,s')
的奖励开始看起来像是自然数的总和。这个级数是发散的,因此没有期望。实际上,如果你运行Q-Learning,你可能会看到值函数发散(NaN值),但在学习过程中,策略可能会还可以,因为增长最快的值将是最佳状态行动对。
为了避免这种情况,你应该选择不同的奖励函数。你可以用它死亡时的得分作为奖励(在结束时给予大奖励,否则为零)。你也可以给予生存奖励(每个时间步长给予小奖励),只要代理没有选择只能向前移动。只要最高的总奖励分配给最长的运行(并且(s,a,s')
元组的奖励期望是明确定义的),就是好的。