グッドマン法(1235法)の検証(c++/c言語)

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

スポンサーリンク

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

目次

はじめに

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

この記事では、グッドマン法(1235法)の紹介と、そのシミュレーション結果を示す

グッドマン法(1235法)とは

負けた場合:賭ける金額を1に戻す
勝った場合1・2・3・5・5・5・5……という数字に従って賭ける

※最小の賭け金額をここでは1だと考える

主に払戻金が2倍の時に使われる

グッドマン法(1235法)の具体例

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

勝敗 賭け金 累計賭け金 最終利益
× 1 1 -1
○× 2 3 -1
○○× 3 6 0
○○○× 5 11 1
○○○○× 5 16 6
○○○○○× 5 21 11

 

上のテーブルを見ればわかるが、以下のような特徴がある

  • 1連勝した後、負けると、損する(収支-1
  • 2連勝すれば、最低でもトントンに持ち込める(収支0
  • 3連勝以上して、利益がでる

パーレー法(1・2・4・8……と賭けていく)と比べると、賭ける金額の増加が緩やかである。パーレー法では、途中で負けると、どんな時でも-1の損失をだすが、1235法は3連勝確保できれば、一応の利益は確保できる。

もしも、11235にしたら……

どのような思想の下に、グッドマン法が編み出されたか、私は詳しく知らない。

ただ、「勝利した後、負けても、最終的な収支で損失を出したくない」と考えるなら、1235……と賭けるのではなく、11235にする必要性がある。

連勝回数 勝敗 賭け金 累計賭け金 最終利益
0 × 1 1 -1
1 ○× 1 2 0
2 ○○× 2 4 0
3 ○○○× 3 7 1
4 ○○○○× 5 12 2
5 ○○○○○× 5 17 7
  • 1度でも勝てば、最低でもトントンに持ち込める(収支0)
  • 3連勝以上して、利益がでる

グッドマン法(1235法)の検証

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

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

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

グッドマン法(1235法)の個別シミュレーション

 

プログラムで使用している変数の説明

マーチンゲール法(2倍賭け)の破綻までのシミュレーションで紹介したプログラムと同じ変数の置き方をしている

i_max:勝負の回数
w:賭けたお金の戻る倍率を指定。ここでは2倍を指定
p:勝率を指定。ここでは1/2の確率なので50を指定。

m_min:かけ金を指定
m_ini:最初の資金を指定

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

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

r:乱数(0~100の乱数)

※乱数rが勝率pより下の数で収まるなら勝ちの判定がでる。

そして、勝負を続けていくうちに、負け続けることもあるだろう。
そしてついに、賭けしようにも手持ちのお金が足りなくなるかもしれない。
この場合、これ以上勝負ができなくなり、プログラムは終了する。(破綻判定)

つまり、借金はNG

c:トータルの勝ち負けの差がどのくらいあるか調べる用
int w_str;連勝カウント用

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

#倍率は2.000000 勝率は50.000000 最小の賭け金は1.000000 手持ちのお金は1000.000000
1回目 賭け金は1.000000 win(1連勝) 勝敗差1 手持ちのお金は1001.000000
(省略)
12回目 賭け金は1.000000 win(1連勝) 勝敗差0 手持ちのお金は997.000000
13回目 賭け金は2.000000 win(2連勝) 勝敗差1 手持ちのお金は999.000000
14回目 賭け金は3.000000 win(3連勝) 勝敗差2 手持ちのお金は1002.000000
15回目 賭け金は5.000000 win(4連勝) 勝敗差3 手持ちのお金は1007.000000
16回目 賭け金は5.000000 win(5連勝) 勝敗差4 手持ちのお金は1012.000000
17回目 賭け金は5.000000 lose 勝敗差3 手持ちのお金は1007.000000
(省略)
51891回目 賭け金は1.000000 win(1連勝) 勝敗差-77 手持ちのお金は2.000000
51892回目 賭け金は2.000000 lose 勝敗差-78 手持ちのお金は0.000000
次の勝負に必要な金額は1.000000です。51892回目でゲームを終了します

※srand((unsigned)time(NULL));の部分で時間を参照した上で乱数を発生させている。そのため、実行するタイミングで結果が変化する。

グッドマン法(1235法)の期待値シミュレーション

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

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

※参考までに1235でなく、11235の場合も調べる

1235の場合

 

11235の場合

 

プログラムで使用している変数の説明

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

i_exp: 破綻するまで何回勝負ができるかの期待値
m_exp: 勝負が終わった段階で持っているお金の期待値
k_max:試行回数。
※k_maxを大きくすればするほど、正確な期待値が求まる。

c_exp:勝敗差の期待値

以下では、k_max=20000、i_max=100000で指定。
試行回数2万回、勝負回数10万回。

勝負回数は100000
試行回数は20000
破たん回数は3642
破たん率は18.210000%
破たんするまでに行える勝負回数の期待値(i_exp)は92914.204450
破たんする直前で持っているお金の期待値(m_exp)は1001.436250
破たんした時の勝負差の期待値は0.277750

破綻率は18.21%ほど、3連勝でストップさせるパーレー法よりは破綻率が高い

※パーレー法の破綻率は、11.48%(3連勝でストップ)、42.36%(5連勝でストップ)
参考:パーレー法をシミュレーション(c++/c言語)

ちなみに1235でなく、(11235)にした場合の結果は

勝負回数は100000
試行回数は20000
破たん回数は1590
破たん率は7.950000%
破たんするまでに行える勝負回数の期待値(i_exp)は97758.763700
破たんする直前で持っているお金の期待値(m_exp)は1002.251050
破たんした時の勝負差の期待値は1.212100

7.95%ほどで十分に低い。

書籍の紹介

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

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

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

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

関連記事

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

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

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

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

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

     

コメント

コメントを残す

*

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