新しい点数計算方法を考える①

2020年3月22日

綾目麻雀の点数計算式

現在の麻雀の点数計算方法は複雑です。綾目麻雀において、それは改良されており、次の2つの式で表すことができます。

点数 = ⌊翻数 + 1⌋⌈翻数 + 1⌉ × (プレーヤー数 - 1) × 100 (役満と9翻以上を除く)
点数 = (プレーヤー数 - 1) × 10000 (役満と9翻以上の場合)

ここで⌊x⌋は床関数で、小数第1位で切り捨てる計算をします。反対に⌈x⌉は天井関数で、小数第1位で切り上げる計算をします。

翻数は0.5単位、1翻縛りのため最小値は1翻です。役満と9翻以上で点数は同じ。

今後のために、点数を\(p\)、翻数を\(x\)、プレイヤー数を\(n\)と置くことにします。役満と9翻以上を区別せずいずれも\(x = 9\)とみなすことにすると、\(p\)は次のように表現することができます。

綾目麻雀の点数計算式

$$p= 100 (n – 1) \lfloor x + 1 \rfloor \lceil x + 1 \rceil \tag{1} $$

この点数計算式を導いた過程を一つずつ見ていきましょう。

最もシンプルな点数計算方法は?

まずは、最もシンプルな計算式を考えてみましょう。

符は複雑になるので廃止します(以降も同様)。さて、翻数だけで点数を求めるとしたらどのような式が最もシンプルでしょうか? おそらくきっと誰もが次の式を思い浮かべるでしょう。

$$p = x \tag{2} $$

翻数をそのまま点数とするだけ! 簡単です。

ではどうして現在の麻雀は点数計算にこの式を用いないのでしょうか。

倍々計算はより高い翻数の上がり形を作る強い誘因となる

大まかに言って、現在の麻雀の点数計算方法は倍々計算です。より作るのが難しい待ちや面子、字牌が複合して上がると符は倍々に増えていきます。また、 同じ合計翻数なら複数回に分けて上がるよりも、1回で上がったほうが合計点数が高くなります。倍々計算は符においては難しいアガリ形を作ることへの、翻においては役を複合させることへの強い誘因となっています。最もシンプルな(2)式はこの誘因がないため用いられていないと考えられます。

倍々計算の考えを元に作られたのが次の(3)式です。

$$p = 2^{x – 1} \tag{3} $$

指数部が\(x\)ではなく\(x – 1\)となっているのは、1翻のときに1点となるよう調整したためです。

この式を麻雀の点数計算式として用いるには大いなる問題があります。

点数計算に指数関数は「強すぎ」る

(3)式を見ての通り、\(p\)は\(x\)の指数関数となっています。一方(2)式では、\(p\)は\(x\)に比例する関数となっています。

それぞれの\(p\)を1から13までの翻数でグラフ化したのが次の図です。

比例と指数関数

比例のほうは指数関数に比べ、値が小さすぎるため翻数の軸にへばりついています。また、13翻では約300倍もの差があります。変数が1つ大きくなると指数関数は比例に比べ圧倒的に大きくなる、いわば、とても「強い」関数なのです。

したがって、点数計算式に指数関数を用いることは、高い翻数の上がり形を作ることへの非常に強い誘因となります。

例えば6翻32点は1翻1点の32倍の点数があります。1翻当たりの獲得点数で考えると、6翻は1翻よりも約5倍効率がよいことになります。これはあまりに強すぎて、低い翻数での点数は無視できるほど大きな差なのです。

現代麻雀における倍々計算の「補正」

さすがにこれではいかん! ということで、現代の麻雀では倍々計算に「補正」が加えられています。

その「補正」とは、簡単に言えば、高い翻数では翻数が増えても点数が増加しない場合を作る、というものです。スケールを揃えるため、現在の麻雀における「補正」後の点数を1000で割って小数第一位で四捨五入した値を次の表に示します。30符、子のロンでの点数とします。

翻数点数
11
22
34
4, 58
6, 7, 812
9, 1016
11, 1224
1332

これを先ほどの比例と指数関数の比較のグラフに当てはめてみましょう。

比例と指数関数と「補正」

図を見て分かることを列挙してみます。

  • 1翻と2翻ではどれも点数が同じ
  • 3翻と4翻では指数関数と「補正」で点数が同じ
  • 縦軸の最大値が「補正」の最大値に近くなるよう表示すると7翻以降の指数関数が見えない
  • 4翻以降では「補正」の点数は比例の点数の2倍くらい

ここでさらに、『「補正」の点数は近似直線でそれなりに表現できるんじゃないか』と思われた方もいるかもしれません。そこで、2つの一次関数をちょうどよさそうな2翻で場合分けして組み合わせた次の関数を一緒にグラフで表現してみます。

\begin{eqnarray}p = \begin{cases}
1 & ( x = 1 ) \\ 2x – 2 & ( x \geq 2)
\end{cases}\tag{4} \end{eqnarray}

指数関数と「補正」と2つの一次関数

(4)式の\(1\to2\)へ変化するときは比例と同じです。2翻以上のときの一次関数は2翻での点\((x, p) = (2, 2)\)を通る傾き\(2\)の直線です。この傾きは翻数が\(2\to3\)へ変化するときの傾きと同じです。

近似のために用いた情報はこれだけなのですが、なんとその2つの一次関数は「補正」の点数と4翻以降で3回も同じ点数となる箇所があります。

実は、倍々計算を「補正」して定められた点数計算方法は、一次関数から定めた点数計算方法と大きくは変わらないのです。

誘因を与えるために現在の麻雀は最初に倍々計算が定められたと考えられていますが、本当にそれが良かったのか、妥当性を検証すべきだと思います。

1翻当たりの点数

点数計算方法において、1翻当たりの点数にも注意しておくべきでしょう。

高い翻数の上がり形への誘因を求めるならば、きっと点数計算式の少なくとも一部は次の「誘因の条件」を満たしているはずです。

誘因の条件

翻数が増加すると1翻当たりの点数も増加すること

なぜこれが誘因の条件かというと、「1翻当たりの点数」を点数取得効率だととらえ、ある翻数で上がれるときにもう1翻複合させるとどのくらいその効率が上がるかを考えたいからです。

それを検討するために、1翻当たりの点数をグラフに示します。

1翻当たりの点数

まず、比例の場合、当然水平な直線が描かれます。これは明らかにいずれの翻数の増加でも誘因の条件を満たしません。

次の指数関数の場合、グラフから線がはみ出していますが、翻数が\(1\to2\)に増加する時を除き、誘因の条件を満たします。

3つ目の「補正」の場合、4翻までは指数関数の場合と同じですが、4翻以降では誘因の条件を満たさない上に、 1翻増加すると1翻当たりの点数が減少してしまう箇所が5箇所もあります。これはもともと「補正」が高い翻数では翻数が増えても点数が増加しない場合を5回作るものでしたから、グラフにせずとも分かることです。

さらにグラフをよく見てみると、4翻から10翻の間はいずれの極大値も4翻の点数を超えていないことがわかります。\(5\to6\) と\(7\to8\) の範囲で誘因の条件の満足は、それぞれ直前の \(4\to5\) と\(6\to7\) における1翻当たりの点数の減少によってもたらされてますから、それぞれで誘因が相殺されているとみなすと、4翻から10翻の間で誘因の影響力は全くないのも同然なのです。

かろうじて\(10\to11\) と\(12\to13\)の間では誘因の条件の満足し、かつその1翻増加によって1翻当たりの点数がそれまでの範囲内で最大値となっています。しかし、どちらも「誘因の一部相殺」がありますし、上がる確率が極めて低い翻数です。

したがって、「補正」の場合、実質的な意味のある誘因を与えているのは翻数が\(2\to3\) と \(3\to4\)に増加するときだけです。

最後に2つの一次関数を用いた場合を見ると、翻数が\(1\to2\)に増加する時を除き、誘因の条件を満たしています。 しかも指数関数のように大きすぎることはなく、「補正」の場合よりもずっと滑らかに変化しています。

適切な点数計算式は…

以上の議論から、 プレイヤーに高い翻数の上がり形を作る誘因を与えたい場合、2つの一次関数を用いた点数計算式を採用するのが適切だ、という結論になりそうです。

これは純麻雀の点数計算式に採用されています。その式を分かりやすく定数倍して示したのが次の(5)式です。

\begin{eqnarray}p = \begin{cases}
0.6 & ( x = 0 ) \\ 1 & ( x = 1 ) \\ 2x – 2 & ( x \geq 2)
\end{cases}\tag{5} \end{eqnarray}

純麻雀は翻がなくても上がることができます。(4)式に例外的な無翻での値を加えたものが(5)式です。

しかしながら、1翻当たり点数の変化量をグラフにして見ていると、2つの一次関数にも気になる点がいくつか出てきます。

1翻当たり点数の変化量(後方差分)
  • 1翻→2翻のときは誘因の条件を満たさない
  • 2翻で場合分けをする合理性がない
  • 2翻→3翻のとき、突出して1翻当たり点数の変化量が大きい
  • 3翻以上では翻数が大きいほど、1翻増加したときの点数の増加量が小さい

これについての考察は次回に…


次回の記事