javascript - miniMax 算法是否能够处理任何输入

标签 javascript minimax

我正在努力使用 miniMax 算法构建一个基本的 tictactoe 游戏,并且我在 JavaScript 中有一个可以运行的实现。然而,我正在向它提供一些测试板状态,但它似乎没有按我预期的方式工作。例如,如果我喂它

['o', '1', 'x',
'x',   4,   5,
'x',  'o', 'o']

它告诉我 X 的下一个正确 Action 是索引 4(获胜状态)。但是如果我喂它

['o', 'x',  2,
 'o',  4,   5,
 'x',  7,  'x']

它告诉我 O 的下一个正确 Action 是索引 2(这会立即失败,因为 X 将通过占据位置 7 获胜。

所以基本上我想知道这是否重要。从整个游戏进程来看,我不相信第二个示例中的棋盘布局是使用算法实际发生的布局,无论 X 运行 O 的计算机做什么,都不会让棋盘进入这种状态,所以也许我的实现是正确的。 miniMax 是否应该能够处理这种情况(或任何板状态),或者该测试板状态只是它无法处理的一种状态,因为它是一种“不可能”状态。我不信任我不完全理解的代码,因此欢迎任何建议。

我的实现的完整代码位于 Github 上:https://github.com/cugamer/tictactoe/tree/master/lib

最佳答案

是的,它应该涵盖任何输入,是的,这确实很重要,因为您的代码中的某个地方可能存在需要排除的错误。

主要是因为 Minimax 只是给出了棋盘的状态,而不是历史,即导致该位置的一系列 Action 。它根本无法确定一个状态是否是“可能的”状态。它所做的就是向前看,即找出 future 可能出现的所有状态,如果其中任何一个导致肯定失败,它应该能够避免这条路。

但是,您的具体示例是一个有趣的案例。无论“O”如何进行,最终都会失败。因此,所有可能的 Action 都将返回相同的结果,即玩家“O”的最低可能得分。由于在您的代码中 bestMove 除非出现更好的 Action (在本例中没有更好的 Action ),否则不会更新,因此它只会返回第一个 Action 。

关于javascript - miniMax 算法是否能够处理任何输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49228795/

相关文章:

prolog - Minimax 在 "Prolog Programming for Artificial Intelligence"中实现 - min_to_move/1 和 max_to_move/1 是什么?

javascript - 正则表达式错误不显示

javascript - 具有重复结构的数组

algorithm - 如何将威胁空间搜索添加到我的井字游戏算法中?

java - 使用二叉搜索树进行 Alpha Beta 修剪

最小化最大产品(糖果和气球)的算法

javascript - 一种使用 CSS 变换尺度的响应技术

javascript - 模拟 div 内的 href 的点击

javascript - 如何在一个 Promise 中进行多个查询

javascript - 实现极小极大