通过计算机产生的随机数一般为伪随机数。这是因为计算机产生随机数时一般运用一些已知的方法来产生随机数。如果产生随机数的方法已知,则通过该方法即可产生重复的随机数集合。然而计算机仍然可以使用某些方法尽可能近似地模拟或仿真理想的独立性的[0, 1]区间均匀分布。产生随机数的方法很多,但用于系统仿真的随机数生成方法必须满足以下这些条件:
①程序运行速度需要足够快。由于仿真中通常需要生成成百上千个随机数,因此,要求生成随机数的程序运行足够快以保证仿真系统的效率。
②程序必须要求能在不同的计算机及不同的计算机编程语言之间移植。由于在系统仿真,随机数的产生属于较为基础的底层需求,通常在仿真系统中属于通用的基础模块,因此要求随机数生成程序具备较高的通用性。
③程序生成的随机数必须要有足够长的周期。随机数序列以先前的随机数顺序在此出现,则该方法即出现了退化。在仿真中生成的随机数序列周期足够长而不影响仿真过程。
④产生的随机数序列必须是可重复的。在相同的初始条件下,同一方法产生的随机数序列必须是相同的,而且与正在使用的仿真系统完全无关。只有生产的随机数序列是可重复的才可以对仿真系统进行调试,对比分析。
⑤产生的随机数必须尽可能接近理想的独立性均匀分布。这一点是保证随机数生成方法可以生成有效的、满足随机数特征的随机数序列。
下面将介绍几种常用的随机数生成方法。
1.线性余同法
线性余同法由Lehmer在1951年提出[39],该方法可用下式表示:
Xi+1=(aXi+c)mod m, i = 0, 1, 2,…
其中,初始值X0称为种子,a称为乘子,c称为增量,m称为模数。如果c不为0则该式称为混合线性余同法,否则称为乘同余法。参数a、c、m以及X0值的选择对所产生随机数的统计性质及循环长度有很大影响。下面举例说明线性余同法的求解过程。
【例5-2】 设上式中X0=15, a = 13, c= 16, m = 100。由于对100整除取余数,所以所得到的数值介于0~99。因此,需要对每个求得的随机数做如下处理:
Xi序列和Ri序列计算过程如下:
X0=15(www.xing528.com)
X1=(13×15+16) mod 100 = 211 mod 100 = 11
X2=(13×11+16)mod 100 = 159 mod 100 = 59
X3=(13×59+16) mod 100 = 783 mod 100 = 83
……
一个好的随机数生成方法可以得到周期长且较为均匀的随机数序列。这就涉及随机数序列的最大密度及最大周期的性质。随机数序列的最大密度可以确保随机数序列在[0, 1]区间上没有大的间隔,最大周期则可以确保随机数序列出现重的周期较长。因此线性余同法下列性质可以为程序设计者提供参考:
①如果m为2的幂,即m=2b并且c≠0,当c是相对于m的素数,且a = 1+4k(k为整数)时,最大可能周期P=m=2b。
②如果m为2的幂,即m=2b并且c=0,当种子X0为奇数,且乘子a满足a=3+8k或者a = 5+8k(k = 0, 1, 2, …)时,最大可能周期为P=m/4 = 2b 2。
③如果m为2的幂,即m=2b并且c=0,在乘子a具有ak-1能被m整除的最小k为k = m-1的性质时,最大可能周期为P=m-1。
2.组合线性同余发生器
随着计算机计算能力的增强,可以运用仿真系统进行仿真的系统复杂性也在不断增加。在对高可靠性复杂系统进行仿真时,对随机序列的要求也越来越高。一般的余同法生成的随机序列的周期不足以运用于高可靠性系统。将两个以上的多个乘同余法结合起来,组成的组合线性同余发生器则具有较好的效果。
如果Wi,1, Wi,2, …, Wi, k为任意独立、离散取值的随机变量(不一定同分布),其中一个随机变量服从0~m1-2上的整数均匀分布,则下式中Wi服从0~m1-2上的整数均匀分布:
设Xi,1, Xi,2, …, Xi, k为k个不同的乘同余发生器第i次的输出值,其中第j个发生器的模数为素数mj,并选择乘子aj使得周期为mj-1。于是第j个发生器产生的整数Xi,j近似服从1~mj-1上的整数均匀分布,并且Wi, j = Xi,j-1近似服从0~mj-2上的整数均匀分布。从L'Ecuyer等提出的而组合发生器的形式如下:
该发生器的最大可能周期为
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。