作者hexjacal (黑麻糬)
看板Programming
標題[問題] 亂數問題(更改)
時間Wed Aug 20 14:25:21 2014
開發平台(Platform): (Ex: VC++, GCC, Linux, ...)
Dev C++ 4.9.9.2
就我自己曉得的電腦亂數 rand()
是一張亂數表為底,在亂數種子未重設之前
它在這張表中依序取出數字出來當做亂數
因為我現在是想透過電腦模擬來驗證數學結果
數學結果是 "最理想" 的狀態下的期望值結果
但是不論我怎麼試,模擬的結果似乎都無法做到以上的這點
因為模擬結果 dependent on random table
例如:
兩張只含有 8 個 0, 1 亂數的亂數表 A, B, C,
A: 1 1 0 1 0 0 0 1
B: 1 1 0 1 0 0 1 0
C: 1 1 1 1 0 0 0 0
三表都各含 4 個 0、4 個 1,從這三表去取出來的數滿足 P(A)=P(偶)=0.5
如果遊戲規則訂為
"投入1$,取兩數,若是一奇一偶則多得 1$,反之 1$ 就沒了。"
就數學的角度,在公平的遊戲中,機率為 P(奇 & 奇)=P(奇 & 偶)=P(偶 & 奇)=P(偶 & 偶)=0.25。
就電腦亂數表的角度,頭尾相接持續取亂數
A 表滿足以上各 Case 機率=0.25 的性質=================> P(+分)=P(-分)=4/8
B 表 n(奇&奇)=1、n(奇&偶)=3、n(偶&奇)=3、n(偶&偶)=1 => P(+分)=6/8, P(-分)=2/8
C 表 n(奇&奇)=3、n(奇&偶)=1、n(偶&奇)=1、n(偶&偶)=3 => P(+分)=2/8, P(-分)=6/8
用這三張亂數表去做這個遊戲的模擬
那 A 表的顯示遊戲公平(與數學結果相同),B 表顯示玩家得利,C 表顯示莊家得利
Q:原表亂數 equally likely 不能 implies 帶出來的遊戲模擬結果也是 equally likely 的吧?
那在模擬時要怎麼辦? 先做出滿足條件的亂數表? 還是這兩數各給一張表?
希望版大們能給點意見~
腦筋打結時容易鑽牛角尖,版大們也可以當我胡思亂想。
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 1.165.185.171
※ 文章網址: http://www.ptt.cc/bbs/Programming/M.1408515924.A.23D.html
※ 編輯: hexjacal (1.165.185.171), 08/20/2014 14:26:46
推 bxxl: 亂數表又不保證你不會抽到同樣的號碼(球) 114.45.136.64 08/20 22:20
→ bxxl: 如果你需要non-replacement抽法,要自己處理 114.45.136.64 08/20 22:21
→ bxxl: 這跟一袋球或五袋球沒有關係 114.45.136.64 08/20 22:22
→ bxxl: 你只需要一個產生器(一個seed) 114.45.136.64 08/20 22:22
→ bxxl: 也就是說你原本的認知是錯誤的,用亂數產生器 114.45.136.64 08/20 22:23
→ bxxl: 抽到1號球,下次再抽到1號球的機率一樣 114.45.136.64 08/20 22:24
推 LPH66: 你的問題其實就是標準的賭徒謬誤 123.195.39.85 08/20 22:55
→ hexjacal: 了解嚕,我再多模擬幾次試試看 1.165.185.171 08/21 11:27
推 readonly: rand()每次都是"independent" 61.228.162.173 08/21 17:30
→ readonly: 而且是"uniform distributed" 61.228.162.173 08/21 17:30
※ 編輯: hexjacal (114.26.137.84), 08/21/2014 23:48:00
推 bxxl: 你舉的那幾個根本就不符合亂數產生器的要求118.169.209.195 08/22 20:32
→ bxxl: 亂數序列要求在非常長的區間內不能重複118.169.209.195 08/22 20:34
→ bxxl: 你拿短序列重複使用就會不夠亂118.169.209.195 08/22 20:35
推 bxxl: 你應該不要繼續拿你幻想中的亂數表來算了,118.169.209.195 08/22 20:41
→ bxxl: 請用真的電腦亂數去產生,有問題再來問118.169.209.195 08/22 20:41