SlideShare una empresa de Scribd logo
1 de 27
麻雀牌譜解析のすすめ
ほしきゅー(hoshikyu)
(序章)麻雀の背景
麻雀研究の前にわかっておくと牌譜解析をする意義がより理解
できると思います。 牌譜解析そのものに興味がある場合は飛
ばしてしまって構いません。
そもそも麻雀って何? (わからない人向けに簡単に)
 トランプのポーカーみたいに自分の手札で特定の役を
作るゲーム。
 四人でやります。
 一つ持ってきては一つ捨て、それを誰かが役を完成さ
せるまで繰り返します。
 他の人が捨てたものが欲しければもらうことができる!
 その際、その捨てたもので役が完成だった場合、それを
捨てた人は役が完成した人に得点を払わなければいけ
ません。
 もう一つあれば役が完成という時、「リーチ」の宣言がで
きる。宣言すれば得点が上がるメリットがあるが、他の人
に完成が近いとバレてしまうのでデメリットもある。
麻雀の闇の時代
(いわゆるデジタルとアナログの簡単な歴史について)
 実際のところ「リーチ」ってすべきなの?
・今日はついてるからリーチ!
・不調続きだしリーチは控えよう・・
・神は言っている、ここでリーチをすべき定めだと。
 相手にリーチされた!降りるべき?攻めるべき?
・勝ってるからここは降りておこう。
・負けてるし失うものはない、攻めだ!
・どうせ弱いだろう、せめておいて問題はない。
一体何が正しいのか?
そこに現れた希望の光
(麻雀界を変えたデジタルの登場)
 ネット麻雀(東風荘など)の登場に
より、超大量で良質(強い人達の
集まり)な牌譜のデータがとれるよ
うになった。
 (今回は触れませんが)シミュレー
ターの開発により細かい状況のそ
れぞれの選択がどのような運命を
たどるかがわかるようになった。
まぁでも未だにデジタルが苦手勢は多い・・
でもいろんなプレイスタイルがあってこそ面白い
ところもあるよね。
(本章)天鳳牌譜解析
あなたもできる牌譜解析の仕方、教えます。
天鳳
(現在最もプレイヤー数の多い基本無料のオンライン麻雀ゲーム)
 鳳凰卓(最も高レベルな人が
打てる場所)で行われた牌
譜のデータが全て公開され
ている。
 無料の専用ブラウザによって
基本的な牌譜データの処理
が簡単に行える。(シャンテ
ン数、待ち牌を調べるなど)
牌譜のダウンロード
(クソ真面目に自分でやりたい人用。実際に牌譜解析したい人がいれば僕に言ってく
れれば普通にあげるのでこのへんは面倒なので読み飛ばしてください)
 公式サイトの上のメ
ニューの、「ランキング」
>「ログ」 からいけます。
実は結構面倒
 解凍してみると得ら
れるのはgzipファイ
ルで圧縮されたhtm
lファイルで・・
まだまだ続く・・
そのうちひとつを解凍してhtmlを開いてみると、過去の牌譜の観
戦用URLが大量に並べてある。
まだまだ・・
 さっきのは観戦用URLなので、
 牌譜IDをコピーして実際にデータある場所にアクセスする
↓この部分に牌譜ID
「http://tenhou.net/0/log/?2014060122gm-00b9-0000-
81b92751」
(微妙にアドレスが違います)
やっと
すると牌譜のデータが書かれたXMLファイルがダウンロードできた!
最終的に・・
 得られたXMLファイルを専用ブラウザで扱うことができる
ようにするために、それ用の「mjlogファイル」にします。
 mjlogファイルは、XMLファイルをgz圧縮したものです。
 ですから、gz圧縮した後に拡張子をmjlogに変更すれば
よいです。
 でも、gz圧縮しないでそのままmjlogに変更してもぶっ
ちゃけ使える。
 また、解析するためにはファイル名を
[牌譜ID]tw=0.mjlogにする必要があります。(理由は省略)
しかしこれ全部を手動でやろうとすると・・・
 一生終わらないで挫折します
 gzipを解凍する
 htmlの中の牌譜IDを正規表現で読み取る
 XMLのデータにアクセスしてダウンロード
 gzに圧縮してmjlogに変換
これらの動作をプログラムで書いて自動で処理してもらおう。
また、mjlogファイルの保存場所はwindowsなら
マイドキュメントmy Tenhoulogの中にしておきましょう。
Rubyで自動化!
(pythonとかperlでもなんでも)
専用ブラウザ
 公式サイトから無料でダ
ウンロードできます。
 プレイするために使うにも、
右クリックパスなど色々な
機能がついててお得で
す。
 ですがこれの本領は
mjlogファイルの様々な
処理が超簡単にできるこ
とです。(パースとかを勝
手にやってくれる)
専用ブラウザDL
 ここからDLできます。
専用ブラウザの仕組み
(マニュアルとか説明は公式に全然ないので、サンプルコードから自ら試行錯
誤で学んでいくしか無いです・・
 自分で書いたhtmlをこの専用ブラウザで開くことで、実行す
ることができる。実際の処理を書くのはもちろんjs
 htmlの方には解析結果の出力とかのレイアウトを書いてお
けばいい。
 天鳳の卓情報(鳳凰、東南戦など)を判別するための情報
やその他もろもろは公式のtenhou.jsにあるのでそれを読み
込んでおく。http://tenhou.net/1/script/tenhou.js
 その他色々なutilもあるから読み込んでおくと便利
http://tenhou.net/1/script/util.js
 これらを読み込んだあと、実際に解析を行うjsを作って、ht
mlを専用ブラウザで開けばいい。
(http://tenhou.net/1/script/)
解析の基本
 解析するためのおまじない↓
(実際にただ解析したいだけの人はいみわからなくていい)
var we=window.external;
logana=we.mjCommand("CREATEINSTANCE::LOGANA1.0")
;
logana.analyze(window);
window.externalはよくわからないが・・・ loganaっていうインスタン
スを作成して、そのanalyzeメソッドを呼び出すことで解析を始めて
くれる(マイドキュメントの中においた牌譜ファイルを片っ端から全
部解析してくれる)
イベントハンドラ各種(大枠編)
 OnAnalyzeBegin() //一番大枠の初期化処理
これから大量の牌譜ファイルを解析する前に、一度だけ最初に実行される関数。
初期化処理などを書いておける。
 OnEnumLog(loginfo)//解析する牌譜かしない牌譜か選択
それぞれの牌譜ファイルに対して詳しく解析する前に一度実行される関数。例
えば東風戦だけ解析したい場合など。解析したい牌譜だった場合true,そうでな
い牌譜だった場合falseを返すように条件文を書く必要がある。
 OnLogBegin(loginfo,player[4]) //各牌譜の初期化処理
解析したい牌譜をこれから解析する際に、それぞれ牌譜について実行される関
数。
 OnSceneBegin(kyoku,honba,nagare,dice0,dice1,dora[1])
//各局の初期化処理
各局の始まりに実行される関数です。
 OnSceneEnd()//各局の終了時の処理
 OnLogEnd(sc[8]); //各牌譜の終了時の処理
 OnAnalyzeEnd(pf)//一番大枠の終了時の処理
イベントハンドラ(ゲーム中編)
 OnTsumo(who,hai136,tehai)
ツモが発生するたびに実行される(上がりのツモではなく、毎回行わ
れるツモという行為全て)
 OnDahai(who,hai136,tehai)
打牌が行われるたびに実行される。
 OnNaki(who,m,type,kui,hai0,hai1,hai2,hai3)
鳴きが行われるたびに実行される。
 OnReach(who)
リーチが行われるたびに実行される。
 OnAgari(who,fu,tokuten,mangan,yaku[],yakuman[],doraUr
a[],sc[8],paoWho)
上がりが発生した時に実行される。
 OnRyuukyoku(type,sc[8],show[4])
流局が発生したたびに実行される。
実際の検証結果など
とりあえず簡単に、リーチの平均点とノー和了ノー放銃の順位分布
を出してみました。実際にコードを見れば色々わかりやすいと思い
ます。ソースコードはここにあります↓
https://gist.github.com/Restar9/7c2fbfe204f5297d9273
先制リーチの平均点
 リーチの平均点については常に研究されていて、子→約60
00点、親→約8700点であることが知られていますが、追っ
かけリーチを除いた先制リーチの平均点はどうなのか調べて
みました。
 データ元は鳳凰卓2011年~2012年の二年分です。
 (366517牌譜中、先制リーチ2709855回)
結果
子 先制リーチ平均点 5717 → 約5700点
親 先制リーチ平均点 8177 → 約8200点
追っかけも含めた平均点と比べると、子は約300点、親は500点程度
少なくなっています。 ただ大きな影響を及ぼすほどではないみた
いですね。
(agh2.js)
リーチの平均点 考察
 先制か先制じゃないかで点数は少し変わる。
 放銃時の点数だけに絞ると結構変わる(一般的に有名)
 ドラの見えてる枚数などでも変わる
 以上より、色々条件を絞ることで平均点も変わってくるの
で、実戦的にはよくある状況に場合分けをして、それぞ
れの平均点を統計で出してみると使えるかもしれない。
ノー和了ノー放銃の順位分布
 放銃率はかなり成績に影響しやすいと言われてますが、
果たして降りまくって和了もしなかった場合順位分布はど
うなるのでしょうか?
 データ元は同じく鳳凰卓2011年~2012年の二年分で
す。
(reachAve.js)
東南戦
該当牌譜:14468
順位分布:
1位 1回/0.0%
2位 1183回/8.1%
3位 9321回/64.4%
4位 3963回/27.3%
平均順位:3.192位
東南戦
該当牌譜:50543
順位分布:
1位 18回/0.0%
2位 7362回/14.5%
3位 29570回/58.5%
4位 13593回/26.8%
平均順位:3.123位
ノー和了ノー放銃の順位分布 考察
 東南戦でノー和了、テンパイ料だけでトップは取るのは
役満より難しい
 東風戦なら行けるのかと思ったら、実は流し満貫ばっか
りだった(流し満貫は天鳳では流局扱いなため)
 でも東南戦でも一度だけならテンパイ料だけでトップが
とれた奇跡の例もある
 だれでも思いつく通りやっぱ3位率が高い。
 だからといって4位率が25%以下になるわけではない。
 東風戦も東南戦も4位率はほとんど変わらないが、東風
戦のほうが3位の分を2位でとれている割合わずかに多
い。
最後に
(とりあえず今回はここまで)
 このスライドを見てもらえばだいたい牌譜解析はだれで
もできると思いますが、細かい部分をすべて書くのは大
変だったので省略してる部分も多いです。なのでわから
ない部分があれば是非僕に直接聞いてください。(僕も
わからない部分は未だ多いですが)
 それでは楽しい牌譜解析ライフを!

Más contenido relacionado

La actualidad más candente

Suphx: Mastering Mahjong with Deep Reinforcement Learning
Suphx: Mastering Mahjong with Deep Reinforcement LearningSuphx: Mastering Mahjong with Deep Reinforcement Learning
Suphx: Mastering Mahjong with Deep Reinforcement Learningharmonylab
 
Pythonではじめる OpenAI Gymトレーニング
Pythonではじめる OpenAI GymトレーニングPythonではじめる OpenAI Gymトレーニング
Pythonではじめる OpenAI GymトレーニングTakahiro Kubo
 
全力解説!Transformer
全力解説!Transformer全力解説!Transformer
全力解説!TransformerArithmer Inc.
 
深層強化学習の分散化・RNN利用の動向〜R2D2の紹介をもとに〜
深層強化学習の分散化・RNN利用の動向〜R2D2の紹介をもとに〜深層強化学習の分散化・RNN利用の動向〜R2D2の紹介をもとに〜
深層強化学習の分散化・RNN利用の動向〜R2D2の紹介をもとに〜Jun Okumura
 
分散学習のあれこれ~データパラレルからモデルパラレルまで~
分散学習のあれこれ~データパラレルからモデルパラレルまで~分散学習のあれこれ~データパラレルからモデルパラレルまで~
分散学習のあれこれ~データパラレルからモデルパラレルまで~Hideki Tsunashima
 
【DL輪読会】A Path Towards Autonomous Machine Intelligence
【DL輪読会】A Path Towards Autonomous Machine Intelligence【DL輪読会】A Path Towards Autonomous Machine Intelligence
【DL輪読会】A Path Towards Autonomous Machine IntelligenceDeep Learning JP
 
Attentionの基礎からTransformerの入門まで
Attentionの基礎からTransformerの入門までAttentionの基礎からTransformerの入門まで
Attentionの基礎からTransformerの入門までAGIRobots
 
論文の図表レイアウト例
論文の図表レイアウト例論文の図表レイアウト例
論文の図表レイアウト例Sunao Hara
 
[DL輪読会]AlphaStarとその関連技術
[DL輪読会]AlphaStarとその関連技術[DL輪読会]AlphaStarとその関連技術
[DL輪読会]AlphaStarとその関連技術Deep Learning JP
 
[DL輪読会]Decision Transformer: Reinforcement Learning via Sequence Modeling
[DL輪読会]Decision Transformer: Reinforcement Learning via Sequence Modeling[DL輪読会]Decision Transformer: Reinforcement Learning via Sequence Modeling
[DL輪読会]Decision Transformer: Reinforcement Learning via Sequence ModelingDeep Learning JP
 
機械学習モデルの判断根拠の説明(Ver.2)
機械学習モデルの判断根拠の説明(Ver.2)機械学習モデルの判断根拠の説明(Ver.2)
機械学習モデルの判断根拠の説明(Ver.2)Satoshi Hara
 
変分ベイズ法の説明
変分ベイズ法の説明変分ベイズ法の説明
変分ベイズ法の説明Haruka Ozaki
 
POMDP下での強化学習の基礎と応用
POMDP下での強化学習の基礎と応用POMDP下での強化学習の基礎と応用
POMDP下での強化学習の基礎と応用Yasunori Ozaki
 
多人数不完全情報ゲームにおけるAI ~ポーカーと麻雀を例として~
多人数不完全情報ゲームにおけるAI ~ポーカーと麻雀を例として~多人数不完全情報ゲームにおけるAI ~ポーカーと麻雀を例として~
多人数不完全情報ゲームにおけるAI ~ポーカーと麻雀を例として~Kenshi Abe
 
大規模ネットワークの性質と先端グラフアルゴリズム
大規模ネットワークの性質と先端グラフアルゴリズム大規模ネットワークの性質と先端グラフアルゴリズム
大規模ネットワークの性質と先端グラフアルゴリズムTakuya Akiba
 
[DLHacks 実装]Network Dissection: Quantifying Interpretability of Deep Visual R...
[DLHacks 実装]Network Dissection: Quantifying Interpretability of Deep Visual R...[DLHacks 実装]Network Dissection: Quantifying Interpretability of Deep Visual R...
[DLHacks 実装]Network Dissection: Quantifying Interpretability of Deep Visual R...Deep Learning JP
 
今さら聞けないカーネル法とサポートベクターマシン
今さら聞けないカーネル法とサポートベクターマシン今さら聞けないカーネル法とサポートベクターマシン
今さら聞けないカーネル法とサポートベクターマシンShinya Shimizu
 
アドテクに機械学習を組み込むための推論の高速化
アドテクに機械学習を組み込むための推論の高速化アドテクに機械学習を組み込むための推論の高速化
アドテクに機械学習を組み込むための推論の高速化MicroAd, Inc.(Engineer)
 
【DL輪読会】Patches Are All You Need? (ConvMixer)
【DL輪読会】Patches Are All You Need? (ConvMixer)【DL輪読会】Patches Are All You Need? (ConvMixer)
【DL輪読会】Patches Are All You Need? (ConvMixer)Deep Learning JP
 
Control as Inference (強化学習とベイズ統計)
Control as Inference (強化学習とベイズ統計)Control as Inference (強化学習とベイズ統計)
Control as Inference (強化学習とベイズ統計)Shohei Taniguchi
 

La actualidad más candente (20)

Suphx: Mastering Mahjong with Deep Reinforcement Learning
Suphx: Mastering Mahjong with Deep Reinforcement LearningSuphx: Mastering Mahjong with Deep Reinforcement Learning
Suphx: Mastering Mahjong with Deep Reinforcement Learning
 
Pythonではじめる OpenAI Gymトレーニング
Pythonではじめる OpenAI GymトレーニングPythonではじめる OpenAI Gymトレーニング
Pythonではじめる OpenAI Gymトレーニング
 
全力解説!Transformer
全力解説!Transformer全力解説!Transformer
全力解説!Transformer
 
深層強化学習の分散化・RNN利用の動向〜R2D2の紹介をもとに〜
深層強化学習の分散化・RNN利用の動向〜R2D2の紹介をもとに〜深層強化学習の分散化・RNN利用の動向〜R2D2の紹介をもとに〜
深層強化学習の分散化・RNN利用の動向〜R2D2の紹介をもとに〜
 
分散学習のあれこれ~データパラレルからモデルパラレルまで~
分散学習のあれこれ~データパラレルからモデルパラレルまで~分散学習のあれこれ~データパラレルからモデルパラレルまで~
分散学習のあれこれ~データパラレルからモデルパラレルまで~
 
【DL輪読会】A Path Towards Autonomous Machine Intelligence
【DL輪読会】A Path Towards Autonomous Machine Intelligence【DL輪読会】A Path Towards Autonomous Machine Intelligence
【DL輪読会】A Path Towards Autonomous Machine Intelligence
 
Attentionの基礎からTransformerの入門まで
Attentionの基礎からTransformerの入門までAttentionの基礎からTransformerの入門まで
Attentionの基礎からTransformerの入門まで
 
論文の図表レイアウト例
論文の図表レイアウト例論文の図表レイアウト例
論文の図表レイアウト例
 
[DL輪読会]AlphaStarとその関連技術
[DL輪読会]AlphaStarとその関連技術[DL輪読会]AlphaStarとその関連技術
[DL輪読会]AlphaStarとその関連技術
 
[DL輪読会]Decision Transformer: Reinforcement Learning via Sequence Modeling
[DL輪読会]Decision Transformer: Reinforcement Learning via Sequence Modeling[DL輪読会]Decision Transformer: Reinforcement Learning via Sequence Modeling
[DL輪読会]Decision Transformer: Reinforcement Learning via Sequence Modeling
 
機械学習モデルの判断根拠の説明(Ver.2)
機械学習モデルの判断根拠の説明(Ver.2)機械学習モデルの判断根拠の説明(Ver.2)
機械学習モデルの判断根拠の説明(Ver.2)
 
変分ベイズ法の説明
変分ベイズ法の説明変分ベイズ法の説明
変分ベイズ法の説明
 
POMDP下での強化学習の基礎と応用
POMDP下での強化学習の基礎と応用POMDP下での強化学習の基礎と応用
POMDP下での強化学習の基礎と応用
 
多人数不完全情報ゲームにおけるAI ~ポーカーと麻雀を例として~
多人数不完全情報ゲームにおけるAI ~ポーカーと麻雀を例として~多人数不完全情報ゲームにおけるAI ~ポーカーと麻雀を例として~
多人数不完全情報ゲームにおけるAI ~ポーカーと麻雀を例として~
 
大規模ネットワークの性質と先端グラフアルゴリズム
大規模ネットワークの性質と先端グラフアルゴリズム大規模ネットワークの性質と先端グラフアルゴリズム
大規模ネットワークの性質と先端グラフアルゴリズム
 
[DLHacks 実装]Network Dissection: Quantifying Interpretability of Deep Visual R...
[DLHacks 実装]Network Dissection: Quantifying Interpretability of Deep Visual R...[DLHacks 実装]Network Dissection: Quantifying Interpretability of Deep Visual R...
[DLHacks 実装]Network Dissection: Quantifying Interpretability of Deep Visual R...
 
今さら聞けないカーネル法とサポートベクターマシン
今さら聞けないカーネル法とサポートベクターマシン今さら聞けないカーネル法とサポートベクターマシン
今さら聞けないカーネル法とサポートベクターマシン
 
アドテクに機械学習を組み込むための推論の高速化
アドテクに機械学習を組み込むための推論の高速化アドテクに機械学習を組み込むための推論の高速化
アドテクに機械学習を組み込むための推論の高速化
 
【DL輪読会】Patches Are All You Need? (ConvMixer)
【DL輪読会】Patches Are All You Need? (ConvMixer)【DL輪読会】Patches Are All You Need? (ConvMixer)
【DL輪読会】Patches Are All You Need? (ConvMixer)
 
Control as Inference (強化学習とベイズ統計)
Control as Inference (強化学習とベイズ統計)Control as Inference (強化学習とベイズ統計)
Control as Inference (強化学習とベイズ統計)
 

麻雀牌譜解析のすすめ byほしきゅー