二、伪随机数发生器的要求

大量的方法被应用于实现随机数序列的随机性和均匀性,并克服随机数序列所固有的不可重现性。在讨论这些方法之前,首先研究对随机数发生器的要求:

    ① 所产生的数必须服从均匀分布。至于拟合的优良程度,建议采用大样本量的χ2检验。样本容量N可以取100010000之间的数。

    ② 所产生的数必须是统计独立的。随机数序列中一个数的值不能影响下一个数的值。如果随机数序列缺少独立性就可能被拒绝,但随机数序列被接受并不能证明它的独立性。

    ③ 所产生的随机数序列必须是可以重现的,这样就允许仿真试验重复进行。

    ④ 所产生的随机数序列在任何需要的长度内必须是不重复的。这在理论上可能是做不到,但从实践目的角度讲,在很多数目之后才出现重复性循环。这项要求已经能充分保证。随机数发生器的重复性循环出现的长度称为它的周期。

    ⑤ 随机数产生的速度必须快,因为在仿真运行中通常需要处理大量的随机数,如果随机数发生器速度慢,就必然大大增加仿真运行的时间和费用。

⑥ 用于产生随机数的方法应当占用尽可能小的存储空间,仿真模型通常需要大量的存储空间,而存储空间总是有限的,如此宝贵的资源在产生随机数的过程中占用得越少越好。

一个随机数序列,R1R2,…RN必须具备两个重要的性质。即均匀性和独立性。所谓均匀性是指,如果把随机数的采样区间分成n个相等长度的子区间,那么在每一个子区间上观察到的期望数为N/n,其中N为观察总次数;独立性是指一个数值出现在一个特定子区间的概率与前面已经取到的数值无关。

在最简单的情况下,一个随机数序列中的每一个随机数都是[01]]区间上均匀分布的独立采样值。该分布的概率密度函数由下式给出:

根据对随机数发生器的要求,就可以评价为了补偿随机数序列所缺乏的重现性而采用的一些方法。第一种方法是利用某种手段生成一个随机数序列并将它永久保存起来。例如存在计算机硬盘上。这种方法并不能使人满意,因为每次对随机数的需求都必须进行一次读操作,而这种操作是非常浪费时间的,而且这种方法为了满足随机数重复周期的要求,必须存储一个很大的随机数序列。第二种方法是利用某种手段生成一个随机数序列并将其保留在计算机内存中。这种方法可以克服第一种方法中的速度问题,但是要满足多个仿真研究的需要就应存储一个相当大的随机数序列,这就要求有非常大的内存量。第三种也是最常用的一种方法,是利用某种算法根据指定的输人值来产生随机数。这种方法克服了速度和内存容量上的问题,但同时又带来了在独立性和可重复性方面的问题。

运用某种算法产生随机数可能会破坏随机的基本性质,因此利用算法所产生的随机数被称为伪随机数。这些数满足一定的随机性准则,但它们的产生总是以某个称之为种子的确定的初始值开始,并且是一个完全确定的、重复的过程。当使用伪随机序列时必须极其小心才能保证有良好的随机度以及重复周期才能足够地长。在仿真研究中对利用算法产生的伪随机数序列进行合理性检验也是非常重要的。

注意伪随机数中的“伪”字。所谓的“伪”并不意味着产生了一个假的随机数或随机数序列。这里使用“伪”字是指由一个已知的方法所产生的随机机数的真正作用是排除了真正的随机性。如果知道了产生随机数的方法那么任何一个随机数序列便可以重复地产生出来,这样就会认为这些数不是真正的随机数。然而,不管采用什么方法,产生随机数的目的是使所产生的随机数序列能尽可能地接近均匀分布和独立性的理想性质。

当然,利用这种方法产生的伪随机数会与理想随机性产生一定的偏差。例如所产生的数可能不服从均匀分布,数的均值太高或太低,数的方差可能太高或太低,可能存在一定的周期性变化等。正因为如此,才需要对所产生的伪随机数序列进行均匀性和独立性检验。如果检验出的偏差超出许可范围,就不能接受相应的伪随机数产生方法。