如何为棋盘之类的棋盘游戏选择最佳算法?


15

如何为棋盘之类的棋盘游戏选择最佳算法?

到目前为止,我只考虑了三种算法,即minimax,α-beta修剪和Monte Carlo树搜索(MCTS)。显然,alpha-beta修剪和MCTS都是基本minimax算法的扩展。

Answers:


18

tl; dr:

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

  • 您应该始终喜欢使用Alpha-Beta修剪,而不是单纯的minimax搜索。

  • 如果您可以提出有用的启发式方法,则应该首选使用某种形式的启发式引导搜索。提出有用的启发式方法通常需要大量领域知识。

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

更多细节:

在minimax搜索中,我们不会尝试变得非常聪明。我们只使用标准的动态编程方法。如果我们接近游戏结束,就很容易弄清楚差异动作的价值(由于游戏将在下一动作结束,因此我们不必太遥远)。同样,如果我们知道对手在游戏的最后一步会做什么,那么很容易弄清楚我们在倒数第二步应该做什么。实际上,我们可以将第二个最后一步视为较短游戏的最后一步。然后,我们可以重复此过程。使用这种方法肯定会在标准的大幅面游戏中发现最佳策略,但将要求我们考虑所有可能的举动,除了最简单的游戏以外,这是不可行的。

Alpha-Beta修剪是对Minimax搜索的严格改进。它利用了一些举动明显比其他举动更糟的事实。例如,在国际象棋中,即使您可以从该位置进行其他操作,我也无需考虑任何使您有机会将我置于死敌的举动。一旦我发现此举可能会导致失败,就不会再考虑从那时起可能还会发生什么。我去看看其他的东西。该算法也肯定会产生正确的结果,并且速度更快,但实际上仍必须考虑大多数动作。

您可以通过两种常用方法来避免完全解决这类游戏的巨大计算成本:

  1. 使用启发式方法(出于教学目的,A *搜索是常用算法,但是在2个玩家游戏中,静态搜索是类似的想法)。这只是一个估计游戏状态值的函数。无需考虑游戏中的所有移动,您只需考虑向外移动一定距离,然后使用试探法的值来判断所达到状态的值。如果您的启发式方法是一致的(本质上是:如果它总是高估状态质量),那么这仍然会得出正确的答案,但实际上会大大提高速度。

  2. 使用卷展栏(如“蒙特卡洛树搜索”)。基本上,不用考虑任何举动,而是在随机行动的玩家之间运行数千个模拟游戏(这比考虑所有可能的动作要快)。为各州分配一个值,该值等于从此开始的游戏的平均获胜率。这可能无法给出正确的答案,但是在某些游戏中,它的性能可靠。它通常用作更精确技术的扩展,而不是单独使用。


A *似乎真的不像其他算法那样适合两人游戏吗?关于MCTS的注意事项:典型的实现方式不是“考虑所有向下移动到某个固定深度的操作”,而是开始部署。取而代之的是,典型的实现会动态地逐渐增长树搜索树,在更有希望的部分(选择策略推向许多推出的部分)中增加树的搜索树,在不太有希望的部分中减少树的搜索树。
丹尼斯·索默斯

1
@JohnDoucette为什么会说:“这些算法都不适合现代工作,但它们是从教学开始的好地方。” 对于MCTS而言,当给定状态和动作的下一个状态的转移定义明确时,即使对于单人搜索,这似乎也非常适合现代工作。你同意吗?
米格尔·萨拉瓦

1
@MiguelSaraiva就其本身而言,MCTS不是您通常用于现代应用程序的东西。结合DNN之类的东西来提供学习的启发式方法将是相当不错的。
John Doucette

1
@JohnDoucette“ MCTS不是您通常用于现代应用程序的东西”。首先,您所指的“现代性”在2016年取得了重大突破(MCTS + DNN),似乎您是在暗示从此之前的一切都已过时(显然是错误的)。实际上,由于相反的原因,通常不使用MCTS可能更合理:它太先进了:行业中的许多应用程序确实过时了,可能会被MCTS取代。对于许多这样的MCTS + DNN来说,这只是一个遥不可及的梦想,因为预训练几乎是不可想象的。
约翰

1
@Johan 在工业应用中听起来不错,但问题是关于“棋盘游戏”的问题。对于此类玩具问题,我认为MCTS不是正确的现代方法。当然,在现实世界中确实存在很多问题,但是这将对现有已部署系统产生巨大的改进。
John Doucette

7

注意:我之所以只选择这三种算法,是因为我有足够的时间来理解它们。通过一些研究,我发现这些算法基本上已经交织到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之上;因此,从Minimax开始,如果时间允许,然后再选择Alpha-Beta
  • MCTS具有不同的优势/劣势,在“现代”问题上(通常并非总是如此),通常比Alpha-Beta更好,对Minimax的深入了解在开始涉足MCTS之前可能会有所帮助

您还有其他建议使用的算法吗?这就像alpha beta修剪水平
Joey

@Joey Hmm不是,不是。Minimax是一个非常自然的起点,我强烈建议您开始使用。这基本上是为象棋/跳棋/井字游戏/其他游戏开发的第一个算法。之后,在此基础上开发了数百个(即使不是数千个)改进,您可能可以在棋牌编程.wikispaces.com / Search上找到许多改进。在Minimax之上,Alpha-Beta是最自然的增强功能。
丹尼斯·索默斯

@Joey Monte-Carlo树搜索有点不同(不一定以Minimax为基础),它在“现代” AI中是有趣,有趣,流行且高度相关的。尽管如此,基础还是很重要的,即使您在技术上是可能的,如果您还不了解Minimax + Alpha-Beta,我也不建议立即开始使用MCTS。
丹尼斯·索默斯

谢谢你的网站。现在,我可以阅读大量的知识。学习新事物最难的是找到正确的材料来帮助您理解。所以,再次感谢您的网站
乔伊

@Joey我不确定100%是否最容易学习国际象棋编程(并且似乎在顶部有一个可怕的通知,该站点可能会在7月底消失)。如果我没记错的话,如果您是该领域的初学者,那么许多描述都很简短/可能不容易理解。不过,这至少将是一个很好的,全面的名称,包括各种算法/增强功能的名称,您可以尝试查找原始来源或在所有这些名称上搜索Google,以获取其他位置的详细信息。
丹尼斯·索默斯

1

我必须在Minimax修剪和Alpha-Beta修剪之间选择,您应该选择Alpha-beta。由于它可以修剪您的探索树的大部分内容,因此效率更高,速度更快。但是您需要根据最大或最小的角度对从最佳到最坏的动作进行排序,以便算法可以快速实现是否有必要进行探索。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.