个性化阅读
专注于IT技术分析

人工智能的alpha-beta剪枝算法

点击下载

本文概述

  • Alpha-beta修剪是minimax算法的修改版本。它是minimax算法的一种优化技术。
  • 正如我们在minimax搜索算法中看到的那样,必须检查的游戏状态数在树的深度上呈指数级。由于我们无法消除指数,因此我们可以将其减半。因此,存在一种无需检查游戏树的每个节点就可以计算正确的minimax决策的技术,该技术称为修剪。这涉及两个阈值参数Alpha和Beta用于将来扩展,因此称为alpha-beta修剪。它也称为Alpha-Beta算法。
  • Alpha-beta修剪可以应用于树的任何深度,有时它不仅可以修剪树叶,还可以修剪整个子树。
  • 可以将两个参数定义为:Alpha:到目前为止,在Maximizer路径上的任何点处,我们都找到了最佳(最高值)选择。 alpha的初始值为-∞。 Beta:到目前为止,我们已经在Minimizer的任何位置找到了最佳(最低价值)选择。 beta的初始值为∞。
  • 将Alpha-beta修剪为标准minimax算法会返回与标准算法相同的动作,但是会删除所有不会真正影响最终决策但会使算法变慢的节点。因此,通过修剪这些节点,可以使算法更快。

注意:为了更好地理解该主题,请研究minimax算法。

Alpha-beta修剪的条件

alpha-beta修剪所需的主要条件是:

α>=β

有关alpha-beta修剪的要点

  • Max播放器只会更新alpha的值。
  • 最小播放器只会更新beta的值。
  • 在回溯树时,节点值将传递到较高的节点,而不是alpha和beta值。
  • 我们只会将alpha,beta值传递给子节点。

伪代码用于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修剪的工作

让我们以两人搜索树为例,了解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在Cα= 3和β=∞的情况下,将节点值1返回到节点C,此处β的值将被更改,它将与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修剪的重要方面。

它可以有两种类型:

  • 最坏的排序:在某些情况下,alpha-beta修剪算法不会修剪任何树上的叶子,并且与minimax算法完全一样。在这种情况下,由于α-β因素,它还会消耗更多的时间,这种修剪动作被称为最差排序。在这种情况下,最佳移动发生在树的右侧。该命令的时间复杂度为O(bm)。
  • 理想的排序:当树中进行大量修剪时,α-β修剪的理想排序发生,并且最佳移动发生在树的左侧。我们应用DFS,因此它首先在树的左侧搜索,并且在相同的时间内经过两次最小深度算法。理想排序的复杂度为O(bm / 2)。

寻找良好秩序的规则

以下是在alpha-beta修剪中找到良好顺序的一些规则:

  • 从最浅的节点发生最佳移动。
  • 对树中的节点进行排序,以便首先检查最佳节点。
  • 在寻求最佳举措的同时利用领域知识。例如:对于国际象棋,请尝试顺序:先捕获,然后威胁,然后向前移动,向后移动。
  • 我们可以保留状态,因为状态可能会重复。

赞(3)
未经允许不得转载:srcmini » 人工智能的alpha-beta剪枝算法

评论 抢沙发

评论前必须登录!