Answers:
tl; dr:
这些算法都不适合现代工作,但是它们是从教学开始的好地方。
您应该始终喜欢使用Alpha-Beta修剪,而不是单纯的minimax搜索。
如果您可以提出有用的启发式方法,则应该首选使用某种形式的启发式引导搜索。提出有用的启发式方法通常需要大量领域知识。
当您缺乏良好的启发式方法,有限的计算资源以及错误不会对现实世界造成严重后果时,您应该首选使用蒙特卡洛树搜索。
更多细节:
在minimax搜索中,我们不会尝试变得非常聪明。我们只使用标准的动态编程方法。如果我们接近游戏结束,就很容易弄清楚差异动作的价值(由于游戏将在下一动作结束,因此我们不必太遥远)。同样,如果我们知道对手在游戏的最后一步会做什么,那么很容易弄清楚我们在倒数第二步应该做什么。实际上,我们可以将第二个最后一步视为较短游戏的最后一步。然后,我们可以重复此过程。使用这种方法肯定会在标准的大幅面游戏中发现最佳策略,但将要求我们考虑所有可能的举动,除了最简单的游戏以外,这是不可行的。
Alpha-Beta修剪是对Minimax搜索的严格改进。它利用了一些举动明显比其他举动更糟的事实。例如,在国际象棋中,即使您可以从该位置进行其他操作,我也无需考虑任何使您有机会将我置于死敌的举动。一旦我发现此举可能会导致失败,就不会再考虑从那时起可能还会发生什么。我去看看其他的东西。该算法也肯定会产生正确的结果,并且速度更快,但实际上仍必须考虑大多数动作。
您可以通过两种常用方法来避免完全解决这类游戏的巨大计算成本:
使用启发式方法(出于教学目的,A *搜索是常用算法,但是在2个玩家游戏中,静态搜索是类似的想法)。这只是一个估计游戏状态值的函数。无需考虑游戏中的所有移动,您只需考虑向外移动一定距离,然后使用试探法的值来判断所达到状态的值。如果您的启发式方法是一致的(本质上是:如果它总是高估状态质量),那么这仍然会得出正确的答案,但实际上会大大提高速度。
使用卷展栏(如“蒙特卡洛树搜索”)。基本上,不用考虑任何举动,而是在随机行动的玩家之间运行数千个模拟游戏(这比考虑所有可能的动作要快)。为各州分配一个值,该值等于从此开始的游戏的平均获胜率。这可能无法给出正确的答案,但是在某些游戏中,它的性能可靠。它通常用作更精确技术的扩展,而不是单独使用。
注意:我之所以只选择这三种算法,是因为我有足够的时间来理解它们。通过一些研究,我发现这些算法基本上已经交织到minimax算法中。因此,如果我能理解其中一个,那么其他两个就可以使用。
在这种情况下,我建议从Minimax开始。在这三种算法中,Minimax是最容易理解的。
正如其他答案中提到的那样,Alpha-Beta是对Minimax的严格改进。Minimax基本上是Alpha-Beta实现的一部分,并且对Alpha-Beta的深入了解需要从对Minimax的充分理解开始。如果您在了解和实现Minimax之后碰巧还有时间,建议您在此之后转到Alpha-Beta,并在Minimax的基础上进行构建。如果您还不了解Minimax,那么从Alpha-Beta开始就没有任何意义。
要真正深入地理解,蒙特卡洛树搜索可能会更高级,更复杂。在过去的十年左右的时间里,MCTS确实确实比其他两个方法越来越受欢迎,因此从该角度来看,对MCTS的理解可能更“有用”。
Minimax和MCTS之间的连接不如Minimax和Alpha-Beta之间的连接直接/明显,但至少在概念上仍然存在连接。我认为在进入MCTS之前首先充分了解Minimax仍然是有益的 ; 特别是,了解Minimax及其缺陷/弱点可以提供有用的背景信息/帮助您了解为什么MCTS变得“必需” /受欢迎。
最后,我认为: