AI 算法设计:纸牌游戏

目前我正在尝试实现一种西班牙纸牌游戏,叫做 Briscas,或者 Briscola,http://en.wikipedia.org/wiki/Briscola

简而言之,这是一个两人组队(共四人)对抗的纸牌游戏(队友之间也看不到对方的手牌),游戏开始时洗牌,然后每人发三张牌。 按照顺时针方向,每个人出一张牌来争取赢得这一轮。 赢得这一轮的人获得相应的分数。 然后,仍然按照顺时针方向,赢得上一轮的玩家从牌堆顶部抽一张牌,然后他/她左边的玩家也抽一张牌,依此类推。 游戏持续进行,直到牌堆为空。 总分更高的队伍获胜。

细节:

牌堆大小:40张牌
玩家人数:4人(2队,每队2人)
牌有特定的价值(从0到11)。

问题

我知道直接使用 MiniMax 算法的代价太高了。通常在这种纸牌游戏中使用什么算法?另外,您能推荐一些相关的文献吗?

谢谢


回答:

这取决于你想做到什么程度,但首先你需要一个快速的引擎来模拟游戏。

然后你需要一个快速,因此可能也比较简单的模型玩家。

这个模型玩家没有时间进行前瞻计算。 它只能对预定义的的状态做出反应。 因此,你的第一步是构建一个足够好的游戏状态。 游戏状态应该包括你的手牌以及一些已弃牌的历史统计数据,也许还包括玩家如何打出他们的手牌。

接下来,构建一个根据状态采取行动的模型玩家。可以选择:

A) 手动编写一个,根据你定义的一些启发式方法进行游戏。 但请记住 – 不要进行大量的计算!

B) 编写一个通用的玩家,但省略常量和截止值。 使用你的模拟引擎和遗传算法以及锦标赛选择来进化这些值的良好参数。 为了获得额外的分数,让你的玩家以两人一组的形式进化,以便他们能很好地互补。

C) 使用更多的 AI,并让一个遗传编程系统(有一些成熟的系统。找一个可以进行锦标赛的系统。你甚至可以自己实现一个,但我们不要过于深入 🙂 为你编写整个玩家,使用你的状态作为输入。

下一步:

要么你已经拥有一个伟大的玩家并且可以认为自己已经完成了,要么你想让它变得更好。 如果你想让它变得更好,你很幸运!

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

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

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注