Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
麻雀牌譜解析のすすめ
ほしきゅー(hoshikyu)
(序章)麻雀の背景
麻雀研究の前にわかっておくと牌譜解析をする意義がより理解
できると思います。 牌譜解析そのものに興味がある場合は飛
ばしてしまって構いません。
そもそも麻雀って何? (わからない人向けに簡単に)
 トランプのポーカーみたいに自分の手札で特定の役を
作るゲーム。
 四人でやります。
 一つ持ってきては一つ捨て、それを誰かが役を完成さ
せるまで繰り返します。
 他の人が捨てたものが...
麻雀の闇の時代
(いわゆるデジタルとアナログの簡単な歴史について)
 実際のところ「リーチ」ってすべきなの?
・今日はついてるからリーチ!
・不調続きだしリーチは控えよう・・
・神は言っている、ここでリーチをすべき定めだと。
 相手にリーチ...
そこに現れた希望の光
(麻雀界を変えたデジタルの登場)
 ネット麻雀(東風荘など)の登場に
より、超大量で良質(強い人達の
集まり)な牌譜のデータがとれるよ
うになった。
 (今回は触れませんが)シミュレー
ターの開発により細かい状況のそ
...
(本章)天鳳牌譜解析
あなたもできる牌譜解析の仕方、教えます。
天鳳
(現在最もプレイヤー数の多い基本無料のオンライン麻雀ゲーム)
 鳳凰卓(最も高レベルな人が
打てる場所)で行われた牌
譜のデータが全て公開され
ている。
 無料の専用ブラウザによって
基本的な牌譜データの処理
が簡単に行える。(シャン...
牌譜のダウンロード
(クソ真面目に自分でやりたい人用。実際に牌譜解析したい人がいれば僕に言ってく
れれば普通にあげるのでこのへんは面倒なので読み飛ばしてください)
 公式サイトの上のメ
ニューの、「ランキング」
>「ログ」 からいけます。
実は結構面倒
 解凍してみると得ら
れるのはgzipファイ
ルで圧縮されたhtm
lファイルで・・
まだまだ続く・・
そのうちひとつを解凍してhtmlを開いてみると、過去の牌譜の観
戦用URLが大量に並べてある。
まだまだ・・
 さっきのは観戦用URLなので、
 牌譜IDをコピーして実際にデータある場所にアクセスする
↓この部分に牌譜ID
「http://tenhou.net/0/log/?2014060122gm-00b9-0000-
81b927...
やっと
すると牌譜のデータが書かれたXMLファイルがダウンロードできた!
最終的に・・
 得られたXMLファイルを専用ブラウザで扱うことができる
ようにするために、それ用の「mjlogファイル」にします。
 mjlogファイルは、XMLファイルをgz圧縮したものです。
 ですから、gz圧縮した後に拡張子をmjl...
しかしこれ全部を手動でやろうとすると・・・
 一生終わらないで挫折します
 gzipを解凍する
 htmlの中の牌譜IDを正規表現で読み取る
 XMLのデータにアクセスしてダウンロード
 gzに圧縮してmjlogに変換
これらの動作をプログラムで書いて自動で処理してもらおう。
また、mjlogファイルの保存場...
専用ブラウザ
 公式サイトから無料でダ
ウンロードできます。
 プレイするために使うにも、
右クリックパスなど色々な
機能がついててお得で
す。
 ですがこれの本領は
mjlogファイルの様々な
処理が超簡単にできるこ
とです。(パースと...
専用ブラウザDL
 ここからDLできます。
専用ブラウザの仕組み
(マニュアルとか説明は公式に全然ないので、サンプルコードから自ら試行錯
誤で学んでいくしか無いです・・
 自分で書いたhtmlをこの専用ブラウザで開くことで、実行す
ることができる。実際の処理を書くのはもちろんjs
 ...
解析の基本
 解析するためのおまじない↓
(実際にただ解析したいだけの人はいみわからなくていい)
var we=window.external;
logana=we.mjCommand("CREATEINSTANCE::LOGANA1.0")...
イベントハンドラ各種(大枠編)
 OnAnalyzeBegin() //一番大枠の初期化処理
これから大量の牌譜ファイルを解析する前に、一度だけ最初に実行される関数。
初期化処理などを書いておける。
 OnEnumLog(loginfo)/...
イベントハンドラ(ゲーム中編)
 OnTsumo(who,hai136,tehai)
ツモが発生するたびに実行される(上がりのツモではなく、毎回行わ
れるツモという行為全て)
 OnDahai(who,hai136,tehai)
打牌が行わ...
実際の検証結果など
とりあえず簡単に、リーチの平均点とノー和了ノー放銃の順位分布
を出してみました。実際にコードを見れば色々わかりやすいと思い
ます。ソースコードはここにあります↓
https://gist.github.com/Restar9...
先制リーチの平均点
 リーチの平均点については常に研究されていて、子→約60
00点、親→約8700点であることが知られていますが、追っ
かけリーチを除いた先制リーチの平均点はどうなのか調べて
みました。
 データ元は鳳凰卓2011年~20...
リーチの平均点 考察
 先制か先制じゃないかで点数は少し変わる。
 放銃時の点数だけに絞ると結構変わる(一般的に有名)
 ドラの見えてる枚数などでも変わる
 以上より、色々条件を絞ることで平均点も変わってくるの
で、実戦的にはよくある状...
ノー和了ノー放銃の順位分布
 放銃率はかなり成績に影響しやすいと言われてますが、
果たして降りまくって和了もしなかった場合順位分布はど
うなるのでしょうか?
 データ元は同じく鳳凰卓2011年~2012年の二年分で
す。
(reachAve...
ノー和了ノー放銃の順位分布 考察
 東南戦でノー和了、テンパイ料だけでトップは取るのは
役満より難しい
 東風戦なら行けるのかと思ったら、実は流し満貫ばっか
りだった(流し満貫は天鳳では流局扱いなため)
 でも東南戦でも一度だけならテンパ...
最後に
(とりあえず今回はここまで)
 このスライドを見てもらえばだいたい牌譜解析はだれで
もできると思いますが、細かい部分をすべて書くのは大
変だったので省略してる部分も多いです。なのでわから
ない部分があれば是非僕に直接聞いてください。(...
Upcoming SlideShare
Loading in …5
×

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

8,724 views

Published on

天鳳牌譜解析のやり方を、簡単にまとめました。
興味のある人は是非実践してみてください。

また、牌譜解析を行うにあたって、以下のサイトは非常に参考になりました。ありがとうございました。
http://enecre.blog86.fc2.com/(enecre38さん)
http://ameblo.jp/modern-mahjong-theory/(タマネさん)

Published in: Science
  • Be the first to comment

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

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

×