去年我一直在关注这个问题,并且无法理解为什么在现实世界中没有标准的方法来测试随机性.这似乎是让你感到舒服的原因.
(我排除了真正非随机的随机序列,比如0123456789 ......重复.)
随机性测试问题列出了一些广为人知的测试,以及它们的一系列问题.我可以添加其他人.死硬 - 输入文件应该有多大,应该只包含32位整数?耳鼻喉科 - 似乎只适合严重错误.压缩/熵估计完全错误,但chi测试很有用.NIST用户手册长度> 100页 - 祝你好运.TestU01 - 在某些平台上有编译问题.一旦你将它拧入计算机,它是否正常运行?那你怎么能相信输出呢?你怎么知道测试是否失败了?什么级别的p或KS被认为过于极端?
我还要补充一点,你应该考虑随机性测试套件的发展与真实政治.开发能够诋毁随机数生成器的测试符合学术界的自身利益.毕竟,你没有得到任何资金产生的结果,说"一切都好,没有找到,没有进一步的研究(阅读:金钱)".
考虑一下我们生活在现实世界中的情况,而不是学术书架: -
Random.org - 使用本科生为论文进行一些自制测试.并且基本上计算1和0的数量.耳鼻喉科做的很相似.他们将自己的商业模式归于此.
Hotbits--支持简单的ENT,以及大多数人难以执行的骇客的骇客版本,从不介意尝试理解无数的测试初始化者.
学术发表论文 - 很多可以求助于Knuth的着作和朴素的技巧.有些人使用上面的一些工具.有些人接受了这些套件中的一些测试失败.
到目前为止我在这个男人的宇宙中发现的唯一一个似乎带有任何实际重量的例子(即如果它失败了,你会去监狱类型的重量)是以下认证: -
Playtech PLC,英国赌博软件供应商.他们提供一些最大的在线博彩公司,真钱转手.他们仍然使用自制测试和Diehard测试.
ERNIE为英国高级债券.他们使用频率和相关性的基本统计测试.有效地家酿,而不是使用已发布的套件.
后两个例子似乎表明,现在的时代精神正由金融机构塑造.随机数是一种数学形式,是一种合理建立的学科.为什么没有一个经过试验和测试的程序套件,每个人都使用,它的输出说是或者ney?
补充:在回应和进一步研究之后,我开始认为,或许这些验证随机性的问题可能有些学术化.随机数发生器没有标准测试; 因为没有必要这样做.我的3 1/2规则是一个优秀的随机数发生器: -
发电机必须通过一些公认的测试,可能像Diehard或自酿.
组织机构前端/验证(见1)发电机必须具有重力.
生成算法/方法必须听起来令人信服(见2).
对于真正的随机数生成器,熵源必须是自然自然随机的.
我从对商业,金融和法律环境中真实情况的观察中推断出这些规则.
尚未开发出标准化,结论性的二元结果PRNG测试,因为它是不可能的.
首先,无论你认为哪种输出都是不可接受的,一个完美的随机数发生器可以合法地产生它的非零可能性.你马上面临着失败的风险,所以测试的结果不能是绝对的肯定或否定.
其次,如果您知道算法并且可以收集有关其状态的足够信息,那么任何PRNG都将具有某种可检测的签名.如果假设测试知道每个可能的PRNG算法并且能够测试足够长的时间来确定其工作状态,那么它肯定会拒绝所有测试的PRNG.根据定义,根据该测试,没有PRNG是足够的.
第三,已经提到了.一旦你确定了一个"合理的"模式子集,有人可以立即制作一个PRNG,它通过一切被认为是合理的,但是对你排在列表中的第一个特征是一个灾难性的失败.
简而言之,我们知道所有PRNG最终都应该通过完美的测试,因为它们是确定性的机器,并且它们的定义不是随机的.存在的测试电池仅仅是与拼写检查器相当的工具,因为它们可以突出常见错误,但它们无法告诉您是否正确执行.