読者です 読者をやめる 読者になる 読者になる

いものやま。

雑多な知識の寄せ集め

ポーカーのオッズとアウツの話。(その2)

ゲーム 数学 Ruby

昨日はサイコロの賭けを題材にオッズの基本的な話をした。

今日はポーカー(テキサスホールデム)でのアウツの話と、オッズとの関係について。

アウツ

昨日はサイコロの賭けを題材にしていたけど、実際に考えたいのはポーカーでのオッズについて。
そのとき必要となるのが、「アウツ」。

「アウツ」とは、ハンドを改善させるカードのこと。
なお、それがめくられれば勝てる可能性がかなり高くなるものに限定される場合もある。
(ハンドは改善されるけど、相手のハンドも改善されるなどで、勝てる可能性は上がらないものは、「ダウツ」(ディスカウント アウツ)として「アウツ」とは区別して考えたりもする)

例えば、ハンドが 7\spadesuit  8\spadesuit、ボードが 9\spadesuit  \mathrm{A}\spadesuit  10\heartsuit  2\diamondsuitの場合、現状では何の役も出来ていないけど、リバーで7か8がめくられればワンペア、6かJがめくられればストレート、もしくは何か \spadesuitがめくられればフラッシュが完成する。
なので、アウツは

  •  7\heartsuit  7\diamondsuit  7\clubsuit → 7のワンペア
  •  8\heartsuit  8\diamondsuit  8\clubsuit → 8のワンペア
  •  6\heartsuit  6\diamondsuit  6\clubsuit → 6〜10のストレート
  •  \mathrm{J}\heartsuit  \mathrm{J}\diamondsuit  \mathrm{J}\clubsuit → 7〜Jのストレート
  •  2\spadesuit  3\spadesuit  4\spadesuit  5\spadesuit  6\spadesuit  10\spadesuit  \mathrm{J}\spadesuit  \mathrm{Q}\spadesuit  \mathrm{K}\spadesuit → フラッシュ

の、合計21枚となる。
(ただ、実際には、7や8は例えばAのワンペアに勝てないし、Jも相手のハンドがQKのときに10〜Aのストレートを作られる可能性があるので、ダウツになっている可能性がある)

アウツとオッズの関係

さて、この例で、仮にこれらのアウツのどれかがめくられれば確実に勝てるとした場合、オッズはどうなっているのか?

まず、これらのアウツ以外がめくられたときは負けなので、負ける事象数は  46 - 21 = 25 となる。
一方、これらのアウツがめくられれば勝ちなので、勝つ事象数は  21
したがって、オッズは  25 : 21 \fallingdotseq 1.19 : 1 ( = 1 : 0.84) となる。

このように、アウツからオッズを計算することが出来る

ちなみに、この場合、オッズは  1 : 0.84 なので、ポットオッズが  1 : 0.84 以上ならーーすなわち、コールするのに必要な金額が現在のポットの84%以下ならーーコールしてリバーを見る価値があるということになる。

プリフロップ、フロップ、ターンでの、アウツに対するオッズを、以下のようにして計算してみた。
なお、ポットの金額と比較しやすいように、左項は100にしてある。

#!/usr/bin/env ruby

preflop_rest = 52 - 2
flop_rest = preflop_rest - 3
turn_rest = flop_rest - 1

odds_right = (0..25).map do |outs|
  [preflop_rest, flop_rest, turn_rest].map do |rest|
    # odds = (rest - outs) : outs
    #      = 100.0 : odds_right
    # so,
    # odds_right = (outs * 100.0) / (rest - outs)
    (outs * 100.0) / (rest - outs)
  end
end

puts "-----+--------------------------------------"
puts "outs | preflop      flop         turn"
puts "-----+--------------------------------------"
odds_right.each_with_index do |(preflop, flop, turn), outs|
  puts (sprintf "%4d | 100.0:%5.1f  100.0:%5.1f  100.0:%5.1f",
                outs, preflop, flop, turn)
end
puts "-----+--------------------------------------"

これを実行して出力すると、以下のようになる:

-----+--------------------------------------
outs | preflop      flop         turn
-----+--------------------------------------
   0 | 100.0:  0.0  100.0:  0.0  100.0:  0.0
   1 | 100.0:  2.0  100.0:  2.2  100.0:  2.2
   2 | 100.0:  4.2  100.0:  4.4  100.0:  4.5
   3 | 100.0:  6.4  100.0:  6.8  100.0:  7.0
   4 | 100.0:  8.7  100.0:  9.3  100.0:  9.5
   5 | 100.0: 11.1  100.0: 11.9  100.0: 12.2
   6 | 100.0: 13.6  100.0: 14.6  100.0: 15.0
   7 | 100.0: 16.3  100.0: 17.5  100.0: 17.9
   8 | 100.0: 19.0  100.0: 20.5  100.0: 21.1
   9 | 100.0: 22.0  100.0: 23.7  100.0: 24.3
  10 | 100.0: 25.0  100.0: 27.0  100.0: 27.8
  11 | 100.0: 28.2  100.0: 30.6  100.0: 31.4
  12 | 100.0: 31.6  100.0: 34.3  100.0: 35.3
  13 | 100.0: 35.1  100.0: 38.2  100.0: 39.4
  14 | 100.0: 38.9  100.0: 42.4  100.0: 43.8
  15 | 100.0: 42.9  100.0: 46.9  100.0: 48.4
  16 | 100.0: 47.1  100.0: 51.6  100.0: 53.3
  17 | 100.0: 51.5  100.0: 56.7  100.0: 58.6
  18 | 100.0: 56.2  100.0: 62.1  100.0: 64.3
  19 | 100.0: 61.3  100.0: 67.9  100.0: 70.4
  20 | 100.0: 66.7  100.0: 74.1  100.0: 76.9
  21 | 100.0: 72.4  100.0: 80.8  100.0: 84.0
  22 | 100.0: 78.6  100.0: 88.0  100.0: 91.7
  23 | 100.0: 85.2  100.0: 95.8  100.0:100.0
  24 | 100.0: 92.3  100.0:104.3  100.0:109.1
  25 | 100.0:100.0  100.0:113.6  100.0:119.0
-----+--------------------------------------

この表は、例えばプリフロップでアウツが10枚の場合、オッズは  100 : 25 となっているので、コールに必要な金額がポットの金額の25%以下なら、コールする価値がある、といったふうに使うことが出来る。

この表を丸暗記するのはキツイので、オッズの左項を100としたときに、オッズの右項がアウツの何倍になっているのかを計算してみる。
すると、以下のようになる:

-----+--------------------
outs | preflop  flop  turn
-----+--------------------
   0 |     0.0   0.0   0.0
   1 |     2.0   2.2   2.2
   2 |     2.1   2.2   2.3
   3 |     2.1   2.3   2.3
   4 |     2.2   2.3   2.4
   5 |     2.2   2.4   2.4
   6 |     2.3   2.4   2.5
   7 |     2.3   2.5   2.6
   8 |     2.4   2.6   2.6
   9 |     2.4   2.6   2.7
  10 |     2.5   2.7   2.8
  11 |     2.6   2.8   2.9
  12 |     2.6   2.9   2.9
  13 |     2.7   2.9   3.0
  14 |     2.8   3.0   3.1
  15 |     2.9   3.1   3.2
  16 |     2.9   3.2   3.3
  17 |     3.0   3.3   3.4
  18 |     3.1   3.4   3.6
  19 |     3.2   3.6   3.7
  20 |     3.3   3.7   3.8
  21 |     3.4   3.8   4.0
  22 |     3.6   4.0   4.2
  23 |     3.7   4.2   4.3
  24 |     3.8   4.3   4.5
  25 |     4.0   4.5   4.8
-----+--------------------

なので、オッズの左項を100としたとき、オッズの右項はだいたい次のようになっている:

アウツの枚数 オッズの右項
0〜5 アウツの約2倍
6〜10 アウツの約2.5倍
11〜15 アウツの約3倍
16〜20 アウツの約3.5倍
21〜25 アウツの約4倍

一応、上記で求まる近似値と実際の値を比較すると、以下の通り:

-----+--------------------------------------------------
outs | approx.  preflop       flop          turn
-----+--------------------------------------------------
   0 |     0.0    0.0( +0.0)    0.0( +0.0)    0.0( +0.0)
   1 |     2.0    2.0( -0.0)    2.2( -0.2)    2.2( -0.2)
   2 |     4.0    4.2( -0.2)    4.4( -0.4)    4.5( -0.5)
   3 |     6.0    6.4( -0.4)    6.8( -0.8)    7.0( -1.0)
   4 |     8.0    8.7( -0.7)    9.3( -1.3)    9.5( -1.5)
   5 |    10.0   11.1( -1.1)   11.9( -1.9)   12.2( -2.2)
   6 |    15.0   13.6( +1.4)   14.6( +0.4)   15.0( +0.0)
   7 |    17.5   16.3( +1.2)   17.5( +0.0)   17.9( -0.4)
   8 |    20.0   19.0( +1.0)   20.5( -0.5)   21.1( -1.1)
   9 |    22.5   22.0( +0.5)   23.7( -1.2)   24.3( -1.8)
  10 |    25.0   25.0( +0.0)   27.0( -2.0)   27.8( -2.8)
  11 |    33.0   28.2( +4.8)   30.6( +2.4)   31.4( +1.6)
  12 |    36.0   31.6( +4.4)   34.3( +1.7)   35.3( +0.7)
  13 |    39.0   35.1( +3.9)   38.2( +0.8)   39.4( -0.4)
  14 |    42.0   38.9( +3.1)   42.4( -0.4)   43.8( -1.8)
  15 |    45.0   42.9( +2.1)   46.9( -1.9)   48.4( -3.4)
  16 |    56.0   47.1( +8.9)   51.6( +4.4)   53.3( +2.7)
  17 |    59.5   51.5( +8.0)   56.7( +2.8)   58.6( +0.9)
  18 |    63.0   56.2( +6.8)   62.1( +0.9)   64.3( -1.3)
  19 |    66.5   61.3( +5.2)   67.9( -1.4)   70.4( -3.9)
  20 |    70.0   66.7( +3.3)   74.1( -4.1)   76.9( -6.9)
  21 |    84.0   72.4(+11.6)   80.8( +3.2)   84.0( +0.0)
  22 |    88.0   78.6( +9.4)   88.0( +0.0)   91.7( -3.7)
  23 |    92.0   85.2( +6.8)   95.8( -3.8)  100.0( -8.0)
  24 |    96.0   92.3( +3.7)  104.3( -8.3)  109.1(-13.1)
  25 |   100.0  100.0( +0.0)  113.6(-13.6)  119.0(-19.0)
-----+--------------------------------------------------

大体数%の誤差で収まってるのが分かると思う。
(※プリフロップだとアウツが11枚以上だとだいぶ誤差があるけど、プリフロップだとそもそもそんなにアウツは存在しない。また、境界は誤差が大きいので、若干増減させて考えるようにするといい)

日本式のポットオッズの表現の話

なお、日本だとポットオッズは  n : 1 の形ではなく  (n+1) 倍の形で表現されることが多い。
その場合、「ポットの金額 + コールするのに必要な金額」が「コールするのに必要な金額」の何倍かを計算し(これがポットオッズとして扱われる)、その逆数が勝つのに必要な勝率になる。
そして、アウツの約2倍が勝率になるので、それで比較して判断を行う。

ただ、これまでの話を見て分かる通り、比で計算する方が分かりやすかったりする。
あまり馴染みがなく、どう計算に使えばいいのかまで解説されていることはほとんどないので(少なくとも自分は見たことがない)、知られてないけど。

例えば、ターンでフラッシュを待っている状態(アウツは9枚)で、ポットの金額の  \frac15 をベットされたときに、コールすべきかどうかの判断を考えてみる。

日本式だと、参加費を1としたとき、ポットの金額は5なので、ポットオッズは  1 + 5 = 6 倍ということになる。
すると、その逆数は  1 \div 6 \fallingdotseq 0.16 なので、約16%がコールするのに必要な勝率となる。
そして、アウツは9枚で、勝率はその約2倍の18%なので、コールすべきという判断になる。

比を使う方法だと、ポットオッズは  5:1 = 100:20
そして、アウツが9枚のとき、オッズの左項を100としたときのオッズの右項は約2.5倍となるので、 9 \times 2.5 = 22.5
なので、コールすべきという判断になる。

あるいは、ターンでストレートを待っている状態(アウツは8枚)で、ポットの金額に対して、どれくらいの金額までコールしていいのかを考えてみる。

日本式だと、 アウツが8枚のときの勝率は  8 \times2 = 16 なので、約16%。
この逆数は  1 \div 0.16 \fallingdotseq 6.25 なので、約6倍のポットオッズならコールしていいことになる。
そうすると、コールに必要な金額を1とした場合、ポットの金額は約5となるので、 1 \div 5 \fallingdotseq 0.2 から、ポットの金額の約20%まではコールしていいとなる。

一方、比を使う方法なら、アウツが8枚のとき、オッズの左項を100としたときのオッズの右項は約2.5倍となるので、 8 \times 2.5 = 20 で、約20%まではコールしていいということが分かる。

ね、簡単でしょ?

ということで、オッズの計算をするなら、比を使った方法がオススメ。

今日はここまで!