ネガアルファ法 prev Page next Page

アルファベータ法 と同じ処理を行うが、次の手番をコールするときに、
盤面を白黒反転、α値、β値をマイナスにして交換して自分自身をコールする。
オセロ盤のデータ構造にビットボードを用いた場合などのように、盤面の反転にコストが必要なければ、
デメリットがなく、ソースが簡潔になる。

int negaAlpha(uint64 black, uint64 white, int alpha, int beta)
{
    if( 末端ノード )
        return eval(black, white);
    for(m = すべての黒の着手について) {
        着手を実行;
        int ev = alphaBeta(white, black, -beta, -alpha);  // 盤面を白黒反転、αβをマイナス反転
        if( ev > alpha) alpha = ev;
        着手を元に戻す;
        if( alpha >= beta ) return alpha;   // αβカット
    }
    return alpha;
}


このページへのトラックバックURL: http://vivi.dyndns.org/wtb/266
1,897 page views, page owner : びびすけ
2007/05/26 08:34 modified by びびすけ

( page views in recent 7 days)