哪些方法用于测试随机变量生成算法?
测试随机变量生成算法
Diehard 测试套件接近于测试随机数生成器的黄金标准。它包括许多测试,其中一个好的随机数生成器应该产生根据一些已知分布分布的结果,然后可以比较使用测试生成器的结果。
编辑
我必须更新这个,因为我不完全正确:Diehard 可能仍然被大量使用,但它不再被维护并且不再是最先进的。自那以后,NIST 提出了一组改进的测试。
只是为了给 honk 的答案添加一点,Diehard Test Suite(由 George Marsaglia 开发)是 PRNG 的标准测试。
有一个不错的Diehard C 库可以让您访问这些测试。除了标准的 Diehard 测试,它还为其他一些 PRNG 测试提供了功能,这些测试包括(除其他外)检查位顺序。还有一个测试RNG速度和编写自己的测试的工具。
Dieharder 库有一个 R 接口,称为RDieHarder:
library(RDieHarder)
dhtest = dieharder(rng="randu", test=10, psamples=100, seed=12345)
print(dhtest)
Diehard Count the 1s Test (byte)
data: Created by RNG `randu' with seed=12345,
sample of size 100 p-value < 2.2e-16
这表明RANDU RNG 生成器未通过最小距离/2dsphere 测试。
为了测试随机数生成器产生的数字,Diehard 测试是一种实用的方法。但是这些测试似乎有点武断,人们可能会想知道是否应该包括更多测试,或者是否有任何方法可以真正检查随机性。
定义随机序列的最佳候选者似乎是Martin-Löf 随机性。这种随机性的主要思想在Knuth 的第 3.5 节中得到了很好的发展,它是测试随机数序列的所有类型的子序列的一致性。即使使用可计算性的概念,要正确定义所有类型的子序列也是非常困难的。
Diehard 检验只是人们可能考虑的一些可能的子序列,它们的失败将排除 Martin-Löf 随机性。
你无法证明,因为这是不可能的;你只能检查是否没有任何令人尴尬的自相关或分布扰动,而Diehard确实是它的标准。这是用于统计/物理的,密码学家还将主要检查(除其他外)将生成器拟合到数据以获得未来值的难度。