sakurapyon’s blog

sakurapyon’s blog

今使ってる手法

  • 基本的な構造はれさぴょん
    • Te は64bit変数 (32bitに押し込む手もありそうではある)
    • Kyokumenは ほぼ同じ
    • KyokumenKomagumiはKKPに合わせて書き直し
    • Hashも64bit+64bitに変更
    • 静止探索用手生成など追加
  • 通常探索
    • Aspiration Search
    • PVS
    • null move pruning (PV以外)
    • 再帰的反復深化
    • futility pruning (PV以外)
    • history reduction
      • 評価値が悪い局面は強めにreduction
    • 王手されている、詰めろがかかってる、2連続の取り返し、合法手が1手だけのときは延長
    • distance pruning
    • 簡易1手詰
  • オーダリング
    • ハッシュ1手、カウンター1手
      • ハッシュとカウンターは王手回避の場合も優先
    • 取る手・成る手のうち駒損しない手をMVVLVA順
      • 取り返しは少し優先
    • キラー2手、前回反復深化の最善手1手、カウンター1手
    • 取る手・成る手の残り
      • 取り返しは少し優先
    • 移動手・打つ手をヒストリー順
      • Historyはβカット時にdepth*depthを足しこむ
  • 静止探索(6段)
    • delta pruning
    • 王手延長
    • パスあり
    • 簡易1手詰
    • 生成する手
      • 浅いところ: 取る手・成る手・カウンター手・金銀を敵玉の周りに打つ手
      • 深いところ: 取る手・成る手、ただし中段(4-6段目)の歩を取る手は読まない・カウンター手
      • 王手されてたら王手回避手を生成
    • オーダリングはMVV/LVA
  • 局面評価
    • bonanza 6.0のfv.binからKKPだけ使っている
    • 手でドーピング
  • ハッシュ
    • クリアしない*1
      • 古いハッシュの値は使わないが、手は使う
  • 詰み探索
    • やってない
  • 水平線対策
    • SHEK
  • その他
    • C++ template
      • 指し手生成など、先手番後手番の場合分けが多く使われている関数は効果大*2
    • g++ pgo
  • やめた
    • razoring
    • static null move pruning
    • hash probe cut
    • mate killer