バーネット法(1326法)の検証(c++/c言語)

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

スポンサーリンク

※サイト運営にサーバーは必須です※
~このサイトもエックスサーバーを使用しています~

目次

はじめに

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

この記事では、バーネット法(1326法)の紹介と、そのシミュレーション結果を示す

バーネット法(1326法)とは

負けた場合:賭ける金額を1に戻す
勝った場合1・3・2・6という数字に従って賭ける。(数字の6までいったら、再び1にする)

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

バーネット法(1326法)の具体例

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

勝敗 賭け金 累計賭け金 最終利益
× 1 1 -1
○× 3 4 -2
○○× 2 6 2
○○○×(負) 6 12 0
○○○○(勝) 6 12 6

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

  • 1連勝した後、負けると、損する(収支-2)
  • 2連勝以上すれば、最低でもトントンに持ち込める
  • 3連勝の場合、利益が出ない(収支0)
  • 利益を出すのは、2連勝と4連勝した場合のみ

似たような賭け方に、グッドマン法(1235法)とパーレー法(1・2・4・8……)がある。

※グッドマン法(1235法)と比べると、バーネット法(1326法)はどのような思想でそのような数字の順番で賭けているのか、正直よくわからない。

バーネット法(1326法)の検証

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

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

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

バーネット法(1326法)の個別シミュレーション

 

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

※マーチンゲール法(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:トータルの勝ち負けの差がどのくらいあるか調べる用
w_str;連勝カウント用

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

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

#倍率は2.000000 勝率は50.000000 最小の賭け金は1.000000 手持ちのお金は1000.000000
1回目 賭け金は1.000000 lose 勝敗差-1 手持ちのお金は999.000000
(省略)
92回目 賭け金は1.000000 win(1連勝) 勝敗差-30 手持ちのお金は954.000000
93回目 賭け金は3.000000 win(2連勝) 勝敗差-29 手持ちのお金は957.000000
94回目 賭け金は2.000000 win(3連勝) 勝敗差-28 手持ちのお金は959.000000
95回目 賭け金は6.000000 win(4連勝) 勝敗差-27 手持ちのお金は965.000000
96回目 賭け金は1.000000 win(5連勝) 勝敗差-26 手持ちのお金は966.000000
97回目 賭け金は3.000000 win(6連勝) 勝敗差-25 手持ちのお金は969.000000
98回目 賭け金は2.000000 win(7連勝) 勝敗差-24 手持ちのお金は971.000000
(省略)
61464回目 賭け金は1.000000 win(1連勝) 勝敗差-360 手持ちのお金は3.000000
61465回目 賭け金は3.000000 lose 勝敗差-361 手持ちのお金は0.000000
次の勝負に必要な金額は1.000000です。61465回目でゲームを終了します

バーネット法(1326法)の期待値シミュレーション

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

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

 

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

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

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

c_exp:勝敗差の期待値

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

勝負回数は100000
試行回数は20000
破たん回数は3861
破たん率は19.305000%
破たんするまでに行える勝負回数の期待値(i_exp)は92496.902900
破たんする直前で持っているお金の期待値(m_exp)は998.455000
破たんした時の勝負差の期待値は-1.018900

破綻率は19.305%で、グッドマン法(1235法)の破綻率である18.21%よりは、少し高めにでている。

書籍の紹介

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

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

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

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

関連記事

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

~プログラミングを勉強してみませんか?~

TechAcademy [テックアカデミー] 無料の体験講座が用意されているので、気軽に体験できます。

※私(サイト主)も無料体験講座を実際に受けてみました(→感想)

     

コメント

コメントを残す

*

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