对Minimax进行beta修剪
我花了一整天的时间尝试实现极小极小,但没有真正理解它。 现在,我想我理解minimax是如何工作的,但不是alpha-beta修剪。
这是我对minimax的理解:
生成所有可能移动的列表,直到深度限制。
评估一个游戏领域对底部每个节点的有利程度。
对于每个节点(从底部开始),如果图层最大,那么该节点的得分是其子节点的最高分数。 如果该图层为最小值,则该节点的得分是其子节点的最低得分。
如果您尝试最大化分数,请执行得分最高的移动;如果您想要最小分数,请执行最低分移动。
我对alpha-beta修剪的理解是,如果父层最小并且您的节点比最低分数高,那么您可以修剪它,因为它不会影响结果。
然而,我不明白的是,如果你可以计算出一个节点的分数,你就需要知道一个低于该节点的层上的所有节点的分数(在我对minimax的理解中)。 这意味着你将使用相同数量的CPU功率。
任何人都可以指出我错了什么? 这个答案(Minimax解释为一个白痴)帮助我了解minimax,但我没有得到alpha beta beta修剪如何帮助。
谢谢。
要了解Alpha-Beta,请考虑以下情况。 这是白人转身,白人试图最大限度地提高分数,黑人正试图将分数降到最低。
White评估移动A,B和C,并发现C的最佳分数是20。现在考虑评估移动D时会发生什么:
如果白选择移动D,我们需要考虑黑方的反移动。 在早期,我们发现黑色可以捕捉到白色女王,而且由于丢失了女王,该子树得到5分MIN。 但是,我们并没有考虑所有的黑人反击。 其余值得检查吗? 没有。
我们并不在乎黑人能否得分低于5分,因为白人移动“C”可以将得分保持在20.黑方不会选择分数高于5的反移动,因为他试图最小化得分并且已经找到移动,得分为5.对于白色,只要D的MIN(到目前为止)低于C(当然是20),移动C优先于移动D. 所以我们在那里“修剪”其余的树,弹出一个关卡并评估白色移动E,F,G,H ....到最后。
希望有所帮助。
您不需要评估节点的整个子树来决定其值。 Alpha Beta Pruning使用两个动态计算的边界alpha和beta来限制节点可以采用的值。
Alpha是通过游戏树中的另一条路径保证最大玩家的最小值(不论最小玩家是干什么的)。 该值用于在最小化级别执行截断(修剪)。 当最小牌手发现最小节点的得分必须小于α时,它不需要评估该节点的更多选择,因为最大牌手已经有了更好的移动(具有α值的移动)。
Beta是min player被保证的最大值,用于在最大化级别执行截止。 当最大玩家发现最大节点的得分必然大于β时,它可以停止评估来自该节点的更多选择,因为最小玩家不允许它采取该路径,因为最小玩家已经有路径这保证了beta的价值。
我已经写了Alpha Beta Pruning的详细解释,它的伪代码和一些改进:http://kartikkukreja.wordpress.com/2014/06/29/alphabetasearch/
(非常) mimimax的简短说明:
您(董事会职位的评估员)可以选择进行n
移动。 你尝试所有这些,并给予(对手)评估者董事会职位。
您选择具有最低评价的举措。 这个评估是你开始评估董事会的评估。
(非常) α-β修剪的简短解释:
您(董事会职位的评估员)可以选择进行n
移动。 你逐一尝试所有这些,并给予(对手)评估者董事会职位 - 但是你也传递了你当前的评估(董事会)。
m
动作。 他尝试所有这些方法,并向(他的对手)评估者提供新的董事会职位(一个接一个),然后选择最大的职位。 您选择具有最低评价的举措。 这个评估是你开始评估董事会的评估。
下一篇: Horizontally and Vertically center text for TextView in Android