概要
麻雀の何切る問題において、打牌の受け入れ枚数、聴牌確率、和了確率、期待値を計算するアプリ「麻雀何切るシミュレーター」について紹介します。
麻雀何切るシミュレーター
麻雀何切るシミュレーター は、手牌を入力すると、以下の情報を計算するアプリです。
- 手牌が13枚の場合は、有効牌を表示します。
- 手牌が14枚の場合は、各打牌の受け入れ枚数、点数期待値、和了確率、聴牌確率を表示します。(4向聴以上の場合は受け入れ枚数のみ)
対応している機能
- 場風、自風、ドラ、槓ドラ、赤ドラ対応、副露した手牌を設定できます。
- 向聴戻し、手変わり、ダブル立直、一発、海底撈月、裏ドラの考慮の有無を設定できます。
- テキスト形式で結果をコピーできます。
- 一般手、七対子手、国士無双手に対応しています。
- 打ち筋を期待値最大化、または和了確率最大化から設定できます。
4向聴以上の手牌の場合、計算量が膨大になり、数秒以内に計算するのが困難であるため、受け入れ枚数のみ表示します。 4向聴以上の場合は、期待値に基づく打牌を行えなくても、孤立字牌など明らかに不要な牌を整理している段階であるため、実用上はさほど困らないかと思います。
免責事項
- プログラムは開発中であり、不具合がある可能性があります。
- アプリが示す上位の打牌が実戦において必ずしも正着であるとは限りません。あくまで参考程度に活用ください。
- 期待値の計算方法については記事 麻雀における期待値の計算方法 を参照ください。
- ご意見や不具合報告がありましたら、こちらの記事のコメント欄か、GitHub のレポジトリ mahjong-cpp の issue にコメントしてください。
何切る問題の例
ネット上で見つけた何切る問題に関して、このアプリで期待値を計算した例を紹介します。計算結果は期待値が高い順に上位の打牌を載せました。
12577m222468p445s (2向聴)
場風牌: 東, 自風牌: 東, 1巡目, 手牌の種類: 一般手, ドラ: [南]
引用元: 現代麻雀技術論 – 牌効率論26.断ヤオ九
シャンテン戻しになってもタンヤオ確定なら孤立3~7>ペンチャン。
計算結果
打: 一萬, 受け入れ枚数: 23種78枚, 有効牌: [123456789m23456789p234567s] 向聴戻し
期待値: 1696点, 和了確率: 18.46%, 聴牌確率: 70.02%
打: 二萬, 受け入れ枚数: 23種78枚, 有効牌: [123456789m23456789p234567s] 向聴戻し
期待値: 1655点, 和了確率: 17.85%, 聴牌確率: 69.37%
打: 四索, 受け入れ枚数: 5種20枚, 有効牌: [3m57p36s]
期待値: 1466点, 和了確率: 20.87%, 聴牌確率: 72.54%
向聴戻しになりますが、断么九を確定させる 12m 辺張落としが良さそうです。
2345m113479p6778s (2向聴)
場風牌: 東, 自風牌: 東, 1巡目, 手牌の種類: 一般手, ドラ: [南]
引用元: 現代麻雀技術論 – 牌効率論56.2シャンテン戻し
2シャンテン戻しのパターン 優良孤立牌(4連形、中膨れ)×2
計算結果
打: 九筒, 受け入れ枚数: 19種64枚, 有効牌: [1234567m1256789p56789s] 向聴戻し
期待値: 2295点, 和了確率: 36.30%, 聴牌確率: 86.42%
打: 七筒, 受け入れ枚数: 18種60枚, 有効牌: [1234567m125789p56789s] 向聴戻し
期待値: 2180点, 和了確率: 34.65%, 聴牌確率: 85.94%
打: 二萬, 受け入れ枚数: 3種12枚, 有効牌: [258p]
期待値: 2117点, 和了確率: 35.73%, 聴牌確率: 86.97%
向聴戻しになりますが、79p 嵌張落としで 2345m、6778s のくっつき狙いが良さそうです。
133789m77p3378s北北 (2向聴)
場風牌: 東, 自風牌: 東, 1巡目, 手牌の種類: 一般手, ドラ: [南]
計算結果
打: 七筒, 受け入れ枚数: 6種18枚, 有効牌: [23m369s北]
期待値: 1301点, 和了確率: 20.03%, 聴牌確率: 69.68%
打: 三索, 受け入れ枚数: 6種18枚, 有効牌: [23m7p69s北]
期待値: 1299点, 和了確率: 20.01%, 聴牌確率: 69.65%
打: 北, 受け入れ枚数: 6種18枚, 有効牌: [23m7p369s]
期待値: 1200点, 和了確率: 20.22%, 聴牌確率: 70.16%
7p または 3s のどちらでも良さそうです。
344678m5r5789p125s (1向聴)
場風牌: 東, 自風牌: 東, 1巡目, 手牌の種類: 一般手, ドラ: [四索]
引用元: No.19851の集計結果 – 麻雀で何切る!?
4m: 48票、1s: 29票、5s: 19票、2s: 14票
計算結果
打: 一索, 受け入れ枚数: 15種50枚, 有効牌: [1234569m5p1234567s] 向聴戻し
期待値: 3743点, 和了確率: 30.64%, 聴牌確率: 84.71%
打: 二索, 受け入れ枚数: 15種50枚, 有効牌: [1234569m5p1234567s] 向聴戻し
期待値: 3694点, 和了確率: 30.04%, 聴牌確率: 84.71%
打: 四萬, 受け入れ枚数: 3種12枚, 有効牌: [25m3s]
期待値: 3537点, 和了確率: 33.21%, 聴牌確率: 86.33%
12s の辺張落としがよいという結果になりました。
79m445789p3489s西西 (2向聴)
場風牌: 東, 自風牌: 東, 1巡目, 手牌の種類: 一般手, ドラ: [七萬]
引用元: 問題No5520の集計結果 – 阿知賀女子学院の「何切る?」
1位: 4p、2位: 5p、3位: 西
計算結果
打: 四筒, 受け入れ枚数: 6種24枚, 有効牌: [8m36p257s]
期待値: 2689点, 和了確率: 22.30%, 聴牌確率: 73.43%
打: 九索, 受け入れ枚数: 7種24枚, 有効牌: [8m346p25s西]
期待値: 2615点, 和了確率: 26.00%, 聴牌確率: 78.73%
打: 八索, 受け入れ枚数: 7種24枚, 有効牌: [8m346p25s西]
期待値: 2600点, 和了確率: 25.96%, 聴牌確率: 78.68%
4p を切って、三色を狙いましょう。
233m34568p223789s (1向聴)
場風牌: 東, 自風牌: 東, 1巡目, 手牌の種類: 一般手, ドラ: [七萬]
計算結果
打: 八筒, 受け入れ枚数: 18種61枚, 有効牌: [12345m12345678p12345s] 向聴戻し
期待値: 4198点, 和了確率: 41.99%, 聴牌確率: 92.93%
打: 三萬, 受け入れ枚数: 3種12枚, 有効牌: [14m7p]
期待値: 3749点, 和了確率: 37.97%, 聴牌確率: 88.56%
打: 二索, 受け入れ枚数: 3種12枚, 有効牌: [7p14s]
期待値: 3726点, 和了確率: 37.91%, 聴牌確率: 88.65%
私は頭固定はしないで 2s か 3m 切りかなと思ったのですが、コンピューターの計算結果によると、向聴戻しの 8p 切りで受け入れを増やすのがよいという結果になりました。気になったので 一人麻雀練習機 のほうでも計算してみましたが、同じく 8p 切りの期待値が一番高くなりました。
666778m677p66778s (1向聴)
場風牌: 東, 自風牌: 東, 1巡目, 手牌の種類: 一般手, ドラ: [六筒]
計算結果
打: 七筒, 受け入れ枚数: 4種14枚, 有効牌: [58p58s]
期待値: 8550点, 和了確率: 43.29%, 聴牌確率: 89.41%
打: 七萬, 受け入れ枚数: 7種21枚, 有効牌: [69m578p58s]
期待値: 8520点, 和了確率: 44.19%, 聴牌確率: 90.15%
打: 六萬, 受け入れ枚数: 4種14枚, 有効牌: [58m58s]
期待値: 6770点, 和了確率: 44.75%, 聴牌確率: 90.29%
7m または 7p 切りで三色を狙いましょう。
まとめ
概ね、人間が考える打牌と同じ結果がコンピューターの計算でも得られることが確認できました。
コメント
コメント一覧 (102件)
素晴らしいツールをありがとうございます!
いつも使わせてもらっています!
お願いがあるのですが、私はいつも三人打ちを打っているので是非三人麻雀にも対応してほしいのと、七対子との両天秤ができるようにして欲しいです。
よろしくお願いします。
コメントありがとうございます。気づくのが遅れてすみません。
向聴数の計算方法が一般手と七対子手で異なるため、実装上の問題で現在は別々になっているのですが、両方同時に計算できるようには対応したいと考えています。
3麻対応は、萬子2~8がないこと以外は4麻と変わらないので、対応は容易とは思います。
七対子の両天秤を計算できるようにする機能追加と不具合修正が済んで4麻バージョンが完成したら、3麻対応もしたいと思います。
聴牌確率が100%を超えるケースが存在するのはどういうことですか?
そもそもどんな手であれイーシャンテン以下の手が将来的に100%の確率で聴牌するということは直感的に考えてあり得ないと思うのですが
コメントありがとうございます。気づくのが遅れてしまいすみません。
一部の手牌 (例: 2345678m445p123s南) で聴牌率が101%など100%を超えるケースを確認しております。確率計算に1%前後の若干の不具合があるものと思われます。不具合の原因特定が難航しているのですが、分かり次第修正したいと考えています。
他ツール (一人麻雀計算機、ツモアガリ確認計算機) の計算結果と大きな隔たりはないことは確認しているのですが、101%など出てるケースでも真の値はおそらく99%など100%未満であることは確かです。
> そもそもどんな手であれイーシャンテン以下の手が将来的に100%の確率で聴牌するということは直感的に考えてあり得ないと思うのですが
ご指摘の通り、一向聴の時点で 100枚以上ある残り牌のいずれも有効牌という手牌はないと思うので、100%未満になることは確かかと思います。
Python初心者です。お手すきの際に、以下質問にご回答いただければ幸いです。
1.Pythonのスクレイピングで、麻雀何切るシミュレーターから情報を得ることは違法ではないでしょうか。
2.Pythonのrequestsモジュールで、麻雀何切るシミュレーターから情報を得ることは可能でしょうか。手牌を入力した際にURLが変わる、天鳳の牌理ツールなら可能かと思います。しかし、該当シミュレーターのように、手牌を入力してもURLが変わらないツールの場合にGETできるのかを教えていただきたいです。
コメントありがとうございます。
> 2.Pythonのrequestsモジュールで、麻雀何切るシミュレーターから情報を得ることは可能でしょうか。手牌を入力した際にURLが変わる、天鳳の牌理ツールなら可能かと思います。しかし、該当シミュレーターのように、手牌を入力してもURLが変わらないツールの場合にGETできるのかを教えていただきたいです。
すみませんが、現在は本ツールに GET メソッドによる API は用意していないです。
期待値の計算には、現在の手牌から和了りまでのすべての手牌の推移パターンを調べる必要があり、計算量が大きいです。そのため、「天鳳の牌理ツール」のように Javascript で書かれたコードをブラウザ側で実行する形式では実現が難しく、本ツールでは C++ で書かれた期待値計算ソフトをサーバー側に設置し、そこに POST メソッドで JSON 形式のリクエストを投げて、処理する形にしております。
> 1.Pythonのスクレイピングで、麻雀何切るシミュレーターから情報を得ることは違法ではないでしょうか。
申し訳ありませんが、レンタルサーバーの計算リソースがそこまで潤沢でないので、本ツールにプログラムで大量のリクエストを送ると、処理しきれなくなる可能性があります。そのため、Web 上に公開している本ツールの利用は人の手によるものに限定させてください。
なお、サーバー側に置いてある期待値計算ソフトは、ソースコードを GitHub 上に公開しています。
https://github.com/nekobean/mahjong-cpp
なんらかのプログラムで本ツールが出力する期待値計算の結果を利用したい場合は、そちらの環境にて期待値計算ソフトを起動し、リクエストを投げて利用する形なら可能です。
ソースからビルドするか、動作環境が Linux であれば以下にビルド済みのバイナリがあります。(./server)
https://github.com/nekobean/mahjong-cpp/tree/master/bin
期待値計算ソフトに投げるリクエストデータ及び返ってくるレスポンスデータの仕様は以下になります。requests モジュールのサンプルコードも記載しました。
https://github.com/nekobean/mahjong-cpp/blob/master/docs/%E3%83%AA%E3%82%AF%E3%82%A8%E3%82%B9%E3%83%88%E3%83%BB%E3%83%AC%E3%82%B9%E3%83%9D%E3%83%B3%E3%82%B9%E3%83%87%E3%83%BC%E3%82%BF%E3%81%AE%E4%BB%95%E6%A7%98.ipynb
ご返信いただきありがとうございます。
何分初心者で四苦八苦しながらですが、ご教示いただきました方法でサンプルコードの通り動作させることができました。とても丁寧に教えていただきありがとうございました。
上手くできたようでよかったです。
またなにかわからないことがあったら聞いてください。