tomohxxの日記

個人的な麻雀研究メモ

天鳳パケット解析

はじめに

本記事にはマナー的にグレーな内容が含まれます。もし「掲載すべきではない」との意見が寄せられた場合、直ちに削除する予定です。

今回は天鳳のパケット解析を行います。きっかけは以下のツイートです。

かなりマイナーな知識になりますが、実はFlash版の天鳳では通信内容が暗号化(SSL化)されていません(2020/5/16現在)。天鳳での自動打ちを目的としたパケット解析に関する情報がインターネットにいくつか存在しますが、私の知る限りそれらの情報はすべて通信内容が暗号化されていないことを前提とするものです。言い換えるとFlash版の天鳳でしか使えない情報です。上記のツイートから、今後それらの情報が役に立たなくなる可能性が高いと考えられます。そこで、すでに通信内容が暗号化されているWeb版天鳳のパケット解析を行ってみます。

暗号化通信とは

念のため暗号化通信について解説しておきます。URLという言葉をご存じでしょうか?https://www.google.co.jpのような文字列のことです。これはGoogleの検索画面にアクセスするためのURLです。このURLはhttpsから始まっていますが、これが暗号化通信を意味しています。通信が暗号化されているということは、自分とサーバー(この例ではGoogleのサーバー)以外に通信内容が知られないということです。例えば、通信経路の途中のルーターが第三者に侵入されたとしても通信内容が知られることはありません。ところで以前はhttpsではなくhttpの方をよく聞いたのではないでしょうか?httpでは通信内容が暗号化されず平文(第三者にも内容がわかる状態)でやりとりされます。以前はクレジットカードの番号などの個人情報を扱う場合でしかhttpsは使われなかったのですが、最近は通信内容を問わずhttpsを使うことが多くなっています。このような流れがあるので天鳳でも通信内容の暗号化を進めるのだと思われます。

天鳳パケット解析

Flash

Flash天鳳のパケット解析に関する情報は検索すればわかるので詳しく解説しません。Flash天鳳ではゲームの進行状況に関するデータがTCPパケット上に平文で乗ります。パケットフォーマットは天鳳牌譜ログと同様の形式です。

Web版

Web版でのプロトコルはWebsocket over SSL/TLSです。配牌直後でのパケットキャプチャの例を示します。

f:id:tomohxx:20200516213004p:plain
天鳳パケットキャプチャ

この画像はパケット解析ツールであるWiresharkの画面の一部です。どうやらデータはJSON形式で送られてくるようです。またJSONデータの構造は天鳳牌譜ログのフォーマットに従うと思われます。実際のゲーム画面はこちらです。

f:id:tomohxx:20200516211059p:plain
天鳳スクリーンショット

おわりに

天鳳でのパケット解析について解説しました。具体的な内容は伏せますが、くれぐれも迷惑行為は行わないでください。

天鳳牌譜解析(5) 有効牌の残り枚数

はじめに

この記事では有効牌の残り枚数について考えます。先日Twitterである方と議論をした際に、有効牌を引く確率が局を通じて一定になるかという話題が出ました。この話題からは少しそれますがこの機会に有効牌の残り枚数について調べてみようと思いました。実は以前にも有効牌の枚数について調べているのですが、もう少し詳しく調べることにします。以前の記事はこちら。
tomohxx.hatenablog.com

対象の牌譜

2018年の天鳳鳳凰卓東南戦

方法

巡目ごとに有効牌の枚数を数えて平均値を求めます。なお、牌譜解析では他家の手牌と壁牌、王牌をすべて区別した上で牌の在りかを特定することができます。そこで有効牌の残り枚数を以下のように区別して数えることにします。

  • レベル1: 他家の手牌と壁牌のすべての牌が見えない
  • レベル2: 他家の手牌は見える、壁牌は見えない
  • レベル3: 他家の手牌と壁牌のすべての牌が見える

それぞれのレベルで有効牌の残り枚数を数えます。

結果と考察

テンパイ、1シャンテン、2シャンテンの手牌について有効牌の残り枚数を調べました。3シャンテン以上の手牌については中盤以降で存在確率が低下するため記載を省略します(詳しくは過去の記事を参照)。なお、数値を記述するのが面倒なのでグラフのみ記載します(数値が気になる方はお問い合わせください)。また、サンプルが非常に多いので誤差を気にする必要はないと思われます。

f:id:tomohxx:20200511003700p:plain
有効牌の残り枚数(テンパイ)
f:id:tomohxx:20200511004522p:plain
有効牌の残り枚数(1シャンテン)
f:id:tomohxx:20200511004541p:plain
有効牌の残り枚数(2シャンテン)

有効牌の残り枚数のグラフを見ると、各レベルで曲線の曲がり具合が同じのように見えます。そのためレベル2とレベル3の有効牌の残り枚数はレベル1での残り枚数に未知牌の枚数の比をかけたものに等しいのではないかと考えられます。未知牌とは自分からは見えない牌のことです。簡単に未知牌の枚数を以下のように定義します。

(1)=136134×巡目1未知牌の枚数(レベル2)=1364×134×巡目1未知牌の枚数(レベル3)=1364×134×巡目14

各式の最後の1や14はそれぞれドラ表示牌と王牌の枚数です。レベル2とレベル3の有効牌の枚数を以下のように見積もってみます。

(2,)=有効牌の枚数(レベル1)×未知牌の枚数(レベル2)未知牌の枚数(レベル1)有効牌の枚数(レベル3, 補正)=有効牌の枚数(レベル1)×未知牌の枚数(レベル3)未知牌の枚数(レベル1)

実際にレベル1での残り枚数に未知牌の枚数比をかけたものをプロットするとよく一致しているように見えます。よってレベル2とレベル3での有効牌の枚数をレベル1での有効牌の枚数から見積もることができます。

f:id:tomohxx:20200511004642p:plain
有効牌の残り枚数(テンパイ、補正あり)
f:id:tomohxx:20200511004708p:plain
有効牌の残り枚数(1シャンテン、補正あり)
f:id:tomohxx:20200511004733p:plain
有効牌の残り枚数(2シャンテン、補正あり)

おわりに

まとめ。

  • 牌譜解析により有効牌の残り枚数を調べました。
  • 他家の手牌を含めない有効牌の残り枚数、および他家の手牌と王牌を含めない有効牌の枚数は、自分から見えない有効牌の枚数に未知牌の枚数の比をかけたものに等しいと言えます。

ちょっと気になったのですが、未知牌の枚数の比で別のレベルの有効牌の枚数を見積もれることは自明なことなのでしょうか?他家がランダムに打牌するのであれば自明なのかと思いますが、どうなのでしょう?ここで調査したことに新規性があるのか疑問です。

Suphx論文を読んだ感想など

はじめに

先日、Microsoftが開発した麻雀AI「Suphx」の論文が公開されました。天鳳で最高十段に到達したという強さが麻雀以外のコミュニティでも話題となりました。その強さゆえ麻雀研究界隈に与える影響は大きいと思われます。今後、Microsoft囲碁でのAlphaZeroのような人間を圧倒するAIを開発するのか注目したいと思います。

さて、本記事ではSuphx論文を読んでアイデアついての簡単なまとめと感想などを記載します。

arxiv.org

Suphx論文のまとめ

1 Intoroduction

麻雀AIの開発は困難である

麻雀AIの開発が困難である理由は3つ。

  1. 麻雀が1局の繰り返しゲームであるので一局での得点が最終的なポイントに直結しないこと。
  2. プレイヤが観測できない情報が多いため意思決定を行うことが難しいこと。
  3. プレイヤがとれる行動(打牌、リーチ、ポン、チー、カンなど)の種類が多く、手番が鳴きにより固定されないのでゲームの木を構築してそれを探索するという手法が使えないこと。
採用した技術について

Suphxには畳み込みニューラルネットワーク(deep convolutional neural network)が用いられ、まず人間の上位プレイヤの牌譜を教師に訓練された。その後、方策勾配法を用いた自己対戦によってさらなる強化が行われている。自己対戦では、前述の困難さを克服するために以下の3つの技術が採用された。

  1. Global reward prediction
  2. Oracle Guiding
  3. parametric Monte-Carlo policy adaption (pMCPA)

2 Overview of Suphx

このセクションではSuphxの意思決定のフローとCNNの構造および特徴量が述べられている。意思決定には行動(打牌、リーチ、チー、ポン、カン)に応じて5つのモデルが使用されている。あがるかどうかの判断はルールベースとなっている。CNNのインプットには牌の組み合わせのデータ(手牌(門前/副露)、ドラ)と牌の順序のデータ(河)、整数データ(持ち点、山の残り枚数)、カテゴリカルデータ(何局目か、親は誰か、何本場か、リーチ棒の数)が用いられた。これらの直接観測できるデータに加えて、どれくらいの点数であがれそうかを表す将来的な特徴量も用いられている。この特徴量は深さ優先探索で相手の存在を無視して計算される(いわゆる一人麻雀)。CNNの構造についてはTable 2とFigure 4, 5を参照。

3 Leaning Algorithm

3.1 Distributed Reinforcement Learning with Entropy Regularization

学習には方策勾配法(policy gradient method)と重点サンプリング(importance sampling)が用いられている。後者は分散環境で学習するために使うテクニックらしい(要勉強)。また、学習のスピードと安定性を調整するために正則化されたエントロピー項が勾配に含まれている。学習の進捗に応じてエントロピー項の係数が調整される。

3.2 Global Reward Prediction

麻雀は局の繰り返しゲームである。一局の得点あるいはゲーム終了時のポイントは強化学習において良いシグナル(訳が微妙)にはならない。なぜなら、うまくプレイできた局、悪かった局が同じポイントを共有すること、そしてオーラスなどで一局の得点をマイナスにすることが必ずしも悪い戦略とは言えないからである。それで強化学習に良いシグナルを与えるために最終的なゲーム報酬(global reward)を各局に適切に割り当てる必要がある。Suphxでは、この報酬の予測器はリカレントニューラルネットワークとなっている(Figure 7を参照)。訓練データには天鳳の牌譜が用いられた。

3.3 Oracle Guiding

麻雀にはプレイヤに隠された情報が多い。この情報なくして良い行動を選択することは難しい。これが麻雀AIを開発するのが困難な基本的な理由である。強化学習を使えば(情報が隠されたままでも)戦略を学習することは可能であるが学習スピードは遅い。そこで学習を速めるためにOracle Guidingが導入された。このテクニックは完全な情報が見えるエージェントから学習を始めて、徐々に見える情報を減らして最終的に通常のエージェントとするものである。見える情報を徐々に減らす方法については式(5)を参照。ここでδtが見える情報を調整する行列である。その行列要素がベルヌーイ分布に従う変数となる、すなわちP(δt(i,j)=1)=γtγtは学習開始時には1であるが最終的に0となる。γtが0となるとエージェントは隠された情報を利用できなくなり普通のエージェントに移行する。

3.4 Parametric Monte-Carlo Policy Adaption

上位プレイヤの戦略は配牌によって大きく変わる。例えば配牌が良ければ攻撃的にプレイし、配牌が悪ければ保守的にプレイするというように。モンテカルロ木探索(MCTS)は囲碁のようなゲームで確立されたテクニックであるが、残念ながら麻雀のように手番が固定されないゲームでは通常のゲームの木を構築することが難しい。つまりMCTSを直接麻雀に適用することはできない。そこで本研究ではparametiric Monte-Carlo policy adaption (pMCPA)が開発された。pMCPAでは配牌に応じた戦略の調整を以下のように行う。

  1. シミュレーション: 自分の手牌を固定して、対戦相手の手牌と壁牌をランダムに生成する。ここからオフライン環境で訓練された戦略に基づいてゲームを進める。これを繰り返し多数のトラジェクトリ(一連の牌譜)を得る。
  2. 適応: 得られたトラジェクトリを使って戦略を更新する。
  3. 推測: 更新された戦略を使って局をプレイする。

戦略の更新は式(6)に基づく。生成されたトラジェクトリに対して最大の報酬を得るようにパラメータを調整する(たぶん)。注意点として戦略の更新は各局で独立して行われる。つまり更新された戦略は次の局に引き継がれず、次の局ではオフライン環境で訓練された戦略からまた始める。

4 Offline Evaluation

このセクションでは各テクニックのオフライン環境での有効性について議論している。

4.1 Supervised Learning

5つの行動モデルの学習結果について述べられている。モデルは牌譜一致率によって評価された(Table 3を参照)。

4.2 Reinforcement Learning

強化学習の計画について述べられている。

  • SL: 牌譜から学習しただけのエージェント。
  • SL-weak: 訓練されていないSL。他エージェントの評価用。
  • RL-basic: 方策勾配法で訓練された基本バージョンのエージェント。
  • RL-1: RL-basicをglobal reward predictionにより強化したエージェント。
  • RL-2: RL-1をoracle guidingによってさらに強化したエージェント。

Figure 8から前述のテクニックを段階的に導入することで安定段位が上昇していることがわかる。

4.3 Evaluation of Run-Time Policy Adaption

pMCPAの評価について述べられている。

  1. データ生成: 自分の手牌を固定して100Kトラジェクトリを生成する。
  2. 方策適応: 得られた100Kトラジェクトリに対して方策を微調整する。
  3. 調整された方策のテスト: 別に10Kトラジェクトリを生成して調整された方策でプレイする。ここでも自分の手牌は固定される。

ランタイムでの方策適応には時間がかかる。そのため現段階では数百回の初めの局(=東一局?)でのみテストされた。方策適応が用いられたエージェントの(方策適応が用いられていないエージェントに対する)勝率は66%となった。これによりランタイム方策適応の有効性が実証された。

5 Online Evaluation

天鳳の特上卓でプレイした結果について述べられている。成績はTable 4を参照。Suphxは天鳳の特上卓で5760試合プレイし安定段位8.74を記録した。また、他の麻雀AI(爆打、NAGA)と上位プレイヤと成績を比較している。爆打、NAGAの安定段位はそれぞれ6.59と6.64、上位プレイヤの安定段位は7.46である。安定段位の観点ではSuphxは他の麻雀AIや上位プレイヤよりも強いことが明らかになった。

また、Suphxの打ち方の特徴についても述べられている(Table 5)。

  • 低い放銃率(10.06%)。これは天鳳の上位プレイヤに指摘された。
  • 低い4位率(18.7%)。これは高い安定段位を記録する上で重要。

6 Conclusion and Discussions

今までのところSuphxは最強の麻雀AIである。しかし麻雀の持つゲームの複雑さゆえ、まだ多くの改善の余地がある。

  • 好配牌であがるのが容易な局では報酬を戦略に反映させるべきではない。対照的に難しい局であがった場合はより高い報酬が与えられるべきである。つまりゲームの難しさを考慮すべきである。
  • 完全な情報を利用する他のアプローチの実践。1つ目のアプローチはオラクルエージェント(完全な情報が見えるエージェント)と通常のエージェントを同時に訓練し、2つのエージェント間の距離を制限しながらその知識を蒸留する(=見えない情報への依存をなくす?)こと。2つ目のアプローチはオラクルクリティック(oracle critic)を導入すること。これは局単位のフィードバックの代わりに状態レベルの即時のフィードバックを与えることで訓練を加速させる効果がある。
  • ランタイム方策適用を各局開始時だけでなく各プレイヤの打牌直後にも行うようにする。

感想

気になった点を箇条書きで記載します。

  • 打牌モデルの特徴量に深さ優先探索で計算した得点が用いられている

IPSJの論文などでは探索よりも手牌データを画像データのようにエンコードしてCNNにより打牌を選択する事例が多いです。私は専門家ではないので詳しい事情は知りませんが、専門家の間では探索を使わないのが自然なアイデアなのでしょうか。効率的に探索をしようとするとシャンテン数のような麻雀固有の知識を必要とします。これが嫌われているのではないかと推測します。本研究で探索が使われているということは見たままのデータを用いた学習はうまくいかないことを示唆しているのではないかと考えます。

  • Global reward predictionの新規性

最初にこの部分の解説を読んだとき、「期待最終順位でもよいのでは?」と思いました。期待最終順位の概念は爆打の論文(https://www.logos.ic.i.u-tokyo.ac.jp/~mizukami/paper/GPW_paper_2015.pdf)で登場します。本研究では自己対戦での順位を報酬としていないようですが、どちらの手法が効果的なのか気になりました。

この手法は他の不完全情報ゲームでも通用するのではないかと思いました。より詳しい解説が欲しいです。今後の発展に期待しています。

  • parametric Monte-Carlo policy adaption (pMCPA)の効果

素人意見ですが、pMCPAを採用する必要があるのか疑問に思いました。pMCPAを採用する前段階までで「配牌が良ければ攻撃的に打つ」、「配牌が悪ければ守備よりに打つ」という戦略は学習できないのでしょうか。

おわりに

やはりSuphxが天鳳で十段を達成したという事実は今後の麻雀研究界隈やゲームAIの業界に確実に影響を与えると思います。今後、Suphxで採用された手法の中でどれが特に有用だったのか明らかになっていくでしょう。近いうちに例えば将棋におけるボナンザメソッドのような「定番」の手法が確立されるのではないしょうか。そうなれば麻雀AIの研究は加速度的に進むでしょう。今後1~2年の研究動向は特に目が離せないですね。

麻雀AI開発(1)

はじめに

今回から何回かに渡って自作麻雀AIについて書きます。最初に開発に至るまでの経緯を述べます。これまでにシャンテン数計算アルゴリズムと有効牌・不要牌計算アルゴリズムを開発してきました。そして最近、悲願であった一人麻雀における和了確率を計算するアルゴリズムを開発しました。
qiita.com
これらのアルゴリズムによって一人麻雀で最適な戦略を求めることが可能になりました。一人麻雀を攻略したのだから四人麻雀でそこそこ良いAIを開発するのは容易なのでは、と思ったので麻雀AIの開発に着手しました。

麻雀AIの構成

私の開発した麻雀AIは打牌選択(押し/降り)、鳴き判断、リーチ判断、押し引き判断によって構成されます。以下、具体的なアルゴリズムをまとめます。

打牌選択(押し)

一人麻雀を仮定し、以下の評価関数の期待値を最大にする牌を選択する*1

(1)V(l)=2+()+(1,0)

打牌選択(降り)

天鳳牌譜を使ったマルチラベルロジスティック回帰により、テンパイしているプレイヤに対して各牌の放銃率を推定し最も安全な牌を選択する。特徴量は各牌が河に存在するかを0か1で表す長さ34のベクトル。テンパイしてるプレイヤが複数存在する場合、いずれかのプレイヤに対して放銃する確率を推定する。

鳴き判断

一人麻雀を仮定し、役が確定しかつ和了確率が増加する場合は鳴く、そうでないならば鳴かない。

リーチ判断

天鳳牌譜を使ったランダムフォレストによりリーチをかけるかどうかを判断する。特徴量は、待ち牌の残り枚数、残りツモ回数、リーチをかけない場合の得点の最大値、リーチをかける場合の得点の最大値、何局目か、持ち点、親かどうかの7個。

押し引き判断

リーチ・ドラポンがなければ押し。リーチかドラポンがある場合、(翻数の期待値)>=1.8 かつ (シャンテン数)<=2 かつ (打牌選択(押し)で選択された牌の放銃率)<=0.12 ならば押し、そうでないならば降り。

麻雀AIの評価

麻雀AIをmjaiという環境で評価しました。
github.com
対戦相手はmjai-manue 3体です。
github.com
作者いわく「あまり強くない」そうですが、人間が相手をするというならばともかくプログラムで相手をするのはけっこう大変です。人間の判断基準をプログラムに落とし込まなければならないからです。以下のリンクに東風戦の牌譜を掲載しています。プレイヤ名はTestです。
tomohxx.github.io

成績をまとめました。

試合形式 東風
試合数 60
局数 347
和了 0.2046
ツモ率 0.3380
放銃率 0.0634
副露率 0.2133
流局率 0.2622
流局時テンパイ率 0.2418
リーチ率 0.1758
平均順位 2.467
平均打点 6883
1位率 0.1500
2位率 0.4333
3位率 0.2167
4位率 0.2000

考察と感想

和了率、放銃率が低いのが気になります。もう少し押してもよいのかなという印象を受けます。まあ、このような結果になったのはリーチ一発への放銃を避けるためリスクをとらないような設定にしたからなのですが。牌譜を見る限りではそこまで不自然な打ち方はしていないようです(安パイを残すような打ち方はまだできないです)。

あと、降りについてですが適当に作ったモデルのわりにはうまく機能している印象を受けました。まだまだ改善の余地があるのでより高精度なモデルを作ることができそうです。

正直なところ、平均順位はもう少し良くなることを期待していました。というのはリーチ判断を天鳳の牌譜から学習したためです。しかし、mjai-manueはリーチに対してほぼ降りを選択するので人間相手のリーチ戦術ではmjai-manue相手にうまくいかないといえます。よって、mjai-manue相手の最適な戦略を対戦結果を通じて設計するような仕組みが必要です。なお手動で戦略をプログラミングすることもできますが、その場合その戦略が最適であることの証明が困難になるという問題が生じます。ゲームの最適な戦略を設計することは一般的に強化学習によって行われます。麻雀の場合、打牌、リーチ、鳴きといった行動が得点あるいは順位等に直接的に結びつかないので強化学習における報酬を定義することが困難になります。報酬をどのように定義してどのように改善するかの方針を決定することが肝であるといえます。

おわりに

麻雀AIの開発についての記事を書きました。数日間、押し引きのチューニングをやっていたのですが、思うような動作ができずに心が折れそうになりました。このまま続けてもコードが汚くなったり開発が泥沼化しそうだと思ったので、中途半端な結果ではありますがここで報告することにしました。今後は強化学習についての理解を深めるべく調査・勉強に励もうと思います。たぶん、それなりに良い結果が出るので、その際はまたブログの記事で報告する予定です。

*1:この評価関数は、速度と打点、鳴ける可能性をいい感じで重みづけして評価値を決定します。評価関数については[麻雀]一人麻雀攻略! 和了確率の計算アルゴリズム - Qiitaの(13式)を参照してください。

天鳳牌譜解析(4) リーチが通った時点で裏ドラが乗る確率

はじめに

天鳳牌譜解析の4回目です。今回はリーチが通った時点で裏ドラが乗る確率を調べました。具体的には、リーチをかけて通った後、裏ドラをめくって乗っているか確認するという作業を牌譜解析の中で行いました。

この確率は、リーチ後にあがった時点で裏ドラが乗る確率と同じなのでは?という気がしたのですが、納得できる説明が思いつかなかったので実際に調べることにしました。

対象の牌譜

2018年の天鳳鳳凰卓東南戦

方法

牌譜から天鳳の牌山を再現するプログラムはこちらになります。
github.com

結果

結果は以下のようになりました。ついでに裏ドラが乗る場合何枚乗るかの条件付き期待値も調べました。リーチが通った時点で裏ドラが乗る確率は約30%で、リーチ後にあがった時点での確率よりも3%ほど大きくなるようです。

事象 確率 条件付き期待値(枚)
リーチが通った時点で裏ドラが乗る 0.3053 1.012
リーチ後にあがった時点で裏ドラが乗る 0.2773 1.013

おわりに

リーチが通った時点で裏ドラが乗る確率と、乗る場合の枚数の期待値を調べました。

リーチが通った時点での確率とリーチ後あがった時点での確率がわずかに異なる理由は、考えてもわかりませんでした。わずかな差なので両者は同じということでいいんじゃないでしょうか?

今回の牌譜解析はまだ世の中にないデータだと思ったので行いました。今回のように牌山のどこにどの牌があるかに関連した解析も、ネタが思いついたらやろうかなと思います。何か面白そうなネタがあったら教えてください。

天鳳牌譜解析(3) 配牌時シャンテン数別和了率

はじめに

今回は配牌時シャンテン数別和了率を求めます。これまでの牌譜解析と同様に、過去に天鳳で行われた牌譜を解析し以下の和了p^を求めます。

(1)p^=あがった回数配牌の回数

ただし、あるシャンテン数の手牌が与えられたときにあがれる確率を予測することを目的とします。そこで統計学の「母比率の推定」を行います。簡単に言うと、和了率が含まれるであろう区間を求めようというものです。和了率は牌山やプレーヤーの組合せ、サイコロの目によって決まると考えると、これらは確率的に変化するので、和了率を確率変数と考えることができます。

母比率の推定

n回の配牌の内、あがった回数をX回とすると、Xは二項分布Bin(n,p)に従います。ここでp和了率で、これを推定します。nが十分に大きいとき、中心極限定理によりXを標準化した値Zの分布はN(0,1)に従うとみなせます。

(2)Z=Xnpnp(1p)

標準正規分布表から1.96Z1.96となる確率は95%です。この式を変形すると次のようになります。

(3)p^1.96p(1p)npp^+1.96p(1p)n

p^X/nで表される標本比率です。nは十分に大きいので近似的に不等式の左辺と右辺のpp^で置き換えます。

(4)p^1.96p^(1p^)npp^+1.96p^(1p^)n

(4)式を用いて、95%の信頼係数での和了率の信頼区間を求めます。

結果

2016年から2018年の天鳳鳳凰卓東南戦を対象にしました。配牌時シャンテン数別和了率とその信頼区間は以下のようになりました。配牌時シャンテン数の期待値は約3.5なので、サンプル数の少ない配牌時テンパイの和了率の信頼区間が広くなっていることがわかります。

配牌時シャンテン数 あがった回数 配牌の回数 和了率(95%信頼区間)
0 1245 1756 0.709 (±0.0212)
1 63829 133838 0.477 (±0.00268)
2 675721 200894 0.336 (±0.000653)
3 1891813 7772906 0.243 (±0.000301)
4 1517705 8562389 0.177 (±0.000256)
5 360619 2812440 0.128 (±0.000391)
6 17154 179607 0.0955 (±0.00136)

f:id:tomohxx:20190518192007p:plain
配牌時シャンテン数別和了

おわりに

最近統計学を勉強しているので麻雀研究に応用してみました。今回のテーマでは大量のサンプルを得ることが容易にできましたが、別のテーマでもそうできるとは限りません。その際には誤差や信頼区間を使った議論をしないと、信頼できる結論を出すことが難しいのではないかと思います。今回身につけたノウハウを今後も生かしていきたいです。

天鳳牌譜解析(2) あがりについての統計

はじめに

天鳳鳳凰卓でのあがりについて、役の出現率や符と飜の分布を調べました。

対象牌譜

2018年に天鳳鳳凰卓東南戦で行われた牌譜

結果

あがりの回数

役満以外 役満 合計
1559109 1426 1560535

役の出現率

出現率 出現率
赤ドラ 43.0% 四暗刻 0.0323%
裏ドラ 40.1% 国士無双 0.0211%
立直 39.9% 大三元 0.0174%
ドラ 38.6% 四暗刻単騎 0.00558%
門前清自摸 24.4% 小四喜 0.00545%
断ヤオ 22.8% 清老頭 0.00103%
平和 20.2% 字一色 0.000897%
役牌:中 7.69% 地和 0.000769%
役牌:發 7.69% 緑一色 0.000577%
役牌:白 7.68% 九蓮宝燈 0.000449%
一発 7.60% 四槓子 0.000320%
混一色 4.57% 天和 0.000320%
風牌:東 4.21% 国士無双13面 0.000256%
一盃口 3.95%
三色同順 3.82%
風牌:南 3.58%
七対子 2.71%
風牌:東 2.41%
風牌:南 2.18%
風牌:西 1.89%
風牌:北 1.76%
対々和 1.66%
一気通貫 1.48%
全帯ヤオ 0.849%
三暗刻 0.644%
清一色 0.553%
海底摸月 0.470%
海底撈魚 0.431%
純全帯ヤオ 0.295%
嶺上開花 0.255%
両立直 0.194%
小三元 0.0772%
風牌:西 0.0438%
二盃口 0.0365%
三色同刻 0.0300%
混老頭 0.0284%
槍槓 0.0222%
三槓子 0.00128%

符と飜の分布

以下は役満未満のあがりについてのデータです。

出現率 出現率
20 9.22% 1 15.3%
25 2.72% 2 22.8%
30 58.5% 3 23.4%
40 26.0% 4 19.1%
50 2.78% 5 11.2%
60 0.513% 6 5.20%
70 0.266% 7 1.97%
80 0.0221% 8 0.691%
90 0.00180% 9 0.233%
100 0.00071% 10 0.0744%
120 0.00006% 11 0.0211%
12 0.00821%

f:id:tomohxx:20190406170421p:plainf:id:tomohxx:20190406170529p:plain
符と飜の分布

符と飜の組み合わせについて出現率を計算すると以下の表のようになります。単位はパーセントです。確率が大きい組を赤で、低い組を緑で、中間を黄で色分けしました。

f:id:tomohxx:20190410002124p:plain
符と飜の組み合わせについての分布

おわりに

天鳳鳳凰卓でのあがりについて調べました。飜の分布のグラフを見て確率密度関数として何らかの関数に近似できそうだと思いました。