五子棋:基于数组的 AI 算法?

很久很久以前(大概 20 多年前),我在一本杂志上看到了一段五子棋游戏的代码,我把它输入到我的电脑里,玩得很开心。

这款游戏很难赢,但电脑 AI 的核心算法非常简单,代码量也不大。我想知道是否有人了解这种算法,并有一些关于它的源代码或理论的链接。

我记得的是,它基本上分配了一个数组,覆盖了整个棋盘。然后,每当我或电脑放置一个棋子时,它会给棋盘上所有可能受到该棋子影响的位置增加一些权重。

例如(请注意,权重肯定是不对的,因为我不记得了):

1   1   1 2  2  2  3 3 3   4441234X4321  3 3 3 2  2  21   1   1

然后它简单地扫描数组,找到一个具有最低或最高值的空闲位置。

我不太清楚的地方:

  • 也许它有两个数组,一个用于我,一个用于电脑,并且有一个最小/最大权重?
  • 可能算法还有更多内容,但其核心基本上是一个数组和加权数字

这是否让任何人想起了什么?有人有什么可以帮忙的吗?


回答:

阅读您的描述,并稍加思考,我认为它可能使用单个数组,就像您描述的那样。

要实现五子连珠的目标,你必须 (a) 阻止对手成功,以及 (b) 自己成功。

要让自己成功,你必须在你已经放置在棋盘上的棋子附近放置棋子,因此为你的棋子旁边可能参与连线的空位增加一个正分是有意义的。无论你给出的线性例子,还是二次方的例子,都可能运作良好。

为了阻止你的对手成功,你必须在/的棋子旁边放置棋子。一石二鸟尤其好,所以对手的棋子应该以与你的棋子相同的方式增加周围空位的值——他已经连成的棋子越多,得分越高,算法就越有可能试图切断对手。

这里最重要的是不同空位的权重,以及对手的棋子的权重是否与你的棋子不同。不幸的是,我对此无能为力,但是一旦游戏本身被编写出来,这些值应该通过反复试验就能很容易地计算出来。

然而,这是一种非常基本的方法,并且会被树搜索算法超越。在 Google 上搜索,有一个相关的 威胁搜索论文,它显然适用于五子棋。但这篇论文需要付费才能阅读 :/

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

发表回复

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