AI算法设计:纸牌游戏

5

目前我正在实现一款名为Briscas或Briscola的西班牙纸牌游戏,http://en.wikipedia.org/wiki/Briscola

简而言之,这是一种由两个2人团队对战的纸牌游戏(他们不能看到对方的手牌,甚至不包括队友),只有在开始时洗牌,然后每个玩家发三张牌。顺时针地,每个人都会出一张牌来尝试赢得这个回合。谁赢了这个回合就得分。然后,仍然按照顺时针方式,赢得上一轮的玩家从牌堆顶部取一张牌,接着是他/她左边的下一个玩家,以此类推。然后您将继续玩多轮,直到牌堆为空。谁的团队得分更高就赢了。

详情如下:

牌组大小:40
玩家:4人(2个2人团队)
卡片具有特定值。 (从0到11)

问题

我知道直接使用MiniMax算法太耗费时间了。通常用于这种纸牌游戏的算法是什么?
此外,您可以指出的任何文献也将有益。

谢谢


4
我认为Minmax不太适合,因为你缺乏其他玩家牌堆的信息。在我看来,蒙特卡罗方法更适合这种游戏。 - Gunther Piez
这个问题有一些指针:http://stackoverflow.com/questions/525016/any-good-card-game-ai-strategies - Anders Lindahl
@drhirsch 我同意你的看法。我在考虑使用蒙特卡罗算法和一些启发式方法。 - meteorfox
2
你是在尝试创建一个最佳玩家,还是在尝试制作一个对人类有趣的游戏? - Anders Lindahl
我想,我是在追求一个折中的方案。 - meteorfox
你解决过类似的简单问题吗,比如在牌组的最后一手中的1对1? - Beta
1个回答

3
这取决于你的野心有多大,但作为开始,你需要一个快速的引擎来模拟游戏。
然后你需要一个快速且可能简单的模型玩家。
这个模型玩家将没有时间向前计算。它只能在预定义状态下做出反应。因此,你的第一步是构建一个足够好的游戏状态。游戏状态应包括你的手牌和一些统计信息,例如已弃牌的牌以及玩家如何打出他们的手牌。
接下来,构建一个基于状态行动的模型玩家。要么
A)手写一个根据你定义的启发式方法进行游戏的玩家。但请记住-暂时不要进行重量级计算!
B)编写一个通用的玩家,但省略常量和截止值。使用你的模拟引擎和基于锦标赛选择的遗传算法来进化好的参数值。为了获得额外加分,请将你的玩家分为两个团队,使它们互补。
C)使用更多的人工智能,并让一个遗传编程系统(有几个成熟的系统可用。找到一个可以进行锦标赛的系统。你甚至可以自己实现一个,但不要太过分 :))根据你的状态作为输入来编写整个玩家。
下一步:
你可能已经拥有了一个伟大的玩家,并且可以认为自己已经完成了,或者你想让它变得更好。如果你想让它变得更好,那么你很幸运!
使用蒙特卡罗模拟来玩出大量的手牌,在某些情况下进行每个选择(如果我理解正确,总是有三种选择)。让你的模型玩家在每次选择时做出决策,并让你的蒙特卡罗模拟在每次播放模拟之间随机洗牌。
现在你应该拥有一个伟大的纸牌玩家!

此外,维基百科也是学习蒙特卡罗模拟、遗传算法和遗传编程的好起点。 - Gurgeh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接