為什麼這篇亂數種子c鄉民發文收入到精華區:因為在亂數種子c這個討論話題中,有許多相關的文章在討論,這篇最有參考價值!作者hexjacal (黑麻糬)看板C_and_CPP標題[問題] 亂數生成問題(已修改問題)時間T...
亂數種子c 在 丹尼爾·海的兩三事 Instagram 的最讚貼文
2020-04-26 14:22:01
【流行曲見證我們興替(反送中篇)】 加油系列 廣東歌歌單: 一直以來 我療傷的方法 就是聽/唱這一類歌曲 就會自動哭出來 每次聽到歌詞中 有人跟你說 『不要緊 你累了 就哭出來吧 不用再堅強下去…』 對於這類歌詞我完全沒有抵抗力(尤其頭5首) 哭過了 就釋懷 《Children Song》 周國賢...
開發平台(Platform): (Ex: VC++, GCC, Linux, ...)
Dev C++ 4.9.9.2
問題(Question):
我的想要做遊戲模擬來驗證數學計算結果,遊戲大略結構如下
有五個黑袋子,袋中分別有 21, 22, 23, 24, 25 個球
有五個紅袋子,袋中分別有 11, 12, 13, 14, 15 個球
程式結構含有
1. function A (負責額外紅袋子的 Bonus)
2. function B (負責算黑袋子的分數) --> 裡頭有 call 到 function A
int main()
{
clock_t seed=time(0)+clock();
srand(seed);
for (1~10^10)
{
repeat call function B // 一秒約可執行兩千~三千次 B
}
}
後來仔細思考後,因為我要做的是 "驗證",
所以應該不是 "亂度" 問題,而是如何保持 "均勻度" 問題
function A & function B 的抽球部分也簡化
int L[5]={21,22,23,24,25};
for (int i=0;i<=4;i++)
{
int r=(int)(L[i]*(double)(rand())/(RAND_MAX+1.0));
// 直接取 0~1 的 double number 再乘上 L[i] 變成 0~(L[i]-1) 共 L[i] 個數
// 基本上 rand() 帶給我的亂數在機率上是均勻的
}
但目前遇到的問題是
在 "同一張亂數表" 下,對 "同一個袋子" 取很多很多次球
因為均勻的關係,久了下來每個球被取到的次數(比例)會很貼近
平均得分的結果自然就可以拿來驗證我的數學期望值計算
但是我現在有五個袋子...如果第一個袋子抽到了 10 號
那這個 "10 號" 不就影響了後面袋子抽到 10 號的機會了?
因為整張表是均勻的,但是分給五個袋子使用的話就...完蛋了。
Q1: 我要如何指定給每個袋子一張亂數表(seed),且保留那個袋子自己該有的表格
使得彼此之間的亂數生成是獨立的呢?
(不會因為後四個袋子的抽球而影響了第一個袋子的均勻度)
Q2: Q1 的解決方法也可以用到函數裡頭去嗎?
(我需要五個 seed 給黑袋子 1~5 號 & 五個 seed 給紅袋子 1~5 號)
請問各位版大先進有沒有想法可以面對以上的問題
還請不吝給點教學材料教教小弟,感激不盡
========================== 我是分隔線 ===========================
又有胡思亂想的新問題嚕~!
就我自己曉得的電腦亂數 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 likel
y 的吧?
那在模擬時要怎麼辦? 先做出滿足條件的亂數表? 還是這兩數各給一張表?
希望版大們能給點意見~
腦筋打結時容易鑽牛角尖,版大們也可以當我胡思亂想。
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 1.170.211.100
※ 文章網址: http://www.ptt.cc/bbs/C_and_CPP/M.1408462098.A.24D.html