Random 测试PRNG的质量
我正在玩弄PRNG(比如Mersenne Twister和stdlib的Random 测试PRNG的质量,random,montecarlo,mersenne-twister,Random,Montecarlo,Mersenne Twister,我正在玩弄PRNG(比如Mersenne Twister和stdlib的rand()函数),我想要一个好的测试,帮助我确定PRNG产生的随机数据的质量。 我已经使用PRNG生成的随机数计算了Pi的值,我发现rand()和Mersenne Twister非常接近于提供一种区别(我需要在10个小数点后仔细检查吗?) 我对蒙特卡罗模拟不太了解;请让我知道一些算法/应用程序(可能是一些简单但可以提供良好推论的东西),这将帮助我在质量方面区分它们 编辑1:我以前没有注意到,但有一个类似的线程: 编辑2:
rand()
函数),我想要一个好的测试,帮助我确定PRNG产生的随机数据的质量。
我已经使用PRNG生成的随机数计算了Pi的值,我发现rand()
和Mersenne Twister非常接近于提供一种区别(我需要在10个小数点后仔细检查吗?)
我对蒙特卡罗模拟不太了解;请让我知道一些算法/应用程序(可能是一些简单但可以提供良好推论的东西),这将帮助我在质量方面区分它们
编辑1:我以前没有注意到,但有一个类似的线程: 编辑2:我无法解释NIST的结果,如其中一条评论所述。我从中获得了直观地解释模式(如果有的话)的想法,并且因为它的简单性而遵循它。如果有人能对我的测试过程发表评论,我将非常高兴:
(圆形(genrand\u real1()/rand\u 0\u 1())
,则为红色像素,否则为黑色据我所知,这不是一个非常精确的解决方案,但如果这提供了一个合理的估计,那么目前我可以接受这一点 你最好去调查一下 对于较短的阅读,请查阅数字配方的相应章节
如果你只对MC模拟的一种基线感兴趣——最好避免使用线性同余生成器,Mersenne Twister在绝大多数情况下都足够好。有两个标准测试套件用于测试随机数
Diehard库有一个R接口,名为。该库提供了NIST和Diehard测试套件的接口。有几种统计测试套件可用。我编写、复制并以其他方式收集了120个PRNG,并使用各种测试套件对每个PRNG进行测试,每个测试套件为每个PRNG提供4小时:
- (标准,1TB)在78个PRNG中发现偏差
- (BigCrush)在50个PRNG中发现偏差
- (扩展,512兆比特,x1)在40个PRNG中发现偏差
- (自定义命令行选项)在25个PRNG中发现偏差
- (-a命令行选项)在13个PRNG中发现偏差
- (默认值为64兆x128)在11个PRNG中发现偏差
- PractRand(标准,1TB)发现了22种不同类别的独特偏见李>
- RaBiGeTe(扩展,512兆比特,x1)发现了5个独特的偏置,都在LCG和组合LCG中李>
- TestU01 BigCrush发现了两种独特的偏差,都存在于小的混沌PRNG中。
没有其他测试套件发现任何独特的偏差李>
- 在我看来,PractRand和TestU01往往是最容易解释的输出
- 我认为PractRand和Dieharder是最容易通过命令行界面自动化测试的
- PractRand和RaBiGeTe是唯一支持多线程测试的李>
- PractRand需要比其他测试套件更多的输入位进行测试——如果您的RNG速度非常慢或生成的数据量有限,则可能会出现问题
- RaBiGeTe和NIST STS都存在接口问题
- 迪哈德和NIST STS都存在假阳性问题李>
- 在我看来,NIST STS的界面最差
- 我无法在Windows上更难编译。我设法让TestU01在windows上编译,但这需要一些工作
- RaBiGeTe的最新版本是封闭源代码,仅限windows李>
此外,所有测试的PRNG都作为不推荐的PRNG包含在PractRand中。我不太确定是否从伪随机数生成器中获取任何随机数据-但我认为您可以使用它们实现。您是说,因为从PRNG生成的值是可预测的吗?谢谢你是的,这就是区别-它只是提醒你检查PRNG是否适合你的应用,你不需要像我使用NIST那样的TRNG,但我认为虽然我的测试通过了,但还是有一些问题;你能帮忙吗我已经生成了长随机值,并将它们转换为二进制并存储在一个文件中。比如说电影里有100首随机歌曲