【将棋】オーダリングメモ

忘れないうちにクマ将棋のオーダリング順序メモ。
以下の順序でオーダリング。具体的には手に点数をつけて、std::sortでまとめて並び替え。
逐次生成しておらず(ビットボードではないので難しい)、ソートに時間がかかりそうなので、
1番良い手と2番目に良い手はstd::sortする前に見つけて、3番目の手の探索時にstd::sortを呼び出している。
これで若干NPSは増えたけど強くなっているかは分からない。

1.前回PV
2.ハッシュ
3.取る手(SEE>=0)+キラー:ヒストリーで順序づけ
4.移動手(SEE>=0):ヒストリーで順序づけ
5.取る手(SEE<0):ヒストリーで順序づけ
6.移動手(SEE<0):ヒストリーで順序づけ

あとは、毎探索前に、前回の最善応手をハッシュにexactで登録。
キラーは移動手、かつ、成らない手、かつ王手ではない手を登録。
それと、探索中にβカットが起きた手は最善手になりやすそうなので気持ち優先。

ほとんどボナンザと同じだけど、ボナンザはキラーの条件が複雑(reductionや延長も)で
良く分からないので、特に条件は設けず簡略化した処理をしています。
ヒストリーは[from][to][手番][成][駒種]で配列管理(ボナンザはハッシュ化している模様)

【参考】
http://d.hatena.ne.jp/sakurapyon/20120225
さくらぴょん、着実に強くなっていますね。