グランマーチンゲール法の破綻シミュレーション

  • このエントリーをはてなブックマークに追加

スポンサーリンク

※サイト運営にサーバーは必須です※
ロリポップ! はコスパのよい初心者向けサーバーです~

目次

はじめに

目次用の記事:ギャンブルの賭け方の種類をまとめてみた

ギャンブルの賭け方の有名な賭け方としてマーチンゲール法がある。

マーチンゲール法はいわゆる2倍賭けを意味する。

個人的には、これが必勝法となりうるか気になり、プログラムを使ってまじめにシミュレーションしたことがある。(詳細は→マーチンゲール法(2倍賭け)の破綻までのシミュレーション

シミュレーションしてわかったことは、勝負回数を重ねると絶対に100%に限りなく近い確率で破たんするということがわかった。

この記事では、マーチンゲール法の亜種の一つとして、グランマーチンゲール法をまじめにシミュレーションしてみる

グランマーチンゲール法とは

勝率が50%で払戻金が2倍の勝負を基本的に想定しており、以下のルールに従って賭ける

最小の賭け金額を自分で設定し、最初はこの最小の賭け金額からスタートする

勝った場合:次の勝負の賭け金は、設定した最小の賭け金額に戻す
負けた場合:次の勝負の賭け金は、現在賭けている2倍の金額+α(アルファ)する

+α(アルファ)の部分がマーチンゲール法と異なる部分。

+α(アルファ)の部分は、最もスタンダードな流儀だと+1にする

マーチンゲール法と比べて、負けこむと、賭けるお金が多く必要となる

グランマーチンゲール法の具体例

ルールだけ、説明してもなぜこれが儲かるかイメージがつかめないと思うので、具体例を挙げる。

勝率が50%で払戻金が2倍の勝負として、コインの表裏の賭けなどをイメージしてください。

+α(アルファ)の部分は、+1で考える

例えば、5回連続で負けて、6回目で勝利する時を考えると以下のようになる

勝負 勝敗 賭け金 累計損益 利益
1 × 1 -1 1
2 × 3 -4 2
3 × 7 -11 3
4 × 15 -26 4
5 × 31 -57 5
6 63 6 6

負けている場合は、2倍+1で賭けていくので、
1→3→7→15→31
と賭ける金額を増やしていく

この時点で、最初の持ち金から-57になっている。

しかし、6回目で勝つことで、+63される。

最終的に、63-57=+6が残り、最初の持ち金と比べ+6される。

このように、負け続けていても、勝てば、今までの負債が一気に解消される上に、さらに追加で儲けがでるような賭け方となっている。

グランマーチンゲール法のテーブル

勝負回数 賭け金 累計賭け金 勝利時利益
1 1 1 +1
2 3 4 +2
3 7 11 +3
4 15 26 +4
5 31 57 +5
6 63 120 +6
7 127 247 +7
8 255 502 +8
9 511 1013 +9
10 1023 2036 +10
11 2047 4083 +11
12 4095 8178 +12
13 8191 16369 +13
14 16383 32752 +14
15 32767 65519 +15

上のテーブルを見ればわかるが、勝利した時の利益は、負けた回数が増えれば、その分+1される。

例えば、4連敗して5回目で勝ったら、+5される。
また、9連敗しれ10回目で勝ったら、+10される。

つまり、手持ちの資金の期待値は、勝負回数が増えれば、その分だけ増えることが期待される。

例えば、100回勝負した後の手持ちの資金は+100されることが期待される

例として、以下のように勝負が移行したとする

勝負回数 勝敗 累計損益 賭け金
1 1 1
2 2 1
3 × 1 1
4 × -2 3
5 × -9 7
6 × -24 15
7 7 31
8 × 6 1
9 × 3 3
10 10 7

1、2、7、10回目(勝利した時点)の累計損益に注目すると、勝負の回数と累計損益が1対1で対応することがわかる。

何を言いたいかというと、グランマーチンゲール法は資金が枯渇しない場合、手持ちの資金は(+勝負回数)が期待できる

グランマーチンゲール法の検証

マーチンゲール法(2倍賭け)の破綻までのシミュレーションという記事でも述べたが、マーチンゲール法は、無限の資金力があれば、必勝法といえる。そして、その亜種であるグランマーチンゲール法に対しても同じことがいえる。

しかし、実際には、有限のお金しか手元にない。

有限の資金を仮定した場合、グランマーチンゲール法で儲かるか検証する。

以下では2つのプログラムを紹介する。

言語はC++で作ったが、C言語としてコンパイルしても動くと思う

※このプログラムを組んだ人間は、大学時代に少しプログラムをかじった程度の戦闘能力しかない

グランマーチンゲール法の個別シミュレーション

 

変数の定義はマーチンゲール法(2倍賭け)の破綻までのシミュレーションで紹介したプログラムと基本的に同じ。

(一応再掲する)

i_maxで勝負の回数を指定

wでは、賭けたお金の戻る倍率を指定。ここでは2倍を指定

pで勝率を指定、ここでは半々の確率なので50。

m_minでかけ金を指定。m_intで手持ちの軍資金を指定

※初期(initial)のスぺルを自分が勘違いしていたことに後から気が付いた。だが、プログラムと記事を今からすべて手直しするのはしんどいので、時間があったら、宣言する変数の名前をm=intからm_iniに書き替えたい。……文章を書いている人間の英語力の低さがばれて、地味に恥ずかしい。

ここではm_min=1でm_int=1000と、最小の賭け金の1000倍を所持していると考えている。

例えば、最小の賭け金が1000円(千円)だとするなら、手元の軍資金は、1000000円(百万円)。割と現実的な設定だと思われる。

0~100の乱数rを振って、乱数rが勝率pより下の数で収まるなら勝ちの判定がでる。

イメージそしては勝率が30だった場合、乱数をふって5、12、29のような30より下回れば、勝ち。(p>r )31、45、62、98のように30以上だった場合は負け判定が出る。(p<=r)

そして、勝負を続けていくうちに、負け続けることもあるだろう。
そしてついに、2倍+1して賭けようにも手持ちのお金が足りなくなるかもしれない。

この場合、これ以上勝負ができなくなり、プログラムは終了する。(破綻判定)

つまり、借金はNG

実際にプログラムを走らせると以下のような結果となる
勝負回数i_maxは100000(10万回)までとする

※ここで、表示される「賭け金」の意味は、「次の勝負に必要な賭け金」という意味で使われている。(ちょっとわかりづらいかも……)

#倍率は2.000000 勝率は50.000000 最小の賭け金は1.000000 手持ちのお金は1000.000000
1回目 賭け金は3.000000 手持ちのお金は999.000000
2回目 賭け金は1.000000 手持ちのお金は1002.000000
(省略)
768回目 賭け金は1.000000 手持ちのお金は1768.000000
769回目 賭け金は1.000000 手持ちのお金は1769.000000
770回目 賭け金は3.000000 手持ちのお金は1768.000000
771回目 賭け金は7.000000 手持ちのお金は1765.000000
772回目 賭け金は15.000000 手持ちのお金は1758.000000
773回目 賭け金は31.000000 手持ちのお金は1743.000000
774回目 賭け金は63.000000 手持ちのお金は1712.000000
775回目 賭け金は127.000000 手持ちのお金は1649.000000
776回目 賭け金は255.000000 手持ちのお金は1522.000000
777回目 賭け金は511.000000 手持ちのお金は1267.000000
778回目 賭け金は1023.000000 手持ちのお金は756.000000
778回目で手持ちのお金が足りません

srand((unsigned)time(NULL));の部分で時間を参照した上で乱数を発生させている。

そのため、実行するタイミングで結果が変化する。

あと4回ほど実行してみたが以下のようになった

3028回目で手持ちのお金が足りません
8046回目で手持ちのお金が足りません
6494回目で手持ちのお金が足りません
841回目で手持ちのお金が足りません

このように、途中で勝負ができなくなる

※プログラムの結果は「simulation.dat」に出力されるように組まれている。

グランマーチンゲール法の期待値シミュレーション

上のプログラムを何度も走らせて期待値や破綻する率をもとめたい

そのためのプログラムは以下のようになる

 

 

上のプラグラムになかった要素として

破綻率b_proを求める

※ここでいう破綻率とは手持ちのお金が、2倍+1賭けに耐えられない状況を意味する。借金してお金を用意することはできないとする。

破綻するまで何回勝負ができるかの期待値であるi_exp

※もしも、指定した勝負回数が終了した段階で、破綻しなかった場合は、指定した勝負回数の値が、期待値算出のために使われる

勝負が終わった段階で持っているお金の期待値m_exp

期待値を求めるために何回試行するかを決めるk_max
k_maxを大きくすればするほど、正確な値が求まる。

ひとまずk_max=10でプログラムを走らせると以下のなる

#倍率は2.000000 勝率は50.000000 最小の賭け金は1.000000 手持ちのお金は1000.000000
1番目700回目で破たん 手持ちのお金は678.000000
2番目2428回目で破たん 手持ちのお金は1382.000000
3番目1810回目で破たん 手持ちのお金は764.000000
4番目44回目で破たん 手持ちのお金は22.000000
5番目627回目で破たん 手持ちのお金は605.000000
6番目259回目で破たん 手持ちのお金は237.000000
7番目3960回目で破たん 手持ちのお金は866.000000
8番目2098回目で破たん 手持ちのお金は1052.000000
9番目558回目で破たん 手持ちのお金は536.000000
10番目4593回目で破たん 手持ちのお金は1499.000000
勝負回数は100000
試行回数は10
破たん回数は10
破たん率は100.000000%
破たんするまでに行える勝負回数の期待値(i_exp)は1707.700000
破たんする直前で持っているお金の期待値(m_exp)は764.100000

この場合、10万回の勝負までたどり着けず、途中で破たんしている。

破綻するまで行える勝負回数は1707.700000回。

実質3千回程度の勝負しかできず、お金も最初1000から764.100000となり、儲かっていない。

しかし、試行回数が10回だけだと納得できないと思われるので
試行回数k_maxを100000(10万回)、勝負回数も100000(10万回)

勝負回数は100000
試行回数は100000
破たん回数は99874
破たん率は99.874000%
破たんするまでに行える勝負回数の期待値(i_exp)は2049.226230
破たんする直前で持っているお金の期待値(m_exp)は984.120030

99%以上の確率(99.874000%)で10万回勝負ができずに終わる。

勝負できる回数の期待値はほぼ2000回(2049.226230)

単純なマーチンゲール法の結果は約4000回だったのと比べると、半分の回数しか勝負ができない。

持っているお金は少し増えて、1000から995.062970と若干減る結果に。

結果考察

グランマーチンゲール法で、何度も勝負していくと、ほぼ100%の確率で勝負ができなくなる。

マーチンゲール法の記事でも述べたが、勝負の回数を増やしていくといずれ10連敗、11連敗、12連敗などの連続した敗北をいずれくらう。

マーチンゲール法ではこの連敗の波を乗り越えるには、少なくとも勝負回数が2倍になる際に、自分の所持金が2倍以上になっていないとといずれ破たんが迫る。

グランマーチンゲール法において、勝負回数を2倍に増やすと、絶対に手持ちのお金の期待値も勝負回数分増えるので、最終的には、とんとんの状況になるように一見みえる。

連敗の波をうまく逃れた一部の結果が全体の結果に影響を与えるのではないかと最初は期待していた。

だが、ふたを開けてみれば、儲けも出さないし、勝負できる回数もマーチンゲール法の約半分程度で終わった

αの値を変える

連敗の波を乗り越えるには、少なくとも、勝負回数が2倍になる際に、自分の所持金が2倍以上になっていないといけないと述べた。

+α=+1の場合、勝負回数が増える量と自分の所持金が増える量は同じ(資金がパンクしない限り)

勝負回数が増えるスピード以上に自分の所持金が増やすためにはαを1より大きくしないといけない

そこでα=2とする

※プログラムの勝利した時の処理の部分で、m_bet=m_bet*2+1からm_bet=m_bet*2+2に変えるだけ

以下が結果

勝負回数は100000
試行回数は100000
破たん回数は99938
破たん率は99.938000%
破たんするまでに行える勝負回数の期待値(i_exp)は1314.469440
破たんする直前で持っているお金の期待値(m_exp)は985.822370

勝負できる回数は1314.469440回とα=1の時(2049.226230回)と比べてされに減るのは直観的に理解できるだろう。

資金が少なかったら、すぐに破たんして、いい結果が出なかったのではないかという懸念が生じた。

そのため、試しに、資金を今までの1000から10倍した10000でスタートしてみる
※double m_intを1000から10000へ変更

勝負回数は100000
試行回数は100000
破たん回数は98187
破たん率は98.187000%
破たんするまでに行える勝負回数の期待値(i_exp)は10435.334170
破たんする直前で持っているお金の期待値(m_exp)は9970.935560

結局最初の資金である10000よりも少し減った9970.935560となる

結果考察

プログラム上はα=2にしても破綻する。

グランマーチンゲール法では、+αしている分、勝負回数が2倍になる際に、自分の所持金が2倍+α以上になっていけないからかだろうか?

直観的には+α分は大してことがなさそうだが、まじめに考察する。

 

(グラン)マーチンゲール法は勝負を続けていくうちに、破綻しない限り以下のような結果が期待される

勝負回数の状態:(勝負回数)
所持金の期待値:(最初の所持金)+(勝負回数)×(α+1)/2
破綻しないための金額:(勝負回数)×(α+1)×2

※上の式はαが0,1,2の時にそうなるであろうことを確認(αが3以上の時に成立しているかは確認していないが)

α=0の時(いわゆるマーチンゲール法)

まず考えたいのが、ある勝利(○)に注目する。

その勝利の前にどんだけ敗北(×)していたかを考察する

まず、一度前も負けておらず勝利している確率は1/2(0.5)

また、一つ前が負け(確率1/2)だが、そのさらに前で勝っている確率を考えると
(2回以上連続で負ける確率である1/4の状況を除く)

求める確率は、確率は1/2-1/4=1/4(0.25)

以上を繰り返して、全ての状況を足し合わせる。

すると、勝利した時のもらえる利益の期待値は1になる

※テーブルの期待値合計の値は0.999985だが1に収束することが期待できる。

そもそも、勝利する確率は半々なので、敗北した時も考えると、1回ゲームすることで得られる利益の期待値は、勝利した時のもらえる利益の期待値の半分になる。

ゆえに、所持金の期待値は、(最初の所持金)+(勝負回数)×1/2

また、破綻せず継続的に賭けをするのに必要な金額は、勝負回数と累計賭け金額を考えればよい。

例えば、1024(2の10乗)回勝負を行った場合、10連敗する可能性が1回ぐらいはある。

10連敗に、耐えるには、累計賭け金額である2047必要だと下のテーブルをみればわかる。

これは累計賭け金額は勝負回数の2倍とほぼ同じなので、破綻しないための金額は(勝負回数)×(+2)となる

 

連敗回数 勝負回数 賭け金 累計賭け金 勝利時利益 確率 期待値 累計賭け金/勝負回数
0 1 1 1 1 0.5 0.5 1
1 2 2 3 1 0.25 0.25 1.5
2 4 4 7 1 0.125 0.125 1.75
3 8 8 15 1 0.0625 0.0625 1.875
4 16 16 31 1 0.03125 0.03125 1.9375
5 32 32 63 1 0.015625 0.015625 1.96875
6 64 64 127 1 0.007813 0.007813 1.984375
7 128 128 255 1 0.003906 0.003906 1.9921875
8 256 256 511 1 0.001953 0.001953 1.99609375
9 512 512 1023 1 0.000977 0.000977 1.998046875
10 1024 1024 2047 1 0.000488 0.000488 1.999023438
11 2048 2048 4095 1 0.000244 0.000244 1.999511719
12 4096 4096 8191 1 0.000122 0.000122 1.999755859
13 8192 8192 16383 1 6.1E-05 6.1E-05 1.99987793
14 16384 16384 32767 1 3.05E-05 3.05E-05 1.999938965
15 32768 32768 65535 1 1.53E-05 1.53E-05 1.999969482
          期待値合計

0.999985

(約1)

 (約2)

 

α=1の時

連敗回数 勝負回数 賭け金 累計賭け金 勝利時利益 確率 期待値 累計賭け金/勝負回数
0 1 1 1 1 0.5 0.5 1
1 2 3 4 2 0.25 0.5 2
2 4 7 11 3 0.125 0.375 2.75
3 8 15 26 4 0.0625 0.25 3.25
4 16 31 57 5 0.03125 0.15625 3.5625
5 32 63 120 6 0.015625 0.09375 3.75
6 64 127 247 7 0.0078125 0.0546875 3.859375
7 128 255 502 8 0.00390625 0.03125 3.921875
8 256 511 1013 9 0.001953125 0.017578125 3.95703125
9 512 1023 2036 10 0.000976563 0.009765625 3.9765625
10 1024 2047 4083 11 0.000488281 0.005371094 3.987304688
11 2048 4095 8178 12 0.000244141 0.002929688 3.993164063
12 4096 8191 16369 13 0.00012207 0.001586914 3.996337891
13 8192 16383 32752 14 6.10352E-05 0.000854492 3.998046875
14 16384 32767 65519 15 3.05176E-05 0.000457764 3.998962402
15 32768 65535 131054 16 1.52588E-05 0.000244141 3.999450684
          期待値合計

1.999725342

(約2)

 

(約4)

 

所持金の期待値:(最初の所持金)+(勝負回数)×1
破綻しないための金額:(勝負回数)×4

α=2の時

連敗回数 勝負回数 賭け金 累計賭け金 勝利時利益 確率 期待値 累計賭け金/勝負回数
0 1 1 1 1 0.5 0.5 1
1 2 4 5 3 0.25 0.75 2.5
2 4 10 15 5 0.125 0.625 3.75
3 8 22 37 7 0.0625 0.4375 4.625
4 16 46 83 9 0.03125 0.28125 5.1875
5 32 94 177 11 0.015625 0.171875 5.53125
6 64 190 367 13 0.007813 0.101563 5.734375
7 128 382 749 15 0.003906 0.058594 5.851563
8 256 766 1515 17 0.001953 0.033203 5.917969
9 512 1534 3049 19 0.000977 0.018555 5.955078
10 1024 3070 6119 21 0.000488 0.010254 5.975586
11 2048 6142 12261 23 0.000244 0.005615 5.986816
12 4096 12286 24547 25 0.000122 0.003052 5.99292
13 8192 24574 49121 27 6.1E-05 0.001648 5.996216
14 16384 49150 98271 29 3.05E-05 0.000885 5.997986
15 32768 98302 196573 31 1.53E-05 0.000473 5.998932
          期待値合計

2.999466

(約3

 (約6)

 

所持金の期待値:(最初の所持金)+(勝負回数)×1.5
破綻しないための金額:(勝負回数)×6

勝負回数を重ねていくうちに、最初の所持金はカスみたいなる(勝負を十分行った、極限状況を考える)

所持金の期待値:(最初の所持金)+(勝負回数)×(α+1)/2
破綻しないための金額:(勝負回数)×(α+1)×2

極限では、破綻しないための金額が所持金の期待値の4倍になってしまう。

破綻せず継続的に勝負するために必要なお金に対して、所持金の期待値がいずれ下回るときがくる。

まとめ

(グラン)マーチンゲール法は、長い目で見るとうまくいかない

書籍の紹介

ギャンブルの必勝法が本当に儲かるかプログラミングで検証してみた』は以下の疑問にお答えします。

●勝率が50%の場合、利益を生み出す必勝法は存在するか?
●勝率が60%の場合、どのように賭けるのが最適か?

必勝法と思われている手法を15種類紹介します。必勝法には、例えば、マーチンゲール法(負けた時に2倍賭ける手法)などがあります。これらの手法が本当に儲かるかプログラミングを使用して検証します。また、検証するために必要なプログラミングの知識(C#)も紹介しています。

ギャンブルの必勝法が本当に儲かるかプログラミングで検証してみた

関連記事

目次用の記事:ギャンブルの賭け方の種類をまとめてみた

 

~ギャンブルに絶対儲かる必勝法があるのだろうか?~

私(サイト主)はこの疑問に対して非常に興味を持ち、プログラミングで検証してみました。

このサイトを応援してもいいかなと思う人はぜひとも購入を検討してみてください。

ギャンブルの必勝法が本当に儲かるかプログラミングで検証してみた

     

コメント

  1. nn より:

    こんにちは。50%の連続記録は31連続同じ色が出たとどこかの記事で見ましたが、31連続耐えれる金額があれば、100%勝てるという事ですよね?

    1. kaen より:

      コメントありがとうございます。
      >50%の連続記録は31連続同じ色が出た
      この記述の根拠はおそらく、以下のような考えをしています。
      50%で勝てるゲームで31連続負ける確率は2の31乗(概算で2×10^9で20億ぐらい)。
      一方、人生の長さは80年×365日×24時間×60分×60秒で、約25億秒。
      毎秒、ゲームをしても31連敗はそうそう発生しないだろう。

      >31連続耐えれる金額があれば、100%勝てるという事ですよね?
      いいえ、違います。
      試行回数を重ねると、31連続以上負けることは十分ありえます。
      ただ、現実的に、発生する可能性が低いだけです。

コメントを残す

*

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)