αβ法の改善

僕が「思考ゲームプログラミング」を読んだ上でどこかを参考にして作った、オセロの完全読みのαβ法、無駄があって、

・全部の変化について評価値を求めている(そこまで必要ない)のは分かっていた。

それを直して、ノード数を数えても全く減ってない。はて?これは?ソースコードをいくら眺めても、枝刈りしてないじゃん。そりゃ効果があるわけがない。

(というか、枝刈りしないで全検索するのもαβ法と呼ぶのだろうか)

どうすりゃいいんだろうね?→Googleで検索

MinMaxとαβ法

ああ、そうやって枝刈りするのか。 こうかな?

/*αβ法*/
function・・・
(中略)
for( var i=0; i var pos = movables[i];
newboardobj = putStone_solver(board, pos, turn);
if( newboardobj.count == 0 ){
throw new Error(“打てる個所一覧の生成失敗。”);
}
if( turn == ‘X’ ){rtrn = ‘O’;}else{ rtrn = ‘X’;}
var val = alphaBetaFull(newboardobj.board, passes, rtrn, a, b);
if( ‘X’ == turn ){
if( val > a ){
a = val;
if( a >= b ){
return(a);
}

}
}
else{
if( val < b ){
b = val;
if( b <= a ){
return(b);
}

}
}
}
if( turn == ‘X’ ){
return( a );
}
else{
return( b );
}
}

太字の部分を追加(nodecountはデバッグ用に入れただけなので後で消す)。 色んな局面で、WZebraと評価値を比較。大丈夫っぽい。 そして、無茶苦茶早くなった。今触ってるのは終盤問題の方ですが、もうちょっと確認するのと、対局の方も直してアップしようと思います。

タイトルとURLをコピーしました