2.3 Alpha-Beta法 |
今回はMini-Max法を改良した、Alpha-Beta法について説明します。
図1にAlpha-Beta法によって各節点が評価づけられたゲーム木を示します。 |
|
図1. Alpha-Beta法 |
Alpha-Beta法での探索手順は、Mini-Max法と同じです。 すると、節点Pを探索した後、節点Qは探索する必要がなくなります。 今度は、節点Hを探索した時のことを考えます。 Alpha-cutおよびBeta-cutによって無駄な探索をしないようにする方法をAlpha-Beta法といいます。
Mini_Max法のときのようにC言語の関数風に書くと次のようになります。
int ab_max(int t, int alpha, int beta) /* 自局面の節点での処理 tは葉局面までの手数 */ { int v; if(t == 0) return (現在の局面の評価値); for(最初の子節点の手; 未評価の子節点がある; 次の子節点に移る){ 局面に子節点の手を打つ; v = ab_min(t-1, alpha, beta); 局面を元に戻す; if(v > alpha){ alpha = v; if(alpha >= beta) return beta; } } return alpha; } ab_min(int t) /* 相手局面の節点での処理 */ { int v; if(t == 0) return (現在の局面の評価値); for(最初の子節点の手; 未評価の子節点がある; 次の子節点に移る){ 局面に子節点の手を打つ; v = ab_max(t-1, alpha, beta); 局面を元に戻す; if(v < beta){ beta = v; if(beta <= alpha) return alpha; } } return beta; } 次節からは、さらに効率よく探索するための工夫について説明します。 |
トップに戻る 2.2 Mini-Max法 2.4順序付けと反復深化法 |