03.19 為何戒賭,程序員用計算機模擬色子猜大小,發現民間策略不管用

俗話說,十賭九輸。但有些人就是不信,以為自己有點小竅門,有點小門道,不會輸錢。實則不知,當你踏進賭場的門時,已經輸了。這裡就運用計算機模擬技術,來驗證下那些民間策略為何不管用。好勸深陷其中的人及早抽身上岸。

為何戒賭,程序員用計算機模擬色子猜大小,發現民間策略不管用

澳門娛樂場押大小

先講遊戲規則:這是在澳門娛樂場常見的一種遊戲規則,一共三個色子,放到倒扣的碗中搖動,然後翻開碗,看朝上的點數。其每個點數加一起大於10,那麼就是大,反之為小。只要押中就為贏。但要是出現111,222,333,444,555,666這種(豹子),那麼直接輸。

為何戒賭,程序員用計算機模擬色子猜大小,發現民間策略不管用

永利、葡京娛樂場


民間壓注策略一:前面10次中,已經7次以及7次以上出現大或者小,那麼接下來一把壓其對立面。按照“概率”來說,前面出了那麼多的大(小),那麼接下來肯定出小(大)的概率要大點,畢竟總體概率要平衡到50%。

民間壓注策略二:撐死膽大的,餓死膽小的,前面已經連續出現多次大(小)的時候,我再跟進買大(小)。相信有玄學存在,出大小會有連續性,下一次肯定還是大(小)。

那接下來我們寫程序模擬,用民間策略一押注方式,看看到底能不能夠賺錢。

我們以本金10000,每次都200來算,一共進行500輪。

策略一500次模擬結果:

為何戒賭,程序員用計算機模擬色子猜大小,發現民間策略不管用

策略一看來不行,有兩次都輸光光了

那接下來我們用民間策略二押注方式,看看到底能不能夠賺錢。(本金也是10000,每次都200來算,一共進行500輪。)

策略二500次模擬結果:

為何戒賭,程序員用計算機模擬色子猜大小,發現民間策略不管用

策略二輸光光次數明顯多於策略一,看來玄學不存在


最後發現手頭資金大概率會低於初始本金,那要是我們迷戀上了,來他個1000輪呢?

按照這個策略,我模擬出了1000輪後手頭的本金:

策略一1000輪後:

為何戒賭,程序員用計算機模擬色子猜大小,發現民間策略不管用

看來玩的越多,策略一輸光光的概率也變大了

策略二1000輪後:

為何戒賭,程序員用計算機模擬色子猜大小,發現民間策略不管用

用策略二毫無疑問會使你輸光光

看來,結果是清晰的,也就是你參與的越多,那就輸的概率越大,輸的也是越慘。正應了那句不怕你贏錢,就怕你不來。只有你來了,才會有更多的次數累計。同時,輸的金額也被累計。


那為什麼這兩個民間策略失效了呢?因為就算你的概率大,那最多也只是將勝負的天平搬到理論值,而不會將勝負的天平搬倒。豹子的存在,就決定了,每次下注,必定都是輸的概率大。而宏觀的規律,對微觀的影響是沒有的。就算前面1000次都是同一個大小,那下一次,也是概率均等出現,而不是會大概率出固定的值。

為何戒賭,程序員用計算機模擬色子猜大小,發現民間策略不管用

最後贏得都是莊家

民間策略,實際上就是心裡安慰,明明沒有規律,偏偏要自己找規律。找到的規律,也是不符合統計數學原理的。所以才會出現民間策略失靈的情景。

如果看清這點討論,知道數學期望。那就會明白,實際上每一次投注,你能拿回來的都要少於投注本身。這樣你就不會想著all-in了。

以下是我的代碼,運行的話需要安裝PHP環境。有興趣的朋友可以自己下載下來,調調你自己的小竅門是否起效


header("Content-Type: text/html; charset=utf-8");
//計算時間函數
function microtime_float() {
list($usec, $sec) = explode(" ", microtime());
return ((float) $usec + (float) $sec);
}
//擲骰子函數
function get_rand() {
return array("a" => mt_rand(1, 6), "b" => mt_rand(1, 6), "c" => mt_rand(1, 6));
}
//記錄每次結果
$jilu = [];
//策略二,計算最近10次,只有在裡面有累計出現大或者小超過$count_u次的時候出手壓對立面
function cal_jl7($jilu, $count_u, $status) {
$d =$x=0;
if (count($jilu) < 11) {
return 0;
}
//計算最近十吧,返回壓大還是壓小
for ($i = count($jilu) - 1; $i > count($jilu) - 11; $i--) {
if ($jilu[$i] > 0) {
$d++;
} else {
$x++;
}
}
if ($d > $count_u) {
//要壓小
if ($status != 1) {
return 1;
} else {
return -1;
}
} else if ($x > $count_u) {

//要壓大
if ($status != 1) {
return -1;
} else {
return 1;
}
} else {
//這把不玩
return 0;
}
}
$start = microtime_float();
//被通殺次數
$ts = 0;
//玩家贏次數
$wo = 0;
//莊家贏次數
$zuang = 0;
//原始資金
$myMoney = 10000;
//沒把壓多少
$per_cost = 200;
//計數
$all_count = 0;
//一共玩幾把
$all_play_times = 500;
//$status策略一設置為1,策略二設置為2
$status = 1;
for ($i = 1; $i <= 100000; $i++) {
$cal = cal_jl7($jilu, 6, $status);
$out = get_rand();
if ($i == 12) {
$ts = 0;
$wo = 0;
$zuang = 0;
}
if (($out["a"] + $out["b"] + $out["c"]) > 10) {
$j = 1;
} else {
$j = -1;
}
$jilu[] = $j;
if ($cal == 0) {
//這把不玩
continue;

} else {
$all_count++;
}
if ($all_count > $all_play_times) {
break;
}
if ($out["a"] == $out["b"] && $out["b"] == $out["c"]) {
$ts++;
$zuang++;
$myMoney -= $per_cost;
} else {
if ($cal == 1) {
if (($out["a"] + $out["b"] + $out["c"]) > 10) {
$wo++;
$myMoney += $per_cost;
} else {
$zuang++;
$myMoney -= $per_cost;
}
} else {
if (($out["a"] + $out["b"] + $out["c"]) > 10) {
$zuang++;
$myMoney -= $per_cost;
} else {
$wo++;
$myMoney += $per_cost;
}
}
}
if ($myMoney == 0) {
echo "已經輸光光,共玩了:" . $i . "次
";
break;
}
}
$cost = microtime_float() - $start;
echo "計算費時:" . $cost . "ms" . "
";
echo "通殺:" . $ts . "
";
echo "我贏次數:" . $wo . "
";
echo "莊贏次數:" . $zuang . "
";
echo "贏錢概率 %:" . ($wo / ($wo + $zuang) * 100) . "
";
echo "我的剩餘錢:" . $myMoney . "

";
echo "一共玩了幾把:" . $all_count;

感謝觀看,有不嚴謹的地方還希望各位多多指教。


分享到:


相關文章: