如何为跳棋等棋盘游戏选择最佳算法?

人工智能 游戏-ai 应用 蒙特卡罗树搜索 极小极大 α-β-修剪
2021-10-19 20:18:44

如何为跳棋等棋盘游戏选择最佳算法?

到目前为止,我只考虑了三种算法,即 minimax、alpha-beta 剪枝和蒙特卡洛树搜索 (MCTS)。显然,alpha-beta 剪枝和 MCTS 都是基本 minimax 算法的扩展。

3个回答

tl;博士:

  • 这些算法都不适用于现代工作,但它们是开始教学的好地方。

  • 您应该始终更喜欢使用 Alpha-Beta 修剪而不是裸极小极大搜索。

  • 如果你能想出一个有用的启发式方法,你应该更喜欢使用某种形式的启发式引导搜索。想出一个有用的启发式通常需要大量的领域知识。

  • 当您缺乏良好的启发式方法、计算资源有限以及错误不会对现实世界造成严重后果时,您应该更喜欢使用蒙特卡洛树搜索。

更多细节:

在极小极大搜索中,我们并不试图变得非常聪明。我们只是使用标准的动态规划方法。如果我们接近游戏结束,很容易计算出不同动作的价值(因为游戏将在下一步结束,我们不必看得很远)。同样,如果我们知道对手在比赛的最后一步会做什么,就很容易弄清楚我们在倒数第二步应该做什么。实际上,我们可以将倒数第二步视为较短游戏的最后一步。然后我们可以重复这个过程。使用这种方法肯定会发现标准扩展形式游戏中的最佳策略,但需要我们考虑每一个可能的移动,这对于除了最简单的游戏之外的所有游戏都是不可行的。

Alpha-Beta 剪枝是对 Minimax 搜索的严格改进。它利用了一些动作显然比其他动作更糟糕的事实。例如,在国际象棋中,我不需要考虑任何能让你有机会将我置于将死的棋步,即使你可以从那个位置做其他事情。一旦我看到一个动作可能会导致失败,我就不会费心去想从那时起还会发生什么。我去看看其他的。该算法也一定会产生正确的结果,并且速度更快,但在实践中仍然必须考虑大部分动作。

有两种常见的方法可以绕过精确解决这类游戏的极端计算成本:

  1. 使用启发式(A* 搜索是用于教学目的的常用算法,但静止搜索是 2 人游戏中的类似想法)。这只是一个对游戏状态值进行估计的函数。无需考虑游戏中的所有移动,您可以只考虑向前移动到某个有限距离,然后使用启发式的值来判断您达到的状态的值。如果你的启发式是一致的(本质上是:如果它总是高估状态的质量),那么这仍然会产生正确的答案,但在实践中会有巨大的加速。

  2. 使用 Rollouts(如 Monte Carlo Tree Search)。基本上,不是考虑每一步,而是在随机行动的玩家之间运行几千个模拟游戏(这比考虑所有可能的移动要快)。为状态分配一个等于从它开始的游戏的平均获胜率的值。这可能不会产生正确的答案,但在某些类型的游戏中,它可以可靠地执行。它通常用作更精确技术的扩展,而不是单独使用。

到目前为止,我只考虑了三种算法,即 minimax、alpha-beta 剪枝和蒙特卡洛树搜索 (MCTS)。显然,alpha-beta 剪枝和 MCTS 都是基本 minimax 算法的扩展。

鉴于这种情况,我建议从 Minimax 开始在这三种算法中,Mi​​nimax 是最容易理解的。

正如其他人在其他答案中提到的那样,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 为何变得“必要”/受欢迎。


最后,在我看来:

  • Alpha-Beta 严格来说优于 Minimax,但也有很强的相关性/建立在 Minimax 之上;所以,从 Minimax 开始,如果时间允许,之后再去 Alpha-Beta
  • MCTS 有不同的优势/劣势,在“现代”问题中通常比 Alpha-Beta 更好(但并非总是如此),在开始深入研究 MCTS 之前,对 Minimax 的良好理解可能会有所帮助

如果你必须在 minimax 和 alpha-beta 剪枝之间进行选择,你应该选择 alpha-beta。它更高效、更快速,因为它可以修剪你的探索树的大部分。但是您需要根据最大或最小的角度将动作从最好到最差排序,这样算法可以快速实现是否需要探索。