FC2ブログ

*All archives* |  *Admin*

<<07  2018/08  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 31  09>>
麻雀AI開発その55・評価値関数を局収支に変換
前回の続きです。

今よりもっと鳴き寄りにするために、鳴き可能ボーナスをつけて再度準ニュートン法でパラメータ推定をやったのですが…。
鳴き可能ボーナス係数…0.05
しょぼいっ。評価値が0.05増えたところで大勢に影響は全然でないです。

なので、鳴き可能ボーナスは却下して、今のままにしておきます。


というわけで(若干不安要素はあるが)、2シャンテン以上の牌姿については評価値によって打牌ごとの手牌価値の優劣だけはできるようになりました。
逆に言えば自分の手牌(と場に見えてる枚数)しか見ていないので、他家の挙動(リーチと副露)には対応できていません。
評価値と他家への牌の危険度(具体的には放銃率×放銃時失点の危険度指数、単位は「点」。)を結びつけるために、評価値を局収支に変換することを考えます。
基本的には評価値がいいほどいい手牌であることがほとんどなので、評価値と局収支は正の相関があると考えられます。

具体的な理論は以下の通りです。(ただし、ところどころ端折っている。)

まずは以下のデータを実際の牌譜から取ってきます。
(前回取ったパラメータから計算した)評価値・現在巡目・親の位置・下家の攻撃度合・対面の攻撃度合・上家の攻撃度合、の組xに対してこの局の収支yを対応させる。
攻撃度合についてはリーチ・非リーチ面前と1~4副露×通常副露or染め余りなしor染め余りありorドラポンの18種類で分類する。

このとき、推定の局収支の値を次式でモデル化する。
170814-01b.png
p_1は評価値に対する倍率のパラメータで巡目と自分が親かどうかで分類します。つまり、18×2で36種類のパラメータになります。
p_2は他家攻撃の強さに関して補正するパラメータ(基本的に負の値を取る。)で、該当他家の攻撃度合と親の場所(自分or該当他家orそれ以外の他家)で分類します。18×3で54種類で、p_1、p_2合わせて90種類のパラメータがあります。

この推定局収支と実際の局結果との誤差(正値にするために2乗する。)の和が最小となるようなパラメータの組p_1とp_2たちを求めます。
最小化する目的関数は次のものです。
170814-02.png

あるパラメータ(90種類のうちの1つ)p_jで偏微分するとこうなるので、
170814-03.png
これ=0となるようなパラメータ群(のうち目的関数が最小となるもの)を準ニュートン法で探していきます。

試合数を増やしたり、繰り返し回数を増やしたりして工夫しながら(なかなか思うような結果が出なくて苦労した)出したパラメータはこんな感じ。

170814-04.png
p_1の方は巡目が遅くなると評価値が高い効果が薄まる(評価値に比例する成分が少なくなる)、自分親の方がより評価値が大きい効果が高い、
というのはいいです。
p_2については攻撃度合が強いほど(例えば0副露→リーチとか)マイナス補正が大きい、自分親の方が(たぶん被ツモ失点の関係で)マイナス補正が大きいというのはいいです。
問題は相手親のケースです。
子VS子よりマイナス補正が大きくなってほしいところなのですが、特に染め副露についてはうまいことマイナスが大きくなってくれていません。染め副露ならリーチでの損失がない分、親が攻めてくる損失が大きくない?とか親は遅い手なので、子の安い上がりが誘発されやすいとか?
ここはよくわかりません。

なんか準ニュートン法のヘッセ行列の逆行列の初期値次第ではうまく収束しないことがある、とか書いてたからその影響なのだろうか?もしくはコードの書き間違いか。
スポンサーサイト

コメントの投稿

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

コメント

プロフィール

nisi5028

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

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

この人とブロともになる

QRコード
QRコード