マルチンゲール戦略を試してみる
マルチンゲール戦略を試してみるからですが、人によっては宝くじなどで「負けたら購入量を倍増やしていけばいつか儲かるよ」と言われているものと同じです。 宝くじの場合には等価 (つまり連番で 10 枚買えば必ず当たるもの) 以外は計算し辛いので、ここでは簡単に掛金と同じ金額がもらえるというものを想定しています。
#! /usr/bin/gawk -f
# get_money_1.awk
BEGIN {
# 勝率の設定 (何もなければ 1/2)
rate = rate ? rate : 0.5;
srand(); # 乱数の初期化
money = 0; # 所持金の初期値
bet = 1; # 掛金の初期値
for (;;) {
if (rand() >= rate) {
printf("bet[%d] -> ", bet);
printf("Lose -> ");
money -= bet;
printf("sum[%d]\n", money);
bet = 2 * bet;
} else {
printf("bet[%d] -> ", bet);
printf("Win -> ");
money += bet;
printf("sum[%d]\n", money);
if (money >= 1) {
print "You get 10,000 yen.";
exit;
}
}
}
}
実行してみましょう。 もちろん、確率的な問題がありますので、以下の結果はあくまで例として考えてください。
$ nawk -v rate=0.1 -f get_money_1.awk bet[1] -> Win -> sum[1] You get 10,000 yen. $ nawk -v rate=0.1 -f get_money_1.awk bet[1] -> Lose -> sum[-1] bet[2] -> Lose -> sum[-3] bet[4] -> Lose -> sum[-7] bet[8] -> Lose -> sum[-15] bet[16] -> Lose -> sum[-31] bet[32] -> Lose -> sum[-63] bet[64] -> Lose -> sum[-127] bet[128] -> Lose -> sum[-255] bet[256] -> Lose -> sum[-511] bet[512] -> Lose -> sum[-1023] bet[1024] -> Lose -> sum[-2047] bet[2048] -> Lose -> sum[-4095] bet[4096] -> Lose -> sum[-8191] bet[8192] -> Lose -> sum[-16383] bet[16384] -> Lose -> sum[-32767] bet[32768] -> Lose -> sum[-65535] bet[65536] -> Lose -> sum[-131071] bet[131072] -> Lose -> sum[-262143] bet[262144] -> Lose -> sum[-524287] bet[524288] -> Lose -> sum[-1048575] bet[1048576] -> Lose -> sum[-2097151] bet[2097152] -> Lose -> sum[-4194303] bet[4194304] -> Lose -> sum[-8388607] bet[8388608] -> Lose -> sum[-16777215] bet[16777216] -> Lose -> sum[-33554431] bet[33554432] -> Lose -> sum[-67108863] bet[67108864] -> Lose -> sum[-134217727] bet[134217728] -> Lose -> sum[-268435455] bet[268435456] -> Lose -> sum[-536870911] bet[536870912] -> Win -> sum[1] You get 10,000 yen.
最初のものは、確率 (変数 rate) が 0.1 (つまり宝くじで絶対に 10 枚に 1 枚当たるという程度の確率) であっても、1 回で 1 万円を回収してますが、次のものは 536870912 円 (5 億 3 千 6 百 8 十 7 万 9 百十 2 円) もかけないと 1 万円を回収できていませんが、最終的に回収できています。
確率とはそういうものと分かっていても夢を追いかけてしまうのが宝くじなんでしょうね。




