ALPHA-BETA(state, player, depth, alpha,
beta)
/* If the level is the top level, let alpha = -infinity, beta = +infinity If depth has reached the search limit, apply static evaluation
function If player is max: Until all of state's children are examined with
ALPHA-BETA or until
Call ALPHA-BETA(child, min, depth+1, alpha, beta);
Compare the value reported with alpha; if reported value
Report alpha If player is min: Until all of state's children are examined with
ALPHA-BETA or until
Call ALPHA-BETA(child, max, depth+1, alpha, beta);
Compare the value reported with beta; if reported value
Report beta
|
--------------A-------------- max / | \ B C D min / | \ / \ / \ E F G H I J K max / \ / \ / \ / \ / \ / \ / \ L M N O P Q R S T U V W X Y min 7 6 8 5 2 3 0 -2 6 2 5 8 9 2 First call (assume depth limit is 3): ALPHA-BETA(A,max,0,-inf,+inf) children B,C,D B ALPHA-BETA(B,min,1,-inf,+inf) children E,F,G E ALPHA-BETA(E,max,2,-inf,+inf) children L,M ALPHA-BETA(L,min,3,-inf,+inf) returns 7 alpha = 7 ALPHA-BETA(M,min,3,7,+inf) returns 6 returns 7 beta = 7 F ALPHA-BETA(F,max,2,-inf,7) children N,O ALPHA-BETA(N,min,3,-inf,7) returns 8 alpha = 8 *** CUTOFF alpha > beta *** returns 8 G ALPHA-BETA(G,max,2,-inf,7) children P,Q ALPHA-BETA(P,min,3,-inf,7) returns 2 alpha = 2 ALPHA-BETA(Q,min,3,2,7) returns 3 alpha = 3 returns 3 beta = 3 returns 3 alpha = 3 C ALPHA-BETA(C,min,1,3,+inf) children H,I H ALPHA-BETA(H,max,2,3,+inf) children R,S ALPHA-BETA(R,min,3,-inf,3) returns 0 alpha = 0 ALPHA-BETA(S,min,3,0,3) returns -2 returns 0 beta = 0 *** CUTOFF alpha > beta *** returns 0 D ...