*All archives* |  *Admin*

<<05  2018/06  1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30  07>>
麻雀AI開発その61・評価値関数をAIに搭載(鳴き判断)その4
前回の続きです。
鳴き判断について、パラメータを付け加えたり削除したり、値の調整とかをやってたのですが、
途中で鳴くのが当たり前な役牌ポンをやってくれなくなったりして、調整に手間取りました。

パラメータ選定の手法の変遷
準ニュートン法…なんかプログラムの調子が悪い。私の理解を超えているのでどこがおかしいかわからない。

最急降下法…理解しやすいけど、収束性が悪い

共役勾配法…若干理解しにくい。これもちゃんと収束しているかが不明。また、局所解に絡まりやすく最小地点になってる保証もない。

ネルダーミード法…微分情報がいらない方法らしいが、次元数が多いと計算時間的に無理らしい。あきらめた。

遺伝的アルゴリズム

いろいろ迷走した末にたどり着いたのが遺伝的アルゴリズムという方法です。
これは親元のパラメータから、2組選んでパラメータを交叉させて子供を生成する、その後評価値のいいものを重点的に選別する(自然淘汰)。
また、親元のパラメータには依存しない突然変異を一定確率で起こす。
…的なものです。専門的なことはみなさんでググってください。

これのいいところは、
・直観的に理解がしやすい理論
・突然変異があるので、局所解に絡まってそこから離れなくなるのが起こりにくい。
・微分情報がいらない。(正答率について、シグモイド関数(指数や対数計算があって時間がかかる)でスコア化していたものを実測正答率そのままを評価関数とすることができる。)

特に1点目2点目が素晴らしいです。

悪いところは
・局所的な最適解に収束するスピードは保証されない。(→2,3回くらい連続でアルゴリズムにかけてみて数値の出具合をチェックすればまぁなんとかなりそう。)
・アルゴリズムの設計の仕方(交叉・選別・突然変異の方法)にかなり依存する。(→数値の出具合を見つつ能動的に調整ができるという意味ではそこまで悪くはない。)


それで、遺伝的アルゴリズムの設計も含めていろいろと試行錯誤して、結局次のパラメータが最後に残りました。
・親番補正
・評価値に対する乗算での補正(定数項+巡目比例項)
・危険度係数に対する乗算での補正(定数項+巡目比例項)
・危険度係数の2乗に対する乗算での補正(定数項+巡目比例項)
・スルーした時の加算補正(役牌or非役牌、副露数、定数項+巡目比例項で分類)

字牌枚数補正は相関的にイマイチだったので外しました。

で、いろいろパラメータの調整とかやってそれをAIに乗っけた結果がこちら。
170826-01.png
なんか役牌ポンはするけれど、他はほとんど仕掛けない(非役牌のスルー補正がかなり大きい)ようなかなり極端な結果になってます。
もうこれ以上は無理ー、というかもう飽きた―。
当分はこれが決定版ということにしておきます。

これで鳴き判断は片付いたので、通常の打牌選択の調整を今やってます。
こっちは楽勝かと思ってたけど、そこまで簡単ではなかったです。正答率を調べてると60%前後になってました。
評価値だけのとき(他家最大攻撃2以下&9巡目以前)より正答率が落ちてるのがうにょーんって感じです。
こっちもいろいろと調整を試みています。字牌補正を加えるとか、巡目で輪切りにするとか。
もうそろそろ飽きてきたので、実戦投入したいんですけどね。
スポンサーサイト

コメントの投稿

Secret
(非公開コメント受付中)

コメント

プロフィール

nisi5028

Author:nisi5028
FC2ブログへようこそ!

最新記事
最新コメント
最新トラックバック
月別アーカイブ
カテゴリ
FC2カウンター
フリーエリア
検索フォーム
RSSリンクの表示
リンク
ブロとも申請フォーム

この人とブロともになる

QRコード
QRコード