📅  最后修改于: 2020-09-23 09:21:22             🧑  作者: Mango
注意:为了更好地理解该主题,请研究minimax算法。
进行alpha-beta修剪所需的主要条件是:
α>=β
function minimax(node, depth, alpha, beta, maximizingPlayer) is
if depth ==0 or node is a terminal node then
return static evaluation of node
if MaximizingPlayer then // for Maximizer Player
maxEva= -infinity
for each child of node do
eva= minimax(child, depth-1, alpha, beta, False)
maxEva= max(maxEva, eva)
alpha= max(alpha, maxEva)
if beta<=alpha
break
return maxEva
else // for Minimizer player
minEva= +infinity
for each child of node do
eva= minimax(child, depth-1, alpha, beta, true)
minEva= min(minEva, eva)
beta= min(beta, eva)
if beta<=alpha
break
return minEva
让我们以两人搜索树为例,了解Alpha-beta修剪的工作原理
步骤1:在的第一步中,Max播放器将首先从节点A开始移动,其中节点α=-∞和β=+∞,这些alpha和beta值向下传递到节点B,节点B再次是α=-∞和β=+∞,并且节点B将相同的值传递给其子D。
步骤2:在节点D处,将计算α的值作为其对Max的转向。首先将α的值与2进行比较,然后与3进行比较,max(2,3)=3将是节点D处的α值,节点值也将为3。
步骤3:现在算法回溯到节点B,其中β的值将随着Min的转弯而变化,现在β=+∞将与可用的后续节点值进行比较,即min(∞,3)=3,因此在节点B处现在α=-∞,β=3。
在下一步中,算法遍历节点B的下一个后继节点,即节点E,并且还将传递α=-∞和β=3的值。
步骤4:在节点E处,Max旋转,而alpha的值将改变。alpha的当前值将与5进行比较,因此max(-∞,5)=5,因此在节点Eα=5和β=3处,其中α>=β,因此将修剪E的右后继,并且算法将不会遍历它,并且节点E处的值为5。
步骤5:在下一步,算法再次将树从节点B移回节点A。在节点A,将更改alpha的值,最大可用值为3,因为max(-∞,3)=3,和β=+∞,这两个值现在传递给A的右继任者,即NodeC。
在节点C处,α=3,β=+∞,并且相同的值将传递到节点F。
步骤6:在节点F处,再次将α的值与左子代(0,max(3,0)=3)比较,然后与右子代(1,max(3,1)=3仍然α保持3,但F的节点值将变为1。
步骤7:节点F将节点值1返回到节点C,在Cα=3和β=+∞的情况下,此处的beta值将更改,它将与1比较,因此min(∞,1)=1。在C处,α=3和β=1,并且再次满足条件α>=β,因此将修剪C的下一个子元素G,并且该算法将不会计算整个子树G。
步骤8:C现在将值1返回给A,这里A的最佳值是max(3,1)=3。下面是最终的游戏树,它显示了已计算的节点和从未计算的节点。因此,在此示例中,最大化器的最佳值为3。
alpha-beta修剪的有效性高度依赖于检查每个节点的顺序。移动顺序是alpha-beta修剪的重要方面。
它可以有两种类型:
以下是在alpha-beta修剪中找到良好顺序的一些规则: