4. 测试

XORWOW生成器由Marsaglia提出[5],并已通过TestU01测试框架中的"Crush"测试套件验证[6]。虽然重点放在TestU01上,但也运行了完整的NIST伪随机性测试套件[7]。TestU01测试集中最严格的是"BigCrush",它在一台高端CPU/GPU上约5小时内执行106项统计测试。XORWOW生成器在大多数运行中能通过所有测试,但偶尔会产生可疑的统计结果。以下是一个未通过全部测试的运行示例摘要输出,包含具体失败细节。

========= Summary results of BigCrush =========

 Version:          TestU01 1.2.3
 Generator:        curandXORWOW
 Number of statistics:  160
 Total CPU time:   05:17:59.63
 The following tests gave p-values outside [0.001, 0.9990]:
 (eps  means a value < 1.0e-300):
 (eps1 means a value < 1.0e-15):

       Test                          p-value
 ----------------------------------------------
 81  LinearComp, r = 29             1 - 7.1e-11
 ----------------------------------------------
 All other tests were passed
 
Detail from test 81:

scomp_LinearComp test:
-----------------------------------------------
   N =  1,  n = 400020,  r = 29,    s = 1



-----------------------------------------------
Number of degrees of freedom          :   12
Chi2 statistic for size of jumps      :    7.11
p-value of test                       :    0.85


-----------------------------------------------
Normal statistic for number of jumps  :   -6.41
p-value of test                       : 1 - 7.1e-11    *****

为了更直观地理解这一点,[6]中有一个表格展示了在多种生成器上运行不同级别"Crush"测试的结果。只有少数生成器能通过所有BigCrush测试。例如广受推崇的Mersenne twister[8]就始终无法通过其中两项线性复杂度测试。

MRG32k3a生成器在[9]中被提出,并在[10]中给出了具体实现建议。该生成器能稳定通过所有"BigCrush"测试,偶尔会出现如下所示的边缘性结果。

========= Summary results of BigCrush =========

 Version:          TestU01 1.2.3
 Generator:        curandMRG32k3a
 Number of statistics:  160
 Total CPU time:   07:14:55.41
 The following tests gave p-values outside [0.001, 0.9990]:
 (eps  means a value < 1.0e-300):
 (eps1 means a value < 1.0e-15):

       Test                          p-value
 ----------------------------------------------
 59  WeightDistrib, r = 0            5.2e-4
 ----------------------------------------------
 All other tests were passed

Detail from test 59:

svaria_WeightDistrib test:
-----------------------------------------------
   N =  1,  n = 20000000,  r =  0,  k = 256,  Alpha =      0,  Beta =   0.25


-----------------------------------------------
Number of degrees of freedom          :   67
Chi-square statistic                  :  111.55
p-value of test                       :  5.2e-4    *****

-----------------------------------------------
CPU time used                    :  00:02:56.25

MTGP32生成器是基于[1]中所述工作的改进版本。该生成器在"BigCrush"测试中表现出部分边缘性结果。示例如下:

========= Summary results of BigCrush =========

 Version:          TestU01 1.2.3
 Generator:        curandMtgp32Int
 Number of statistics:  160
 Total CPU time:   05:45:29.49
 The following tests gave p-values outside [0.001, 0.9990]:
 (eps  means a value < 1.0e-300):
 (eps1 means a value < 1.0e-15):

       Test                          p-value
 ----------------------------------------------
 12  CollisionOver, t = 21           0.9993 
 ----------------------------------------------
 All other tests were passed

Detail from test 12:

smultin_MultinomialOver test:
-----------------------------------------------
   N = 30,  n = 20000000,  r = 28,   d =    4,   t = 21,
       Sparse =   TRUE

       GenerCell = smultin_GenerCellSerial
       Number of cells = d^t =      4398046511104
       Expected number per cell =  1 /  219902.33
       EColl = n^2 / (2k) =  45.47473509
       Hashing =   TRUE

       Collision test

       CollisionOver:   density = n / k =  1 /  219902.33
       Expected number of collisions = Mu =      45.47


-----------------------------------------------
Results of CollisionOver test:

POISSON approximation                 :
Expected number of collisions = N*Mu  :     1364.24
Observed number of collisions         :     1248
p-value of test                       :    0.9993    *****

-----------------------------
Total number of cells containing j balls

  j =  0                              :  131940795334368
  j =  1                              :        599997504
  j =  2                              :             1248
  j =  3                              :                0
  j =  4                              :                0
  j =  5                              :                0

-----------------------------------------------
CPU time used                    :  00:04:32.52

MT19937生成器是目前为止使用最广泛的伪随机数生成器(PRNG)

========= Summary results of BigCrush =========

 Version:          TestU01 1.2.3
 Generator:        curandMT19937Int
 Number of statistics:  160
 Total CPU time:   03:12:59.34

 All tests were passed

Philox4_32_10生成器是[17]中描述的基于计数器的RNG之一。

========= Summary results of BigCrush =========

 Version:          TestU01 1.2.3
 Generator:        curandPHILOXInt
 Number of statistics:  160
 Total CPU time:   03:18:50.30

 All tests were passed

Sobol序列是使用Joe和Kuo推荐的方向向量生成的[2]。加扰Sobol方法在[3][4]中有描述。

对每个生成器进行的正态分布测试,已使用皮尔逊卡方检验[11][12],Jarque-Bera检验[13],Kolmogorov-Smirnov检验[14][15]以及Anderson-Darling检验[16]完成。

测试在正负6个标准差的范围内进行。运行了三个皮尔逊检验,单元格计数分别为1000、100和25。测试输出列标签为:PK表示1000个单元格的皮尔逊检验,PC表示100个单元格的皮尔逊检验,P25表示25个单元格的皮尔逊检验,JB表示Jarque-Bera检验,KS表示Kolmogorov-Smirnov检验,AD表示Anderson-Darling检验。每个检验的拒绝标准打印在标签下方。

以下表格展示了XORWOW、MRG32k3a、MTGP32、MT19937、Philox、Sobol 32位以及加扰Sobol 32位生成器在正态分布统计测试中的代表性输出结果。每张表格的行表示基于连续10000个样本序列计算得出的统计结果。

XORWOW生成器:

      PK           PC           P25          JB           KS           AD
     <1058        <118         <33          <4.6         <0.0122      <.632
  ----------------------------------------------------------------------------
   684.48120     58.97784     20.44693      2.84152      0.00540      0.32829  
   686.37925     54.84938      7.79583      0.55109      0.00900      0.25832  
   673.21437     69.15825     15.46540      0.30335      0.00872      0.26772  
   568.26999     49.99519      8.85046      0.66624      0.00870      0.22939  
   639.10690     84.23040     10.19753      0.19844      0.00542      0.27939   

MRg32k3a 生成器:

      PK           PC           P25          JB           KS           AD
     <1058        <118         <33          <4.6         <0.0122      <.632
  ----------------------------------------------------------------------------

   764.38500     74.48157     19.32716      1.50118      0.01103      0.60351  
   795.31006     74.15086     11.78414      1.15159      0.00821      0.35343  
   741.85426     91.88692     20.67103      2.34232      0.00900      0.61787  
   644.62093     70.68369     17.18277      0.32870      0.01243*     0.34630  
   806.02693     93.50691     23.10548      2.67340      0.00978      0.51466   

MTGP32生成器:

      PK           PC           P25          JB           KS           AD
     <1058        <118         <33          <4.6         <0.0122      <.632
  ----------------------------------------------------------------------------

   924.62604    110.19868     23.45811      0.86919      0.00519      0.33411  
   708.76047     79.42919     20.67913      1.13427      0.01142      0.54632  
   674.17713     65.80415     13.09834      1.07799      0.01040      0.23860  
   733.35915     57.13829     17.66337      3.17017      0.01188      0.30864  
   620.17297     50.39043     14.75682      0.57970      0.00845      0.28916   

MT19937生成器:

      PK           PC           P25          JB           KS           AD
     <1058        <118         <33          <4.6         <0.0077      <.632
  ----------------------------------------------------------------------------

   663.51515     67.53027      9.70908      0.70428      0.00482      0.22643
   758.11526     65.27417     10.81213      0.16740      0.00541      0.24615
   678.79743     60.92754     27.50102      1.33330      0.00546      0.42693
   741.21087     82.42319     24.10450      1.84422      0.00570      0.41724
   644.92464     71.74918     18.32281      1.01582      0.00546      0.30622   

Philox_4x32_10 生成器:

      PK           PC           P25          JB           KS           AD
     <1058        <118         <33          <4.6         <0.0122      <.632
  ----------------------------------------------------------------------------

   688.73231     78.60241     18.28300      0.23786      0.00520      0.24052
   600.66650     59.78966     21.59090      4.24401      0.00464      0.49806
   916.60146     78.16294     10.01345      1.53526      0.00660      0.25025
   713.67544     61.20329     15.82239      0.79568      0.00614      0.26091
   699.84498     80.73224     16.07304      1.37786      0.00464      0.29227   

Sobol 32位生成器:

      PK           PC           P25          JB           KS           AD
     <1058        <118         <33          <4.6         <0.0122      <.632
  ----------------------------------------------------------------------------

   157.04578      6.47398      1.45802      0.19007      0.00024      0.00188  
   243.82767     11.98164      1.34982      0.00668      0.00030      0.00086  
   229.87234     10.40206      2.73912      0.04165      0.00036      0.00137  
   290.29451     17.09013      3.25717      0.02583      0.00042      0.00172  
   327.32072     19.22832      5.09510      0.00335      0.00036      0.00127   

加扰Sobol 32位生成器:

      PK           PC           P25          JB           KS           AD
     <1058        <118         <33          <4.6         <0.0122      <.632
  ----------------------------------------------------------------------------
   255.80606     10.93180      1.33766      0.01226      0.00036      0.00112  
   258.84244      8.45589      1.56766      0.04164      0.00036      0.00170  
   585.34346     49.33610      5.32037      0.04069      0.00043      0.00208  
   337.50312     27.64720      3.38925      0.01953      0.00041      0.00211  
   729.56687     56.89682     32.89772      0.00911      0.00040      0.00204   

尽管对数正态分布与正态分布密切相关,但它也通过了皮尔逊卡方检验和科尔莫戈罗夫-斯米尔诺夫检验的验证。

以下表格展示了针对XORWOW、MRG32k3a、MTGP32、MT19937、Philox、Sobol 32位以及加扰Sobol 32位生成器的对数正态分布统计测试的代表性输出结果。

XORWOW随机数生成器:

     PK           PC           P25           KS   
     <1058        <118         <33           <0.0122
  ----------------------------------------------------

  1019.57936    105.63667     13.15820      0.00540 
   991.93663     91.95369     20.46549      0.00900 
   983.09678    115.34978     20.50434      0.00872 
   966.45604    113.30013     24.54060      0.00870 
   996.35262    111.50026     21.01332      0.00542 

MRG32k3a生成器:

      PK           PC           P25           KS   
     <1058        <118         <33           <0.0122
  ----------------------------------------------------

  1000.00359     90.12428     22.82709      0.00826 
   942.17843     81.16259     16.13670      0.00739 
  1005.62148    102.29924     23.62705      0.00697 
  1053.68391     98.75565     28.65422      0.01107 
   998.38936    103.43649     19.26568      0.00803 

MTGP32生成器:

      PK           PC           P25           KS   
     <1058        <118         <33           <0.0122
  ----------------------------------------------------

  1010.18903     94.51850     17.98126      0.00771 
   993.78319     76.86543     12.48859      0.00831 
  1010.22068     63.76027     11.65743      0.00677 
   963.33103     89.44369     17.96636      0.01200 
   927.15616     75.85515     13.64221      0.00566 

MT19937生成器:

      PK           PC           P25           KS   
     <1058        <118         <33           <0.0122
  ----------------------------------------------------

   929.15309     83.63208     16.91037      0.00482
  1058.79511    114.19971     27.28300      0.00541
   963.35338    103.52657     26.68634      0.00546
  1009.21512    114.36706     38.44470      0.00570
   976.91303     84.83272     14.78584      0.00546 

Philox_4x32_10 生成器:

      PK           PC           P25           KS   
     <1058        <118         <33           <0.0122
  ----------------------------------------------------

   992.19843    100.39826     14.91235      0.00357
   962.03714    115.40663     18.03086      0.00595
  1006.41781     92.84903     27.33686      0.00385
  1009.75491     96.93654     11.99484      0.00520
  1003.85449     89.00801     15.64060      0.00464 

Sobol 32位生成器:

      PK           PC           P25           KS   
     <1058        <118         <33           <0.0122
  ----------------------------------------------------

   289.42589      5.03327      0.48858      0.00024 
   386.79860      6.57783      0.76902      0.00030 
   355.04631      8.54472      1.12228      0.00036 
   434.19211      9.54021      2.07006      0.00042 
   343.57507     10.71571      0.42503      0.00036 

Scrambled Sobol- 32位生成器:

     PK           PC           P25           KS   
     <1058        <118         <33           <0.0122
  ----------------------------------------------------

   354.55037      8.20727      0.24592      0.00036 
   506.45280     12.93848      0.73323      0.00036 
   451.96949     18.18903      0.69465      0.00043 
   593.25666     16.55782      0.54769      0.00041 
   423.05263     12.06600      0.53472      0.00040 

对泊松分布的测试,使用每种生成器,均采用了皮尔逊卡方检验[11]

测试在广泛的lambda值范围内运行,并将统计结果与使用MKL的泊松分布结果进行比较。