概要
麻雀の何切る問題において、打牌の受け入れ枚数、聴牌確率、和了確率、期待値を計算するアプリ「麻雀何切るシミュレーター」について紹介します。
麻雀何切るシミュレーター
麻雀何切るシミュレーター は、手牌を入力すると、以下の情報を計算するアプリです。
- 手牌が13枚の場合は、有効牌を表示します。
- 手牌が14枚の場合は、各打牌の受け入れ枚数、点数期待値、和了確率、聴牌確率を表示します。(4向聴以上の場合は受け入れ枚数のみ)
対応している機能
- 場風、自風、ドラ、槓ドラ、赤ドラ対応、副露した手牌を設定できます。
- 向聴戻し、手変わり、ダブル立直、一発、海底撈月、裏ドラの考慮の有無を設定できます。
- テキスト形式で結果をコピーできます。
- 一般手、七対子手、国士無双手に対応しています。
- 打ち筋を期待値最大化、または和了確率最大化から設定できます。

4向聴以上の手牌の場合、計算量が膨大になり、数秒以内に計算するのが困難であるため、受け入れ枚数のみ表示します。 4向聴以上の場合は、期待値に基づく打牌を行えなくても、孤立字牌など明らかに不要な牌を整理している段階であるため、実用上はさほど困らないかと思います。
免責事項
- プログラムは開発中であり、不具合がある可能性があります。
- アプリが示す上位の打牌が実戦において必ずしも正着であるとは限りません。あくまで参考程度に活用ください。
- 期待値の計算方法については記事 麻雀における期待値の計算方法 を参照ください。
- ご意見や不具合報告がありましたら、こちらの記事のコメント欄か、GitHub のレポジトリ mahjong-cpp の issue にコメントしてください。
何切る問題の例
ネット上で見つけた何切る問題に関して、このアプリで期待値を計算した例を紹介します。計算結果は期待値が高い順に上位の打牌を載せました。
12577m222468p445s (2向聴)
場風牌: 東, 自風牌: 東, 1巡目, 手牌の種類: 一般手, ドラ: [南]

引用元: 現代麻雀技術論 – 牌効率論26.断ヤオ九
シャンテン戻しになってもタンヤオ確定なら孤立3~7>ペンチャン。
計算結果
向聴戻しになりますが、断么九を確定させる 12m 辺張落としが良さそうです。
2345m113479p6778s (2向聴)
場風牌: 東, 自風牌: 東, 1巡目, 手牌の種類: 一般手, ドラ: [南]

引用元: 現代麻雀技術論 – 牌効率論56.2シャンテン戻し
2シャンテン戻しのパターン 優良孤立牌(4連形、中膨れ)×2
計算結果
向聴戻しになりますが、79p 嵌張落としで 2345m、6778s のくっつき狙いが良さそうです。
133789m77p3378s北北 (2向聴)
場風牌: 東, 自風牌: 東, 1巡目, 手牌の種類: 一般手, ドラ: [南]

計算結果
7p または 3s のどちらでも良さそうです。
344678m5r5789p125s (1向聴)
場風牌: 東, 自風牌: 東, 1巡目, 手牌の種類: 一般手, ドラ: [四索]

引用元: No.19851の集計結果 – 麻雀で何切る!?
4m: 48票、1s: 29票、5s: 19票、2s: 14票
計算結果
12s の辺張落としがよいという結果になりました。
79m445789p3489s西西 (2向聴)
場風牌: 東, 自風牌: 東, 1巡目, 手牌の種類: 一般手, ドラ: [七萬]

引用元: 問題No5520の集計結果 – 阿知賀女子学院の「何切る?」
1位: 4p、2位: 5p、3位: 西
計算結果
4p を切って、三色を狙いましょう。
233m34568p223789s (1向聴)
場風牌: 東, 自風牌: 東, 1巡目, 手牌の種類: 一般手, ドラ: [七萬]

計算結果
私は頭固定はしないで 2s か 3m 切りかなと思ったのですが、コンピューターの計算結果によると、向聴戻しの 8p 切りで受け入れを増やすのがよいという結果になりました。気になったので 一人麻雀練習機 のほうでも計算してみましたが、同じく 8p 切りの期待値が一番高くなりました。

666778m677p66778s (1向聴)
場風牌: 東, 自風牌: 東, 1巡目, 手牌の種類: 一般手, ドラ: [六筒]

計算結果
7m または 7p 切りで三色を狙いましょう。
まとめ
概ね、人間が考える打牌と同じ結果がコンピューターの計算でも得られることが確認できました。
コメント
コメント一覧 (123件)
便利なツールを公開していただきありがとうございます。
残り枚数が減った状態のシミュレーションをしたいのですが、可能でしょうか?
To: YYさん
コメントありがとうございます。
現在は手牌やドラ表示牌に使われている牌以外の牌はすべて牌が残っているものとして計算しており、個別に残り枚数を設定する機能はありません。
残り牌を個別に設定する機能追加は、計算シミュレーター側の対応は容易ですが、34種類の残り枚数の入力フォームを Web ページの用意する必要があるので、スペース的に難しいかもしれません。
別画面で残り枚数の設定画面を表示できるようにするなど、対応を検討したいと思います。
バージョン 0.9.0 (2021/11/07) にて残り牌の設定機能を追加しました
素早い対応ありがとうございます!
気になる解析があったので報告させていただきます。
1112456788999m西の手牌(東場の東家で3巡目、ドラ東の設定です)
上記の九蓮宝燈テンパイの牌姿で、8m切りが最も期待値が高い結果となりました。
しかし、西をピンズやソーズの数牌に変えるとその牌切りが最も期待値が高くなります。
西に限らず残りの1牌を字牌に設定すると同じ解析結果となります。
バグのような気がしますので、お時間あります時に調査いただけますでしょうか?
コメントありがとうございます。
現象を確認しました。数牌にした場合も2番の打8mと期待値の差があまりなく、明らかに不自然なので、バグだと思います。
調査させていただきますので、原因がわかりましたら、ソフトウェアのほうを更新します。
issue に登録しました
https://github.com/nekobean/mahjong-cpp/issues/19
いつもシミュレータにはお世話になっております。
シミュレータの結果について気になる点がありました。
考慮項目の手変わりをありにする場合となしにする場合で、
ありにした方が和了率や期待値が下がる場合がありました。
(12577m222468p445sの打5mなど)
本来であれば選択肢が増える分期待値は上がるものと
思われますので、ご調査いただけないでしょうか。
コメントしていただきありがとうございます。
時々不自然な結果が出ることがあるので、シミュレーションのアルゴリズムになんらか不具合が残っているのかもしれません。年明けになると思いますが、調査します。
issue に登録しました
https://github.com/nekobean/mahjong-cpp/issues/18
いつもお世話になっております。
1233467m3p234789s ドラ表3p
1233467m3p234789s ドラ表(適当な字牌)
この比較をしたとき、なぜか3p切りの期待値が激変していました。
どちらも3p切りの場合ドラ受け入れがなくなるので期待値が大きく変動する要素はないはずなのに、気になります。
調査いただけませんでしょうか?
コメントありがとうございます。
教えていただいた手牌ですが、ドラ表東 (ドラ南)、ドラ表3p (ドラ4p) いずれの場合も打 3p は以下の結果になり、期待値は変化しなかったため、コメントしていただいた 3p の期待値が変化するという事象が確認できませんでした。なにか勘違いをしていたら、すみません。
東一局0本場 東家 3巡目
1233467m3p234789s 1向聴
打: 三筒, 受入枚数: 8種25枚, 有効牌: 12345678m
期待値: 3061点, 和了確率: 47.14%, 聴牌確率: 97.45%
Hello, thank you for your hard work on this software.
I would like to report a result that seems wrong.
It’s very weird that discarding 8p (1740点) is given much higher expected value than 9p (1383点) in this problem:
## 場況
東一局0本場 東家 3巡目 ドラ: 南
33789m35689p2334s 1向聴 (一般手: 1向聴 七対子: 4向聴 国士無双: 11向聴)
## 計算結果
打: 八筒, 受入枚数: 15種49枚, 有効牌: 3m123456789p12345s (向聴戻し)
期待値: 1740点, 和了確率: 25.56%, 聴牌確率: 77.21%
打: 九筒, 受入枚数: 2種8枚, 有効牌: 47p
期待値: 1383点, 和了確率: 22.57%, 聴牌確率: 72.81%
Thank you for reporting the problem. I agree with your comment. There seems to be a bug in this software. I will fix this issue, but it may take some time.
For reference, I list the results of similar software.
discard_tile expected_score_value win_probability
9p 955.46 31.77%
8p 950.04 .30.98%
ref. http://critter.sakura.ne.jp/agari_keisan.html ツモアガリ確率計算機 (tumo probability calculator)
discard_tile expected_score_value win_probability
9p 2067.54 31.59%
8p 2045.65 30.92 %
ref. http://ara.moo.jp/mjhmr/ 一人麻雀練習機 (single player mahjong trainer)
issue に登録しました
https://github.com/nekobean/mahjong-cpp/issues/16
いつもこのシミュレーターにお世話になっております。
同じ牌を4つ含む牌姿で七対子手の検索をかけたら結果が表示されませんでした。仕様でしょうか?
追記です。
色々な牌姿で調べたところ、必ずしも結果が表示されないわけではなく
5種類が対子以上になっている七対子一向聴で同じ牌を4枚にすると結果が表示されないようでした。
一例は
5566m233799p北北北北 (一択何切るというアプリより)
北を2枚にして他の牌を4枚にしても同じく結果が表示されませんでした。
コメントありがとうございます。
同種の4枚の字牌がある手牌において、向聴数計算のアルゴリズムに不具合があるため、正しい結果が表示されないものと思われます。
多くの手牌ではこの問題が影響することは少ないと思いますが、今後修正したいと考えています。
issue に登録しました
https://github.com/nekobean/mahjong-cpp/issues/17
非常に有用なツールで学習に役立っております。ありがとうございます。
ひとつ要望なのですが、テキスト・天鳳形式(234m055p55zのような形式)での出力だけではなく、この形式での手牌入力にも対応していただけないでしょうか。
手元に自分が悩んだ牌姿をこの書き方でメモしてあるので、入力もできるとたいへん助かります。
利用していただきありがとうございます。
期間をいただくかもしれませんが、天鳳形式の入力について将来的に対応したいと思います。
ドラ1p、3巡目、556m1224p1456789s
の牌姿ですが1s切りの期待値、あがり率が異様に低いです。
見ると受け入れ枚数は3p一種になっていますが3p引いたときに6m切ってのリーチする想定になっていませんか?
https://pbs.twimg.com/media/FUF4ldDaIAASkEn?format=jpg&name=large
https://pbs.twimg.com/media/FUFzMSMaMAAd26K?format=jpg&name=large
コメントありがとうございます。
ご指摘いただいた手牌について調査します。しばらくお時間をいただくかもしれません。
issue に登録しました しばらくお時間いただくかもしれませんが、調査します
https://github.com/nekobean/mahjong-cpp/issues/14