作者leondemon (狗狗)
看板Math
標題Re: [機統] 定額下注的賠光機率
時間Thu Jan 3 21:42:38 2019
※ 引述《Desperato (Farewell)》之銘言:
: D. 結論
: 四題的答案近似值分別為
: 1) ~= 0.000785711
: 2) ~= 0.000000945 |
: 3) ~= 0.00152243884034744235876...
: 4) ~= 0.00152243884034744481467...
: |
寫了一個 JavaScript 代碼模擬遊戲,下方代碼可以用 node.js 執行,
或是開瀏覽器,在網頁右鍵選擇 inspect 找到 console,貼上代碼來執行
=====================================================================
// 宣告函式,不會執行
const WIN = 'win';
const LOSE = 'lose';
const FINISHED = 'done';
const GAME_OVER = 'game over';
function play([win_chances, lose_chances]) {
const total = win_chances + lose_chances;
if (total == 0) {
return [FINISHED, null];
}
const result = Math.floor(Math.random() * total);
return (result < win_chances) ?
[WIN, [win_chances - 1, lose_chances]] :
[LOSE, [win_chances, lose_chances - 1]] ;
}
function game(win_chances, lose_chances, lose_threshold) {
let chances = [win_chances, lose_chances];
let result;
let current_wins = 0;
let current_loses = 0;
const play_series = [];
while (chances) {
[result, chances] = play(chances);
// For debug
// console.log(`Play ${series.length + 1}: ${result}, running next play with [${turns}]`)
play_series.push(result);
if (result == WIN) current_wins++;
if (result == LOSE) current_loses++;
if (current_loses - current_wins >= lose_threshold) {
play_series.push(GAME_OVER);
chances = null;
break;
}
}
return play_series;
}
function simulate_multiple_games(game_count, win_count, lose_count, lose_threshold) {
let finished_counts = 0;
let game_over_counts = 0;
for (let i = 0; i < game_count; i++) {
const play_series = game(win_count, lose_count, lose_threshold);
const game_result = play_series.slice(-1).pop();
if (game_result == FINISHED) finished_counts++;
if (game_result == GAME_OVER) game_over_counts++;
// For debug
// console.log(`Game ${i+1}: ${game_result} with ${play_series.length-1} plays`)
}
return { finished_counts, game_over_counts };
}
=====================================================================
要模擬 100萬次,53勝47負的賽局,起始有16份籌碼的比賽,可執行:
simulate_multiple_games(1000000, 53, 47, 16)
我跑了10次,取平均和標準差,得到提早結束比賽 (GAME_OVER) 的發生機會為
~= 0.0007760
± 0.0000282
另外直接跑了 1 億次模擬 ~= 0.0007851
跟 Desperato 的計算結果差不多
感謝 D 大 :)
補充
要模擬 100萬次,60勝40負的賽局,起始有16份籌碼的比賽
simulate_multiple_games(1000000, 60, 40, 16)
一樣10次的平均和標準差為
~= 0.00000710
± 0.00000285
似乎和 D 大的數據有落差?
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 223.72.90.193
※ 文章網址: https://www.ptt.cc/bbs/Math/M.1546522960.A.D16.html
※ 編輯: leondemon (223.72.90.193), 01/03/2019 21:58:04
推 oblivion87 : 板上神人真的多== 01/03 23:17
推 Desperato : 沒錯又算錯了XD 已訂正 01/04 13:55
→ Desperato : ~= 0.00000580349 進標準差了 至少數量級正確 01/04 13:59
→ leondemon : 感謝!我研究一下公式 :P 01/04 17:18