スポンサーリンク
※サイト運営にサーバーは必須です※
~このサイトもエックスサーバーを使用しています~
目次
はじめに
※目次用の記事:ギャンブルの賭け方の種類をまとめてみた
ギャンブルの賭け方の有名な賭け方としてマーチンゲール法がある。
マーチンゲール法はいわゆる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言語としてコンパイルしても動くと思う
※このプログラムを組んだ人間は、大学時代に少しプログラムをかじった程度の戦闘能力しかない
グランマーチンゲール法の個別シミュレーション
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 |
#include <stdio.h> #include <stdlib.h> #include <math.h> #include <time.h> int main() { int i=0; int i_max=100000;//勝負回数 double w=2.0; //賭け金の変換率(2倍以上)(win) double p=50; //勝率(50%以下)(probability) double m_min=1;//最小の賭け金額(money) double m_int=1000;//最初の手持ちの資金(money_initial) //乱数(時間による変化) srand((unsigned)time(NULL)); //ファイルの出力準備 FILE *sf; sf = fopen("simulation.dat","w");//出力するファイルの名前を指定 //エラー if(sf==NULL){ printf("ファイルオープンエラー\n"); return -1; } //初期条件の表示 printf("#倍率は%lf\t勝率は%lf\t最小の賭け金は%lf\t手持ちのお金は%lf\n",w,p,m_min,m_int); fprintf(sf,"#倍率は%lf\t勝率は%lf\t最小の賭け金は%lf\t手持ちのお金は%lf\n",w,p,m_min,m_int); double m_now;//現在の資金 double m_bet;//賭け金 //初期化 m_bet=m_min;//最初は最小の賭け金でスタート m_now=m_int;//最初は最初の手持ちの資金でスタート for(i=1;i<=i_max;i++) { double r;//乱数(rand) r=100.0*rand()/(RAND_MAX+1.0);//0から100の乱数を出す if (p<=r){//負けの場合 m_now=m_now-m_bet; m_bet=m_bet*2+1;//2倍賭け+1 } else{//勝ちの場合 m_now =m_now+m_bet*(w-1.0); m_bet =m_min;//賭け金を最小額に戻す } printf("%d回目\t賭け金は%lf\t手持ちのお金は%lf\n",i,m_bet,m_now); fprintf(sf,"%d回目\t賭け金は%lf\t手持ちのお金は%lf\n",i,m_bet,m_now); if(m_now<m_bet){//手持ちの金より賭けるお金が高い場合 printf("%d回目で手持ちのお金が足りません\n",i); fprintf(sf,"%d回目で手持ちのお金が足りません\n",i); break; } }//for(i)文の終わり //sfクローズ fclose(sf); return 0; }//プログラムの終わり |
変数の定義はマーチンゲール法(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」に出力されるように組まれている。
グランマーチンゲール法の期待値シミュレーション
上のプログラムを何度も走らせて期待値や破綻する率をもとめたい
そのためのプログラムは以下のようになる
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 |
#include <stdio.h> #include <stdlib.h> #include <math.h> #include <time.h> int main() { int k; int k_max=10;//試行回数 int i=0; int i_max=100000;//勝負回数 double w=2.0; //賭け金の変換率(2倍以上)(win) double p=50; //勝率(50%以下)(probability) double m_min=1;//最小の賭け金額(money) double m_int=1000;//最初の手持ちの資金(money_initial) int b;//破たん回数のカウント(Bankruptcy) b=0;//初期化 int i_sum;//勝負回数の合計 double m_sum;//最終的なお金の合計 i_sum=0;//初期化 m_sum=0.0; //乱数(時間による変化) srand((unsigned)time(NULL)); //ファイルの出力準備 FILE *sf; sf = fopen("simulation.dat","w");//出力するファイルの名前を指定 //エラー if(sf==NULL){ printf("ファイルオープンエラー\n"); return -1; } //初期条件の表示 printf("#倍率は%lf\t勝率は%lf\t最小の賭け金は%lf\t手持ちのお金は%lf\n",w,p,m_min,m_int); fprintf(sf,"#倍率は%lf\t勝率は%lf\t最小の賭け金は%lf\t手持ちのお金は%lf\n",w,p,m_min,m_int); for(k=1;k<=k_max;k++) { int i_cout;//勝負回数のカウント(カウントのスペルミスっている) i_cout=0; double m_now;//現在の資金 double m_bet;//賭け金 //初期化 m_bet=m_min;//最初は最小の賭け金でスタート m_now=m_int;//最初は最初の手持ちの資金でスタート for(i=1;i<=i_max;i++) { double r;//乱数(rand) r=100.0*rand()/(RAND_MAX+1.0);//0から100の乱数を出す if (p<=r){//負けの場合 m_now=m_now-m_bet; m_bet=m_bet*2+1;//2倍賭け+1 } else{//勝ちの場合 m_now =m_now+m_bet*(w-1.0); m_bet =m_min;//賭け金を最小額に戻す } i_cout=i;//i_coutを定義しないと破たんしない(セーフ)場合、iと値が1ずれてしまうため if(m_now<m_bet){//手持ちの金より賭けるお金が高い場合 break; } }//for(i)文の終わり if(i_cout<i_max) { printf("%d番目%d回目で破たん\t手持ちのお金は%lf\n",k,i_cout,m_now); fprintf(sf,"%d番目%d回目で破たん\t手持ちのお金は%lf\n",k,i_cout,m_now); b=b+1; } else{ printf("%d番目\t%d回目までセーフ\t手持ちのお金は%lf\n",k,i_cout,m_now); fprintf(sf,"%d番目\t%d回目までセーフ\t手持ちのお金は%lf\n",k,i_cout,m_now); } i_sum=i_sum+i_cout; m_sum=m_sum+m_now; }//for(k)文の終わり //破たん率 printf("勝負回数は%d\n",i_max); printf("試行回数は%d\n",k_max); printf("破たん回数は%d\n",b); fprintf(sf,"勝負回数は%d\n",i_max); fprintf(sf,"試行回数は%d\n",k_max); fprintf(sf,"破たん回数は%d\n",b); double b_pro= (double)b/(double)k_max*100.0;//(double)を抜くとb/k_maxがゼロと評価されてしまう printf("破たん率は%lf%\n",b_pro); fprintf(sf,"破たん率は%lf%\n",b_pro); double i_exp=(double)i_sum/(double)k_max; double m_exp=(double)m_sum/(double)k_max; printf("破たんするまでに行える勝負回数の期待値(i_exp)は%lf\n",i_exp); printf("破たんする直前で持っているお金の期待値(m_exp)は%lf\n",m_exp); fprintf(sf,"破たんするまでに行える勝負回数の期待値(i_exp)は%lf\n",i_exp); fprintf(sf,"破たんする直前で持っているお金の期待値(m_exp)は%lf\n",m_exp); //sfクローズ fclose(sf); return 0; }//プログラムの終わり |
上のプラグラムになかった要素として
破綻率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#)も紹介しています。
ギャンブルの必勝法が本当に儲かるかプログラミングで検証してみた
関連記事
目次用の記事:ギャンブルの賭け方の種類をまとめてみた
~プログラミングを勉強してみませんか?~
TechAcademy [テックアカデミー] は無料の体験講座が用意されているので、気軽に体験できます。
※私(サイト主)も無料体験講座を実際に受けてみました(→感想)
こんにちは。50%の連続記録は31連続同じ色が出たとどこかの記事で見ましたが、31連続耐えれる金額があれば、100%勝てるという事ですよね?
コメントありがとうございます。
>50%の連続記録は31連続同じ色が出た
この記述の根拠はおそらく、以下のような考えをしています。
50%で勝てるゲームで31連続負ける確率は2の31乗(概算で2×10^9で20億ぐらい)。
一方、人生の長さは80年×365日×24時間×60分×60秒で、約25億秒。
毎秒、ゲームをしても31連敗はそうそう発生しないだろう。
>31連続耐えれる金額があれば、100%勝てるという事ですよね?
いいえ、違います。
試行回数を重ねると、31連続以上負けることは十分ありえます。
ただ、現実的に、発生する可能性が低いだけです。