システマティック麻雀工学:
2:他家必要牌のモデル化理論と実装(MJ-1)
他家必要牌(当たり牌)の計算と待ち読み:
前回、充分に高精度で他家の必要メンツを特定するルーチン(MJ-0)が一応動く形となった。
もちろん様々な特殊状況にはまだ対応していないし、染め手率などのパラメータも求まっていないが、「通常の状態(つまり多くの状況)で、人間と同等かそれ以上に精確に他家の必要メンツを求める」ことはできるようになった。
他家の手の構成メンツが人間と同等かそれ以上に精確に「読める」ということは、他家の最後に必要とする牌(いわゆる当たり牌)についても同レベルの読みができるということである。
というのも、他家の構成メンツを構成する牌のうち一つが「当たり牌」になるわけだからだ。そのメンツから1牌(当たり牌)を除けば、「待ちの形」がわかる。
単純な「当たり牌モデル」の提案:
他家はMJ-0によって計算されるようなメンツを作る。
他家は、それらのメンツ(と頭)を構成する牌のうちの1つを最終的なテンパイ形で待つ。
その際、当人が既に場に切った牌や、リーチ後に通った牌を、待ち牌や、もう片方の待ち牌にすることはない。
なお、待ちがカンチャン5になったらリーチしないが47待ちになったらリーチする、のように、「好形への変化」をさせるパラメータは後に導入する。
MJ-0モデルに、上記の単純な条件を導入して「当たり牌読みのためのモデル」が作られるだろう。
計算の手順
1)前述のモデルで論じられた方法で「他家の構成メンツの一例」を出す。
2)そのメンツからランダムに1牌を抜き取る
3)残ったターツがもし、その他家の捨て牌やリーチ後の現物牌によってメンツになるなら、2)に戻る
4)そのターツがメンツになり得るような牌を「待ち牌」とする。
5)ただし他のメンツとの連関も考慮する(3面待ち、コウツの場合のシャンポン待ちなど)
6)1~5を充分な回数繰り返し、ある牌が待ちになっている可能性を計算する。
ここで、テンパイの待ち形は、必ずしも牌の組み合わせだけでは表せない。
ドラを使おうとすると愚形になるし、普通はカンチャンよりリャンメンを残そうとするものだ。
MJ-0によるメンツ構成モデルは、完成メンツの構成を推測するものであって、「最後に残ったメンツ」の候補、つまり当たり牌の待ち方までを充分考慮したものではない。
当たり牌読みプログラム「MJ-1」の実装:
上のアルゴリズムに従っただけの単純な待ち読みプログラムを作った。
このプログラムを以後、MJ-1と呼ぶ。
ただし、MJ-1は計算速度を上げるために上の(6)を省略した。MJ-0によってメンツ構成が5000個作られ、その各々1つから、待ちがただ1種類だけ作られる。したがって読まれた待ちの種類はのべ5000個だけである。
MJ-1の読み能力の評価:
このモデルが、実際の麻雀における他家の当たり牌を的確に読めているかどうかを検証する。方法は、「当たり牌の予測」を用いる。
手順
1)MJ-1による推測
あるプレイヤーから見た「状況」を、MJ-1に与える。MJ-1は、指定された他家の危険牌を、危険な順に8つ指定する。
2)人間による推測
シスマの技術員やアンチシスマメンバーなど、超ラン常勝組メンバーを含む比較的ハイレベルな打ち手に、同様の状況で同じ危険牌指定をしてもらった。
参加者: モ娘。なっち 雀鬼百瀬 疾駆★白馬 BJ 激弱なんし 散る桜ゆえ 【最終兵器】 北海の真剣師 鮫町民 まこちょ
シレン 黒い三等兵 無茶苦茶です みずか roro 紅孔雀さん koichicurry ドラゴン丸 新庄直樹 BONY しろたまご
神龍★悪魔 WAve-Model 平成㍑にの 最後の麻雀 美奈☆碧彗星 ミカエル 楓那 姫鈴☆茜彗星 邪眼 nanasy
燕☆空彗星 3翻40符 たすけ 少年N 匿名キーボー カマセン 某人(匿名某超ラン常勝メンバー) 氷 ( ̄(●●) ̄)
かんみね key★けろぴ- 天意無法 亜凹 れ~もん keiichixx noair ワンサ pesan Spa☆Miesque uoysiadino
まうっち 負け犬@なま くろっさん モ娘。かほり おいも スリルリアル ♪桜まゆみ♪ 和也超合金F 神野
ひょうろく玉 ☆夢人☆ ☆若菜☆ KeiichiS 心ない天使 神龍★獣冴 $太守$ すいそ へたれ雀士
※ご協力いただいたみなさま、ありがとうございました。
3)実際の状況の設定
とつげき東北の実戦の牌譜から、適当に状況を取り出す。
特殊な待ちばかりが選ばれなうようにだけ注意しつつ、牌譜から適当に取り出し、7人分の待ち牌を予想してもらった。
4)推測精度の比較
MJ-1の当たり牌予測と人間の推測の精度を各々評価する。
指定された8牌のうち、実際の当たり牌であったものに、指定された優先順位に従って点数を加点する(8点、7点、・・・、1点)。全て外れたら1点減点する。
(参加者71名、91点満点)
得点合計 (うちリャンメン待ち時スコア)
待ち読み人間E 52点 39 (カマセン)
待ち読み人間37 50点 39 (へたれ雀士)
待ち読み人間J 49点 46 (散る桜ゆえ)
待ち読み人間C 48点 40
MJ-1(computer代読) 47点 36
待ち読み人間18 47点 34
待ち読み人間00 47点 34
待ち読み人間34 47点 33
待ち読み人間M 47点 32
待ち読み人間06 44点 36
待ち読み人間V 43点 32
待ち読み人間 I 42点 33
待ち読み人間36 42点 31
待ち読み人間27 42点 28
待ち読み人間B 41点 35
待ち読み人間37 40点 24
待ち読み人間Q 39点 31
待ち読み人間A 39点 24
待ち読み人間38 38点 37
待ち読み人間10 38点 33
待ち読み人間X 38点 25
待ち読み人間U 37点 32
待ち読み人間20 36点 26
待ち読み人間12 35点 32
待ち読み人間35 35点 32
待ち読み人間17 35点 25
待ち読み人間G 34点 24
待ち読み人間33 33点 28
待ち読み人間09 33点 24
待ち読み人間01 33点
15
待ち読み人間H 32点 28
待ち読み人間08 32点 28
待ち読み人間21 32点 25
待ち読み人間11 31点 28
待ち読み人間13 31点 25
待ち読み人間P 31点 23
待ち読み人間06 31点 21
待ち読み人間30 30点 22
待ち読み人間25 30点 19
待ち読み人間23 30点
18
待ち読み人間03 30点 13
待ち読み人間W 30点 12
待ち読み人間22 29点 27
待ち読み人間F 29点 21
待ち読み人間K 29点 16
待ち読み人間N 28点 20
待ち読み人間28 28点 19
待ち読み人間24 27点 23
待ち読み人間R 27点 20
待ち読み人間35 27点 20
待ち読み人間19 27点 14
待ち読み人間S 26点
8
待ち読み人間Y 24点 25
待ち読み人間L 23点 19
待ち読み人間07 23点 19
待ち読み人間15 22点 20
待ち読み人間D 22点 16
待ち読み人間26 22点 13
待ち読み人間O 21点 18
待ち読み人間36 21点 10
待ち読み人間16 19点 12
待ち読み人間T 19点
8
待ち読み人間02 19点
6
待ち読み人間14 18点 12
待ち読み人間05 16点 12
待ち読み人間29 16点
3
待ち読み人間18 13点 10
待ち読み人間31 13点 8
待ち読み人間04 13点
0
待ち読み人間Z 12点
6
待ち読み人間32 11点 7
コンピュータの読み能力:トータル47点(偏差値65.3、平均点は31.3点)。対リャンメン時36点(偏差値63.3、平均点は22.7点)。
5)考察
MJ-1は単に牌の組み合わせだけを考え、ドラの種類やリーチ宣言牌、裏スジやまたぎスジ、牌の切り出し順などの情報は全く加味していないが、それにもかかわらず、MJ-1は一般的なリーチやダマに対する当たり牌予測問題においてトップクラスの成績をとり、正答率の高さや誤答率の低さにおいても同様であった。その水準は、参加したほとんど全員の打ち手の「読み」能力を超えただけでなく、超ランの平均的なレベルをも充分超えたレベルであった。
なお、コンピュータは上記成績を「偶然」取ったというよりむしろ、的確に算出した。何度シミュレーションを繰り返しても、ほとんどこれに近い成績を収めるだろう。
人間の読みは毎回当たり外れが大きく変化することも考えに入れれば、上記結果は非常に満足できる結果と言える。
コンピュータは多くの場合この付近に位置するのに対して、今回コンピュータを越える成績を出した人間は、毎回の読みで必ずしもコンピュータを越えられるものではないと思われる。
そのことは、例えばトップの成績を収めた待ち読み人間Eは、ここに挙げられた人の中でとりわけ上手いわけではなく、超ランの勝ち組でもないことからも伺える。
コンピュータよりも抜群に読み能力が優れている人がいるとすれば、満点である91点近くを取る人がいてもおかしくないが、コンピュータと最優秀成績者の点差は5点であり、そのような可能性は低い。
なお、上位は超ラン常連が、下位は非超ラン常連が占める傾向にあった。
ちなみに誤答率95%以上だった出題(一般的に見て「読みにくい」待ち)には、コンピュータもかなりでたらめな回答を示し、他の多くの人と同様減点になったが、待ち牌予想と麻雀における技術要素の性質から考えて、このことは何ら問題とはならないだろう。「読みにくい待ちをどう読むか」というような問題において、高い確率で当たり牌を読むことは非常に困難(まさに偶然)であって、その技術の差は打ち手の成績にあまり大きな影響を与えないと思われるからだ。今回の試験において高得点を取った人の多くは、しばしば誤答率が非常に高い問題で正解を出している人である。しかしこのような「得点」は決して毎回のように獲得できるものではなく、技術としてはリャンメン待ちを読む精度が高いことの方がはるかに重要だろう。
MJ-1は、特に相手がリャンメン待ちの場合に、各「無スジ牌」を危険度順に的確に並べる能力が高いと推測される。同じ「リャンメン無スジ」であっても、ある牌が当たる確率が他の1.5倍であるというような評価を下すことが可能だ。そしてそれを的確に順序付けできたからこそ、この出題に対して高い得点を上げることができたのだ(単に「この4つのスジが危ない」と予想するだけでは、高得点は望めない)。
MJ-1は当たり牌予測において重要になる技術を充分に備えていることがわかる。
MJ-1は、ある牌が当たりである確率だけでなく、その牌で放銃すると何点の出費になるかも簡単に算出できる。また、もし何らかの条件で「相手はリャンメン待ちでない」とわかっていたとすれば、それを条件に入れてリャンメン以外待ちの場合の危険度を順に高精度で挙げることができるだろう(ただしこれらはまだ実装していない)。
麻雀界において初めて「テンパイ者の当たり牌は何ですか? またそれは何点ですか?」という問題に、超ランの平均レベルよりもかなり高い精度の、明快な理論的解答を示すことができるようになった。
以前からとつげき東北によって確信されていたことを繰り返し述べる。
・人間の、「様々な要因を加味した読み」「卓上のあらゆる情報を読んだ結果」は、ただの牌の数え上げにも劣る程度のレベルでしかない
・「麻雀は複雑だからコンピュータの読み能力が人間を超えられない」という発言は迷信である
(例えばMJ-0やMJ-1が東風荘の牌を読み取って計算してくれ、とつげき東北がそれを利用しながら麻雀をすれば、とつげき東北の成績は向上する)
・同様に研究が進んだとき、最も麻雀の強い人間は、そこそこ麻雀の強いコンピュータに完敗する
発展課題・待ち牌モデルによって作られる待ちと実際の待ちの違い:
上記モデルの通りに待ち牌を選んでテンパイ形を作り、それをとつげき東北東風荘牌譜集計ツール「できすぎくん」に使用されているテンパイチェックルーチンに入れたところ、待ちの「リャンメン率」は53.1%であった。局開始瞬間の、全ての情報が与えられていないときで、誰も食い仕掛けを行わない場合を想定した。
一方、とつげき東北の東風実戦データの同様集計結果(01/01/28~01/11/31:R指定1900~2000平均)によると、ランダムな相手の他家リーチリャンメン率は61.2%であった。
内訳は次の通り。
通常リャンメン シャンポン カンチャン ペンチャン 単騎待ち 3種以上 その他(ノベタンや1112) 計
MJ-1モデル 1992(39.8%) 0432(08.6) 1088(21.8) 0417(08.3) 0410(08.2) 0495(09.9) 0167(03.3) 5001
実測データ 0825(55.4%) 0212(14.2) 0190(12.8) 0083(05.6) 0020(01.3) 0139(09.3) 0020(01.3) 1489
このような差が生ずる。
これでは、読み方として充分な性能とはいえないかもしれない・・・かもしれないと言ったのは、実はこの程度の簡単な読みでも、充分に機能するのではないかという希望が持てるほど、世の麻雀打ちは蒙昧な経験と直感でしか麻雀を打っていないと思うからである(私自身もそれに該当するし、上に行った性能評価においてもそれを示唆する結果が出た)。
山に残った牌を推測するという試験において、MJ-0は極めて優秀な成績を記録したわけだが、それは言うまでもなく「他家のメンツが何か」を、人間よりも精確に読めたということである。
他家のメンツの大部分の場所を精確に読めたのにもかかわらず、他家の待ち方を実際に合うほどうまくモデル化できていない要因はなんだろうか?
MJ-0によって、平均的な他家メンツ位置の推測は概ね精確に推測できているわけだから、他家メンツモデルの全体的な失敗であるよいうよりは、テンパイ近辺などで何らかの「打ち手の意思」が働きリャンメン率に8%の差が生じていると考えるのが適当だろう(平たく言えば、我々は基本的に牌効率に基づいて打っているが、東1からテンパイしていきなりカンチャン5待ち即リーチはそうそうはしないということだ)。
「打ち手の意思」と言ってもいくつかあるが、とりわけリャンメン率を上昇させるように働く打ち方の差は、以下のようなものである。
「待ちがよくなるようにメンツ構成を選ぶ度合い(・・・13と35なら35を残す、また1と5なら5を残す、等)」
「待ちがリャンメンにならなかったときにリーチをしていない度合い(・・・4567799のシャンポンでテンパイした場合、3568を引いてリャンメン化できる、等)」
これらの要因のうちのどちらがモデルと実際のデータのリャンメン率の違いに、より多い影響を与えているのだろうか?
まず、「待ちがよくなるようにメンツ構成を考える」ということについてだが、これは要するに「メンツが完成しやすいようにメンツ構成を考える」ことと同義であって、「統計学的観点からみた、メンツの構成されやすさ」というメンツ構成のモデルの原理に既に大部分含まれていると考えて良いだろう。
一方「待ちがリャンメンにならなかったときに待ちを変えてリーチしている」ために、結果的にリーチされた場合のリャンメン率が上昇しているという説明は、とつげき東北の5000試合以上の経験から見ても、しごく妥当な考えであるし、リャンメン待ち率が高まるもっともありふれた要因だと思える。
最終段階での待ちの変化の可能性や、その変化形を考慮することで、よりよい当たり牌予測ができるだろう。余裕があれば後に行う。
実際の使用においては、「実測のリャンメン率」と同程度のリャンメン率であると仮定して、MJ-0の予測の60%をリャンメン待ち、40%をそれ以外となるように当たり牌の組み合わせを取れば充分だろう(むしろ、その補正さえ行わない状態でも充分だと思うが)。
発展課題2・読みを鋭くさせるためのいくつかのパラメータ:
リーチ宣言牌近辺、ドラ近辺の待ちが、実測においてどの程度増加するか?
役牌はどの程度優遇されるか?