开发平台(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 (负责算黑袋子的分数)
作者: yvb 2014-08-20 19:27:00
乱数 "分给五个袋子使用" 会 "不均匀"? 是你的实测还是推测?我稍微测一下, 且即使把rand()换成MSVC的实作(#1JLwsGtg推文)不管是一组或分多组, 每球被抽出的计次看来差异不大...^同组内的
作者:
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个随机变量的心得