我想使用强化学习,通过与自己对战来改善引擎。我一直在阅读有关该主题的信息,但我仍然很困惑。
警告:强化学习是一门复杂的大课题。尽管您可能会绕开玩游戏的机器人,但您可能想学习RL基础知识。萨顿和巴托强化学习:入门是一个不错的起点
在游戏中,输赢(1或0)部分还有什么其他奖励?
通常取决于您的游戏。实际上,对于像象棋这样的赢/输/输游戏,则每个动作的奖励为0,但最后获胜(+1)或失败(-1)。在零和游戏中,这与极小极大值,字母修剪等非常吻合。
强化学习旨在解决奖励延迟的环境。为临时非目标添加“帮助者”奖励通常会适得其反。
如果我使用其他奖励,例如每次评估函数的输出,该如何实现呢?
通常您不会。应用自弹式RL的目的是学习返回(有时称为Utility)功能,该功能可以预测游戏结束时您对总+ 1/0 / -1奖励的期望。您将用它来代替当前的启发式搜索以进行minimax搜索。或者,潜在地,您可以调整当前的启发式函数以在相同范围内输出,并使用RL优化其权重以对真实的最佳播放返回函数进行最佳近似(这可能太复杂而无法精确计算)。
如何修改评估函数,以在迭代后获得更好的回报?
这就是所有RL方法都尝试做的事情,有各种各样的求解器。没有简短的解释方式。您可以从Q-Learning之类的简单方法开始。Q-Learning学习Q(s,a)的估计值(称为动作值),它是处于状态s并采取动作a之后遵循最佳策略的预期回报。从学习环境中的每个步骤开始,它都会做出任意猜测,并将其提炼得更接近真实值。简单的表格Q学习器可以通过存储一张包含所有状态和动作的大表来进行优化,该表具有到目前为止对真实值的最佳估计,并根据经验对每个新估计进行平均。
还可以将用于启发式学习的RL方法与超前最小极大搜索相结合-这就是原始的AlphaGo所做的事情,以及AlphaGo Zero在训练过程中所做的事情。这是一种功能强大的方法,因为minimax搜索将用于仔细检查RL生成的启发式算法。尽管对于足够简单的游戏,RL可以学习完美的启发法,并且您只需要本地搜索(下一步应该是什么)。
除非您的游戏非常简单(所有可能的状态都适合内存),否则您将在RL算法中需要某种函数逼近器。神经网络是标准选择。这部分不可避免地要有东西 -尽管另一个不错的选择是定义一堆代理特征(您可能会用来手工构造试探法)并使用线性近似器-只是所有特征的加权总和。这可以很好地发挥作用,并且已经在使用RL训练的跳棋(草稿)球员中使用过。
实际上,只要您自己的启发式函数不太常见,您就可以像对待线性近似器一样对待它,并使用RL为其学习最佳权重。