FC2ブログ

*All archives* |  *Admin*

<<08  2018/09  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  10>>
段位別牌譜解析・他家段位と順位の関係
今日のネタは「他家の見た目段位によって期待順位がどの程度動くか」です。

天鳳の試合開始画面で、段位とレートが表示されてるのを見て、
みんな八段九段だったりすると、「ふえぇ、みんなつよそうでこわいよぉ」(幼女風に)とかなったり、
逆に全員七段だったら、低段位卓を引いて一安心、
みたいなのは鳳凰卓あるあるなのかなーと思います。(違ってたらゴメン。)

実際、他家が全員七段みたいな低段位卓のときと、高段位者がたくさんいるような高段位卓ではどの程度順位や段位ptに差がつくのか、ということを牌譜解析で見てみようと思います。

条件は、
・自分の段位と、他家3人の合計段位(最小値は七段×3で21、天鳳位は便宜上11段扱いとした。)ごとに試合終了時の順位をカウントする。
・東風戦と東南戦は区別しないものとする。

です。シンプルに。


結果はこんな感じです。
これの意味するところは、自分の現段位が〇段で、仮に自分の実力も〇段者の平均と仮定したときの試合開始時点で期待できる順位の確率や期待段位ptということになります。
180928-01.png
自分が七段のとき、他家の段位で区別しない、全体の順位分布もしくは期待段位pt(東南戦換算)は、
トップ率24.8%、2位率24.8%、3位率25.0%、ラス率25.4%、段位pt-0.76ptとなっています。
つまり、七段者は鳳凰卓参加者全体の中では実力的に劣っていることが多く、若干負け越しているということです。

次に他家合計段位別でみると、合計段位が大きくなる(高段位者が増える)に従って、トップ率は下がりラス率が上がるなどして、成績が悪くなる傾向が見て取れます。つまり、高段位者を相手にするとそうでないときより、自分は負けやすいというのが数値で表れています。
全員七段の卓の場合は期待段位ptは0ですが、例えば九段3人を相手にする場合(合計段位27)だと、ただ「九段卓を引いた」ということだけで、-3ptの重荷を背負っていることになります。これは厳しい。
合計段位が1段上がるにつれて、期待段位ptは約0.5ptくらい悪化しているように見えます。

自分八段(かつ自分の実力も八段者の平均並み)の場合は、
順位では鳳凰卓全体では若干勝ち越していますが、段位ptではラス時に15pt余計に引かれることが大きく、試合開始の瞬間から-2.72ptの重荷を背負っています。
全員が七段の場合ですら、-1.93ptでマイナスの数値です。これが合計段位27とかになると、-4.52ptです。涙目になるのを食いしばって卓に向かうより外ないですね。

九段、十段となるとよりマイナス分は拡大します。
鳳凰卓は参加者と同レベルの実力しか持ってなければ、ガリガリptが削られていく大変過酷な環境であることが再認識されます。
参加者レベルを上回らないと、ptの維持すらままならないと。


ところで、試合開始画面では自分の席順も確認できます。
ラス親の北家を引いたらちょっとテンションが上がるのも鳳凰卓あるあるです。

というわけで、自分の席別で同じような数値を取ってみました。結果は↓の通り。
180928-02.png
他家合計段位による考察はめんどいので抜きにして、下段の平均の行だけで分析します。

自分七段の場合。
・東家
席順による分類なし時と比較して、トップ率ラス率が下がり2位率が上がる。
トビによる親権喪失のケースが少なく局収支は稼ぎやすいが、ラス親にトップをまくられるケースが多いのかなーと。
pt収支的には平均より微増。
・南家
東家時よりさらに2位3位寄りの順位分布。ptは東家より若干悪い。
・西家
東南北家のプラス分の反動をすべて背負って立つカモネキ的存在。自分が引いたら悪夢。
トップが非常に取りづらく、ラス率も高水準。泣ける。
トビによる親権喪失を受けやすく、ラス親アガリやめの恩恵もない悲しみ。
・北家
みんなのアイドル(?)なラス親。
トップ率ラス率が高いハイリスクハイリターン型。
アガリやめでトップをとるか、飛ばされて局収支が稼げないか、的な。
pt収支的には平均よりはいいが、東家南家よりは悪い。

八段や九段になると、ラス回避が重要になると考えられるから、高ラス率のラス親の北家を引きたくない、的な仮説もあり得るかと思いますが、現実は逆に八段九段はラス親の数値がいいです。
おそらく、実力的に七段者よりも上なので、局収支を稼ぎやすく、トビで親権喪失のパターンが七段時より少なめで、オーラスまで持ち込めるケースもかなり多いので、そうなったらラス親のアガリやめや他家との実力差のメリットを存分に活かしやすいため、
みたいな理由なのかなーと。
八段や九段者も北家を引いたら大いに喜びましょう。
そして、西家を引いてラスったら席順のせいだったと自分を慰めましょう。


というわけで、今日は若干深夜的なノリでお送りしました。
スポンサーサイト



段位別牌譜解析・強者と被リーチ時手持ち現物枚数など
まったりとした秋の夜長に単発牌譜解析。

今日のテーマは「強者は他家攻撃に備えていかに安牌を残すか」です。

一般には高段位の方ほど、和了率・放銃率的にいい数字を残していると言っていいでしょう。
特に放銃率についてはラス回避率とも密接につながってそうなので、なおさらでしょう。

それなりの和了率を確保しつつ放銃を回避するために真っ先に考え付くのは、
後手を踏んだ時のために安牌をいかに残すかということでしょう。
安牌を切りながら押し返せるケースが多ければなおさらいいでしょう。

というわけで、今回は後手を踏んだ時の手持ち安牌枚数に関するデータを牌譜解析でとってみました。

条件は次の通りです。
・1件目リーチがかかった瞬間のリーチ者以外の3人の手牌を対象とする。(副露者がいるかどうかは全く問わない。)
・その時の対象者の副露数・シャンテン数・現物枚数・筋もしくは字牌枚数をカウントする。
・対象者の段位とリーチ巡目ごとに分類する。

結果は次の通りです。
180926-01.png

リーチを受けた瞬間のシャンテン数については、段位が高いほどシャンテン数が小さい傾向が若干見てとれます。
つまり高段位ほどリーチを受ける前の牌効率とかがうまくてよりアガリが近い形になってるケースが多いと。
ただその差は0コンマ003とか4とかで、大きいのか小さいのかはよくわからんとです。

また、リーチを受けた瞬間の手持ち現物枚数、もしくは筋字牌枚数については、段位が高いほど多い傾向が若干見て取れます。
つまり守備面でも安牌を抱えることができていて、放銃を回避することにつながるのではないか、という推測です。
こちらも1段ごとの枚数差は0.003とかその辺なので、これもいまいち差がでかいのか小さいのかはよくわからないです。

私の直感よりは思ったほど差は大きくないかなーという印象は受けましたが、どうなんでしょうかね。
今後の予定とか
PCのデータが吹っ飛んで、
単発の研究は除いて、AI関連でパーになったのは、
・途中押し%を可変に
・他家への放銃率を赤ナシベースに
・他家から切られ率分布のニューラルネット

一番痛いのは2個目の放銃率について。
黒5と赤5の放銃率が違うというバグが元に戻ってしまったので、直したいのですが、
結構な量の牌譜解析をし直さないといけないのが、ちょっと負担がでかい。

もういっそのこと、放銃率関連もニューラルネット化して大きく作り変えてしまおうか、と考えています。
そのほうが切られ率分布とのバランス的にいいだろうし。

そうすると当分は(問題になるケースはそこまで多くないとはいえ、)バグを内包したままいつもの何切る出題をすることになるけど、そのへんはご容赦いただくことにしよう。
悲しい報告
まず結論から書きます。

18年5月以降のPCデータが全部吹っ飛びました(´;ω;`)


ここ2~3日の経緯を書きます。

(1)PCがスリープから復帰すると、ネットが切れる&その後ほぼすべての操作を受け付けなくなる不具合発生。
正常なシャットダウンや再起動すらままならない、割と重篤な状態のような感じです。

そこで、
(2)システムの復元を試行→失敗(0x80070005エラー)→いろいろ復元ポイントを変えながら何度か試行→やはり失敗。

(3)システム復元の試行何度か目でおそらくPCの画面を閉じるなどのスリープ状態移行になることをやる。
(4)黒画面でマウスカーソルだけがある状態から動かなくなる。
この時点でやっちまったと思いました。スリープからの復帰に関する不具合でシステムの復元中はシャットダウン厳禁なのに。

しょうがなく、
(5)別PCでOS再インストールのUSBメモリを用意して、再インストール。
この時点では、外付けHDDにデータは残ってるからなんとかなるだろうと高をくくってました。

(6)再インストール完了。ウィルスバスターを入れた後、Windowsのファイル履歴機能で外付けHDDからデータを戻そうとする。
(7)ファイル履歴最新の日付が18年5月27日。それ以降のデータが全く残っていない。

茫然自失。
18年5月以降、4か月間にやったことがすべてパーになった瞬間。

(8)しょうがなく、5月27日のバックアップを再インストール後のPCに戻して、必要なソフトを入れなおす。
この辺はもうメンタル死にかけでした。

(9)バックアップ(ファイル履歴機能)についてテスト。
手動でバックアップ実行ボタン押したら大丈夫だけど、スケジュールで自動バックアップだとうまくいかない場合がある。
今日だけは言わせてもらおう。Windows、クソがぁー。

いや、「まいくろそふとのすーぱーてくのろじー」を信じてその上に胡坐をかいてバックアップの確認をさぼっていた私が悪かったのだと。
今後の対策として、ファイル履歴機能に加えて、別のフリーのバックアップソフト(EaseUS Todo Backup Freeというソフト)も併用してバックアップを二重に取ることにしました。旧PCが壊れたとき、外付けのHDDのパーティションを2つに分けてたので、まぁちょうどよかったですし。
みなさまにおかれましても、ぜひ私のしかばねを越えてバックアップの対策をやっていただきたいと思います。

さらに、
(10)OS再インストール後も、またスリープからの復帰後の動作ができなくなる同様の不具合発生。
???
これ、もしかしてソフト面でなくて、部品がイカれてるパターン?
まだ買ってから半年~1年くらいしか経ってないのだが…。販売店の延長保証は入ってるとはいえ。
そして4か月分のデータの犠牲は無駄死にだったのか…。

(11)いろいろ調べまわって、Windows Updateしたら、今のところスリープからの不具合は出ないようになった。
とりあえず今のところは様子見。
ただ、今後は怖すぎるので、パソコンの画面を閉じるとき(=天鳳するために有線LANのある居間に移動するとき)は、めんどうだけどシャットダウンするようにして、スリープを回避するようにしよう。

そして、今ブログ書きながら気づいた。麻雀関連の単語登録も吹っ飛んでるのね。
「てんほう」と打って、一発で「天鳳」と変換されない。
4か月分のファイルに比べれば些末なことだけど、やっぱり切ない。
麻雀AI開発その96・他家から切られる牌分布とニューラルネットその9
前回から10万試合分csv出力が終わって、後は機械学習をひたすら進めるだけだーと思ってたら、
やり始めてからなんかいろいろとミスが見つかって、ミスを修正してもう一回一から学習やり直しー、とかを繰り返していました。

とりあえず現バージョンで110万回の重みパラメータ更新時の途中経過の出力値重みパラメータを使って実際の牌譜との突き合わせをしてみました。
色分けについては麻雀AI開発その93・他家から切られる牌分布とニューラルネットその6と同内容です。

180904-01.png
他家3人非リーチ門前のケース。
従前方式との齟齬はそこまで大きくなく、まずまずの結果。

180904-02.png
他家副露者ありのケース。

2個目の789三色仕掛けに対して789sを抑えるみたいなのはできてないけど、これは入力値的に「その他仕掛け」ということしか考慮できてないので、まぁやむなしかと。

3つ目の終盤17巡目については割と齟齬が大きいですが、見えてる情報が多すぎる分、散発的な情報しか入ってない従前方式よりはかえってニューラルネットの方がいい感じになってると信じたい。
従前方式だと生きてる字牌の高い切られ率の分がニューラルネットでは数牌の方に比重が傾いてる的に見える。

180904-03.png
他家染め副露者ありの場合。
従前方式ではまだ染め副露の影響は全く入っていません。

1つ目の8巡目1副露なら割と染め色数牌や字牌も通常副露程度に切られるけど、
2つ目3つ目のあからさまなピンズ染めに対しては染め色ピンズや字牌を抑えてる傾向にあります。
もちろん、とても素晴らしいです。
これだけでも頑張ってニューラルネット組んだ甲斐があったものです。


180904-04.png
他家ドラポン者ありの場合。
従前方式では他家の手の高さは考慮してないです。

1つ目。ドラポン東家よりむしろピンズ染め模様の南家を警戒してるように見えなくはない。ピンズや字牌(特に役牌の東白発中)を止めてる傾向にあるみたい。

2つ目。直前の5p合わせ打ちの確率が高いのはいい。けど、オレンジ色になってる4m6m8m3p3s4sは軒並みドラポン者の無筋。これはあまりよろしくない。
まぁ、まだ計算の途中で、ドラポンのレアケースがなかなか学習しきれてないという可能性ということで、今後に期待。

3つ目はほぼ問題なし。

180904-05.png
他家リーチ者ありの場合。
対リーチの打ちまわしさえうまくできてれば、今回の試みは半分以上成功です。

1個目。従前方式を基準に置くと、ニューラルネットは大分字牌に偏ってる。まぁでも、あからさまにひどくはなさそうで一安心。

2個目。これはまぁいいでしょう。直前の2s合わせ打ちの可能性が高いことをニューラルネットで考慮できてるのも割とでかい。

3個目。3巡目リーチで情報が少ない割には割と従前方式と開きがあるところが多いように見えなくはない。

180904-06.png
自分リーチ者の場合。

これは3つともあからさまにニューラルネットの方がおかしいです。自分リーチでオールツモ切りに明らかになってないです。
最悪、自分リーチについては1順当たりツモ率パラメータの方で計算すれば済む話なので、まぁ悪いのですけど対処は不可能ではない分、まだましです。


というわけで、自分リーチを除けばおおむね実用には耐えそうなので、ひとまずよかったよかった、と。
学習はこの後も続けながら、次はモンテカルロシミュレーション内部でニューラルネットを計算させるプログラム作りに進みます。
入力値として使うデータを別途記憶するような仕組みを作らなければいけないので、大変といえば大変です。
また、ニューラルネットの計算が妥当であることと、計算時間的に実用に耐えうるかは全くの別問題なので、これはやってみないとわからないです。
麻雀AI開発その95・他家から切られる牌分布とニューラルネットその8
前回(麻雀AI開発その94・他家から切られる牌分布とニューラルネットその7)の最後で描いた4層ニューラルネットを新しく設計してみました。

3層から4層に大きく構造が変わっていろいろと再設計が大変になったのを踏まえて、重みパラメータを複数のジャグ配列からユーザー定義型クラスに変えました。今回はパラメータの構造を変えるのに手間取ったけど、今後はクラス内部の構造を変えるだけで済むから変更が簡単になるはず。

後は、人間(私)から見てある程度見やすいcsv形式から計算で使う用のListへの変換を、ニューラルネットの計算のたびに行うのではなく、初回のcsvファイル読み込み時にまとめて変換するように変えたりとか。

ただ、そのことによって、csv1件に対するメモリの消費量が増えた(csv1行に対して牌種類37個分のニューラルネットや偏微分計算が対応するので、単純に37倍くらいには増える)ので、今迄みたいに全件もしくは最初の500万件までを全部内部変数として保存しておくのが、困難になりました。
ミニバッジ学習もしくはオンライン学習の観点からは、全件をメモリとして保持するのはあまり頭がいい方法ではないです。
ただ、私のデータベースの知識が乏しいので、データベースを構築して、ニューラルネットの計算の都度、データベースにアクセスして、入力値を得るというのがちょっと難しかったです。

というわけで折衷案として、
・csvファイルのうち読み込み開始行をランダムとしてそこから10万行分のcsvデータを計算で使える形式に変換してメモリに保持する。
・いつものように重みパラメータの偏微分計算と重みパラメータ更新をしばらく繰り返す。(アクセスするデータはcsv10万行&約370万件弱の中から毎回ランダムに決める)
・ある程度の繰り返し回数になったらまた別の10万件のcsv読み込みから再度行い、以下同様。
というようにしました。

これで軽くテストしてみたら、csvデータ10万件をリフレッシュする段階で、損失関数の値が大きく動く現象がみられました。
参照元データが変わるので当然なのですが。
なので、10万件リフレッシュの度に重みパラメータをテキストに書き出すことにしました。
これにより複数の重みパラメータ群ができあがりますが、それをどうまとめるかはまた後で考えることにしよう。(投げやり)

今現在は10万試合分のcsvファイルの出力をやってるところです。(入れたい特徴量が新たに出たので牌譜解析を再度やり直した。)
微分が合ってるかどうかとかのテストはすでにできているので、csv出力が終わったら機械学習本番でひたすらパソコンちゃんに頑張ってもらうと。


プロフィール

nisi5028

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

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

この人とブロともになる

QRコード
QRコード