オーダーを考えて最適化
メモ:
テスト局面を食わせてみての挙動確認。
- SEE
- 駒取りの手の数だけ呼ばれる 2000万回ぐらい
- 取り合いになることは少ないし、1手だけの取り返しも多い
- 内部ループが3400万回
- 駒取りの手の数だけ呼ばれる 2000万回ぐらい
- NegaAlphaBeta
- 評価したいノードの回数分呼ばれる 1600万回ぐらい
- ということは、SEEを呼ばないノードも多いのか
- 王手回避、ハッシュ、カウンターではSEEは呼ばれない
- 打ったところに敵の利きがなければSEE=0なのでさぼれる
- 1200万回は葉局面なのでさっさと帰る
- なので、葉のところに変な処理を入れてはいけない
- ハッシュにヒットしたのは 20万回弱。1600万回と比較すると想像以上に少ない
- 深さが足りないハッシュでも詰みがあることがある(数万回)
- 深さだけ見ちゃだめ
- 数万回*展開ノード数儲かってるから儲かるはず…
- 深さが足りないハッシュでも詰みがあることがある(数万回)
- null move 300万局面ぐらい刈れている
- これより前に重い処理を入れないこと
- 王手回避20万回
- 応手1手が2.6万回
- ハッシュに応手がある場合4052回、カウンターは3.5万回
- 手生成
- ハッシュ3万回
- 111万のカウンター候補。うち合法手は22万。多いと考えるべきかどうか。
- カウンターは結構当たるので、合法手チェック入れても儲かってる…といいな
- 6000万手の合法手生成
- 2000万は打つ手←打つ手の高速化必要
- SEE>=0とそうじゃないのは半々ぐらい
- 玉以外の移動900万
- 玉の移動70万
- 探索までたどりついた手 3834万回
- 466万はfutility cutされる
- もっと刈ってもいいはず?
- 王手やnull内部などを除くと2000万手残る(既に半分にしかならない)
- 条件を甘くするかnullmoveのときも刈る?
- 1266万PVS
- フルサーチ 137万回
- 深さ減らしてnull 4790万 - ほとんどの検索はnull window検索である
- 元の深さでnull 1197万
- やっぱりフルサーチ 3801 - 桁違いに少ない。うまく刈れているのか読み落としなのか
たぶん、いろいろおかしいところがあるんだろうなあ。何がおかしいのかわからんのが問題だが。