koba::blog

小林聡: プログラマです

何切る検討(0) 〜 打牌選択アルゴリズム

麻雀 定石「何切る」301選

電脳麻将何切る解答機麻雀 定石「何切る」301選 を解いてみた。

全301問中解答が一致したのは209問。正答率は69%。不一致の92問について検討し、可能であれば思考アルゴリズムの改善に役立てたいと思う。

打牌選択アルゴリズム麻雀の打牌選択アルゴリズム(4) - koba::blog麻雀の打牌選択アルゴリズム(9) - koba::blog で説明しているが、ここでもう一度おさらいしておく。

牌姿の評価値

以下のアルゴリズムで牌姿の評価値*1を計算する。

1. 牌姿が和了形(向聴数 = -1)の場合 (手牌が14枚)

ツモ和了和了打点を評価値とする。門前の場合は立直の1翻を加えるが、一発・裏ドラは考慮しない。また積み場、供託も打点には加えない。

[ 東場 南家 ]
__s9____
m1m2m3m6m7m8p1p2p3s3s4s8s8 s2
の場合、20符3翻(立直、門前清自摸和、平和)で 2700点

2. 牌姿が打牌後の場合 (手牌が13枚、テンパイもこの形)

向聴数の進む牌について

の総和を評価値とする*2マジックナンバー

聴牌
12
1向聴
72 (= 12 x 6)
2向聴
216 (= 12 x 6 x 3)

としている*3

[ 東場 南家 ]
__s9____
m1m2m3m6m7m8p1p2p3s3s4s8s8
の場合、

  • s2 : 2700 x 4 / 12 (20符3翻: 立直、門前清自摸和、平和)
  • s0 : 5200 x 1 / 12 (20符4翻: 立直、門前清自摸和、平和、赤ドラ x 1)
  • s5 : 2700 x 3 / 12 (20符3翻: 立直、門前清自摸和、平和)

の総和で 2008.33点

3. 牌姿が打牌可能な状態(ツモの後、副露のあと)の場合 (手牌が14枚)

向聴数が戻らない打牌を行った後の牌姿の評価値のうち最大のものを、その牌姿の評価値とする。

[ 東場 南家 ]
__s9____
m1m2m3m6m7m8p1p2p3s1s3s4s8s8
の場合、

  • s1 : 2008.33
  • s4 : 2666.66

となるので 2666.66点

これを再帰的に繰り返せば任意の牌姿の評価値を計算できるが、3向聴以前の場合は計算時間がかかり過ぎるため評価値は使わず待ちの広さだけで打牌を選択している。

シャンテン戻し

多くの場合はシャンテン戻しとならない打牌についてのみ評価値を計算し、評価値最大となる打牌を選択すればよいのであるが、ときにはシャンテン戻しが有効な場合もある。

評価値は任意の牌姿で求めることができるので、シャンテン戻しの牌姿についても評価値を計算し比較すればよさそうに思われるが、それだと和了打点が高くならず待ちだけが広くなるケースを評価し過ぎてしまうことがわかっている*4

そこでシャンテン戻しの牌姿については以下で評価を行っている。

  • 評価値がシャンテン戻しを行う前の2倍以上とならないケースは評価しない
  • シャンテン戻しの際に打った牌を引き戻したケースは評価しない

これにしたがうと、

[ 東場 東家 ]
__s3____
m1m2m3p1p2p3p4p7p8p9s3s3s8 s8
の場合*5

  • p1 : 750.00 (聴牌)
  • s3 : 1673.26 (1向聴)

となり、シャンテン戻しとなる s3 が選択される。

鳴きの考慮

評価値計算の際には鳴きも考慮している。

[ 東場 東家 ]
__s9____
m6m7m8m8m8p4p0p5p7p8p9z1z1
の場合*6、評価値は門前の

有効牌枚数打牌聴牌待ち 枚数打点 評価値
m0 1 p5 m0m6m7m8m8m8p4p0p7p8p9z1z1p3 4 11700 7800
p6 4 11700
m5 3 p5 m5m6m7m8m8m8p4p0p7p8p9z1z1p3 4 6000 4000
p6 4 6000
m8 1 p5 m6m7m8m8m8m8p4p0p7p8p9z1z1p3 4 6000 4000
p6 4 6000
p3 4 p5 m6m7m8m8m8p3p4p0p7p8p9z1z1m0 1 11700 4975
m5 3 6000
m8 1 6000
z1 2 12000
p5 2 p4 m6m7m8m8m8p0p5p5p7p8p9z1z1m0 1 12000 5600
m5 3 7800
m8 1 7800
z1 2 12000
p6 4 p5 m6m7m8m8m8p4p0p6p7p8p9z1z1m0 1 11700 4975
m5 3 6000
m8 1 6000
z1 2 12000
z1 2 p5 m6m7m8m8m8p4p0p7p8p9z1z1z1p3 4 12000 8000
p6 4 12000

に副露したケースの

有効牌枚数 打牌聴牌待ち 枚数打点 評価値
m0 1 x 1 p4 m8m8m8p0p5p7p8p9z1z1 m0-m6m7p5 2 0 2000
z1 2 12000
m5 3 x 1 p4 m8m8m8p0p5p7p8p9z1z1 m5-m6m7p5 2 0 1300
z1 2 7800
m8 1 x 2 p4 m6m7m8p0p5p7p8p9z1z1 m8m8-m8p5 2 0 1300
z1 2 7800
1 x 1 p4 m8m8m8p0p5p7p8p9z1z1 m8-m6m7p5 2 0 1300
z1 2 7800
p3 4 x 1 p5 m6m7m8m8m8p7p8p9z1z1 p3-p4p0m0 1 0 1000
m5 3 0
m8 1 0
z1 2 6000
p5 2 x 3 p4 m6m7m8m8m8p7p8p9z1z1 p5p5-p0m0 1 0 1300
m5 3 0
m8 1 0
z1 2 7800
p6 4 x 1 p5 m6m7m8m8m8p7p8p9z1z1 p6-p4p0m0 1 0 1000
m5 3 0
m8 1 0
z1 2 6000
z1 2 x 3 p5 m6m7m8m8m8p4p0p7p8p9 z1z1-z1 p3 4 6000 4000
p6 4 6000

を加えた 1950.00点 となる。

孤立牌の評価値

牌姿の評価値が同点の場合は、孤立牌として優秀な牌を残すように打牌選択する。孤立牌の評価値は 麻雀の打牌選択アルゴリズム(9) - koba::blogアルゴリズムで決定する。

[ 東場 東家 ]
__z3____
m3m4m4m5p3p3p5p6p7p8s5s6s7 s8
の場合*7、打 p5p8 が同点で評価値最高となるが、孤立牌としての評価値が

  • p5 : 15点
  • p8 : 12点

となるため、打 p8 を選択する。

*1:ほぼ期待値と同義だが、正確な確率を用いていないので誤解を避けるために評価値と呼んでいる

*2:「牌の枚数 / マジックナンバー」でツモる確率を疑似している

*3:この数値に根拠はなく、まさにマジックナンバーである

*4:元々の評価値の牌姿に戻る手筋がたくさんあるだけのケース

*5:『麻雀 定石「何切る」301選』の Q000

*6:『麻雀 定石「何切る」301選』の Q005 から打 m9 後の牌姿

*7:『麻雀 定石「何切る」301選』の Q020