将棋:SEE
通常探索でも静止探索でもSEEが重要らしい。
SEEとは、あるマス(ターゲット)で駒を取り合ったときの最終的な駒の交換値。
同歩とか同銀とかがずっと続く状態。
ボナンザではswap.cでSEE = swap(手)で計算している。
静止探索ではSEEが正の手(駒損しない手)を追加していく。
実装での注意点は、駒を取り合っていると、飛車とか角とかの飛び利きのある駒が、
新たにターゲットに利きを持つようになるので、
駒の動かすたびに、利き情報を更新しないといけない。
うさぴょん本でもSEEについて書かれている。うさぴょんでは
駒を配列で管理しているけど、ボナンザなどビットボードタイプでは
どうしているのだろうと調べたが、結局良く分からなかったので
ソースを読んでみた。
以下、それをまとめたものです。ご参考に。
suzumer.web.fc2.com/SEE.pdf
直接アドレスを張りつけてください。
ルーチンを作ってみた
ボナンザソースを参考に上の方法で作ってみた。
4六歩での猛烈な駒の取り合いのテスト。
SEEが正なので最終的には先手が得をする。
上のやつは、4六への利きを持つ駒のattackerビットボード。
障害物がなくなり、新たに飛び駒がビットボードに追加される様子が確認できる。
ビットボードをGUIに表示させることで、動作確認やデバッグが迅速にできる。
バグがあるかもしれないが、マジックビットボード+合法手生成+SEE実装が二日でできた。