sakurapyon’s blog

sakurapyon’s blog

オーダーを考えて最適化

メモ:

テスト局面を食わせてみての挙動確認。

  • SEE
    • 駒取りの手の数だけ呼ばれる 2000万回ぐらい
      • 取り合いになることは少ないし、1手だけの取り返しも多い
      • 内部ループが3400万回
  • NegaAlphaBeta
    • 評価したいノードの回数分呼ばれる 1600万回ぐらい
    • ということは、SEEを呼ばないノードも多いのか
      • 王手回避、ハッシュ、カウンターではSEEは呼ばれない
      • 打ったところに敵の利きがなければSEE=0なのでさぼれる
    • 1200万回は葉局面なのでさっさと帰る
      • なので、葉のところに変な処理を入れてはいけない
  • ハッシュにヒットしたのは 20万回弱。1600万回と比較すると想像以上に少ない
    • 深さが足りないハッシュでも詰みがあることがある(数万回)
      • 深さだけ見ちゃだめ
      • 数万回*展開ノード数儲かってるから儲かるはず…
  • null move 300万局面ぐらい刈れている
    • これより前に重い処理を入れないこと
  • 再帰反復深化の時点で70万回
    • 再帰には5000回しかいかない 桁が違いすぎる
    • 何か間違ってるのかもしれない
  • 王手回避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 - 桁違いに少ない。うまく刈れているのか読み落としなのか

たぶん、いろいろおかしいところがあるんだろうなあ。何がおかしいのかわからんのが問題だが。