GA将?開発日記~王理のその先へ~

ネタ勢最強を目指して絶賛開発中。

進行度の計算に着手

 将棋用評価関数の精度向上の為、進行度の計算に着手。

 今の所、ざっとこんな感じ。ダメな部分があればその都度適当に対処する方針で。

  1. 進行度の値の範囲は0.0〜1.0。
  2. 初期局面なら0.0で投了局面で1.0になる様に学習する。
  3. 進行度に応じて、評価関数内で序盤と終盤のパラメータに重み付けする。
  4. 進行度計算は線形近似を用いる。
  5. 進行度は自己対戦の棋譜から学習(出来たらいいなぁ)。
  6. 先手進行度・後手進行度・全体進行度の3つの値を計算し、適当に使い分ける。
  7. 全体進行度=max(先手進行度,後手進行度)
  8. 進行度計算用の評価項目は下記の通り
    1. 自玉に近い自分と相手の駒の数(上位各10個)
    2. 相手の成り駒の数
    3. 相手の持ち駒の数
  9. 評価関数の評価項目と進行度の対応は下記の通り。
    1. 駒割:全体進行度
    2. 絶対位置評価:全体進行度
    3. 二駒の相対・絶対位置関係:全体進行度
    4. 駒の自由度:全体進行度
    5. 王将の移動可能範囲:王将側の進行度*1
    6. 王将周辺の利き:王将側の進行度

 んで、将棋倶楽部24棋譜から、とりあえずLIBSVM用に訓練データと学習データ作ってみました。棋譜数は共に100局*2です。

 結果、上記3つの評価項目を実装すると、nu-SVR(-s 4オプション)で平均二乗誤差が0.01を切りました。

 という訳で、自前の進行度学習ルーチンで同程度の精度を目指したいと思います。出来るかどうかは知らんけど。

*1:先手玉なら先手進行度、後手玉なら後手進行度

*2:1000局にしても精度に変化はなかったんで、学習・検証時間節約の為に100局にしました