我在java中编写了一个程序来滚动一个骰子并记录每个值1-6被滚动的总次数。我滚了600万次。这是分布:
#of 0's: 0
#of 1's: 1000068
#of 2's: 999375
#of 3's: 999525
#of 4's: 1001486
#of 5's: 1000059
#of 6's: 999487
(0不是一个选项。)
这种分布是否与随机骰子卷一致? 什么客观的统计测试可能证实骰子卷确实是随机的?
编辑:已经提出了一些关于申请的问题:一个我想要合理地实现公平的游戏。
答案 0 :(得分:5)
要测试此特定分布是否与通过“公平”潜水推送的数字的预期分布一致,您需要执行Pearson's Chi-square test。
请注意,这仍然不能证明您的算法是“公平的”,只是这些特定结果看起来“公平”。
要测试您的算法一般是否“公平”,请使用Diehard tests,正如其他人所提到的那样。
答案 1 :(得分:4)
如果你的随机数发生器通过了Diehard测试,那就是你能做到的最好的。
即使是物理模具也不是完美的,每面1/6。
将试验增加一个数量级,然后再次进行。如果每次试验得到1/6,你就可以了。
答案 2 :(得分:1)
仅此测试不足以确定随机性。并不是说它完全没用,但根据这个测试,输出1,2,3,4,5,6和重复的“随机”骰子滚轮将是完全随机的。
另一个建议的测试:选择一个数字x,每次滚动时,记录下一个数字的统计数据;你应该再次看到均匀分布。重复x的所有六个值。如果它通过了这个测试,它可能是随机的,可以用作骰子滚轮。
答案 3 :(得分:0)
6'000'000骰子滚动的概率最终恰好在每个1000'000的结果中接近0.只要结果的总和是正确的,并且方差(误差)当试验次数增加时,与预期结果的差异趋向0(相对),那么你的随机函数没有错误。
你可以用数学方法证明它,也可以用越来越大的试验序列测试随机函数,看它是否收敛。
对于重复次数的测试,每个结果的总和应接近高斯分布。例如。每个结果1-6应该落在以1000'000为中心的正态分布范围内,方差与骰子数量成反比。
其他测试,Diehard测试,测试骰子卷的实际顺序本身是随机的,而不是例如6'000'000卷的结果是100'000连续1,然后是100'000 2和等等,最后是一些随机序列。