利きを活かした評価関数

Bonanzaを代表格とするbitboard型の将棋ソフトと、GPS将棋やなのはを代表格とする非bitboard型の将棋ソフトとで、一般的には前者のほうが全体的に見て速いと私は思うのですが、利きを活かした評価関数にするなら、話は違ってきます。今回は、どんな評価関数が考えられるか考えてみます。

利きを活かした評価関数とは言ってもGPS将棋のように人間が一つ一つの項目を設計するのは労力的に無理があるので、3駒関係のように一般化された評価関数でなくてはなりません。

そこで私がベストだと思うのは、ズバリ、3駒関係×利きです。ただし、小駒の利きは3駒関係にすでに織り込まれているので、意味があるのは大駒(正確には遠方駒)の利きだけです。よって、

KPEEEE すなわち、K×P1×P2×E1×E2×E3×E4
E1 = P1への自駒の大駒の利きの有無
E2 = P1への敵駒の大駒の利きの有無
E3 = P2への自駒の大駒の利きの有無
E4 = P2への敵駒の大駒の利きの有無
※ Kへの自駒の大駒の利きの有無・敵駒の大駒の利きの有無もあったほうがいいかも。

という評価関数になります。このKPPEEEEは、普通のKPPとほとんど計算コストは変わらないですし、評価関数用のテーブルサイズも16倍に増えるだけなので十分現実的です。(利きの有無は探索時にさほど変わらないので結局は局所的なメモリアクセスになるので…) たぶん全体の探索性能が2割ほど低下する程度で済むのではないかと思います。

しかし、よく考えてみると大駒の利きだけなら非bitboard型でもなんとかなります。この場合も、やはり同程度の探索性能ダウンで済むような気がするので、結局、「利きを活かした評価関数にする場合でもbitboard型でいいじゃん」みたいな結論になってしまって、「2割も遅くなったら、利きを使って強くなる分と相殺してしまうんじゃないの?」とかいう話も出てきて…。(つづかない)

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です