If(),否则在c ++中使用if()替代(这是AI吗?)

时间:2011-04-22 21:09:08

标签: c++ optimization if-statement artificial-intelligence

首先,我是一个菜鸟。我也是一个从来没有写过一毛钱代码的看门人。这只是我喜欢做的事情。这是有趣的:)话虽这么说,我写了这个控制台为基础的tic-tak-toe游戏,有足够的ai不会失去每场比赛。 (我想ai应该被称之为。)如果计算机的语句转向,它有70个if / else。我使用了3个int数组:

int L[2], M[2], R[2];

0 =空白; 1 = X; 2 = O;
然后董事会'看起来'像是左[0] | M [0] | R [0]左[1] | M [1] | R [1]
L [2] | M [2] | [R [2]

所以我基本上写出了我能想到的每一种可能的情况:

if(M[0]==1 & M[1]==1 & M[2]==0){M[2] = 2;}//here the computer prevents a win 
else if(L[0] ==2&M[1]==2&R[2]==0){R[2]=2;}//here the computer wins
//and so on....68 more times!

我想我的问题是(是):
有没有更好的方法?是否有办法用更少的代码行来达到相同的结果?是这个吗?考虑人工智能?

5 个答案:

答案 0 :(得分:5)

此标准算法称为Minimax。它基本上构建了一个树,其中游戏的开头是根,然后子代表X在第一个转弯时可以做出的每个可能的移动,然后每个节点的子节点都是O可以响应的移动,一旦整个树被填满(这对于Tic-Tac-Toe来说是可能的,但是对于像Chess计算机这样的游戏仍然没有足够的内存),你可以恢复工作,假设两个玩家都足够聪明,最佳移动,并达到最佳移动。以下是Minimax的another explanation,以Tic Tac Toe为例。

答案 1 :(得分:2)

Tic-Tac-Toe上的维基百科页面有一个非常好的算法大纲,用于赢取(或搭售)每个游戏: http://en.wikipedia.org/wiki/Tic-tac-toe这是我几年前制作Tic-Tac-Toe游戏的原因。

在您了解算法之后,实现Tic-Tac-Toe计算机播放器的最巧妙的方法之一是使用魔术方块。讨论了该方法here。就大小而言,我已经看到这在大约50行代码中实现,如果我找到它,我会发布代码:)

这不是技术上的人工智能,因为AI通常是指人工神经元,神经元层,梯度下降,支持向量机,求解复数多项式等。解决Tic-Tac-Toe

答案 2 :(得分:1)

是的,有更好的方法。

最明显的是要考虑电路板的不同镜像视图如何简化案例数量。

此外,考虑在数组中预先存储“有趣”模式,然后将游戏状态与数据进行比较。例如,一系列模式将是玩家在下一步行动中可以获胜的所有方式。

另请注意,使用声明int L[2],数组L中只有两个条目,即L[0]L[1]。您对L[2]M[2]等的引用是应该由编译器捕获的错误。考虑调高警告级别。如何完成取决于编译器。对于gcc,它是-Wall

这是一种人工智能。 if一系列陈述是积累的知识:如何识别情况以及对它的适当最佳反应。

答案 3 :(得分:0)

真正的AI解决这样一个游戏的最接近的事情就是编写一个人工网络并用tictactoe游戏的所有组合训练它。

在这种情况下,代码不会做那么多,否则解决问题,但会通过采取最合理的选择解决问题,解决问题的模式。

但编码神经网络并非易事:)

答案 4 :(得分:0)

当需要编写基于规则的系统(如您正在构建的AI)时,您可以使用规则引擎,例如CLIPS(这是NASA开发的用于创建用C编写的专家系统的工具)。

http://en.wikipedia.org/wiki/CLIPS

也许这对于玩Tic Tac Toe来说太过分了,但是如果你想学习很酷的人工智能,那么专家系统是一个非常有趣的领域,但与神经网络不同(也许不那么棘手)。

玩得开心!