Javascript 极小极大算法应该能够处理任何输入吗

Javascript 极小极大算法应该能够处理任何输入吗,javascript,minimax,Javascript,Minimax,我正在使用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,这是一个瞬间的失

我正在使用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上:

是的,它应该包含所有输入,是的,它确实很重要,因为您的代码中可能有bug,需要清除

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


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

只需设置两个机器人,让它们相互游戏,在第二个棋盘中O没有正确的移动,因为无论O做什么X都可以赢,所以O的每一个移动都同样糟糕。啊,我现在明白了。这个例子保证了“O”的松散性,所以它甚至没有试图从那里延长游戏。因此,该算法被认为是“最佳”可能的移动可以不同于人类可能会一直试图去克服一个失败的原因,而仅仅是克服它。谢谢你在这方面给我的启发。