2个
$\begingroup公司$

我正在为一个两人完全可观察的棋盘游戏创建一个RF Q-Learning代理,并想知道,如果我要使用对抗训练来训练Q表,我应该让两个“玩家”使用并更新同一个Q表吗?或者这会导致问题?

| 改进这个问题 | |
$\endgroup组$

    1个答案1个

    0个
    $\begingroup公司$

    我应该让两个“玩家”使用并更新同一个Q表吗?

    是的,这对零和游戏很有效,当玩家1想要最大化一个结果时(通常是“玩家1赢了”时+1),而玩家2想要最小化一个结果时(对于“玩家2赢了”时得分-1)。这改变了Q-学习等算法,因为贪婪的选择在最小和最大函数之间切换而不是动作值-玩家1的TD目标变成$R{t+1}+\gamma\text{min}{a'}[Q(S{t+1},a')]$因为下一个状态中贪婪的选择被玩家2拿走。

    或者,如果玩家之间的状态从来没有重叠,那么你可以学习一个Q函数,它总是根据当前玩家返回未来的预期收益。如果有必要,这可以通过制作轮到谁的州记录的一部分来强制执行。有了这个,你需要一种方法来转换玩家1和玩家2之间的得分,以便使用Q学习更新。对于零和游戏,那么来自玩家2状态的Q值是该状态下玩家1的值的负值,反之亦然,因此两个玩家的TD目标改变为$R{t+1}-\gamma\text{max}{a'}[Q(S{t+1},a')]$

    第一个选项可能会导致学习函数的复杂度稍微降低,如果使用函数逼近和学习Q函数(例如使用神经网络而不是Q表),这可能是一个问题。那个可以结果是更快的学习和概括,虽然这将取决于游戏的细节。

    或者这会导致问题?

    没有大问题。我正在进行这样的训练-一个单一的Q函数估计一个全球得分,P1最大和P2最小-为Kaggle Connect X竞赛,而且效果很好。

    我能想到几件小事:

    • 您可能仍然希望每个玩家都能使用不同版本的表或学习的Q函数。这将允许您让不同版本的代理(例如,在不同的学习阶段)进行竞争,以评估不同的代理。为此,您必须编写代码,允许在任何情况下使用多个表或函数。

    • 当你使用这个表时,你需要记录下两个球员的表现和他们的对手目标的实现,正如你已经看到的,上面修改的TD目标。这在添加前瞻性计划时变得更加重要,前瞻性计划是一种常见的添加,可以显著提高代理的性能-在前瞻性计划期间,必须在玩家视图之间切换,以确定最佳的操作选择。在代码的某些部分可能会出现一个错误,而不是其他错误,从而使代理学习不一致。

    | 改进这个答案 | |
    $\endgroup组$

      你的回答

      点击“发布您的答案”,您同意我们的服务条款,隐私政策cookie策略

      不是你要找的答案?浏览其他标记的问题必威英雄联盟必威电竞问你自己的问题.