麻雀確率計算(条件別の山残・ツモ確率)

雑記

先日書いた麻雀の確率計算を載せてみます。

計算したソースは最後にあります。

アタリ8枚がツモ残18回のときに山にある確率(0枚から8枚まで)

値=0.0008606132 0.0104770307 0.0538341047 0.1525299634 0.2607017231 0.2753010196 0.1754369243 0.0616921052 0.0091665156

配牌両面ターツでメンツになるアタリが8枚見えていない場合に何枚が山(自他家牌、王牌除く)に残っているかを表す。最も可能性の高いアタリ枚数は5枚(確率0.275)。

アタリ4枚がツモ残18回のときに山にある確率(0枚から4枚まで)

値=0.03225432 0.18062417 0.36656081 0.31956584 0.10099486

配牌ペンチャン/カンチャンターツでメンツになるアタリが4枚見えていない場合に何枚が山(自他家牌、王牌除く)に残っているかを表す。最も可能性の高いアタリ枚数は2枚(確率0.36)。

前/中/終盤ごとにアタリ枚数が8/4/2枚のときのツモ確率

値=0.7852634 0.2608696 0.0000000

前/中/終盤は1順目/7順目/13順目を表す。
その順目時点で最も山に残っている確率の高い枚数についてツモる確率を算出している。
1順目でアタリ8枚見えの場合に最終的に1枚でもツモることができる確率は0.78、
7順目でアタリ4枚見えの場合に最終的に1枚でもツモることができる確率は0.26、
13順目ではアタリ2枚見えでもツモ確率はゼロ。
(これはアタリ2枚が他家・王牌の可能性が高いため)

前/中/終盤ごとにアタリ枚数が4/2/1枚のときのツモ確率

値=0.4509317 0.2608696 0.0000000

前/中/終盤は1順目/7順目/13順目を表す。
その順目時点で最も山に残っている確率の高い枚数についてツモる確率を算出している。
1順目でアタリ4枚見えの場合に最終的に1枚でもツモることができる確率は0.45、
7順目でアタリ2枚見えの場合に最終的に1枚でもツモることができる確率は0.26、
13順目ではアタリ1枚見えでもツモ確率はゼロ。
(これはアタリ1枚が他家・王牌の可能性が高いため)

9順目にアタリ枚数が2〜6枚のときのツモ確率

値=0.0000000 0.2647059 0.2647059 0.2647059 0.2647059

9順目時点でアタリが3枚見えていても6枚見えていてもツモ確率は変わらない(0.26)。
これは次に示すように、9巡目時点での山にある確率が3枚でも6枚でも最も可能性が高いのが1枚のため、
その1枚をツモる確率は同じということになる。
9巡目時点で6枚も見えていなかったら、確率的にはほとんどが他家の手牌にある可能性が高いということを示す。

  • アタリ3枚がツモ残9回のときに山にある確率(0枚から3枚まで)
値=0.37526807 0.43996947 0.16498855 0.01977391
  • アタリ6枚がツモ残9回のときに山にある確率(0枚から6枚まで)
値=0.1367502306 0.3321077028 0.3223398292 0.1599205354 0.0427373845 0.0058278252 0.0003164924

計算したソース

上記は以下のRで計算できます。

# 牌全体(全牌136-手牌13)
TOTAL_OF_HAI = 123
# 山の残存枚数
TOTAL_OF_YAMA = 70
# ツモ回数(東南家)
TIMES_OF_TSUMO = 18

# 山に残っているアタリ数の確率関数
#    parm:アタリの総数, 残ツモ回数(巡目の逆) return:アタリ残数別確率
probOfRemainingOfYama = function(maxOfAtari, timesOfTsumo = TIMES_OF_TSUMO){
  #山残はツモ回数から算出(東南家基準. 山残+2を4で割った除数がツモ回数. 70残なら72÷4=18)
  totalOfYama <- timesOfTsumo * 4 - 2
  #分母:牌全体から山残を選ぶ組み合わせ数
  #分子:ハズレ(牌全体ーアタリ枚数)全体から山残の中のハズレを選ぶ組み合わせ×アタリからアタリ枚数(0からアタリ総数)を選ぶ組み合わせ
  return(choose(TOTAL_OF_HAI - maxOfAtari,totalOfYama - c(0:maxOfAtari))*choose(maxOfAtari,c(0:maxOfAtari))/choose(TOTAL_OF_HAI,totalOfYama))
}
# ツモ確率関数(山に残っている最大アタリ枚数のツモ確率)
#    parm:アタリの総数, 残ツモ回数(巡目の逆) return:最大山残アタリ枚数時ツモ確率
probOfTsumo = function(timesOfTsumo = TIMES_OF_TSUMO, maxOfAtari){
  totalOfYama <- timesOfTsumo * 4 - 2
  #アタリ残数別確率
  ry <- probOfRemainingOfYama(maxOfAtari, timesOfTsumo)
  #分母:山残からツモ分を選ぶ組み合わせ 分子:山残からハズレ(最も確率の高いアタリ枚数を引いた数)を選ぶ組み合わせ
  # →1から引くことで少なくとも1枚はアタリを引く確率
  p1 <- 1 - choose(totalOfYama - which.max(ry) + 1, timesOfTsumo)/choose(totalOfYama, timesOfTsumo)
  return(p1)
}

#アタリ8枚がツモ残18回のときに山にある確率(0枚から8枚まで)
ar <- probOfRemainingOfYama(8)
barplot(ar, xlab="アタリ枚数", ylab="確率", main="1順目アタリ枚数8の山残確率", names=c(0:8), ylim=c(0,1.0), space=1, width=1)

#アタリ4枚がツモ残18回のときに山にある確率(0枚から4枚まで)
ar <- probOfRemainingOfYama(4)
barplot(ar, xlab="アタリ枚数", ylab="確率", main="1順目アタリ枚数4の山残確率", names=c(0:4), ylim=c(0,1.0), space=1, width=1)

#前/中/終盤ごとにアタリ枚数が8/4/2枚のときのツモ確率
ar <- c(probOfTsumo(18, 8)
,probOfTsumo(12, 4)
,probOfTsumo(6, 2))
barplot(ar, xlab="順目/アタリ枚数", ylab="確率", main="前/中/終盤別アタリ枚数別ツモ確率", names=c("1/8", "7/4", "13/2"), ylim=c(0,1.0), space=1, width=1)

#前/中/終盤ごとにアタリ枚数が4/2/1枚のときのツモ確率
ar <- c(probOfTsumo(18, 4)
        ,probOfTsumo(12, 2)
        ,probOfTsumo(6, 1))
barplot(ar, xlab="順目/アタリ枚数", ylab="確率", main="前/中/終盤別アタリ枚数別ツモ確率", names=c("1/4", "7/2", "13/1"), ylim=c(0,1.0), space=1, width=1)

#9順目にアタリ枚数が2〜6枚のときのツモ確率
ar <- sapply(c(2:6), FUN = probOfTsumo, timesOfTsumo = 9)
barplot(ar, xlab="アタリ枚数", ylab="確率", main="9巡目アタリ枚数別ツモ確率", names=c(2:6), ylim=c(0,1.0), space=1, width=1)
# →3枚でも6枚でも山残数の最高確率は1枚なので見えてない枚数が3枚でも6枚でも変わらない(他家で固まっている可能性が高い)

#アタリ3枚がツモ残9回のときに山にある確率(0枚から3枚まで)
ar <- probOfRemainingOfYama(3, 9)
barplot(ar, xlab="アタリ枚数", ylab="確率", main="9順目アタリ枚数3の山残確率", names=c(0:3), ylim=c(0,1.0), space=1, width=1)
#アタリ6枚がツモ残9回のときに山にある確率(0枚から6枚まで)
ar <- probOfRemainingOfYama(6, 9)
barplot(ar, xlab="アタリ枚数", ylab="確率", main="9順目アタリ枚数6の山残確率", names=c(0:6), ylim=c(0,1.0), space=1, width=1)