差分計算のコスト

現在、定跡なしのLesserkaiになら何とか勝てるという程度。

評価関数を呼ぶ回数と、手を進める回数をカウントして比較すると、
手を進める回数のほうが多いけど、高々何割か多い程度。
評価関数は末端でのみ呼んでいるが、探索ノードのほとんどは末端にあるのだ。

さて、評価関数の差分計算をしようとすると、どの程度のコストが許容されるか。
評価関数は、末端以外でも使うかもしれないから、回数はもう少し増える。
また、手を進める・戻す回数を合計すると、進める回数の2倍になる。
すると、大雑把に言って、直接計算の半分のコストが境目になる。
半分よりも有意に少ないコストで差分計算ができれば、採用する意味がある。
意外と高いコストが許容される。

更に、差分計算する要素の中でも、評価値は1個の数値なので、
更新するデータ量に対して差分計算のコストが非常に高い。
よって、そういう要素に対しては「手を戻す」操作をせずに元の値をコピーすればいい。
この方式なら、差分計算のメリットはもっと大きくなる。
特にオーダリングがしょぼい場合は、元の値を保存するコストが無視できるはず。

「飛車がいる升を示すビットボード」などは差分計算のコストが極端に小さいので、
手を戻す操作をコピーで行うメリットはない。
なので、データ量・更新頻度・コストによって局面データを2つに分けて、
片方は元データからまとめて(連続した配置にしておく)コピーするのがいい。