以APL模擬大話骰
上星期同幾個朋友去酒吧玩樂,興之所至玩起經典遊戲“大話骰”來。玩家總共有五人,其中一個朋友起手便叫“七個二”,雖則一點可以用作“百搭”,但酒後的直覺告訴我“七個二”應該是很進取的開局。於是我便要求開了。
結果我輸了。
事後我決定找出五人大話骰中“七個二”的概率,但我的所有概率知識都已經還給老師了,怎麼辦?
想了一會,用電腦模擬擲骰好了,省力不費時。用甚麼語言?除了APL,不作他選。
每局開始,5個人分別擲5粒骰,即係產生25個1至6的亂數:
每次模擬一局未免太沒有效率,但為了方便示範,暫時模擬五局好了:
用二維陣列裝載擲骰結果,每一“橫行”代表一局。先用變數D暫存結果,方便核對。
現在數算每局中有多少個一(“百搭”)或二點:
由於只模擬了五局,用人眼便可以印證以上結果正確。
那麼五局之中,有多少局出現等於、多於七個二?
所有結果都有多於、等於“七個二”。或者係運氣使然,所以才會完敗?按簡單機率理論,增加試驗次數 (trial) 應該會使結果趨向期望值 (expected value)。只要將變數D替換成很多局的結果便可以:
試驗一萬及十萬次,多於、等於“七個二”的概率分別得出78.47%和77.946%。
難怪我會壯烈犧牲。
結果我輸了。
事後我決定找出五人大話骰中“七個二”的概率,但我的所有概率知識都已經還給老師了,怎麼辦?
想了一會,用電腦模擬擲骰好了,省力不費時。用甚麼語言?除了APL,不作他選。
每局開始,5個人分別擲5粒骰,即係產生25個1至6的亂數:
每次模擬一局未免太沒有效率,但為了方便示範,暫時模擬五局好了:
用二維陣列裝載擲骰結果,每一“橫行”代表一局。先用變數D暫存結果,方便核對。
現在數算每局中有多少個一(“百搭”)或二點:
由於只模擬了五局,用人眼便可以印證以上結果正確。
那麼五局之中,有多少局出現等於、多於七個二?
所有結果都有多於、等於“七個二”。或者係運氣使然,所以才會完敗?按簡單機率理論,增加試驗次數 (trial) 應該會使結果趨向期望值 (expected value)。只要將變數D替換成很多局的結果便可以:
試驗一萬及十萬次,多於、等於“七個二”的概率分別得出78.47%和77.946%。
難怪我會壯烈犧牲。
留言
張貼留言