【问题标题】:Should miniMax algorithm be able to handle any inputminiMax 算法是否应该能够处理任何输入
【发布时间】:2018-03-12 05:43:16
【问题描述】:

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

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

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

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

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

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

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

【问题讨论】:

  • 只需设置两个机器人,让它们互相对战
  • O 在第二局没有“正确”的走法,因为无论 O 做什么,X 都能赢,所以 O 的每一步都同样糟糕。

标签: javascript minimax


【解决方案1】:

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

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

但是,您的具体示例是一个有趣的案例。无论'O'如何进行,最终都会失败。因此,所有可能的移动都将返回相同的结果,即玩家“O”的最低分数。由于在您的代码中 bestMove 不会更新,除非出现更好的动作,在这种情况下没有任何动作,它只会返回第一个动作。

【讨论】:

  • 啊,我现在明白了。这个例子对'O'来说是一个保证松散的例子,所以它甚至不会尝试从那里延长游戏。因此,算法认为是“最佳”可能的举动可能与人类可能认为的不同(继续努力争取失败的事业而不是仅仅结束它。)谢谢你在这方面给我的启发。
猜你喜欢
  • 2011-05-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-12-15
  • 2023-03-13
  • 2014-05-17
  • 2011-09-27
相关资源
最近更新 更多