ルーレットの赤と黒のギャンブルのシミュレーション
[May 25 2020: 文末に追記あり。]
どうもToshiです。家にずーっと居ます。ポーカーのやり方すら忘れました。当然海外旅行どころか出張などもなく、行く所といえば近所のスーパーくらいです。
家ですることといえば平日の日中は仕事してますが、その他は趣味に時間を投じたりしてますが概ね暇です。なのでたまにYoutubeなんかもちょこちょこ見たりもしています。
今日は休みなのでのんびり家でYoutube流してた所、ルーレットの赤黒に掛けてギャンブルしてる人がおりました。彼のルールはこうです。
某Youtuberのルーレット赤黒Betのルール
- 赤か黒に規定額を賭ける。
- 勝ったら同じ黒なら黒に再度規定額を賭ける。
- 負けたら賭けた額の倍の金額を賭ける。再度負けたら同じ。
これってマーチンゲール法ですよね。
マーチンゲール法とは負けたら倍プッシュ。を続けるというもの。一見簡単そうですが私の財力では簡単に破綻します。
1回の掛け金を$100として計算してみる。
1回負け
-$100
3回負け
−100+(-100x2)+(-100x4) = -$700
10回負け
−100+(-100x2)+(-100x4) +(-100x8)+(-100x16)+(-100x32)+(-100x64)+(-100x128)+(-100x256)+(-100x512) = -$102,300
まあ明らかに無理ゲーですね。勝てるわけない。
そもそも1/2のギャンブルですらないわけで。0が1つある場合の赤黒Betの勝率は18/37で48.648648648%です。まあ、当たり前ですが 1/2でトントンですから期待値マイナスゲームですね。
本当にそうなの?
というわけで実際にカジノには物理的にも金銭的にも行けないのでシミュレーションしてみました。Rubyっていうプログラム言語で赤と黒にBetするシュミレーションをしてパソコンで処理してみました。(キレイではないソースコードなのでお目汚しですみません。キレイにするのがめんどくさい。一応動くのでご勘弁を。)
プログラムの動作条件
- はじめは赤にBet(別に黒から始めてもいい。)
- 出目はランダム関数で0〜36までシステムで自動で選びます。
- はじめのBetは$100想定。
- お財布は一応無限
- 100回ゲームする。(1000回もできるけど、1日どのくらい回せるんだろう。)
- 0は1つ。(まあ、00でも計算できるけど。)
- 負けたら倍プッシュで反対の色にBet
- MaxBetなし!
というわけで書いたプログラムは以下の通り。プログラムなんてどうでもいいって人は色ついてるところ読み飛ばしてください。
#!/usr/bin/env ruby @red = [1, 3, 5, 7, 9, 12, 14, 16, 18, 19, 21, 23, 25, 27, 30, 32, 34, 36] @black = [2, 4, 6, 8, 10, 11, 13, 15, 17, 20, 22, 24, 26, 28, 29, 31, 33, 35] @bet = 100 @wallet = 0 @target = "BLACK" @count = 100 def win @wallet += @bet * 2 @bet = 100 end def lose @bet *= 2 change_target end def change_target if @target == "RED" @target = "BLACK" else @target = "RED" end end red_count = 0 black_count = 0 @count.times do |index| puts "#{index} 回目 #{@target} に賭ける。" @wallet -= @bet puts "#{@bet} ベットして、お財布の中は #{@wallet} です。" number = rand(0...36) puts "ランダムで出した数字は #{number} です。" if @red.include? number if @target == "RED" puts "赤で勝ち" win else puts "赤で負け" lose end red_count += 1 elsif @black.include? number if @target == "BLACK" puts "黒で勝ち" win else puts "黒で負け" lose end black_count += 1 else puts "ゼロで負け" lose end puts "お財布の中は #{@wallet} " puts "-------------------------------------------" end puts "回した回数 #{@count}" puts "黒が出た回数 #{black_count}" puts "赤が出た回数 #{red_count}" puts "0が出た回数 #{@count-black_count-red_count}" puts "最終収支 #{@wallet}"
というプログラムを10回パソコンで処理してみました。驚きの結果は以下の通り!
※最終収支の単位はドル。
-------------------------------------------
回した回数 100
黒が出た回数 48
赤が出た回数 51
0が出た回数 1
最終収支 1500
-------------------------------------------
回した回数 100
黒が出た回数 49
赤が出た回数 47
0が出た回数 4
最終収支 5100
-------------------------------------------
回した回数 100
黒が出た回数 58
赤が出た回数 37
0が出た回数 5
最終収支 5100
-------------------------------------------
回した回数 100
黒が出た回数 50
赤が出た回数 47
0が出た回数 3
最終収支 4800
-------------------------------------------
回した回数 100
黒が出た回数 57
赤が出た回数 42
0が出た回数 1
最終収支 4400
-------------------------------------------
回した回数 100
黒が出た回数 57
赤が出た回数 39
0が出た回数 4
最終収支 4600
-------------------------------------------
回した回数 100
黒が出た回数 50
赤が出た回数 45
0が出た回数 5
最終収支 4600
-------------------------------------------
回した回数 100
黒が出た回数 56
赤が出た回数 42
0が出た回数 2
最終収支 5100
-------------------------------------------
回した回数 100
黒が出た回数 46
赤が出た回数 51
0が出た回数 3
最終収支 4200
-------------------------------------------
回した回数 100
黒が出た回数 45
赤が出た回数 53
0が出た回数 2
最終収支 4600
あれぇ・・・・マイナスにならない。なんで?と思ったんですが。
- 10回以上連続の負けに耐えられる鉄のお財布を保持。(初期$100で9回連続負けの次の掛け金が$102,300なんで。)
- MaxBetが青天井
- たまたま100回目で最大の負け直後じゃないと収支は基本プラスで表示される。
って所があればなんとかなるなぁという計算です。つまり無理っすね。
何を言いたいかというと、こんなバカな事するくらい家にいるの飽きました。
(プログラムのソースコードのリファクタリングはしてません。ロジックおかしい所があれば教えて下さい。)
[May 25 2020: 追記。]
お財布の中身をプロット(日記に書いたのとは別に再度10回処理を回した。)してグラフにしたら非常に納得。
あー脳内のモヤモヤがビジュアル化できてスッキリ。
シミュレーション:シーズン5で、14回連続で負けてる。
他はそこまでぶれないけど、まあ起こり得るね。
ギャンブル良くないね。