将棋:SEE

通常探索でも静止探索でもSEEが重要らしい。
SEEとは、あるマス(ターゲット)で駒を取り合ったときの最終的な駒の交換値。
同歩とか同銀とかがずっと続く状態。
ボナンザではswap.cでSEE = swap(手)で計算している。
静止探索ではSEEが正の手(駒損しない手)を追加していく。

実装での注意点は、駒を取り合っていると、飛車とか角とかの飛び利きのある駒が、
新たにターゲットに利きを持つようになるので、
駒の動かすたびに、利き情報を更新しないといけない。

うさぴょん本でもSEEについて書かれている。うさぴょんでは
駒を配列で管理しているけど、ボナンザなどビットボードタイプでは
どうしているのだろうと調べたが、結局良く分からなかったので
ソースを読んでみた。

以下、それをまとめたものです。ご参考に。
suzumer.web.fc2.com/SEE.pdf

直接アドレスを張りつけてください。

ルーチンを作ってみた

ボナンザソースを参考に上の方法で作ってみた。
4六歩での猛烈な駒の取り合いのテスト。
SEEが正なので最終的には先手が得をする。

上のやつは、4六への利きを持つ駒のattackerビットボード。
障害物がなくなり、新たに飛び駒がビットボードに追加される様子が確認できる。
ビットボードをGUIに表示させることで、動作確認やデバッグが迅速にできる。
バグがあるかもしれないが、マジックビットボード+合法手生成+SEE実装が二日でできた。