評価関数の実装開始
パラメータ自動調整用の評価関数のコーディング開始。とりあえず単独の駒の絶対テーブルによる評価を実装。
普通は駒割評価関数から実装するものなんでしょうが、色々考えた末実装しない事にしました。
理由は単純で「無くても構わない」。それだけです。
最終的には
- 単独の駒の絶対テーブル
- 二つの駒の位置関係
- 王将・王将側の囲いの駒・相手側の攻め駒*1の位置関係
- +α
を実装する予定なのですが、駒割+絶対テーブルだと
- 歩の基本価値が100、位置によるボーナスが20,22,20,...
- 歩の基本価値が110、位置によるボーナスが10,12,10,...
みたいに、「実質的には同じなんだけどパラメータをパッと見ると異なる」場合が出てきてしまいます。
これは、例えば「5五にいる駒のボーナスは常に0」みたいな制約を付ければ回避出来ますが、そうすると結局「駒割の評価をしない」のと同じ事になります。
そんな訳で駒割評価関数は無し、って事にしました。
さて、方針を大幅に変更したのでTODOリストもアップデート。さらっと書いてある項目の開発にどれだけ苦労するか、ですね。
【TODOリスト】 優先度順
- C++を学ぶ
将棋関連のライブラリを移植囲いの方式を検討C++でのマルチスレッドを学ぶ並列化方式を検討モンテカルロ将棋の実装CSA将棋との接続シンプルなαβ法での探索を実装- 評価関数を実装
- CSA形式の棋譜読み込みを実装
- パラメータ自動調整を実装
- 実現確率打ち切りを実装
- 静止探索に脅威を追加
- Null-Move Pruningを実装
- Futility Pruningを実装
- 各種ユーティリティを移植
- 詰め将棋ルーチンを実装
- チューニング
- 終盤度の判定方式を検討
- 詰めろを意識した探索を検討
- GA関連の移植
- 免疫アルゴリズムを学ぶ
*1:囲いに含まれない駒