ベット額の大小によりルーレットで勝ち逃げできる確率は変わってくるのか?
せこい人は太っ腹の人に勝てるのか?
「今日はルーレットの赤黒ベットをするために100ドルをチップ交換した。200ドルまで増えたら家に帰ろう。」
という時に、無事勝ち逃げできる確率は37%しかありません(アメリカンルーレットの場合)。
【ルーレットの赤黒ベット】100ドルの軍資金を200ドルに増やせる確率は?マルコフ連鎖で解いてみた
但しこれは1回当たりのベット額が20ドルの場合です。
このベット額を増やすと勝ち逃げできる確率はどうなるのでしょうか?
言い方を変えると、せこせこと勝負する人と大きな賭けに出られる人とで、勝ち逃げできる確率は違ってくるのでしょうか?
これをPythonでシミュレーションしてみました。
ルーレットで勝ち逃げしようとする場合、その勝敗に影響を与える変数は初期資金額、ベット額、目標額の3つです。
今回はベット額が与える影響をシミュレーションします。
初期資金額が与える影響については、下記の記事でシミュレーションしています。
ルーレットは金持ちほど勝つ確率が高いのか?百万回シミュレーションしてみた
シミュレーションの方法
以前の記事フレンチルーレットのアンプリゾン方式をPythonでシミュレーションしてみたで作ったPythonプログラムをFor文で10,000回繰り返します。
但しこのプログラムでは、初期入金額を使い果たしたらプレーヤーがゲーム続行するかどうかを任意に判断できるようにしていたので、今回は目標金額に達したら自動的にゲーム終了するようにしました。
これを10,000回繰り返します。
初期入金額と目標額は可変とします。
シミュレーションプログラム
冗長ですが、次のようにプログラミングしました。
import random
# ルーレット種類の入力
def kind_of_roulette():
global kind, weight, rule
print('ルーレットの種類を入力して下さい(A:アメリカン, E:ヨーロピアン, F:フレンチ) :')
kind = input('>')
if kind == 'A':
print('アメリカンルーレットが選択されました')
weight = [18, 18, 2] #確率ウェイト(赤:18箇所、黒:18箇所、ゼロ:2箇所)
elif kind == 'E':
print('ヨーロピアンルーレットが選択されました')
weight = [18, 18, 1] #確率ウェイト(赤:18箇所、黒:18箇所、ゼロ:1箇所)
else:
print('フレンチルーレットが選択されました')
weight = [18, 18, 1] #確率ウェイト(赤:18箇所、黒:18箇所、ゼロ:1箇所)
print('アンプリゾン方式(E) or ラパルタージュ方式(L) ?:')
rule = input('>')
fund()
# 投下資金額と賭金の入力
def fund():
global onhand_ini, placement, goal
print('投下資金額を入力して下さい: ')
onhand_ini = int(input('>'))
print('賭金を入力して下さい: ')
placement = int(input('>'))
print('目標額を入力して下さい: ')
goal = int(input('>'))
# 賭金の投入と色の選択
def place(bet_amount):
global answer, placement, hold
p_color = ['R', 'B'] #赤、黒
p_weight = [1, 1] #確率ウェイト(赤:1、黒:1)
answer = random.choices(p_color, k = 1, weights = p_weight) #確率ウェイトに基づき赤、黒を生成
hold = 0 #保留で1を立てるようにフラグを用意
settlement(bet_amount)
# 精算
def settlement(money):
global result, weight, onhand, hold, rule, goal
color = ['R', 'B', 'G'] #赤、黒、ゼロ
result = random.choices(color, k = 1, weights = weight) #確率ウェイトに基づき赤、黒、ゼロを生成
if result[0] == 'R' and answer[0] == 'R':
onhand += money
if onhand >= goal:
return onhand
else:
place(money)
elif result[0] == 'B' and answer[0] == 'B':
onhand += money
if onhand >= goal:
return onhand
else:
place(money)
elif result[0] == 'G' and kind == 'F': #フレンチでゼロが出た場合
if hold == 1: #保留中にゼロが出た場合
place(money)
else: #最初にゼロが出た場合
if rule == 'E': #アンプリゾン方式の場合
onhand = onhand - money #賭金を拘留
hold = 1
settlement(money) #保留金額で再チャレンジ
else: #ラパルタージュ方式の場合
onhand = onhand - money + money/2
place(money)
else: #違う色が出た場合
if hold == 0: #保留中でなければ賭金を引く(保留中は引かない)
onhand -= money
if onhand <= 0: #手持ち資金がなくなった場合
return onhand
else: #手持ち資金がある場合
place(money)
kind_of_roulette()
results = []
for i in range(10000):
onhand = onhand_ini
place(placement)
results.append(onhand)
sum((i >= goal-10 for i in results)), sum((i <= 10 for i in results))
シミュレーション結果
マルコフ連鎖による解との比較
まずはこのシミュレーション結果の妥当性を判断するために、【ルーレットの赤黒ベット】100ドルの軍資金を200ドルに増やせる確率は?マルコフ連鎖で解いてみたでマルコフ連鎖を使って導いた理論値と比較してみます。
この時はアメリカンルーレットで、初期入金額:100ドル、1回当たりのベット額:20ドル、目標金額:200ドルでしたので、同じ条件でシミュレーションしてみます。
ルーレットの種類を入力して下さい(A:アメリカン, E:ヨーロピアン, F:フレンチ) :
>A
アメリカンルーレットが選択されました
投下資金額を入力して下さい:
>100
賭金を入力して下さい:
>20
目標額を入力して下さい:
>200
(3727, 6273)
このように10,000回の試行で目標額に達したのは3,727回でした。
確率にすると37.27%で、マルコフ連鎖を使って計算した理論値である37.13%と近しい値になっています。
前回の記事では目標金額を400ドルにした場合の理論値も計算して9.6%になりました。
これについてもシミュレーションしてみましょう。
ルーレットの種類を入力して下さい(A:アメリカン, E:ヨーロピアン, F:フレンチ) :
>A
アメリカンルーレットが選択されました
投下資金額を入力して下さい:
>100
賭金を入力して下さい:
>20
目標額を入力して下さい:
>400
(956, 9044)
このように9.56%となり、これも理論値とほぼ同じになりました。
ルーレットの種類による勝率の違い
以上でシミュレーションの妥当性が証明できたので、他の種類のルーレットについても勝率を調べてみましょう。
ヨーロピアンルーレット、フレンチルーレット(アンプリゾン方式)、フレンチルーレット(ラパルタージュ方式)の3つについて目標額を200ドルとしてシミュレーションしました。
それぞれの違いについては【ルーレットの還元率】理論値通りになるかPythonで百万回シミュレーションしてみたを参照してみて下さい。
ヨーロピアンルーレット
ルーレットの種類を入力して下さい(A:アメリカン, E:ヨーロピアン, F:フレンチ) :
>E
ヨーロピアンルーレットが選択されました
投下資金額を入力して下さい:
>100
賭金を入力して下さい:
>20
目標額を入力して下さい:
>200
(4355, 5645)
このように約43%となり、約37%であるアメリカンルーレットよりも勝率がかなり上がりました。
アメリカンルーレットなら今すぐ退出して、ヨーロピアンルーレットのカジノに行きましょう。
フレンチルーレット(アンプリゾン方式)
ルーレットの種類を入力して下さい(A:アメリカン, E:ヨーロピアン, F:フレンチ) :
>F
フレンチルーレットが選択されました
アンプリゾン方式(E) or ラパルタージュ方式(L) ?:
>E
投下資金額を入力して下さい:
>100
賭金を入力して下さい:
>20
目標額を入力して下さい:
>200
(4644, 5356)
ゼロが出た場合の救済措置がある分、ヨーロピアンルーレットより少し勝率が上がります。
フレンチルーレット(ラパルタージュ方式)
ルーレットの種類を入力して下さい(A:アメリカン, E:ヨーロピアン, F:フレンチ) :
>F
フレンチルーレットが選択されました
アンプリゾン方式(E) or ラパルタージュ方式(L) ?:
>L
投下資金額を入力して下さい:
>100
賭金を入力して下さい:
>20
目標額を入力して下さい:
>200
(4687, 5313)
アンプリゾン方式より有利な救済措置であるため、僅かですが更に勝率が上がります。
ベット額による勝率の違い
それでは本丸であるベット額による勝率の違いをシミュレーションしてみましょう。
ここまで読んできてアメリカンルーレットをする人はもういないと思いますので、ヨーロピアンルーレットとして話を進めます。
初期入金額が100ドル、目標金額が200ドルというところまでは前のシミュレーションと同じですが、1回当たりのベット額を100ドルのオールインとしてまずはシミュレーションしてみましょう。
ルーレットの種類を入力して下さい(A:アメリカン, E:ヨーロピアン, F:フレンチ) :
>E
ヨーロピアンルーレットが選択されました
投下資金額を入力して下さい:
>100
賭金を入力して下さい:
>100
目標額を入力して下さい:
>200
(4865, 5135)
勝率は48.65%となりました。
ベット額が20ドルの場合の勝率は43%だったので、約5%上がりました。
20ドルずつせこく賭けるよりも、100ドルを賭けてオールインした方が勝率が上がるということです。
慎重な人ほど損するという一見常識に反することですが、考えてみれば当たり前のことで、ヨーロピアンルーレットで当たる確率は
18÷37=48.65%
なので、これがそのまま100ドルをオールインして200ドルになる確率になるのです。
それではその間のベット額での勝率はどうなるのでしょうか?
それを調べるために、今度は200ドルの初期入金額を400ドルにできる確率をシミュレーションしてみましょう。
ベット額は20ドル、40ドル、60ドル、・・・、180ドル、200ドルの10通りでシミュレーションします。
結果は次のようになりました。
1回当りのベット額20ドルで賭けた時の勝率は37%ほどですが、200ドルをベットしてオールインした時は48%まで勝率が上がります。
途中少し凸凹しているのはシミュレーション回数が少ないためです。
ベット額が大きいほど勝ち逃げできる確率は上がります。
考察
せこく賭ける人は長い時間ゲームを楽しめますが、オールインする人より勝率は低くなります。
「なんと無謀な!」
と思われがちなオールインですが、ある意味理にかなっていると言えます。
但し、これは「目標額を設定して勝ち逃げするぞ!」という時の話です。
200ドルのお金を20ドルずつベットして400ドルで勝ち逃げする場合を想定しましょう。
このせこい人が400ドルまでお金を増やせる確率は37%しかありませんが、それと同時に380ドルまで増やせる確率は40%、360ドルまで増やせる確率は44%、、、240ドルまで増やせる確率は78%、220ドルまで増やせる確率は88%!もあるのです。
でも、200ドルをオールインする人は220ドルや240ドルで勝ち逃げできる可能性はゼロです。
ですので一概にオールインが有利とは言えず、あくまで目標額きっかりで勝ち逃げしたい時に有効な策であると言えそうです。