1. 对于一个MIN节点,若能估计出其倒推值的上确界Beta,并且这个Beta值不大于MIN的父节点(MAX节点)的估计倒推值的下确界Alpha,即Alpha≥Beta,则就不必再扩展该MIN节点的其余子节点了,因为这些节点的估值对MIN父节点的倒推值已无任何影响了,这一过程称为Alpha剪枝。
2. 对于一个MAX节点,若能估计出其倒推值的下确界Alpha,并且这个Alpha值不小于MAX的父节点(MIN节点)的估计倒推值的上确界Beta,即Alpha≥Beta,则就不必再扩展该MAX节点的其余子节点了,因为这些节点的估值对MAX父节点的倒推值已无任何影响了。这一过程称为Beta剪枝。
3. 一个MAX节点的Alpha值等于其后继节点当前最大的最终倒推值,一个MIN节点的Beta值等于其后继节点当前最小的最终倒推值
(假设方框表示取极大值的节点,圆圈表示取极小值的节点)
B的值是18,D的值为16,而C是取极小值,由此可以判断C《=16,而A取Max(B,C),故没必要考虑C的其他子节点了。
Alphabeta的MiniMax形式,伪代码:
alpha-beta(player,board,alpha,beta)
if(game over in current board position) return winner
children = all legal moves for player from this board
if(max's turn)
for each child
score = alpha-beta(other player,child,alpha,beta)
(we have found a better best move....)
if score > alpha then alpha = score
(cut off...)
if alpha >= beta then return alpha
return alpha (this is our best move)
else (min's turn)
for each child
score = alpha-beta(other player,child,alpha,beta)
(opponent has found a better worse move.....)
if score < beta then beta = score
(cut off....)
if alpha >= beta then return beta
return beta (this is the opponent's best move)
AlphaBeta的递归形式
01
int
AlphaBeta(
int
depth,
int
alpha,
int
beta)
02 {
02
03
04
06
08
09
11
13
14
15
16
18
19
20
21
24
25
26
27
28
29