Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Artificial intelligence 玩Gomoku的好AI策略是什么?_Artificial Intelligence_Minimax_Gomoku - Fatal编程技术网

Artificial intelligence 玩Gomoku的好AI策略是什么?

Artificial intelligence 玩Gomoku的好AI策略是什么?,artificial-intelligence,minimax,gomoku,Artificial Intelligence,Minimax,Gomoku,我正在写一个游戏,它是。基本上是一块巨大的木板上的一个tic-tac-toe 想知道是否有人知道一个好的AI游戏策略。我当前的实现非常愚蠢,需要很长时间(O(n^3),大约1-2秒才能移动): 为此类游戏编写AI的传统且相当有效的策略是典型的树搜索策略。也就是说,每个电路板状态在图形中形成一个节点,并且在每个节点和可由单个移动产生的状态之间放置一条有向边。通过这种方式,将根板作为空节点来构建树。然后,以某种巧妙的方式遍历树,以找到看起来“良好”的状态。“良好”状态通常通过使用一些巧妙的启发式的评

我正在写一个游戏,它是。基本上是一块巨大的木板上的一个tic-tac-toe

想知道是否有人知道一个好的AI游戏策略。我当前的实现非常愚蠢,需要很长时间(O(n^3),大约1-2秒才能移动):


为此类游戏编写AI的传统且相当有效的策略是典型的树搜索策略。也就是说,每个电路板状态在图形中形成一个节点,并且在每个节点和可由单个移动产生的状态之间放置一条有向边。通过这种方式,将根板作为空节点来构建树。然后,以某种巧妙的方式遍历树,以找到看起来“良好”的状态。“良好”状态通常通过使用一些巧妙的启发式的评估函数来衡量。显然,您不想访问树中的所有节点——这将是一项艰巨的工作!你只是想要些聪明的东西

您可以添加一个预先计算的早期游戏和结束游戏,以加速这些场景,然后在游戏中期依赖一个优化良好的树遍历启发式

这种树遍历算法的实际名称是“Minimax”算法。在维基百科上查找,你会看到很多相当不错的材料。有一些方法可以提高算法的效率,其中最显著的是alpha-beta剪枝,所以一定要看一看。你可能想看看连接四个启发式,并决定如何将它们应用到你的游戏中。例如,评估董事会状态的一个很好的启发式方法是计算连续2分、3分和4分的数量,并将其加权到分数中。(例如,每跑2次得1分,每跑3次得10分,每跑4次得1000分)

另一种优化策略是开发一种启发式算法,该算法优先考虑minimax算法应该搜索更多的位置——通常通过估计董事会评估函数的某种确定性


有了这个策略,你应该能够在相同的时间内获得不那么愚蠢的人工智能。然而,真的,真的好的人工智能需要花费大量的努力来构建,即使是在这些“简单”的游戏中,也可能需要10秒或更长的时间才能完成智能移动。另一方面,还有一些聪明的编程技巧,比如在人类对手忙于思考时通过树进行预计算遍历。嘿,人类可以思考,而计算机可以。公平就是公平

一段时间以来,我一直在尝试为同一个程序创建算法

你当然是对的,你的程序应该做的第一件事,就是检查是否有办法形成一个5并获胜。如果没有,下一步应该是检查你的对手是否可以做到,如果可以,那么防守

你自己玩过五子棋多少次?你对基础知识的掌握程度如何

好的,下一步是思考:我们如何才能到达我们能够获胜的位置?显然,要想赢得比赛,我们必须连续四场。但我们只是排成四列,像这样:

__________
____XOOOO_
__________
__________
____OOOO__
__________
__________
____OOO___
__________
然后对手可以关闭它

但是如果我们形成“开放四”,像这样:

__________
____XOOOO_
__________
__________
____OOOO__
__________
__________
____OOO___
__________
那个么对手就不能同时接近双方,你们就可以获胜。因此,形成一个开放的四是一种方式赢得比赛。现在问题来了:我们怎样才能形成一个开放的四国?当然,如果我们形成“开放三”,像这样:

__________
____XOOOO_
__________
__________
____OOOO__
__________
__________
____OOO___
__________
然后对手可以阻挡我们:

___________
____XOOO___
___________
我们又回到了起点

要赢得比赛,我们可以同时形成两个公开赛三局:

____________
____OOO_____
_____O______
____O_______
现在,如果对手阻挡其中一个,我们可以使用另一个来形成一个开放的四:

____________
_______O____
___XOOO_____
_____O______
____O_______
____________
并赢得:

________O___
_______O____
___XOOO_____
_____O______
____O_______
___X________
在gomoku术语中,如果你同时打出两个开放的三分球,则称为3x3

请注意,这三个都必须是开放的:您能理解为什么吗

还有其他获胜的方法:

4x3:你看到获胜的动作了吗?为什么会获胜

____________
__XOOO______
__XXXO______
____OX______
____________
4x4:看到胜利的一步了吗

____________
__XOOO______
__XXXO______
__OXOX______
___O________
__X_________
这些只是游戏的基础。了解战术有助于你思考如何构建人工智能,因此你可以硬编码原则

当然,这只是开始。如果您能尝试执行此操作并向我提供反馈,我将不胜感激


我一直在尝试用Java编写程序。你想看看我的代码,这样你就可以玩测试了吗?这还不是很好,但你可以从那里得到新的想法。虽然注释和变量名是用爱沙尼亚语写的。。这可能很难理解(

有一次我创建了一个gomoku玩家,使用alpha-beta修剪并根据每个玩家有多少个半开放和完全开放的2、3和4来给每个位置打分非常成功

计算这不是n^3。你只需检查最近的移动是否关闭了你对手的任何一条线,如果它延伸了你的一些线,然后相应地修改分数

如果你想玩得更好,我会研究国际象棋计算机上的一些技巧。例如,尝试“杀手招式”(记住哪些招式得分高或在其他位置直接获胜)首先,搜索将显著提高树搜索的效率。在alpha-beta修剪中,首先尝试假定的最佳移动非常重要


当你有你的球员时,你应该试着找出不同元素(2秒、3秒、4秒、开局和半开局等)的得分最好的办法是让不同版本的游戏互相对抗。

对于gomoku来说,已经找到了获胜的策略。请看这篇文章:。在我编写自己的程序时,它对我帮助很大。这样你就可以编写程序,非常好地攻击对手并找到获胜的组合。

gomoku已经解决了,但还没有解决在开放位置和有限资源的情况下解决

我是program and organizer的作者,我可以告诉你,编写好的Gomoku AI需要很长时间。Renju要复杂得多。你可以使用界面和wri简化你的工作