纸牌游戏AI的最佳技术


27

我正在尝试为纸牌游戏开发AI,但对于应该使用的技术/算法有些困惑。以下是有关游戏的一些假设:

  • 在将纸牌分发给玩家之后,就没有随机性了。我的意思是,每个玩家都可以选择自己玩的纸牌,但不会像在游戏开始时分发纸牌那样进行随机处理。
  • 已经播放过的纸牌有一定的限制。
  • 赢得花样的玩家先玩。例如,玩家1玩纸牌,玩家2玩纸牌赢。然后玩家2玩纸牌,然后玩家1玩。

我知道很多提示/规则(例如,如果我知道玩家拥有A,B,C卡,那么我应该玩D),这有助于我赢得比赛。因此,我首先想使用贝叶斯网络描述这些规则。问题是我不知道分配任何概率,但是我可以使用玩过的游戏(针对人类)的历史来计算启发式算法。第二个问题是,我很可能不了解所有规则,并且AI需要一些隐式规则才能找到最佳游戏。

我不确定这是否是为此类纸牌游戏开发AI的好方法?

我也想知道是否还有其他最适合该问题的技术。例如,我查看了minimax(也许使用了修剪算法),但是对于这个问题将是一个很好的选择吗?我不确定,因为最重要的比赛是在游戏开始时,未知参数最高(大多数纸牌尚未玩过)。


1
好问题!没有完整的答案。我只想添加2c:如果您知道游戏可以进入的所有可能状态,那么从理论上讲,Minimax是遍历该游戏状态树的好方法。如果该游戏的状态树太大,可能会引起性能问题...
Shivan Dragon

1
游戏的目标是什么?谁赢?玩家是否有可能在任何给定时间估算自己赢得比赛的机会?

我无法详细解释游戏。要赢得一个,必须获得最高分(比另一个玩家多)。刚开始时,很难/不可能说我们是否要赢。最后,如果一个人已经有足够的积分,我们可以确保获胜(另一位玩家再也无法赢得足够的积分来获胜)。
LaurentG

1
游戏是《心石》吗?:)
Lescai Ionel

1
看起来我和您的处境非常相似,还有纸牌游戏,还有本地游戏(虽然不是瑞士),并且我也在尝试了解我的起点。我发现有趣的一件事是进化器,您可以在其中将DNA分配给虚拟玩家,然后将它们相互竞争。你杀死了那些松散的人,然后孕育了赢家。结果可能是相当不错的AI机器人。我还没有弄清楚这个tropiceuro.com/puerto-rico-evolver如何适应我的纸牌游戏,但我认为这是可能的。
Andrew Savinykh

Answers:


11

您的示例听起来与Bridge类似。顶级桥牌游戏系统使用蒙特卡洛方法来选择移动。在高层次上:

  • 确定每张纸牌在给定手中的概率。您可以肯定地知道手中有哪些牌以及已经玩过哪些牌。根据已玩过的纸牌以及可能涉及到的玩家的出价,确定所有其他纸牌的概率。首先,您可以仅以幼稚且相等的概率将某张牌拿到某位玩家的手中。
  • 现在,尽可能多地运行“虚拟”游戏。模拟您手中的纸牌,然后使用游戏规则和概率来确定对手的反应。对于每个虚拟游戏,请使用您的概率将牌分配给玩家,然后快速模拟游戏。假设每个球员都将发挥自己的最大能力。您知道虚拟游戏中的所有纸牌,因此可以使每个玩家玩得尽善尽美。
  • 当您进行了可靠的抽样(或时间用完)时,请选择最常使您获得最佳结果的合法举动。

一旦工作成功,就可以添加各种丰富的策略。例如,根据玩家的历史打法改变您的概率,根据玩家的风格(被动,谨慎,进取)改变概率,甚至考虑特定玩家一起玩的效果。


根据LaurentG的评论进行编辑:

最终,您可能想放弃让所有玩家都玩得尽善尽美的想法,而代之以更现实的东西。从概念上讲,将某张牌在某人手中的概率(卡分配)与玩家在该张牌中使用给定法律卡的概率(卡选择)分开。

选择卡片的学习时机已经成熟。如果您跟踪游戏中的玩法,则可以根据手中的纸牌和已玩过的纸牌了解给定玩家(或一般玩家)的玩法。您甚至可以幻想并为他们对隐藏在其中的卡片的假设建模。

还有分发卡的学习机会。玩家过去在手牌中的出价和牌选择可能揭示出他们手牌中隐藏的内容。在构建每个虚拟游戏时,您可以使用历史数据来调整概率。


感谢您的有趣回答。没错,游戏与Bridge共享一些规则。据我了解,您的AI不会比您的代码更好。有没有办法使用蒙特卡洛方法并使AI学习?是否可以使用(以前所有游戏的)过去事件为每张纸牌分配概率?
LaurentG 2013年

您绝对可以使AI学习。诀窍是将卡在特定手中的概率与玩家在手中握有特定法律卡的概率区分开来。我将在上面详细说明。
科尔宾

6

最近的个人经历:

我本人一直在从事纸牌游戏(Bisca,2人葡萄牙语游戏),并且使用蒙特卡洛方法取得了良好的效果,特别是使用了最新的信息集蒙特卡洛树搜索算法(ISMCTS,在Python的示例源代码,位于http://www.aifactory.co.uk/newsletter/2013_01_reduce_burden.htm)。

仅凭游戏规则的知识,它就可以发挥出合理的效果,并且具有偶尔的错误动作。我目前正在尝试改进它,以便能够对其进行增强,因为根据我所读到的信息(及其“父级” MCTS),可以通过启发式方法(http:// www .orangehelicopter.com / ed / papers / aiide13.pdf)和对手卡片推断。


1
这篇文章很难阅读(文字墙)。您介意将其编辑为更好的形状吗?
蚊蚋

感谢您对此问题有实际经验的人的回答。很棒的链接!
luben 2014年

3

我认为这取决于游戏规则。

这是我从您的问题中了解的内容:

  • 游戏每轮进行一次,每个玩家每轮打一张卡
  • 首先进入的玩家可以玩任何他想要的牌
  • 第二名的玩家只能玩某些牌,具体取决于先玩的是什么
  • 赢得该回合的玩家在下一回合中排名第一
  • 所有卡都在第一轮之前分发

假设:

  • 在充分了解其他玩家的纸牌后,最先进入的玩家可以针对自己的每张纸牌,决定一张纸牌是否会赢得本轮(第一位玩家可以打出肯定的获胜纸牌)
  • 如果卡片A和B在本轮第一场比赛中均获胜,则在本轮比赛A中(并获胜),然后在下一轮比赛中玩B,则B也将获胜(纸牌不会失去价值)
  • 在充分了解另一位玩家的纸牌后,第二名玩家可以决定一张纸牌是否可以赢得本轮比赛,但是如果在下一轮第一张牌中输掉,则将输掉(选择最差的中奖牌)

遵循以下规则的示例游戏:

第一玩家玩纸牌。第二名玩家必须打相同套牌的牌或输。如果套房匹配,则以最高的纸牌为准。

现在,该游戏是由抽签的运气决定的,并且能够记住为了知道对手的牌而玩了哪些牌。
在这种情况下,我会让AI只部分记住曾玩过哪些牌,即从记住的列表中随机删除所玩牌的某些百分比(数字越少=难度越高的AI),而不是像A或Kings这样的重要牌。例如,通过这种方式,AI会知道打红心皇后是安全的,因为他会记住对手没有王牌或王牌,但是如果他想再打10,他就必须计算出概率,因为他可能不记得杰克是否还在玩。
这模仿了人类的注意力跨度。

TL; DR
限制AI知道多少,以至于其决策不够完美,就足够了。


感谢您的回答。但是正如问题中所述,分发卡片后没有运气/没有随机性。一个玩家不知道其他玩家的牌。他必须使用已经玩过的纸牌和一些“规则”做出假设。
LaurentG

2
就像随机删除记忆卡的想法一样。这提示了诸如易,中,难等级别的发展。
superM 2013年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.