【问题标题】:How can we implement Artificial Intelligence in Javascript games?我们如何在 Javascript 游戏中实现人工智能?
【发布时间】:2011-06-19 12:56:54
【问题描述】:

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

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

请帮忙。

已编辑: 游戏是Bagh-Chal

感谢您的回答:我已经成功地在 baghchal 游戏中实现了 Minimax。 Here

【问题讨论】:

  • 为什么它与用任何其他语言实现它有什么不同?
  • 这个问题毫无意义。我能看到的只有“教我人工智能”。这不是这个网站的目的。
  • 这个问题有点笼统。您可能应该提供有关游戏类型、玩家做什么以及“AI”需要解决什么样的问题的更多详细信息。例如寻找路径?瞄准?合作?
  • bhu1st,这是什么游戏?根据游戏类型,我们或许可以为您提供适当的 AI 实施建议:是策略游戏、第一人称射击游戏、棋盘游戏还是纸牌游戏等?
  • @Lirik 这是一款棋盘游戏。 en.wikipedia.org/wiki/Bagh-Chal

标签: javascript algorithm artificial-intelligence heuristics


【解决方案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 放在中间,因为这有很多可能性。

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

【讨论】:

  • 我想你的意思是还没有en.wikipedia.org/wiki/Artificial_life,但肯定有智能系统(AI)。不同之处在于人工智能意味着给定一组非标准输入,系统将对做什么做出启发式判断并做出相应的反应。正如您所说,对于人工生命,机器正在“思考”解决方案,并且具有自我意识/意识等。我不认为它会在 JavaScript 中涵盖......
  • @Daniel,我不确定人工生命这个词是否可以与合成生命互换,但截至 2010 年 5 月,我们确实有 artificial life courtesy of Dr Craig Venter。似乎人们确实会互换这些术语,尽管我不一定同意他们应该这样做。
  • 一团糟,但它们应该被称为合成生命。我想这是你使用这些词的字面意义还是它们的比较意义(针对人工智能)。
【解决方案2】:

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

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

Minimax 可能会导致更短但更难理解的代码(对于那些不熟悉它的人)取决于游戏,如果游戏足够简单,可能会导致玩完美的游戏(但它也有偏爱的缺点不会输给赢,因为它假设对手也会打得很好)

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

【讨论】:

  • 感谢 Davy8 的解释......现在我可以看到它是可行的。
【解决方案3】:

对于Bagh-Chal,您可能希望采用Minimax 方法和Alpha-beta pruning

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

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

【讨论】:

    【解决方案4】:

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

    拥有真正的“人工智能”您需要实现一个机器学习算法来跟踪以前的输入以及它是否是正确的决定,以便它可以变得更好。这是通过类似于Neural Network 的方式完成的。

    【讨论】:

    • -1 因为没有提到 JavaScript ......只是在开玩笑。但说真的,一点点随机化可以创造奇迹,而且比机器学习算法容易得多。
    【解决方案5】:

    第 1 步:学习 (A) JavaScript。

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

    第 3 步:在 A 中实现 B。

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

    【讨论】:

    • 我在上面的评论中添加了我正在开发的游戏的链接,请您检查一次。对于此类游戏,哪种棋盘游戏 AI 算法最适合入手?
    • @bhu1st:看起来很有趣。您将需要找到一种专门针对 Bagh-Chal 的好方法(或梦想一个),或者使用已应用于跳棋的那种机器学习。 JavaScript 不会对您可能选择的任何方法造成任何障碍,因此您可能应该删除并重申您的问题,以便专门针对 Bagh-Chal。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多