ルーレットは金持ちほど勝つ確率が高いのか?百万回シミュレーションしてみた

Photo by Danilo Capece on Unsplash

ルーレットで300ドルの利益を得たい時、手元に100ドルしかない人と、1,000ドルある人とでは勝てる確率は違ってくるのでしょうか?

つまり、100ドルを400ドルに増やせる確率と、1,000ドルを1,300ドルに増やせる確率は異なるのでしょうか?

この疑似ゲームをPythonを使って百万回繰り返して、勝率を比較してみました。

 

ルーレットで勝ち逃げしようとする場合、その勝敗に影響を与える変数は初期資金額ベット額目標額の3つです。

今回は初期資金額が与える影響をシミュレーションします。

ベット額が与える影響については、下記の記事でシミュレーションしています。

ベット額の大小によりルーレットで勝ち逃げできる確率は変わってくるのか?

ベット額の大小によりルーレットで勝ち逃げできる確率は変わってくるのか?

 

シミュレーションの方法

ルーレットの種類はヨーロピアンルーレットとします。

初期資金額100ドル、200ドル、、、900ドル、1,000ドル10通りでシミュレーションを行います。

また、それぞれに対応して目標金額400ドル、500ドル、、、1,200ドル、1,300ドルとします。

ゲームごとのベット額は毎回20ドルとします。

 

これら10通りの初期資金額と目標金額の組につき、それぞれ百万回のゲームを行い、毎回のゲームで成功率、つまり目標額に到達したか、到達しなかったか(手持ち資金がゼロになったか)を判定します。

これにより、10通りのそれぞれの組についての成功率を求めることができます。

 

Pythonコード

import random

def martingale(onhand, ini_bet, target):
    bet = ini_bet
    onhand_log = []
    while onhand > 0 and onhand < target: #手持ち資金がゼロまたは目標金額にになるまで繰り返し
        choice = random.choices(p_options, k = 1, weights = p_weights) #確率ウェイトに基づくプレーヤーの選択
        if bet > onhand: #ベット額が手持ち資金より足りない場合
            bet = onhand #手持ち資金をベット額に設定
        outcome = random.choices(options, k = 1, weights = weights) #確率ウェイトに基づきルーレットの結果を生成
        if outcome == choice: #当りの場合
            onhand += bet #手持ち金を増やす
        else: #外れの場合
            onhand -= bet #手持ち金を減らす
        onhand_log.append(onhand)
    return onhand_log

ini_bet = 20 #ベット額
options = ['R', 'B', 'G'] #ルーレット結果のオプション
weights = [18, 18, 1] #ルーレットオプションの確率ウェイト
p_options = ['R', 'B'] #プレーヤーの選択肢
p_weights = [1, 1] #プレーヤーの確率ウェイト

win_rates = []
for j in range(10):
    ini_onhand = 100 + j * 100 #初期資金を100ドルずつ増加
    ini_target = 400 + j * 100 #目標金額を100ドルずつ増加
    win_flgs = []
    for i in range(1000000):
        logs = martingale(ini_onhand, ini_bet, ini_target) #1ゲーム当りの手持ち金推移を取得
        final_amount = logs[-1] #最終の手持ち金額を取得
        if final_amount > 0:
            win_flg = 1 #最終の手持ち金額が正なら成功
        else:
            win_flg = 0 #最終の手持ち金額が0なら失敗
        win_flgs.append(win_flg)
    win_rate = (sum(win_flgs) / len(win_flgs)) * 100 #成功率を算出
    win_rates.append(win_rate)

win_rates

 

シミュレーション結果

結果はこのようになりました。

[15.9359,
 25.0279,
 30.7557,
 34.5612,
 37.2316,
 39.0903,
 40.4482,
 41.499900000000004,
 42.227,
 42.7749]

初期資金が100ドルしかない場合は300ドルを増やせる確率は16%しかありませんが、1,000ドル突っ込める人はその確率が43%まで上昇します。

約3倍も違うのですね。

グラフで表すと、次のようになります。

このようにきれいな右肩上がりの放物線になりました。

ある決まった利益を得たい時には、初期資金を多く注ぎ込める金持ちほど成功する確率が高くなることがわかります。

 

金持ちの勝率はどこまで上がるのか?

上のグラフを見ると、初期資金が多いほど勝つ確率が右肩上がりで増えますが、どこかで頭打ちになりそうです。

その確率は何%でしょうか?

試しに10,000ドルを突っ込んで10,300ドルまで増やせる確率をシミュレーションしたら46.2%になりました。

ヨーロピアンルーレットの還元率は97.3%ですが、どうやらその1/2に収束するようです。

【ルーレットの還元率】理論値通りになるかPythonで百万回シミュレーションしてみた

 

1回のゲームで当たる確率は還元率の1/2ですが、初期資金を無限大に近づけていくと目標利益である300ドルが微々たる額になるため、1回のゲームで当たる確率に限りなく近づいていくためと考えられます。

 

なんとも金持ちは有利なように思えますが、始めに突っ込んだ資金がすべてパーになる確率が50%強もあることを考慮すると、たかが300ドルを稼ぐためにリスクを負ってそんな大金をつぎ込む金持ちもいないでしょう。