[問題] 亂數生成問題(已修改問題)

作者: hexjacal (黑麻糬)   2014-08-19 23:28:14
開發平台(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 (負責算黑袋子的分數)
作者: EdisonX (卡卡獸)   2014-08-20 00:07:00
我不建議你再研究這問題,答案是它的周期約是 21 億個數,解決它的方法是換一個亂數產生器,若願意從dev-c++跳出來的話,有其他周期較長,基本上不會讓你重覆的。
作者: hexjacal (黑麻糬)   2014-08-20 07:43:00
那請問 Visual C++ 會有比較可行的方案嗎? 感謝您。
作者: Leadgen (新竹~)   2014-08-20 08:19:00
只要你用的亂數源的Bit數有限,總有一天會再重覆的。
作者: azureblaze (AzureBlaze)   2014-08-20 08:37:00
比較新的編譯器能用Mersenne twister
作者: johnjohnlin (嗯?)   2014-08-20 13:47:00
C++11 有比較好用的 random
作者: yvb   2014-08-20 19:27:00
亂數 "分給五個袋子使用" 會 "不均勻"? 是你的實測還是推測?我稍微測一下, 且即使把rand()換成MSVC的實作(#1JLwsGtg推文)不管是一組或分多組, 每球被抽出的計次看來差異不大...^同組內的
作者: EdisonX (卡卡獸)   2014-08-20 21:00:00
google C++11 mt19937,它的週期絕對讓你夠用.原理如 az~ 大所言,用的是梅森旋轉法.
作者: hexjacal (黑麻糬)   2014-08-20 21:10:00
分組不會影響均勻度,如果袋子的球數差異性很大呢?
作者: azureblaze (AzureBlaze)   2014-08-20 21:14:00
品質好的亂數產生器不會因為分組產生差別會有問題我覺得是程式寫法或統計的問題
作者: hexjacal (黑麻糬)   2014-08-20 21:17:00
我在同張亂數表連取五數下對 21~25 取餘數作取球總感覺袋子間取的號碼不獨立,想分開來取試試看
作者: azureblaze (AzureBlaze)   2014-08-20 21:20:00
"感覺"是什麼? 有數據嗎? 低樣本數看起來有模式很正常
作者: wope (獨立黑色色彩)   2014-08-21 22:49:00
如果是要數學上的均勻分布U(0,1) 有標準的演算方法然後設v抽出來的值,取f(v)=(b-a)v+af(v)=U(a,b),這樣就有a到b的均勻分布最後 如果要1,2,3,4,5均勻抽樣 就設a=0.5,b=5.5,f(v)四捨五入就是標準解如果你要抽的不是uniform,要抽的pdf,g1(v),就先對g1(v)積分得到G1(v),其反函數為G1-1(v)所以抽出值為v=G1-1(U(0,1)),就會是你要的pdf最後在高維度抽樣,f(v1,v2,...,vn),做法一樣先求出邊際pdf f1(v1),f2(v2),...,fn(vn),積分得F1,F2,...,F...,Fn 按照Fn的值取P個分割,所以全域有P^n最後先抽U(0.5,P^n+0.5)決定在哪個分割,在分割內再各變數自己抽,vi=U(Low Bounded ,Up Bounded)這裡的Low或Up都是指vi這個分割內的上下界另外,有另一種方法是在v方向做分割在值的方向放機率(想成求期望值),這樣就可以得到抽樣結果(以pdf表示)以上是之前處理10k個隨機變數的心得
作者: hexjacal (黑麻糬)   2014-08-21 23:49:00
我的問題應該是模擬過程中,給定亂數表帶來的毛病,同張表出現的亂數是均勻的,但帶出來的遊戲結果卻不一定均勻,所以造成我模擬的結果與數學推論結果有很大差異
作者: azureblaze (AzureBlaze)   2014-08-22 00:05:00
你沒考慮到亂數表是ABC的機率所以亂數要用srand初始化防止每次結果都是A此外樣本數越少本來就越容易和期望值差很遠
作者: mike0227 (我又小看了那複雜的世界)   2014-08-22 01:13:00
請去找Randomness tests的資料來看你所謂 會造成遊戲結果差異的亂數 會有特定的pattern在很多test都不會過的

Links booklink

Contact Us: admin [ a t ] ucptt.com