作者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://webptt.com/cn.aspx?n=bbs/Programming/M.1408515924.A.23D.html
※ 编辑: hexjacal (1.165.185.171), 08/20/2014 14:26:46
1F:推 bxxl: 乱数表又不保证你不会抽到同样的号码(球) 114.45.136.64 08/20 22:20
2F:→ bxxl: 如果你需要non-replacement抽法,要自己处理 114.45.136.64 08/20 22:21
3F:→ bxxl: 这跟一袋球或五袋球没有关系 114.45.136.64 08/20 22:22
4F:→ bxxl: 你只需要一个产生器(一个seed) 114.45.136.64 08/20 22:22
5F:→ bxxl: 也就是说你原本的认知是错误的,用乱数产生器 114.45.136.64 08/20 22:23
6F:→ bxxl: 抽到1号球,下次再抽到1号球的机率一样 114.45.136.64 08/20 22:24
7F:推 LPH66: 你的问题其实就是标准的赌徒谬误 123.195.39.85 08/20 22:55
9F:→ hexjacal: 了解噜,我再多模拟几次试试看 1.165.185.171 08/21 11:27
10F:推 readonly: rand()每次都是"independent" 61.228.162.173 08/21 17:30
11F:→ readonly: 而且是"uniform distributed" 61.228.162.173 08/21 17:30
※ 编辑: hexjacal (114.26.137.84), 08/21/2014 23:48:00
12F:推 bxxl: 你举的那几个根本就不符合乱数产生器的要求118.169.209.195 08/22 20:32
13F:→ bxxl: 乱数序列要求在非常长的区间内不能重复118.169.209.195 08/22 20:34
14F:→ bxxl: 你拿短序列重复使用就会不够乱118.169.209.195 08/22 20:35
15F:推 bxxl: 你应该不要继续拿你幻想中的乱数表来算了,118.169.209.195 08/22 20:41
16F:→ bxxl: 请用真的电脑乱数去产生,有问题再来问118.169.209.195 08/22 20:41