ポーカー負けても泣かない努力をする人の記録

自称寿司PokerPlayerです。僕のBlog読んでも強くはなりません。

ルーレットの赤と黒のギャンブルのシミュレーション

[May 25 2020: 文末に追記あり。]

どうもToshiです。家にずーっと居ます。ポーカーのやり方すら忘れました。当然海外旅行どころか出張などもなく、行く所といえば近所のスーパーくらいです。
家ですることといえば平日の日中は仕事してますが、その他は趣味に時間を投じたりしてますが概ね暇です。なのでたまにYoutubeなんかもちょこちょこ見たりもしています。
今日は休みなのでのんびり家でYoutube流してた所、ルーレットの赤黒に掛けてギャンブルしてる人がおりました。彼のルールはこうです。


某Youtuberのルーレット赤黒Betのルール

  1. 赤か黒に規定額を賭ける。
  2. 勝ったら同じ黒なら黒に再度規定額を賭ける。
  3. 負けたら賭けた額の倍の金額を賭ける。再度負けたら同じ。

これってマーチンゲール法ですよね。

マーチンゲール法とは負けたら倍プッシュ。を続けるというもの。一見簡単そうですが私の財力では簡単に破綻します。

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するシュミレーションをしてパソコンで処理してみました。(キレイではないソースコードなのでお目汚しですみません。キレイにするのがめんどくさい。一応動くのでご勘弁を。)

プログラムの動作条件

  1. はじめは赤にBet(別に黒から始めてもいい。)
  2. 出目はランダム関数で0〜36までシステムで自動で選びます。
  3. はじめのBetは$100想定。
  4. お財布は一応無限
  5. 100回ゲームする。(1000回もできるけど、1日どのくらい回せるんだろう。)
  6. 0は1つ。(まあ、00でも計算できるけど。)
  7. 負けたら倍プッシュで反対の色にBet
  8. 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





あれぇ・・・・マイナスにならない。なんで?と思ったんですが。

  1. 10回以上連続の負けに耐えられる鉄のお財布を保持。(初期$100で9回連続負けの次の掛け金が$102,300なんで。)
  2. MaxBetが青天井
  3. たまたま100回目で最大の負け直後じゃないと収支は基本プラスで表示される。

って所があればなんとかなるなぁという計算です。つまり無理っすね。


何を言いたいかというと、こんなバカな事するくらい家にいるの飽きました。
(プログラムのソースコードリファクタリングはしてません。ロジックおかしい所があれば教えて下さい。)




[May 25 2020: 追記。]

f:id:yumyum_eno:20200525162135p:plain

お財布の中身をプロット(日記に書いたのとは別に再度10回処理を回した。)してグラフにしたら非常に納得。
あー脳内のモヤモヤがビジュアル化できてスッキリ。
シミュレーション:シーズン5で、14回連続で負けてる。
他はそこまでぶれないけど、まあ起こり得るね。
ギャンブル良くないね。