GA将?開発日記~王理のその先へ~

ネタ勢最強を目指して絶賛開発中。

最善局面判別に必要最小限の特徴のみを用いた多数決合議用評価関数の実装

 今のGA将!!!!!の実装では、評価項目*1ごとに有効・無効を切り替えて複数の評価関数を生成しています。

 で、この有効・無効の切り替えの粒度をもっと細かく出来ないかと考えたのが今回の発想の原点。

 やり方は単純で、適当な数の棋譜データを準備し、そこからルートの全合法手から先のPVを求めます。

 んで、ルートノードの全ての子局面Pnに対して、Eval(P0)>Eval(Pn)*2を満たす為に必要最小限の特徴を求めます。これで、少なくとも棋譜中の局面に関しては確実に棋譜の手を選べる様な評価関数を生成出来ます。

 例えば、ある局面では"駒割の竜"だけ見れば(龍の評価値が+なら)上記式を満たすとか、"金底の歩"と"角のナナメ前の歩"の値の2つに適当な符号の値があればOKとか、そんな感じで。

 んで、全棋譜の全局面で上記式を満たす様な必要最小限の特徴を複数求めて、それらを個別の評価関数として使う、という感じです。

 大雑把に言うと、ちょっと前に2chのスレであった凸凹評価関数の凸凹を自動的に複数生成する様なもんだと思って貰えれば良いかと。

 この手法だと何が良いかというと、評価項目の数ではなく、より数の多い個々の特徴ごとに有効・無効を切り替えて複数の評価関数を生成出来るので、評価項目を大幅に増やす事無く多数決合議のクライアント数を増加させられることです。

 ちなみに必要最小限の特徴を求める処理は、ラフ集合のリダクトを求めるアルゴリズムをちょっといじれば出来そうなので、そういう方向で考えています。

*1:王将の移動可能範囲とか二駒の相対位置関係とか

*2:P0が棋譜の手とし、1<=nとする