miniMax 算法是否应该能够处理任何输入
Should miniMax algorithm be able to handle any input
我正在使用 miniMax 算法构建一个基本的井字游戏,我在 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 应该能够处理这个(或任何板状态)还是这个测试板状态只是它无法处理的状态,因为它是 "impossible" 状态。我不相信我不完全理解的代码,所以欢迎任何建议。
我的实现的完整代码在 Github 此处:https://github.com/cugamer/tictactoe/tree/master/lib
是的,它应该涵盖任何输入,是的,它确实很重要,因为您的代码中可能有错误,您需要将其排除。
主要是因为 Minimax 只是给出了棋盘的状态,而不是历史,即导致该位置的一系列动作。它根本无法确定一个状态是否为 "possible" 状态。它所做的只是向前看,即找出所有可能出现的未来状态,如果其中任何一个导致确定的失败,它应该能够避免这条路。
然而,您的具体示例是一个有趣的案例。不管'O'如何进行,最终都是败局。因此,所有可能的移动都将 return 相同,即玩家的最低可能得分 'O'。由于在您的代码中 bestMove
不会得到更新,除非出现更好的动作,而在这种情况下没有任何动作,因此它只会 return 第一步。
我正在使用 miniMax 算法构建一个基本的井字游戏,我在 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 应该能够处理这个(或任何板状态)还是这个测试板状态只是它无法处理的状态,因为它是 "impossible" 状态。我不相信我不完全理解的代码,所以欢迎任何建议。
我的实现的完整代码在 Github 此处:https://github.com/cugamer/tictactoe/tree/master/lib
是的,它应该涵盖任何输入,是的,它确实很重要,因为您的代码中可能有错误,您需要将其排除。
主要是因为 Minimax 只是给出了棋盘的状态,而不是历史,即导致该位置的一系列动作。它根本无法确定一个状态是否为 "possible" 状态。它所做的只是向前看,即找出所有可能出现的未来状态,如果其中任何一个导致确定的失败,它应该能够避免这条路。
然而,您的具体示例是一个有趣的案例。不管'O'如何进行,最终都是败局。因此,所有可能的移动都将 return 相同,即玩家的最低可能得分 'O'。由于在您的代码中 bestMove
不会得到更新,除非出现更好的动作,而在这种情况下没有任何动作,因此它只会 return 第一步。