去年我一直在关注这个问题,并且无法理解为什么在现实世界中没有标准的方法来测试随机性。这似乎是让你感到舒服的原因。
(我排除了真正非随机的随机序列,比如0123456789 ......重复。)
Randomness testing issues列出了一些广为人知的测试,以及一系列问题。我可以添加其他人。死硬 - 输入文件应该有多大,应该只包含32位整数?耳鼻喉科 - 似乎只适合严重错误。压缩/熵估计完全错误,但chi测试很有用。 NIST用户手册长度> 100页 - 祝您好运。 TestU01 - 在某些平台上有编译问题。一旦你将它拧入计算机,它是否正常运行?那你怎么能相信输出呢?你怎么知道测试是否失败了?什么级别的p或KS被认为过于极端?
我还要补充一点,你应该考虑随机测试套件的发展与真实政治。开发能够诋毁随机数生成器的测试符合学术界的自身利益。毕竟,你没有得到任何资金产生的结果,说“一切都好,没有找到,没有进一步的研究(阅读:钱)”。
考虑一下我们生活在现实世界中的情况,而不是在学术书架上: -
Random.org - 使用本科生为论文进行一些自制测试。并且基本上计算1和0的数量。耳鼻喉科做的很相似。他们将自己的商业模式归于此。
Hotbits--支持简单化的耳鼻喉科,以及大多数人难以执行的骇客的骇客版本,更不用说尝试理解无数的测试初始化者。
学术发表论文 - 很多可以求助于Knuth的着作和朴素的技巧。有些人使用上面的一些工具。有些人接受了这些套件中的一些测试失败。
我迄今为止在这个男人的宇宙中发现的唯一一个似乎带有任何实际重量的例子(例如,如果它失败了你,你会去监狱类型的重量)是以下认证: -
Playtech PLC,英国赌博软件供应商。他们提供一些最大的在线博彩公司,真钱转手。他们仍然使用自制测试和Diehard测试。
ERNIE为英国高级债券。他们使用频率和相关性的基本统计测试。有效的家庭酿造,而不是使用已发布的套件。
后两个例子似乎表明,现在的时代精神正在由金融机构塑造。随机数是一种数学形式,是一种合理建立的学科。为什么没有一个经过试验和测试的程序套件,每个人都使用它,它的输出说是或者ney?
补充: 在回答和进一步研究之后,我开始认为这些验证随机性的问题可能有些学术化。随机数发生器没有标准测试; 因为不需要这样的。我对优秀随机数发生器的3 1/2规则: -
生成器必须通过某些认可的测试,可能像Diehard或家庭酿造。
组织机构前端/验证(参见1)生成器必须具有重力。
生成算法/方法必须声音令人信服(见2)。
对于真正的随机数生成器,熵源必须自然自然随机。
我从对商业,金融和法律环境中真实情况的观察中推断出这些规则。
答案 0 :(得分:6)
尚未开发出标准化,结论性的二元结果PRNG测试,因为它是不可能的。
首先,无论你认为哪种输出都是不可接受的,一个完美的随机数发生器可以合法地产生它的非零可能性。您立即面临错误失败的风险,因此测试结果不能绝对是或否。
其次,如果您了解算法并且可以收集有关其状态的足够信息,那么任何PRNG都将具有某种可检测的签名。如果假设测试知道每个可能的PRNG算法并且能够测试足够长的时间来确定其工作状态,那么它肯定会拒绝所有测试的PRNG。根据定义,根据该测试,PRNG是不够的。
第三,已经提到了。一旦你确定了一个合理的"模式的子集有人可以立即制作一个PRNG,它传递一切被认为合理的东西,但是对于从你的清单中排除的第一个特征是灾难性的失败。
简而言之,我们知道所有PRNG最终都应该通过完美测试,因为它们是确定性机器,并且根据它们的定义不是随机的。存在的测试电池仅仅是与拼写检查器相当的工具,因为它们可以突出常见错误,但是他们无法告诉您是否正确执行。
答案 1 :(得分:1)
如果有单一标准测试,那么可能会有一定程度的过度拟合。您可以使用遗传算法来调整参数以通过该特定测试。拥有各种相当不同的测试更有用,实际上描述了当前的情况。把它想象成免疫系统。健康的免疫系统可以抵抗一大堆病原体,而不仅仅是一种标准的病原体。
答案 2 :(得分:1)
既然你已经吸引了数学,我们需要做一些数学运算。让我们假设一个算法可证明一个加密安全的PRNG。我们在那里的定义需要更精确一点(我仍然会马虎,但希望直觉能够成立)。
CSPRNG,我指的是一个函数R(t) = r
,它在给定时间返回一个完全不可预测的值。此函数必须可在多项式时间内计算。而不是说"多项式时间"我一遍又一遍地打电话给#34;
鉴于这个功能,让我们谈谈它的逆:R-1(r) = t
。给定一些输出值,R-1(r)
返回一些时间值,r
将作为输出。
因此,如果我告诉您R-1(1) = 5
,您可以通过将5插入R
并确保返回1来非常快速地验证。可以快速验证的内容称为" NP& #34;并且R-1
是会员。
但如果我问你,R-1(1)
是什么,你就无法迅速解决。如果 可以快速解决,那么我们就会违反R(t)
是完全无法预测的规则。"你可以在多项式时间内解决的事情称为" P"。因此R-1
不是会员。
啊,所以我们发现了一个可证明在NP中但在P中可证明不的函数。这意味着P≠NP。是!我们已经解决了现存中最伟大的数学问题之一。我们都有这样的直觉,可能有类似的功能,但没有人能够证明它。
因此,为了构建数学上可证明的PRNG,第一步是解决Millennium Prize Problems之一。与此同时,我们只进行了精心的单元测试。只要我们依靠测试而不是证据,我们就无法获得您正在寻找的那种保证。我们可以找到错误;我们无法确保正确性。