5

我正在用 html5/JavaScript 开发一个两人棋盘游戏。两个播放器版本几乎完成。我想添加单人游戏模式,计算机将成为对手。该游戏将在单个浏览器中进行(无服务器端集成)。

我是人工智能新手。我想要一些关于在 JavaScript 游戏中实现 AI 的指南,我应该从哪里开始?

请帮忙。

编辑: 游戏是Bagh-Chal

感谢您的回答:我已经设法在 baghchal 游戏中实现 Minimax。在这里

4

5 回答 5

8

对于Bagh-Chal,您可能希望采用带有Alpha-beta pruning的Minimax方法。

该算法有很多很好的资源,但这里有一个 CS Recitation for Minimax with Alpha-beta Pruning。我个人不会称其为 AI 算法,但它经常在 AI 简介中讨论。

或者,您可以训练一个实际的 AI 算法来玩游戏(神经网络、遗传算法等),但这种方法对于像 Bagh-Chal 这样的游戏似乎有些不切实际。

于 2011-02-01T20:40:32.980 回答
3

第 1 步:学习 (A) JavaScript。

第 2 步:学习 (B) 棋盘游戏的 AI 算法。

第 3 步:在 A 中实施 B。

可选步骤 4:选择另一个棋盘游戏;然后转到步骤 2。

于 2011-02-01T20:11:56.330 回答
2

Lirik 提到的带有 Alpha-beta 修剪的 Minimax 是一个很好的起点,但如果您不熟悉它,则需要一些时间来思考它。

或者,您可以考虑如果您拥有完美的记忆力并且可以进行快速计算并尝试实现它,您将如何玩游戏。好处是这通常更容易理解。

Minimax 可能会导致更短但更难理解的代码(对于那些不熟悉它的人)取决于游戏,如果游戏足够简单,可能会导致玩完美的游戏(但它也有利于不输给获胜,因为它假设对手也将发挥完美)

由于这听起来像是一个完整信息的游戏(整个棋盘始终对所有玩家可见),因此具有无限前瞻的正确实现的 Minimax 可以提供永远不会失败的 AI(假设计算时间无限)。在使用 Minimax 的游戏中,难度级别通常由算法查看的前进步数决定。步骤越多,它的速度就越慢,所以如果游戏不是超级简单,你会遇到硬件限制(这就是为什么还没有完美的国际象棋人工智能,我想我上次检查过它需要一个在我阅读这篇文章时,在最快的计算机上运行了几千年,抱歉没有引用)

于 2011-02-01T21:03:16.027 回答
1

没有人工智能。然而。你可以模拟人类的思维方式,但你不能强迫游戏代替你思考。在 javascript 中你应该使用的所有东西:函数、循环、变量、数组字符串。计算机应该在wiev的一个点中检查游戏,并计算出最好的步数。例如,按一个属性对每个解决方案进行降序排序,并增加前十项的比率。然后按其他排序并再次评分,在这些时刻中,评分最高的步骤将是最好的。

其他创建获胜策略的方法,但这对于人类来说甚至很难实现到 js 中。

如果我告诉你一个每个人都知道 XOX 游戏的例子会更好

有一个 3x3 的桌子,你应该把 3 X 或 O 放在一行中才能获胜

_|_|_
_|_|_
 | |

这是地图

这是获胜的一种方式

x|o|_
_|x|o
 |o|x

我想你现在记得了。

所以服务器上的 AI 代表什么。

当用户输入 X 或 O(现在用户是 X,服务器是 O)时,服务器必须计算他的情况有多绝望

连续有 2 个 X 吗?如果是,机器必须在 2 X 的中间或末尾放置一个 O。

如果连续没有2个X,机器一定会计算出某处有窍门?

例如

_|x|_
_|_|x
o| |

这是一个技巧,因为计算机必须将 O 移到左上角,否则机器会松动。

所有这些都是人类在游戏中提出的问题(if-else 语句)。如果你想实施你应该真的强迫自己记录你的想法。

我首先搜索什么?嗯。首先我把 X 放在中间,因为这有很多可能性。

创建人工智能最重要的是你应该模拟你的思维方式。祝你好运。

于 2011-02-01T23:56:26.317 回答
1

我认为你最好的选择是从一个严格的人工智能算法开始,即一个在给定情况下总是做同样事情的对手。

要拥有真正的“人工智能”,您需要实现一种机器学习算法,跟踪先前的输入以及它是否是正确的决定,这样它才能变得更好。这是通过类似于神经网络的方式完成的。

于 2011-02-01T20:12:48.577 回答