賭事で負けないためのマーチンゲールアルゴリズム

大学時代になんか習ってた

とってもうさんくさい記事タイトル担ってしまいましたが、
大学の授業でなんか習ってたのを思い出して、
2週間前ぐらいにPHPで作ってたのを放置していたので公開。

主に二択でかけた金額が倍になる場合に成立するゲームで利用できる考え方でした。
Wikipedia

<?php
/*
 * マーチンゲールアルゴリズム
 * http://en.wikipedia.org/wiki/Martingale_(betting_system)
 * 当たれば2倍, 外れれば賭けた分が没収される
 * ルーレットの赤黒のみを当てるゲームが前提
 *
 * 最初は1を賭けて、負けたら次のゲームでは賭けた金額の2倍を賭ける
 * 負けても賭ける金額を倍にしているため、
 * 一度でも勝てば手元に賭けた金額が戻ってくるアルゴリズム
 */
$money = 10; // 手持ち金
$bet   = 1;  // 最初にかける金額

// とりあえず1000000回繰返
for ( $i = 0; $i <= 1000000 ; $i++ )
{
    // rand 1 or 0
    $random = rand(1, 100);

    if ( 1 == $random % 2 ) // 勝った場合
    {
        // 賭けた倍の金額を受取って掛け金を1に戻す
        $money = ($bet * 2) + $money;
        $bet = 1;
    }
    else // 負けた場合
    {
        // 賭けた金額を引いて次回の掛け金を2倍にする
        $money -= $bet;
        $bet    = $bet * 2;
    }

    // お金がマイナスになった場合終了
    if ( $money <= 0 )
    {
        echo "{$i}: money->{$money}  bet->{$bet}  You Lose.\n";
        exit;
    }

    echo "{$i}: money->{$money}  bet->{$bet}\n";
}

// 1000000回繰り返せれば勝ち
echo "You Win\n";
$ php martingale.php
...
....

622: money->1707  bet->64
623: money->1643  bet->128
624: money->1515  bet->256
625: money->1259  bet->512
626: money->747  bet->1024
627: money->-277  bet->2048  You Lose.