Minimax的Alpha-beta修剪

时间:2011-10-25 11:44:02

标签: algorithm language-agnostic artificial-intelligence minimax alpha-beta-pruning

我花了一整天的时间试图在没有真正了解它的情况下实现minimax。现在,我想我理解minimax是如何工作的,但不是alpha-beta修剪。

这是我对极小极大的理解:

  1. 生成所有可能移动的列表,直到深度限制。

  2. 评估游戏区域对底部每个节点的有利程度。

  3. 对于每个节点(从底部开始),如果图层为最大,则该节点的得分是其子节点的最高得分。如果图层是min,则该节点的得分是其子项的最低得分。

  4. 如果您尝试最大分数,则执行得分最高的移动;如果您想要最低分数,则执行最低分数。

  5. 我对alpha-beta修剪的理解是,如果父图层是min并且你的节点得分高于最低得分,那么你可以修剪它,因为它不会影响结果。

    然而,我不明白的是,如果你能计算出节点的分数,你需要知道低于节点的层上所有节点的分数(根据我对minimax的理解)。这意味着你将继续使用相同的CPU功率。

    有人可以指出我错了吗?这个答案(Minimax explained for an idiot)帮助我理解了极小极大,但我不知道alpha beta修剪会有多大帮助。

    谢谢。

5 个答案:

答案 0 :(得分:15)

要了解Alpha-Beta,请考虑以下情况。这是白人转向,白人试图最大化得分,黑人试图最小化得分。

怀特评估移动A,B和C,并且发现最佳得分是20而C。现在考虑评估移动D时会发生什么:

如果白色选择移动D,我们需要考虑黑色的反向移动。在早期,我们发现黑色可以捕获白色女王,并且由于失去的女王,该子树获得的MIN得分为5。但是,我们还没有考虑所有黑人的反击。是否值得检查其余的?否。

我们不在乎黑人是否可以得分低于5,因为白人移动“C”可以将得分保持在20分。黑人不会选择得分高于5的反击因为他试图最小化得分并且已经找到了得分为5的移动。对于白色,只要D的MIN(5到目前为止)低于C(肯定是20),移动C优先于移动D.因此,我们在那里“修剪”树的其余部分,弹回一个级别并评估白色移动E,F,G,H ....到最后。

希望有所帮助。

答案 1 :(得分:3)

您无需评估节点的整个子树来确定其值。 Alpha Beta Pruning使用两个动态计算的边界alpha和beta来绑定节点可以采用的值。

Alpha是通过游戏树中的另一条路径保证最大玩家的最小值(无论最小玩家做什么)。该值用于在最小化级别执行截止(修剪)。当min玩家发现min节点的分数必然小于alpha时,它不需要再评估该节点的任何选择,因为max player已经有更好的移动(具有alpha值的那个)。 p>

Beta是保证最小玩家的最大值,用于在最大化级别执行截止。当max玩家发现最大节点的得分必然大于beta时,它可以停止评估来自该节点的任何更多选择,因为min玩家不会允许它采用这条路径,因为min玩家已经有了一条路径这保证了β值。

我已经详细解释了Alpha Beta Pruning,它的伪代码和一些改进:http://kartikkukreja.wordpress.com/2014/06/29/alphabetasearch/

答案 2 :(得分:1)

我认为你的问题暗示了对评估功能的误解

  

如果你能算出一个节点的分数,你需要知道一个低于节点的层上所有节点的分数(根据我对minimax的理解)

我不完全确定你在那里意味着,但听起来不对。 评估函数(EF)通常是一个非常快速的静态位置评估。这意味着它只需要查看单个位置并从中获得“判决”。 (IOW,你并不总是评估分支到 n plys)

现在很多次,评估确实是静态的,这意味着位置评估函数完全确定性这也是评估结果易于缓存的原因(因为每次评估一个位置时它们都是相同的)。


现在,例如国际象棋,通常有相当多的明显/隐蔽偏离上述:

  • 根据游戏背景,可能会对位置进行不同的评估(例如,在游戏过程中确切的位置是否确实发生过;没有进行典当移动/捕获的移动次数,传球和施法机会)。解决这个问题最常见的“技巧”是将该状态实际纳入“位置” 1

  • 通常会为游戏的不同阶段(开场,中间,结尾)选择不同的EF;这有一些设计影响(如何在更改EF时处理缓存评估?当不同层的EF不同时,如何进行alpha / beta修剪?)

说实话,我不知道国际象棋引擎如何解决后者(我只是为了我的玩具引擎而避免使用它)

我会参考以下在线资源:


<子> 1 就像'检查'/'僵持'条件一样,如果它们不是评价函数以外的特殊套装

答案 3 :(得分:1)

(非常) mimimax 的简短说明:

  • 您(董事会职位的评估员)可以选择播放n次移动。你尝试了所有这些,并给(对手)评估员提供了董事会职位。

    • 对手评估新的棋盘位置(对于他,对手方) - 通过基本相同的事情,递归地调用(他的对手)评估者,除非达到最大深度或其他条件并且静态评估者是调用 - 然后选择最大评估并将评估结果发回给您。
  • 您选择具有这些评估的最小的移动。而评估是对您在开始时必须评估的董事会的评估。


(非常)α-β-pruning 的简短说明:

  • 您(董事会职位的评估员)可以选择播放n次移动。你可以尝试所有这些逐个并给(对手)评估员提供董事会职位 - 但你也可以传递你当前的评估(你的董事会)。

    • 对手评估新的棋盘位置(对于他,对手方)并将评估结果发回给您。但是他是怎么做到的?他可以选择玩m次动作。他尝试了所有这些并将新的董事会职位(一个接一个)交给(他的对手)评估员,然后选择最大的一个。
    • 关键步骤:如果他回复的任何评价都超过你给他的最低评价,那么他肯定会最终返回至少那么大的评价值(因为他想最大化)。你肯定会忽略这个价值(因为你想最小化),所以他停止了他尚未评估的董事会的工作。
  • 您选择具有这些评估的最小的移动。而评估是对您在开始时必须评估的董事会的评估。

答案 4 :(得分:1)

这是一个简短的答案 - 您可以知道节点的价值而无需计算其所有子节点的精确值。

一旦我们知道从父节点播放器的角度来看,子节点不能比先前评估的兄弟节点更好,我们就可以停止评估子子树。它至少是