tomohxxの日記

麻雀プログラミング

天鳳牌譜解析(0) 概要

はじめに

天鳳牌譜解析プログラムを作成したので色々な統計値を計算してみようと思います。

牌譜の入手方法

下記のサイトを参考に牌譜(mjlogファイル)を入手しました。

牌譜解析の方法

牌譜解析には3通りのやり方があるようです。

1. mjlogファイルを解凍し、生成されたXMLファイルをパース・解析する

2. Flash専用ブラウザと自作のスクリプトを使用してmjlogファイルを解析する

3. Flash専用ブラウザを使ってmjlogファイルをtxtファイル(mjscoreのような形式)に変換し、パース・解析する

私は1番目の方法を採用しました。理由は実装言語の制限が緩いためです。2番目の方法はjavascriptで実装する必要があり、3番目の方法はマルチバイト文字(shift-jis)を扱える言語で実装する必要があります。一方で1番目の方法はASCII文字さえ扱えれば良いのです。また1番目と3番目の方法は自力でパースを行うので、正規表現を使える言語を採用すれば実装が容易になります。以上のことから牌譜解析プログラムをC++で実装しました(他の理由としては計算速度が高速なため)。

牌譜の具体的な解析方法については、上記のリンク先のサイトを読めば十分に理解できるので解説しません。

解析に用いる牌譜

2011年から2018年までの天鳳鳳凰卓における東南戦および東風戦の牌譜を入手しました。手始めに試合数と局数を調べてまとめました。

試合数 局数
2011 101042 1092585
2012 117291 1265877
2013 132179 1426162
2014 141578 1524759
2015 152491 1637760
2016 159798 1710645
2017 169422 1808240
2018 173554 1849085
合計 1147355 12315113
試合数 局数
2011 64386 368637
2012 84928 484249
2013 69790 397689
2014 47782 272469
2015 45765 259758
2016 44355 251646
2017 30526 172357
2018 36504 206612
合計 424036 2413417

今後の牌譜解析では2011年から2018年の全ての牌譜を入力ソースにする予定です(あまりにも時間がかかるようなら見直すかも)。

おわりに

今回は牌譜解析の概要だけ説明して、具体的な統計値は後日報告したいと思います。何を解析するのかについては、シャンテン数の正確かつ高速な計算が私の売りなのでシャンテン数や有効牌関係の統計、牌山を絡めた統計などを計算する予定です。