麻雀 傑作「何切る」300選 からの出題。*1
ドラ
から何を切るか?
打 か
でテンパイだが、三色、一通の可能性を残し、打
でテンパイとらずが正解のようだ。今回はこのシャンテン戻しについて検討する。
麻雀の打牌選択アルゴリズム(4) - koba::blog、麻雀の打牌選択アルゴリズム(5) - koba::blog のアルゴリズムにしたがえば、打 もしくは
の評価値は以下となる。
No | 聴牌形 | 待ち | 枚数 | 打点 | 評価値 |
---|---|---|---|---|---|
1 | ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() | ![]() | 1 | 2000 | 6,000 |
![]() | 2 | 2000 |
一方、打 とした場合の聴牌形とその評価値は以下となる。
No | ツモ | 枚数 | 打牌 | 聴牌形 | 待ち | 枚数 | 打点 | 評価値 |
---|---|---|---|---|---|---|---|---|
1 | ![]() | 3 | ![]() | ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() | ![]() | 2 | 2000 | 8,000 |
![]() | 2 | 2000 | ||||||
2 | ![]() | 3 | ![]() | ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() | ![]() | 3 | 2000 | 6,000 |
3 | ![]() | 3 | ![]() | ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() | ![]() | 3 | 2700 | 21,400 |
![]() | 1 | 5200 | ||||||
![]() | 3 | 2700 | ||||||
4 | ![]() | 3 | ![]() | ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() | ![]() | 2 | 2000 | 8,000 |
![]() | 2 | 2000 | ||||||
5 | ![]() | 1 | ![]() | ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() | ![]() | 3 | 5200 | 63,600 |
![]() | 4 | 12000 | ||||||
![]() | 3 | ![]() | ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() | ![]() | 3 | 2700 | 40,100 | |
![]() | 4 | 8000 | ||||||
6 | ![]() | 4 | ![]() | ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() | ![]() | 1 | 8000 | 31,700 |
![]() | 3 | 7900 | ||||||
7 | ![]() | 4 | ![]() | ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() | ![]() | 4 | 7900 | 31,600 |
8 | ![]() | 4 | ![]() | ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() | ![]() | 4 | 8000 | 52,800 |
![]() | 4 | 5200 | ||||||
9 | ![]() | 1 | ![]() | ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() | ![]() | 0 | 2000 | 4,000 |
![]() | 2 | 2000 | ||||||
10 | ![]() | 4 | ![]() | ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() | ![]() | 4 | 5200 | 44,400 |
![]() | 1 | 8000 | ||||||
![]() | 3 | 5200 | ||||||
11 | ![]() | 1 | ![]() | ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() | ![]() | 4 | 7900 | 31,600 |
![]() | 3 | ![]() | ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() | ![]() | 4 | 4000 | 16,000 | |
12 | ![]() | 2 | ![]() | ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() | ![]() | 3 | 2000 | 12,000 |
![]() | 3 | 2000 |
(赤牌を区別しなければ)12種39枚で再度テンパイとなり、ツモ と
の引き戻し以外で元の評価値を上回る聴牌形となる。テンパイとらずが有利なことは自明と思えるが、プログラム化するためには数値で比較する必要がある。
評価値の正規化
現在の評価値計算方法は単純に
- (評価値 × 待ち枚数)の総和
を再帰的に繰り返しているため、テンパイから遠い(向聴数が大きい)ほど評価値が大きくなってしまう。これでは異なる向聴数の牌姿の善し悪しを比較できない。「待ち枚数」の部分を「ツモる確率」とすれば評価値は期待値と等価となるが、正確な確率を求めるのは難しい*2ため、適当な数値で除算し正規化することとした。具体的には、
- 0向聴(テンパイ)
- 12 で除算
- 1向聴
- 12 × 6 (= 72)で除算
- 2向聴
- 12 × 6 × 3 (= 216)で除算
としてみた*3。この方法で計算すると、冒頭の牌姿では打 は評価値 500、打
は 1231.13 となる。
これで異なる向聴数であっても牌姿が比較できるようになったので、1向聴以降についてシャンテン戻しを仮実装した。
ただしこの方法には問題があることが分かっているので、次回改善する。
*1:すでに続編の 麻雀 定石「何切る」301選 が出ているが、中国では手に入らぬ😢
*2:巡目によって確率は変わるし、そもそも何巡目以内にツモる確率を求めればよいのか
*3:各向聴数ごとの待ち枚数を考慮はしたが、具体的な数値に根拠はない😁