【问题标题】:Needed advice for an enjoyable AI in Buraco card game在 Buraco 纸牌游戏中获得令人愉悦的 AI 需要建议
【发布时间】:2018-03-04 08:35:20
【问题描述】:

我正在尝试为Buraco 纸牌游戏(2 人和 4 人)构建一个有效的 AI。

我想避免启发式方法:我不是游戏专家,在我以这种方式开发的最后几款游戏中,我通过这条路径获得了平庸的结果。

我知道montecarlo tree search algorithm,我将它用于跳棋游戏,结果离散,但我对最近其他机器学习选项的成功感到非常困惑。

例如,我在堆栈溢出中发现了 this answer,这真的让我很困惑,它说: “再说一遍:构建一个可以与自己对抗的机器人。一个常见的基础是函数 Q(S,a),它为任何游戏状态和玩家的可能动作分配一个值——这被称为 Q 学习。这函数通常被实现为神经网络……尽管我认为这里不需要那么复杂。”

我对机器学习非常陌生(这应该是强化学习,对吧?),我只知道一点 Q-learning,但这听起来是个好主意:我带着我的机器人,与自己对战,然后它从结果中学习……问题是我不知道如何开始! (无论这种方法好不好)。

你能帮我找到正确的方向吗? Q-learning 策略是否适合我的领域? Montecarlo 仍然是我的最佳选择吗? 它在像 Buraco(2 个对手和 1 个队友)这样的 4 人游戏中是否有效? 还有其他我忽略的方法吗?

PS:我的目标是为休闲应用开发一个有趣的 AI,我什至可以考虑让 AI 作弊的可能性,例如通过查看玩家的手牌或牌组。即使有了这个,嗯,许可我将无法建立一个好的启发式,我认为:/

谢谢大家的帮助!

【问题讨论】:

  • 选择 MCTS。是的,强化学习很有趣,也很强大,但是:获得成功要困难得多。进行自我游戏时的自相关等问题真的很痛苦。此外:您通常需要将 RL 学习的函数逼近器与 MCTS 或 AlphaBeta 相结合才能具有竞争力(就像在 AlphaGo 中使用的那样)。这是很多工作,甚至可能会使用大量资源。例如,AlphaGo 是从历史游戏中引导出来的,纯粹的自我博弈学习是痛苦的。除此之外:围棋是一个具有完整信息的确定性游戏,而你的可能不是。如果是随机的 -> 痛苦。
  • @sascha:MCTS 是强化学习理论中的一个特殊变体,参见例如第 8.7 章。当前的Sutton and Barto draft。强化学习并不意味着自我发挥。
  • @davidhigh 是的,MCTS ∈ RL。但这与我的评论并不冲突,尤其是在作者谈到不使用我在 RL 视图中考虑和提到的近似值函数之后,AlphaGo 也使用了。
  • @sascha:我的评论只是作为...评论:-)。你的很有价值,所以谢谢。
  • @Giggioz 你在这方面有什么进展吗?我也有兴趣做同样的事情,我想知道你能走多远。也许我们可以一起工作。

标签: machine-learning artificial-intelligence montecarlo


【解决方案1】:

编辑:再次考虑您在 MCTS 方面的知识和您对检查器的实施,我认为我的回答过于教学化了——如果您了解 MCTS,您可能对此很了解。尽管如此,我希望它有所帮助。欢迎在 cmets 中提出具体问题。


我是建议你打开一个新问题的人,所以我觉得我至少应该在这里给出一个答案。然而,在开始的时候,我想澄清一下这里应该期待什么。您所要求的事情非常复杂,需要一些扎实的实现经验。我有机会为很多游戏实施最佳策略,我认为这仍然是一个巨大的挑战。所以我认为这里的目标是获得一些概述——而不是一个合适的解决方案(我无论如何都无法给出,因为我不知道 Buraco 的游戏)。

如另一个答案所述,强化学习理论提供了坚实的基础。一个很好的介绍是萨顿和巴托的同名书。它非常易读,我建议通读前五章左右(其中包括动态编程和蒙特卡洛)。这本书有两点不足:(i)它没有明确应用到两人游戏,(ii)它主要依赖于价值函数的表格表示(没有神经网络等)参与)。

实现的一个基本部分是游戏的状态S。此状态应尽可能紧凑且非冗余地捕获游戏的完整当前状态。此外,对于每个状态S,您需要能够分配可用的操作A(例如拿卡)。此外,根据您要应用的方法,了解概率分布 p(S'|S,A) 会有所帮助,当您处于状态 S 并执行操作 A 时,该概率分布给出了最终处于状态 S' 的概率。最后,当您处于状态S 时,您需要指定奖励r(S'|S,A) 并执行操作A 以结束S'(对于两个玩家零和游戏,可以很容易地选择奖励:当S' 是你赢的状态,你得到+1 作为奖励,如果你输了-1,否则0——但这不适用于有更多玩家的游戏或非零和游戏)。

从给定状态S,您可以进一步推导出单个玩家看到的简化状态S_P1S_P2等。这些状态捕获特定玩家的信息(这当然少于完整状态——例如,玩家不知道对手的牌,也不知道牌组中牌的顺序)。这些简化的状态提供了玩家做出决定的基础。所以,玩家 1 的目标是获得一个函数Q_1(S_P1, A),它告诉他:当我处于状态S_P1 时,我最多应该执行A 的动作(这就是Q-learning 的想法)。其他玩家也是如此。必须对这些功能进行训练,才能得出最佳结果。

这样做的方法是通过强化学习的中心方程,即贝尔曼方程。有几种解决方法,如值迭代、蒙特卡洛(这基本上是您在链接中引用的方法)、时间差异方法等。其中一些方法可以解释为您的数字播放器反复相互对抗,并在此过程中希望各自变得更好。但是,这并不能保证,就像在任何优化问题中一样,很容易陷入局部最小值。充其量,你手头已经有一个优秀的数字玩家(从某个地方),并且你只训练一名玩家来击败他——这样你就可以将两人问题简化为更容易的单人问题。

我会在这里删减一下,因为从书中掌握这些东西确实更好,而且因为我知道这个答案实际上对你没有帮助,即使它有 10 页长。最后一个建议是如何进行的:(i)从书中获得基础,(ii)在其中实现一些玩具问题,(iii)将这些东西扩展到两个玩家游戏 - 另请参见极小极大定理,(iv)解决一些更简单的游戏(比如井字游戏,即使这需要很长时间),(v) 熟悉神经网络和所有这些东西,以及 (vi) 解决 Buraco 问题——然而,这是一个艰难的程序。

【讨论】:

  • 大卫,非常感谢您在此答案中所做的努力,我真的很感激。在过去的两天里,我尽可能多地了解机器学习的主题,以便能够在所有这些术语和概念中导航。我承认我很高兴现在与两天前相比对您的答案有了更好的理解:) 但是您的评论将这种方法描述为一项艰巨的任务,我只是 ML 领域的初学者,这似乎不是最好的研究案例开始。我可能会选择不同的路径,可能是启发式和 MCTS 的混合)。
  • 也感谢这本书,我一定会检查的。我从这两门课程开始了我的学习之路:udemy.com/deeplearning/learn/v4/contentudemy.com/artificial-intelligence-az/learn/v4/content,我不得不说它们非常完整且组织良好。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-08-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-06
相关资源
最近更新 更多