【问题标题】:AI Algorithm Design: Card gameAI算法设计:纸牌游戏
【发布时间】:2011-08-26 15:09:10
【问题描述】:

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

简而言之,这是一场纸牌游戏,两队 2 名玩家对战(他们看不到对方的手,甚至连队员都看不到),只是在开始时洗牌,然后递出三张牌给每个玩家。以顺时针的方式,每个人都投出一张牌,试图赢得这一轮。谁赢了那个回合就拿分。然后,仍然以顺时针方式,最后一轮获胜的玩家从牌堆顶部拿一张牌,然后是他/她左边的玩家,依此类推。然后你将继续玩几轮,直到甲板空了。得分多的队伍获胜。

详情:

甲板尺寸:40
球员:4 人(2 队 2 人)
卡片具有特定的价值。 (从 0 到 11)

问题

我知道直接的 MiniMax 会很贵。通常使用什么算法 对于这类纸牌游戏? 此外,您可以指出的任何文献也将是有益的。

谢谢

【问题讨论】:

  • 我认为 minmax 不合适,因为您缺少其他玩家的牌组信息。恕我直言,蒙特卡罗方法更适合这类游戏
  • 这个问题有几点指点:stackoverflow.com/questions/525016/…
  • @drhirsch 我同意你的看法。我在考虑蒙特卡洛,也许还有一些启发式方法。
  • 您是想打造一个最佳玩家,还是想打造一款让人类玩起来很有趣的游戏?
  • 我想,我的目标是介于两者之间。

标签: java algorithm artificial-intelligence playing-cards


【解决方案1】:

这取决于您想要获得多大的野心,但首先您需要一个快速的引擎来模拟游戏。

那么您需要一个快速且可能很简单的模型播放器。

这个模型玩家将没有时间向前计算。它只能对预定义的状态做出反应。所以你的第一步是构建一个足够好的游戏状态。游戏状态应该包括你的手牌和一些关于哪些牌被丢弃的历史统计数据,可能还有玩家如何玩他们的手牌。

接下来构建一个作用于状态的模型播放器。要么

一) 手写一个,根据您定义的一些启发式进行播放。但请记住 - 还没有繁重的计算!

B) 写一个通用播放器,但省略常数和截止值。将您的模拟引擎和遗传算法与锦标赛选择一起使用,为所述值进化出良好的参数。对于奖励积分,将您的球员分成两人一组,让他们相互补充。

C) 使用更多的人工智能并让一个基因编程系统(有一些成熟的。找到一个可以做锦标赛的。你甚至可以自己实现一个,但我们不要得意忘形 :) 为你编写整个玩家,使用你的状态作为输入。

下一步:

要么您已经拥有了一位出色的球员,并且可以认为自己已经完成了,要么您想让它变得更好。如果你想让它变得更好你的运气!

使用蒙特卡洛模拟来玩大量的手牌,你的每一个选择都在特定的情况下(如果我理解正确的话,总是有三个选择)。让您的模型玩家在您每次有选择时做出决定,并让您的蒙特卡洛模拟在您每次进行模拟之间随机洗牌。

现在你应该有一个很棒的纸牌玩家了!

【讨论】:

  • 此外,维基百科将是了解更多有关蒙特卡罗模拟、遗传算法和遗传编程的良好开端。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-14
  • 2013-11-02
相关资源
最近更新 更多