Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Random 测试PRNG的质量_Random_Montecarlo_Mersenne Twister - Fatal编程技术网

Random 测试PRNG的质量

Random 测试PRNG的质量,random,montecarlo,mersenne-twister,Random,Montecarlo,Mersenne Twister,我正在玩弄PRNG(比如Mersenne Twister和stdlib的rand()函数),我想要一个好的测试,帮助我确定PRNG产生的随机数据的质量。 我已经使用PRNG生成的随机数计算了Pi的值,我发现rand()和Mersenne Twister非常接近于提供一种区别(我需要在10个小数点后仔细检查吗?) 我对蒙特卡罗模拟不太了解;请让我知道一些算法/应用程序(可能是一些简单但可以提供良好推论的东西),这将帮助我在质量方面区分它们 编辑1:我以前没有注意到,但有一个类似的线程: 编辑2:

我正在玩弄PRNG(比如Mersenne Twister和stdlib的
rand()
函数),我想要一个好的测试,帮助我确定PRNG产生的随机数据的质量。 我已经使用PRNG生成的随机数计算了Pi的值,我发现
rand()
和Mersenne Twister非常接近于提供一种区别(我需要在10个小数点后仔细检查吗?)

我对蒙特卡罗模拟不太了解;请让我知道一些算法/应用程序(可能是一些简单但可以提供良好推论的东西),这将帮助我在质量方面区分它们


编辑1:我以前没有注意到,但有一个类似的线程:

编辑2:我无法解释NIST的结果,如其中一条评论所述。我从中获得了直观地解释模式(如果有的话)的想法,并且因为它的简单性而遵循它。如果有人能对我的测试过程发表评论,我将非常高兴:

  • 使用rand()和MT1997从[0,1]生成N个随机数
  • 如果
    (圆形(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中发现偏差
    其他测试套件都遗漏的PRNG中有多少?

    • PractRand(标准,1TB)发现了22种不同类别的独特偏见
    • RaBiGeTe(扩展,512兆比特,x1)发现了5个独特的偏置,都在LCG和组合LCG中
    • TestU01 BigCrush发现了两种独特的偏差,都存在于小的混沌PRNG中。
      没有其他测试套件发现任何独特的偏差
    简而言之,只有PractRand、TestU01和RaBiGeTe值得使用。

    完全披露:我写了PractRand,所以PRNG集合或任何其他非定性度量都可能偏向于它

    其他优势:

    • 在我看来,PractRand和TestU01往往是最容易解释的输出
    • 我认为PractRand和Dieharder是最容易通过命令行界面自动化测试的
    • PractRand和RaBiGeTe是唯一支持多线程测试的
    其他缺点:

    • PractRand需要比其他测试套件更多的输入位进行测试——如果您的RNG速度非常慢或生成的数据量有限,则可能会出现问题
    • RaBiGeTe和NIST STS都存在接口问题
    • 迪哈德和NIST STS都存在假阳性问题
    • 在我看来,NIST STS的界面最差
    • 我无法在Windows上更难编译。我设法让TestU01在windows上编译,但这需要一些工作
    • RaBiGeTe的最新版本是封闭源代码,仅限windows
    测试的PRNG集: PRNG组包括1个大型GFSR、1个大型LFSR、4个xorshift型PRNG、2个xorwow型PRNG和3个其他不完全LFSR PRNG。它包括10个简单的2次方模数LCG(丢弃低位以达到可接受的质量水平)、10个2次方模数不完全LCG,以及9个主要基于LCG和不完全LCG的组合生成器。它包括19个降低强度的CSPRNG版本,以及一个全强度CSPRNG。其中,14个基于间接/动态s盒(例如RC4、ISAAC),4个是ChaCha/Salsa参数化,其余2个是Trivium变体。它包括11个大致可归类为LFib类型或类似类型的PRNG,不包括LFSR/GFSR。其余(约35个)是小状态混沌PRNG,其中10个使用乘法,其他仅限于算术和位逻辑

    编辑:中还有测试集,它非常模糊,有点奇怪,但实际上做得非常好


    此外,所有测试的PRNG都作为不推荐的PRNG包含在PractRand中。

    我不太确定是否从伪随机数生成器中获取任何随机数据-但我认为您可以使用它们实现。您是说,因为从PRNG生成的值是可预测的吗?谢谢你是的,这就是区别-它只是提醒你检查PRNG是否适合你的应用,你不需要像我使用NIST那样的TRNG,但我认为虽然我的测试通过了,但还是有一些问题;你能帮忙吗我已经生成了长随机值,并将它们转换为二进制并存储在一个文件中。比如说电影里有100首随机歌曲