囲いの認識及びその評価方法
以前どっかで書いた覚えがあるんですが、探しても見つからなかったので再度書きます。
まず、「囲いの駒」の認識アルゴリズム。先手の囲いを対象としますので、後手の時は適当に先後反転してやればOKです。
- 先手玉が利いている先手の駒は、囲いの駒である。
- 先手の囲いの駒が利いている駒は、囲いの駒である。
単にこれだけ。手元の本で色々な囲いを見てみましたが、9割がたはこのアルゴリズムで認識出来そうです。
んで、次に評価方法。囲いの駒1枚ずつに対して、以下の要素を見て評価してはどうかと考えています。
- 駒の種類。
- その(囲いの)駒に利いている先手の駒の数。
- その(囲いの)駒が利いている先手の駒の数。
利きの数に関しては、上限を設ける方がいいかな? 「囲いの金に5つの駒が利いている」って状況はあんまり出現しなさそうだし、そうなると正しい値が付かない可能性が高いですから。
あと、後手の利きの数は無視すべきかどうか。例えば「囲いの歩に後手の飛車が利いている」って状況は「利いていない」状況と区別すべきな様な気はしますが、そうすると無駄にパラメータの数が増えるし…
ま、とりあえずは上記3種類だけで実装してみます。