12

很久以前(想想 20 多年前),我在一本杂志上遇到了一个五子棋游戏源代码,我为我的电脑输入了该代码,并从中获得了很多乐趣。

这场比赛很难赢,但计算机AI的核心算法真的很简单,没有太多的代码。我想知道是否有人知道这个算法,并且有一些关于它的来源或理论的链接。

我记得的事情是它基本上分配了一个覆盖整个电路板的数组。然后,每当我或它放置一块棋子时,它都会在棋盘上可能影响棋子的所有位置添加一些重量。

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

1   1   1
 2  2  2
  3 3 3
   444
1234X4321
  3 3 3
 2  2  2
1   1   1

然后它简单地扫描阵列以寻找具有最低或最高值的开放位置。

我很模糊的事情:

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

这是否对任何人敲响了警钟?有人有什么可以帮助的吗?

4

6 回答 6

6

阅读您的描述并稍微考虑一下,我认为它可能与单个数组一起使用,就像您描述的那样。

为了实现获得五连胜的目标,您必须 (a) 阻止对手成功并 (b) 成功自己。

为了成功,您必须将棋子放置在棋盘上已有的棋子附近,因此为可以连续参与的棋子旁边的字段添加正分数是有意义的。您给出的线性示例或二次方可能会很好。

为了防止你的对手得手,你必须在他/她的棋子旁边放置棋子。用一块石头打两只鸟特别好,所以对手的石头应该像你一样增加周围场地的价值——他已经排的石头越多,得分越高,越有可能算法将尝试切断对手。

这里最重要的是不同领域的权重,以及对手的棋子的权重是否与你的不同。不幸的是,我对此无能为力,但是一旦编写了游戏本身,这些值应该相当简单,可以通过反复试验来计算。

然而,这是一种非常基本的方法,并且会被树搜索算法所超越。搜索谷歌,有一篇关于 Threat search 的相关论文,这显然适用于 Gomoku。不过,该论文位于付费墙后面:/

于 2010-05-03T18:12:03.297 回答
2

我没有读过这篇文章,但从描述中我猜想是某种形式的Minimax 算法

于 2010-05-02T12:57:27.130 回答
2

我看到了你提到的这个算法 - 它非常简单和快速(没有回溯:-))而且它玩得很好:-) 我必须在某个地方找到源,但它是很多年前的......你的石头有重量取决于附近有多少其他石头,以及对手石头的重量。这些较低,因此算法更喜欢攻击策略。

但这当然是非常简单的算法。获胜策略已经找到。请参阅本文:L. Victor Allis、HJ van den Herik、MPH Huntjens。围棋和威胁空间搜索。当我编写自己的程序时,它帮助了我很多。这样,您将能够编写非常擅长攻击对手并找到获胜组合的程序。

于 2011-08-09T11:21:54.920 回答
1

这是一个古老的游戏 - 我在Planet Source Code上找到了代码。我在大学期间玩过这个游戏,在 286 天内有了它的 BASIC 版本。

于 2010-05-03T18:52:14.270 回答
1

这是您正在寻找的程序 ftp://ftp.mrynet.com/USENIX/80.1/boulder/dpw/gomoku.c

快40岁了

于 2015-05-04T20:09:05.510 回答
-1

为 iPhone 开发一个开源版本。

有兴趣加入的请联系我!

https://github.com/kigster/kigomoku

于 2012-02-25T14:58:28.417 回答