Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Machine learning 需要在Buraco纸牌游戏中提供令人愉快的AI建议_Machine Learning_Artificial Intelligence_Montecarlo - Fatal编程技术网

Machine learning 需要在Buraco纸牌游戏中提供令人愉快的AI建议

Machine learning 需要在Buraco纸牌游戏中提供令人愉快的AI建议,machine-learning,artificial-intelligence,montecarlo,Machine Learning,Artificial Intelligence,Montecarlo,我正在尝试为纸牌游戏(2人和4人)建立一个有效的AI 我想避免启发式方法:我不是游戏专家,在我用这种方法开发的最后一个游戏中,我用这种方法获得了平庸的结果 我知道,我曾用它玩过一个跳棋游戏,结果是离散的,但我真的被最近其他机器学习选项的成功搞糊涂了 例如,我在堆栈溢出中发现了一个让我非常困惑的问题,它说: “同样地,建立一个可以与自身对抗的机器人。一个共同的基础是函数Q(S,a),它为玩家的任何游戏状态和可能的行为分配一个值——这称为Q-学习。这个函数通常被实现为一个神经网络……尽管我认为它在这

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

我想避免启发式方法:我不是游戏专家,在我用这种方法开发的最后一个游戏中,我用这种方法获得了平庸的结果

我知道,我曾用它玩过一个跳棋游戏,结果是离散的,但我真的被最近其他机器学习选项的成功搞糊涂了

例如,我在堆栈溢出中发现了一个让我非常困惑的问题,它说: “同样地,建立一个可以与自身对抗的机器人。一个共同的基础是函数Q(S,a),它为玩家的任何游戏状态和可能的行为分配一个值——这称为Q-学习。这个函数通常被实现为一个神经网络……尽管我认为它在这里不需要那么复杂。”

我对机器学习非常陌生(这应该是强化学习,对吧?),我只知道一点Q-Learning,但这听起来像是个好主意:我拿着我的机器人,和它自己玩,然后它从它的结果中学习……问题是我不知道如何开始!(而且这种方法是否好也不知道)

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

PS:我的目标是为一个偶然的应用开发一个令人愉快的人工智能,我甚至可以考虑通过看玩家的手或甲板来做人工智能欺骗的可能性。即使这样,EHM,许可我也不能建立一个好的启发,我想://P>


谢谢你们的帮助!

编辑:再次考虑一下你们在MCTS方面的知识和你们对Checker的实施,我认为我的回答过于教条化——如果你们了解MCTS,你们可能知道很多。不过,我希望这会有所帮助。请在评论中自由提问具体问题


我是建议你提出一个新问题的人,所以我觉得我至少应该在这里给出一个答案。然而,在一开始,我想澄清一下这里应该期待什么。你所要求的东西非常复杂,需要一些坚实的经验来实现。我有机会为你实施最佳策略相当多的游戏,我会认为这仍然是一个沉重的挑战。所以我认为这里的目标是得到一些概览-而不是一个适当的解决方案(我无论如何不能给出,因为我不知道游戏的Burac)。 正如在另一个答案中所说的,强化学习理论提供了一个坚实的基础。一个很好的介绍是Sutton和巴尔托的同名著作。它真的很可靠,我建议通过前五个章节(包括动态编程和蒙特卡洛)。这本书的不足之处有两点:(i)它没有明确地应用于两人游戏,以及(ii)它主要依赖于值函数的表格表示形式(不涉及神经网络等)

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

从一个给定的状态
S
,你可以进一步导出单个玩家看到的简化状态
S_P1
S_P2
,等等。这些状态捕获特定玩家的信息(这当然比完整状态要小——玩家不知道对手的牌,也不知道牌组中牌的顺序)。这些简化状态提供了玩家做出决策的基础。因此,玩家1的目标是获得一个函数
Q_1(S_P1,a)
这告诉他:当我处于状态时,我最多应该做动作
A
(这是Q-learning的概念)。其他玩家也是如此。这些功能必须经过训练,以获得最佳结果

方法是通过强化学习的中心方程Bellman方程。有几种解决方法,如数值迭代法、蒙特卡罗法(这基本上就是您在链接中引用的方法),时间差分法,等等。其中一些方法可以解释为你们的数字播放器,它们反复地相互对抗,在这个过程中,希望彼此都能变得更好。然而,这并不能保证,很容易陷入局部极小值,就像在任何优化问题中一样。充其量你们已经有了一个好的数字播放器在手边(从某处),你只训练一名球员来击败他——这样你就把两名球员的问题简化为一名球员的问题,这要容易得多

我将在这里做一个删节,因为这本书中的内容更容易理解,而且因为我知道这个答案即使有十页之长,实际上也帮不了你