AI算法用于物品拾取竞赛

我想为以下游戏构建一个AI:

  • 在一个M x N的棋盘上有两个玩家
  • 每个玩家可以上下或左右移动
  • 棋盘上有不同的物品
  • 在尽可能多的类别中拥有比对方更多的物品的玩家获胜(在一个类别中拥有更多物品使你成为该类别的赢家,拥有更多类别的玩家赢得游戏)
  • 在一个回合中,你可以拾取你所站立的物品或移动
  • 玩家的移动是同时进行的
  • 如果两个玩家站在同一个位置上,并且两者都尝试拾取物品,则拾取成功的几率为0.5

如果满足以下任一条件,游戏结束:

  • 所有物品都被拾取
  • 由于一个玩家在超过半数的类别中拥有超过半数的物品,已经有明显的赢家

我对AI一无所知,但我之前上过一门机器学习课程。

  1. 我该如何开始解决这样的问题?

  2. 这个问题是否有普遍性?


回答:

对于你提出的这种对抗性搜索游戏(称为两人零和游戏)的经典选择被称为Minimax搜索。根据维基百科,Minimax的目标是

在最坏情况(最大损失)情景下最小化可能的损失。或者,可以认为是最大化最小收益。

因此,它被称为minimax,或maximin。本质上,你构建一个由MaxMin级别组成的树,每个节点的分支因子等于每回合可能的动作数量,在你的情况下是4。每个级别对应一个玩家的回合,树一直延伸到游戏结束,允许你搜索每回合的最优选择,假设对手也在最优地玩。如果你的对手没有最优地玩,你的得分只会更好。本质上,在每个节点你模拟所有可能的游戏并为当前回合选择最佳行动。

如果生成所有可能的游戏似乎需要很长时间,你是正确的,这是一个指数复杂度的算法。从这里你会想要研究alpha-beta剪枝,它本质上允许你根据迄今发现的值消除一些你正在枚举的可能游戏,并且是对minimax的一个相当简单的修改。这种解决方案仍然是最优的。我将进一步的解释推迟到维基百科文章中。

从那里,你会想要尝试不同的启发式方法来消除节点,这可能会大大减少需要遍历的节点树的数量,但请注意,通过启发式方法消除节点可能会产生一个次优但仍然不错的解决方案,这取决于你的启发式方法。一个常见的策略是限制搜索树的深度,本质上你可能搜索前5个回合来确定当前的最佳移动,使用在5个回合后的每个玩家的分数估计。这同样是一个你可以调整的启发式方法。简单地计算游戏在那个回合结束时的分数可能就足够了,并且绝对是一个好的起点。

最后,对于涉及概率的节点,有一个对Minimax的轻微修改,称为Expectiminimax,它通过添加一个“第三”玩家来处理概率,这个玩家为你选择随机选择。这些第三玩家的节点以随机事件的期望值作为它们的价值。

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中创建了一个多类分类项目。该项目可以对…

发表回复

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