ツモアガリ確率計算機概要

はじめに

このページではツモアガリ確率計算機の計算手法について説明します。 正直ネット上に同じ情報は存在するような気がするのですが、自分が作っているときにはあまりそういうものがなかったので、書いておこうと思います。 (おそらく、あらさんが用いた手法と似たようなことをやっているはずですが、麻雀研究所サイトが見れなくなってしまっているので同一かどうかはよくわかりません。) ここに書いてあることは、だいたい高校の数ⅡBあたりまでの知識でわかると思います。

計算方法

「一人麻雀」という言葉がどの程度認知されているのかわかりませんが、大前提としてある手牌(13枚)に関して、18枚のツモだけが許されている状態でアガリ確率を計算する問題を考えます。 この問題、もし許されたツモが1枚だけだったらすぐに計算できますよね? アガリ確率は、テンパイ形であれば待ち牌の枚数を見えていない牌の数で割ればよいですし(テンパイ形でなければ明らかに0)、アガリの点数をかければ点数期待値も求まります。 では、18枚ならどうでしょうか。 ある手牌Aに関して残りツモが18枚のときの確率(これを\(a(18)\)とする)を計算する問題は、手牌Aから1枚牌を交換して実現できる全ての手牌に対して残りツモ17枚の確率がわかれば解くことができます (期待値も以下の説明の「確率」を「期待値」で置き換えれば同じように計算可能です)。 要するに \begin{eqnarray} a(18) &=& 1mをツモる確率 \times 1mツモで実現できる手牌の残りツモ17枚の確率の最大値 \notag \\ &+& 2mをツモる確率 \times 2mツモで実現できる手牌の残りツモ17枚の確率の最大値 \notag \\ &+& \cdots \end{eqnarray} となるわけです。 右辺は言葉で書くと理解しにくいですが、例えば手牌Aから1mをツモって実現できる手牌がAの他にB,Cであるなら、「1mツモで実現できる手牌の残りツモ17枚の確率の最大値」とは、a(17),b(17),c(17)の最大値のことです。 このことを一般化すれば、想定される全ての手牌A,B,C...に対してa(t),b(t),c(t)...がわかるならa(t+1),b(t+1),c(t+1)...を計算することができます。 そして、上にも書いたとおりa(1),b(1),c(1)...はすぐにわかります。 これはいわゆる連立漸化式というやつ(最大のものを選ぶという操作があるので、高校で習うものとは若干違います)で、これを1から18まで計算すれば求めたい確率を計算することができるでしょう。

しかし、これをそのまま実装しようとすると、麻雀のあらゆる手牌についての確率を知る必要が出てきます。 こちらのサイトによれば、手牌としてあり得るのは1000億程度なので、1000億次元連立漸化式を1から18まで解けば、 一人麻雀の解としては文句無いですがさすがに数が多すぎます。 そこで、この計算機では手牌を限定した中で連立漸化式を計算しています。 具体的には、探索範囲として「シャンテン数+0枚交換」を選ぶと、「現在の手牌からシャンテン数と同じ枚数だけ牌を交換することで実現可能な全てのテンパイ形とその途中の状態として想定される手牌」 に限定した連立漸化式を計算します。例えば、123456m234p1379sという手牌は1シャンテンで探索範囲は1枚か2枚を選択できるようになっています。 123456m234p3367sのような手配は先に述べた手牌から牌を2枚交換する必要があるので、「シャンテン数+1枚交換」を選んだ時のみ探索範囲に含まれます。 より麻雀らしい表現で言うと、「シャンテン数+1枚交換」を選択した場合1枚の手代わりを考慮した計算が成されます。 計算時間の都合上、「シャンテン数+2枚交換」は実装していませんが、「14枚の手牌から1枚不要な牌を選ぶ」という問題を考える程度であれば「シャンテン数+1枚交換」でそこそこまともな結果が得られるのではないでしょうか。

ベンチマーク

アルゴリズムはだいたい似たようなものだと思いますが、あらさんの一人麻雀練習機の何切る(手替わり)と今回作った計算機のシャンテン数+1枚交換を選択した場合の結果を載せておきます。 ベンチマーク1a

ベンチマーク1c
上のがあらさんの一人麻雀練習機の結果で、下のが自分の結果です。 こうして見ると、自分の方が少しアガリ確率が低いような気がします(最大3%程度)。 探索手牌数がこちらのものがあらさんのものより少ないことが関係しているのでしょうか。 ただ、残り4順での確率の時点ですでにあらさんの方が高いので、ツモ確率の定義の違いによっている気もします。 計算時間がだいぶ違いますが、アルゴリズムの違いかあらさんが製作されていたころからコンパイラの性能があがったのか、そのあたりはよくわからないです。

HOME