背景
絶対に勝てるギャンブルの仕方知っていますか?
あなたはこの情報を手に入れるだけで夢のような生活を送ることができます!
このような怪しい情報商材みたいなのありますよね。
そんな話をシミュレーションしてみようという話です。
マーチンゲール法
いわゆる絶対負けないギャンブルの仕方(掛け金の変え方)です。
この方法を利用して負けても当方は責任を負いません。
ゲーム
・単純化として「ルーレットの赤か黒だけに賭ける」場合を考える。
・ルーレットの玉が自分の指定の色だったら掛け金分貰えて、外れたら掛け金分失う。
・ルーレットは「0」や「00」という赤や黒でもない場所があり、そこに玉が入れば赤や黒にかけていたひとは負けになる。(だから還元率は97%程度)
マーチンゲール法のやり方
・負けたら賭け金を倍にするだけ
・(勝ったら掛け金を最小単位にもどす)
マーチンゲール法の前提
・青天井(掛け金に上限がない)であること
・かなりの元手で必要
例
- 1コインを賭けて負ける (収支-1コイン)
- 負けたので2コインを賭ける
- 2コインを賭けた試合で負ける (収支-3コイン)
- 負けたので4コインを賭ける
- 4コインを賭けた試合で勝つ (収支+1コイン)
このような感じでどんなに負けても一回勝てば取り戻せる賭け方。
でも私はこの方法が理解できるが納得がいかない。
だからシミュレーションしてみる。
プログラム
Pythonを使って作ってみました。
from random import random
balance = 1000000 # 残高
min_bet = 1.0 # 最小掛け金
win_chance = 0.475 # 勝てる確率
game_times = 1000000000 # 最大ゲーム数
def game():
global balance
if random() < win_chance:
balance += min_bet
return True
else:
balance -= min_bet
return False
def print_state(state, count):
print("before_state", str(state)[0], "count", count, "balance:", balance, "bet", min_bet)
if __name__ == "__main__":
for i in range(game_times):
if balance < 0:
print_state(vic_or_def, i)
break;
vic_or_def = game()
print_state(vic_or_def, i)
# マーチンゲール法
if vic_or_def:
min_bet = 1.0
else:
min_bet *= 2
# min_bet += 1
シミュレーション結果
縦軸が残高で、横軸がゲーム数(≒時間軸)
図1. 初期の残高1,000,000(勝率0.475)でゲームを行った1
図2. 初期の残高1,000,000(勝率0.475)でゲームを行った2
図3. 初期の残高1,000,000(勝率0.5)でゲームを行った2
順調に勝てるが、最終的に負けが込み破たんする
まとめ
・確かに勝てることがわかった(途中まで)
・元手が本当に大量にないと勝てない
・実際に行うには机上の空論感が強い
宣伝
フォローお願いします。@redshoga