FC2ブログ

*All archives* |  *Admin*

<<11  2018/12  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  01>>
リーチ宣言牌のソバテンと巡目の関係
今日もリハビリ感覚で単発牌譜解析。

昨日のツイッターでのお題の局面について。


実戦では4s宣言牌で、ソバテンの2sがちょっと嫌に感じたので、2s打てなかったのですが、
後で見返してみると、序盤リーチの4s切りリーチなら344sとかのまとまってる形が少なそうなので、意外と2s押せたんじゃないかと思ったりしました。

まぁ個別局面の是非は置いておいて、今日は「巡目によってリーチ宣言牌のソバテン確率がどの程度変わるか?」ということを牌譜解析で調べてみようと思います。

条件は、
・すべての数牌切りリーチがかかった瞬間を観測対象とする。
・リーチ巡目と宣言牌の種類で分類する。
・「宣言牌と±2以内の距離の牌のどれかがアガリ牌」であった場合に、「ソバテン」であるとカウントする。
・「ソバテン」であるリーチの回数をすべてのリーチの回数で割った値を調べる。
です。

牌譜解析結果はこちら↓。
181130-01.png

注目点は巡目によるソバテン確率の変動です。
序盤(6巡目あたりまで)だと、中盤以降よりもソバテン確率は小さくなってるように見えます。

個別の牌の危険度はまだ出してないですが、最初に挙げた仮説「序盤リーチの4s切りリーチなら344sとかのまとまってる形が少なそう」はある程度は当てはまってるかもしれませんね。


単発研究ならわりかし気分も乗るのですが、ゴール(目標)が遠い長期のAI研究だとモチベーションの維持が難しいのが目下の悩みです。
スポンサーサイト
リーグ戦に関する考察その2・直対編
前回に引き続き、AI研究のやる気低下中につき、小ネタ的話題で。

リーグ戦の勝ち負けについて普通の1試合単位感覚で1%とか3%昇級率を動かしていましたが、よくよく考えればリーグ戦は試合数が多いので、実力差があればもっと昇級率降級率は動くんじゃない?と思いました。

そこで今回は以下の条件で、複数試合の総合ポイントで争う形式の勝率を調べてみました。
・対戦者は4名の直接対決
・各試合の順位分布(1-2-3-4とか3-2-4-1など24通り)は既知とする。(今回はトップ率26%の場合とトップ率27%の場合の2パターンを用意)
・順位点はオカ20000点、ウマ10-30。素点は無視する。(点数の並びが40000-30000-20000-10000で、上から60pt-10pt--20pt--50ptで固定する。)
・試合数は4試合、16試合、64試合の3パターンを用意。
・試合数的に終盤で差がついて条件戦の思考が入るとかは考慮しない。
・シナリオ数10万回のモンテカルロシミュレーション

結果はこんな感じ↓。

181129-01.png
平均順位2.47(トップ率26%、ラス率24%)のケースだと、優勝率は4試合戦で26.8%、16試合戦で28.3%、64試合戦で31.7%となってます。
周りよりちょっとレベルが上くらい(鳳凰卓安定段位で言うと7.625)だと64試合やってもまだまだ運ゲー感はぬぐえない感じでしょうか。まぁでも4分の1よりは優勝率が6%くらい上がる余地はありそう。

平均順位2.43(トップ率27%、ラス率23%、鳳凰卓安定段位で8.4348)のケースだと優勝率はもうちょっと上がって、64試合戦だと41.7%くらいまでいきます。
自分だけワンランク上の実力で64試合やれば42%優勝できるというのを見ると、多少は実力は反映されているとみるか、しょせんは運ゲーだ、とみるかはおまかせします。
確かMリーグは80試合戦だったような気がするので、たぶんこのケースに近いかと。


仮に4人の直対の優勝確率と16人のリーグ戦の昇級確率が同程度とすれば、実力によって、6%とか17%とか昇級率に差が出るということは十分考えられる話です。
とりあえず昇級率+6%、降級率-6%で前回と同じ計算をするとこんな感じ↓。
181129-02.png
さすがに±6%とかまでくると、だいぶ景色が違って見えるような。
B2スタートでも、3~4割くらいはAリーガーにはなれる見込みはあると。実力的に平均順位2.47が取れるのであれば。

リーグ戦に関する考察
今日は体調がびみょうで、あまり難しいことを考える気分ではないので、軽いネタでお茶を濁すことにします。

プロ団体はいろいろあると思いますが、共通点としてはリーグ戦が行われていて、その結果で昇級とか降級が決まるというところだと思います。

今回はnシーズン後に該当プレイヤーがどのクラスに属しているのかという確率分布をモンテカルロシミュレーションによって出してみようと思います。

仮定は↓のような感じで。
・D4~Aクラスまで10クラス×16名+チャンピオンが1名
・B1クラス以下は1シーズン終了後に上位4名昇級、下位4名降級
・Aクラスは上位3名がチャンピオン決定戦に出場、下位4名降級
・チャンピオン決定戦はAクラス上位3名と現チャンピオンの4名で争われ、勝者1名が新チャンピオンに、敗者3名はAクラスになる。
・nシーズン後の所属クラスを調べる。(n=5,8,10の3パターン)
・初期のクラスはD4・C3・B2・Aの4パターンで調べる。
・昇級率・降級率については、平均と同じ実力の場合(昇級率25%、降級率25%)、ちょっとだけ周りより実力が高い場合(昇級率26%、降級率24%)、周りよりかなり実力が高い場合(昇級率28%、降級率22%)の3パターンで調べる。(クラスが上がるほど面子の実力が上がって昇級しづらくなるとかは今回は考慮しない。)

結果はこんな感じ↓。
181123-01.png

以下、私から見た雑感。
・何はともあれ、初期の所属クラスが一番重要。
・実力があるなら多くのシーズンをこなしたほうが上のクラスにいきやすい。周りよりちょっとレベルが高いくらいならあまり効果があるとはいいがたいが。
・初期クラスがAクラスなら、実力があまりなくても4割~6割くらいはAクラス以上を維持できる。

今日はこんなところで。
プロのリーグ戦に近い立場で分析好きの方は、まぁてきとうに見て研究してくだされば幸いです。
はじめてのpython&Tensorflowその16・手役判定関数のPythonへの移植
今日は特に成果物があるわけではないですが、進捗報告だけ。

打点と四人麻雀への拡張のために、アガリ時メンツの切り分け関数と手役判定関数をVB.NET仕様からPythonで書き直すのをやってました。

おもったよりたいへんでしたが、無事にお引越しが終わりました。

今後の予定
・四人麻雀で自己対戦できるgym環境作り(牌譜出力機能を含む)
・従前作った教師ありポリシーニューラルネットと自己対戦用環境で牌譜を大量生成
・できた牌譜からバリューネットワーク用データ(仮)を作成し、ニューラルネットで教師あり学習
・教師ありポリシーネットワークを初期値、バリューネット(仮)をベースラインとしたReinforceアルゴリズムで強化学習
・強化学習で得たポリシーネットワークで牌譜を大量生成
・バリューネットワーク(真)を教師あり学習で得る。

という感じでいければ、アルファ碁風麻雀AIの完成なんですが、うまいことできるようにがんばりましょう。

多分一番の壁はいかに高速に自己対戦を回して、多くの牌譜をゲットするまでの時間を短縮できるかだと踏んでいます。
「アルファ碁解体新書」によると、バリューネット用データはデータ間の相関を小さくするために1試合に1サンプルしか取っちゃいけないらしいので、今手持ちの鳳凰卓の牌譜だけではだいぶ心もとないです。
1試合1サンプルの制限はさすがにきついので、1局に1サンプルでお茶を濁してなんとかならないかと考え中です。それなら10倍くらいはかさ上げはできそうなので大きい。
ベースライン用仮データだけなら鳳凰卓データだけでも対応できるかも。

四人麻雀自己対戦gym環境と牌譜出力プログラムをpythonで組む作業がとりあえずの目先の目標です。
はじめてのpython&Tensorflowその15・一人麻雀強化学習byDQNパート2
昨日から特段やることが進んだということではないですが、強化学習が一日でちょっとは進んだかなーと思って、再度テストしてみます。
181115-01.png
1局目。
孤立字牌から切ってくれるようになったお。
15巡目に両面対子を対子固定にしてるのはちょっとまだまだですが。
181115-02.png
2局目。
かたくなに孤立の1mを切ろうとしないあたりが何とも言えないが、まぁ大きくは問題はないか。
181115-03.png
3局目。
これは…。手牌のくっつき度合いが強いのと牌種類が少ないのとで、ペナルティの嵐。こりゃあかんわ。

打点を考えるとかの次への展開を考えてたのですが、まずは一人麻雀でもある程度アガリが取れないと話にならん感じな気がします。
少なくともアガリ率1~2割はないと、アガリ時打点で傾斜をつけるとかしても、学習がいっこうに進まないとかいうことも十分想定しうるので。

後は、今の環境(報酬の与え方)だと、アガリが取れなくてもシャンテン維持のプラスポイントで最終的にそこそこの報酬(0.3~0.7点程度)が取れるケースがしばしばあるので、できればもうちょっとアガリの価値を高めたいところ。
頃合いを見て、シャンテン維持プラスポイントを削減するなど、環境をちょっとずつ変えることが必要になるかなーと。
いきなり環境をガラッと変えると、予測のQ値が大きくずれてしまいそうなので、係数をちょっとずつ動かすみたいな対応になるかと思います。

しばらくはパソコンさん側の作業待ちがメインになりそうです。

技術的なメモ。
Kerasで通しで何時間も計算し続けてると、時間がたつにつれて計算速度がどんどん遅くなっていく事案が発生。
計算時間のボトルネックを探っていく中で、おそらく、モデルの複製とかをやってる中で、なんかメモリ上によどみみたいなのがたまって速度が遅くなるのかなーと推察したので、
適度に(1000エピソードごととかに)重みのセーブ後、Keras.backend.clear_sessionで、いったんモデルを破棄してロードしなおすとかをやってみたらよくわからんけど、計算時間の遅延がちょっと改善されたっぽい。
環境の調整とかの件もあるし、てきとうにプログラムを途中終了させつつ、学習をやったほうがいいのかもしれない。
プロフィール

nisi5028

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

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

この人とブロともになる

QRコード
QRコード