tomohxxの日記

麻雀プログラミング

一人麻雀における和了確率を書き下す(1)

はじめに

ここでは一人麻雀における和了確率を扱います。このテーマでよく見かけるのは、聴牌している手があってその有効牌の枚数を a枚、壁牌の枚数を S枚としたときに t巡以内に和了する確率が \displaystyle{1-\frac{_{S-a}C_t}{_SC_t}}で表せるというものですね。では一向聴の手が和了する確率はどのように表せるでしょうか?これは総和と組合せを使えば表せますが単純な形ではありません。ちなみに数値的に解く方法についてはこちらを読んでください。

tomohxx.github.io

聴牌形の和了確率

なぜ単純な形にならないかと言うと自摸が非復元抽出だからです。逆に言えば復元抽出、あるいは巡目が壁牌の枚数に対して無視できるほど小さいという仮定を設定すれば和了確率を単純な形で書くことができます。まずは聴牌形の場合で和了確率がどのように表せるのか確認してみましょう。聴牌形で復元抽出を仮定すると和了確率は \displaystyle{1-\left( 1-\frac{a}{S} \right)^t}となります。非復元抽出の場合と比較して簡単になりましたね。

一向聴形の和了確率

次に本題の一向聴の手を扱います。一向聴の手があって聴牌するのに必要な牌の枚数を a枚、聴牌してから和了するのに必要な牌の枚数を b枚とします。例えば両面-両面一向聴牌の手では a=8, b=4となります。 t巡目に一向聴である確率を p^O_t聴牌である確率を p^A_t和了である確率を p^B_tとすると、これらは以下の連立確率漸化式で表せます。


\left\{
\begin{aligned}
p^O_{t+1} &= \left( 1- \frac{a}{S} \right) p^O_t & p^O_0 &= 1 & (1) \\
p^A_{t+1} &= \left( 1- \frac{b}{S} \right) p^A_t + \frac{a}{S} p^O_t & p^A_0 &= 0 & (2) \\
p^B_{t+1} &= \frac{b}{S} p^A_t + p^B_t & p^B_0 &= 0 & (3)
\end{aligned}
\right.

ここで \displaystyle{q^O_t = \frac{ab}{S^2} p^O_t, q^A_t = \frac{b}{S} p^A_t, \alpha = 1-\frac{a}{S}, \beta = 1-\frac{b}{S}}とすると、


\left\{
\begin{aligned}
q^O_{t+1} &= \alpha q^O_t & q^O_0 &= \frac{ab}{S^2} & (4) \\
q^A_{t+1} &= \beta q^A_t + q^O_t & q^A_0 &= 0 & (5) \\
p^B_{t+1} &= q^A_t + p^B_t & p^B_0 &= 0 & (6)
\end{aligned}
\right.

となります。(6)式を形式的に解くと

 \displaystyle{
p^B_t = \sum_{u=0}^{t-1} q^A_u \qquad (t \ge 1) \tag{7}
}

となるので q^A_tを求めることにします。(5)式より q^O_t = q^A_{t+1} - \beta q^A_tですがこれを(4)式に代入すると q^A_tについての隣接三項間漸化式が得られます。後は定石に沿って計算するだけです。なお \alpha \neq \betaの場合と \alpha = \betaの場合で分けて考えなければなりません。現実的に後者の場合はありえないのですが一応計算することにします。

 \alpha \neq \betaの場合

(4)式と(5)式より


\begin{eqnarray}
q^A_{t+2} - \beta q^A_{t+1} = \alpha (q^A_{t+1} - \beta q^A_t)   \tag{8} \\
q^A_{t+2} - \alpha q^A_{t+1} = \beta (q^A_{t+1} - \alpha q^A_t) \tag{9}
\end{eqnarray}

が得られます。これらを解くと


\begin{eqnarray}
q^A_{t+1} - \beta q^A_t = \alpha^t (q^A_1 - \beta q^A_0) = \alpha^t q^A_1 \tag{10} \\
q^A_{t+1} - \alpha q^A_t = \beta^t (q^A_1 - \alpha q^A_0) = \beta^t q^A_1 \tag{11}
\end{eqnarray}

となります。(10)式から(11)式を辺々引きます。


(\alpha - \beta) q^A_t = (\alpha^t - \beta^t) q^A_1 \tag{12}

整理して

 \displaystyle{
q^A_t = \frac{\alpha^t - \beta^t}{\alpha - \beta} q^A_1 \tag{13}
}

が得られます。これを(7)式に代入して計算すると

 \displaystyle{
p^B_t = \frac{q^A_1}{\alpha - \beta} \left( \frac{1-\alpha^t}{1-\alpha} - \frac{1-\beta^t}{1-\beta} \right) \tag{14}
}

となります。なお(14)式では p^B_0 = 0となるので tの範囲の制限を削除しました。

最後に q^A_1を計算します。

 \displaystyle{
q^A_1 = q^0_0 = \frac{ab}{S^2} = (\alpha - 1)(\beta - 1) \tag{15}
}

よって求める解は

 \displaystyle{
p^B_t = \frac{(\alpha - 1)(\beta - 1)}{\alpha - \beta} \left( \frac{1-\alpha^t}{1-\alpha} - \frac{1-\beta^t}{1-\beta} \right) \tag{16}
}

です。

 \alpha = \betaの場合

(4)式と(5)式より


q^A_{t+2} - \alpha q^A_{t+1} = \alpha (q^A_{t+1} - \alpha q^A_t)   \tag{17}

が得られます。これを解くと


q^A_{t+1} - \alpha q^A_t = \alpha^t (q^A_1 - \alpha q^A_0) = \alpha^t q^A_1 \tag{18}

となります。両辺を \alpha^{t+1}で割ります。

 \displaystyle{
\frac{q^A_{t+1}}{\alpha^{t+1}} - \frac{q^A_t}{\alpha^t} = \frac{q^A_1}{\alpha} \tag{19}
}

 \displaystyle{r_t = \frac{q^A_t}{\alpha^t}}とおくと

 \displaystyle{
r_{t+1} - r_t = \frac{q^A_1}{\alpha} \tag{20}
}

のように等差数列の形式に変形できます。これを解くと


\begin{aligned}
r_t &= r_0 + \sum_{u=0}^{t-1} \frac{q^A_1}{\alpha} \\
&= q^A_0 + \frac{q^A_1}{\alpha} t \\
&= \frac{q^A_1}{\alpha} t
\end{aligned}
\tag{21}

となります。 r_t q^A_tに戻します。


q^A_t = q^A_1 \alpha^{t-1} t = (\alpha-1)^2 \alpha^{t-1} t \tag{22}

これを(7)式に代入して計算すると


p^B_t = 1-\alpha^{t-1}-\alpha^{t-1} (1-\alpha) (t-1) \tag{23}

となります。なお(23)式では p^B_0 = 0となるので tの範囲の制限を削除しました。

まとめ

 q^B_t = f(t; a, b) = F(t; \alpha, \beta)とすると


F(t; \alpha, \beta) = \left\{
\begin{aligned}
& \frac{(\alpha - 1)(\beta - 1)}{\alpha - \beta} \left( \frac{1-\alpha^t}{1-\alpha} - \frac{1-\beta^t}{1-\beta} \right) & (\alpha \neq \beta) \\
& 1-\alpha^{t-1}-\alpha^{t-1} (1-\alpha) (t-1) & (\alpha = \beta)
\end{aligned}
\right.
\tag{24}

と表せます。

補足A: 対称性

 q^A_t p^B_t a, bの入れ替えても同じ値をとります。つまり


\begin{eqnarray}
f(t; a, b) &= f(t; b, a) \tag{25} \\
F(t; \alpha, \beta) &= F(t; \beta, \alpha) \tag{26}
\end{eqnarray}

が成り立ちます。これは q^A_0, q^A_1および(8)式が a, bについての対称式であるので数学的帰納法より証明できます。

補足B: 誤差

復元抽出を仮定した場合の和了確率を非復元抽出を仮定した場合の近似ととらえたときの誤差を図示しました。 S=123, a=8, b=4とした場合 t=18で約2%の誤差が出るようです。なお復元抽出の場合の和了確率は 1+0.9350^t-2 \cdot 0.9675^tです。

f:id:tomohxx:20210806215433p:plain
誤差

補足C: 分岐

有効牌の枚数の変化が一通りでないとき、例えば23m13pのような両面-嵌張一向聴の手の和了確率は以下のように表せます。

 \displaystyle{
\frac{2}{3} f(t; 12, 4) + \frac{1}{3} f(t; 12, 8) \tag{27}
}

この辺の説明については前述のページを見てください。

tomohxx.github.io

 f(t; 12, 8) > f(t; 12, 4)なので両面-嵌張は両面-両面よりも和了確率が小さいことを解析的に示せます。

おわりに

一人麻雀における和了確率を計算してみました。なかなか手順が多くて大変かもしれないですが、数値計算でなくて手計算できるということをアピールしておきたいです。