Bonanza4の評価関数はどのようなものか【fv.bin編】
■ Bonanza4の評価関数はどのようなものか【fv.bin編】
前回、Bonanzaの駒割の評価部を説明した。
残るは、「3駒相対」の部分であるが、この3駒は、
・2玉 + 駒
・1つの玉 + 2駒
の二つの組み合わせがある。
Bonanzaでは、このどちらも評価している。
ここでは前者をKing-King-Pieceを略してKKP、後者をKing-Piece-Pieceを略してKPPと呼ぶことにする。
実際、Bonanzaのソース上に、kkpという配列があり、この評価のための値が格納されている。これは、data.cにて宣言されている。
// 評価値計算用テーブル short pc_on_sq[nsquare][pos_n]; short kkp[nsquare][nsquare][kkp_end];
pc_on_sqのほうは、KKPではなく、KPPのほうを評価するためのテーブルである。このテーブルへは、次のマクロを用いてアクセスする。
nsquare = 81(盤面の広さ)である。kkp_endやpos_nについては詳しい解説を要するので今回は説明を割愛する。
#define PcPcOnSq(k,i,j) pc_on_sq[k][(i)*((i)+1)/2+(j)]
また、この二つの配列kkp,pc_on_sqにデータを読み込むのは、ini.cのload_fv関数である。この関数は、"fv.bin"というファイルから読み込む。
fv.binの前半は、pc_on_sq用のデータが格納されており、後半には、kkp用のデータが格納されている。
ini.cのload_fv関数の該当部分を示す。
pf = file_open( str_fv, "rb" ); if ( pf == NULL ) { return -2; } // 評価値の計算用テーブルをファイルから読み込む。 size = nsquare * pos_n; if ( fread( pc_on_sq, sizeof(short), size, pf ) != size ) { str_error = str_io_error; return -2; } … size = nsquare * nsquare * kkp_end; if ( fread( kkp, sizeof(short), size, pf ) != size ) { str_error = str_io_error; return -2; } iret = file_close( pf );
■ Bonanzaが読み込む外部ファイル
Bonanzaでは次の3つの外部ファイルを読み込む。
・fv.bin(KKP,KPP用)
・hash.bin(同一手順で負けるのを防止するための局面ハッシュ格納用)
・book.bin(定跡)
今回は、fv.binについてその説明をした。
逆に言えば、これら以外のデーブルに関しては、ini.cのini_tablesで動的に生成(初期化)が行なわれているので、テーブルの値がどうなっているのか知りたいときは、そちらを見れば良い。
■ まとめ
Bonanzaの評価関数は
・駒割 -- material関数
・KKP(二つの王と1駒による3駒相対) -- make_list関数
・KPP(王と2駒による3駒相対) -- evaluate関数
の3つから構成されている。
今回は、KPP,KKPで用いるテーブルの読み込みについて解説した。
KPP,KKPについて詳しい解説は次回以降に行なう。