AI 算法设计:纸牌游戏

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

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

细节:

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

问题

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

谢谢


回答:

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

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

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

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

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

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

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

下一步:

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

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

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

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

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