2.2 随机数与伪随机数
数列可以分为三种不同的类型:
真随机数列,准随机数列, 伪随机数列
一、 真随机数
null 真随机数数列是不可预计的,因而也不可能重复产生
两个相同的真随机数数列。
null 真随机数只能用某些随机物理过程来产生。例如:放
射性衰变、电子设备的热噪音、宇宙射线的触发时间
等等。
null 如果采用随机物理过程来产生蒙特卡洛计算用的随机
数,理论上不存在什么问题。但在实际应用时,要做
出速度很快(例如每秒产生上百个浮点数),而又准确
的随机数物理过程产生器是非常困难的。
弗里吉雷欧(Frigerio)等人的真随机数获取:
用一个
α
粒子放射源和一个高分辨率的计数器做成的
装置,在20 毫秒时间内平均记录了24.315个
α
粒子。当计
数为偶数时,便在磁带上记录二进制的“1”。
这个装置每小时可以产生大约6000个31比特(bits)的
真随机数。这些数被存储在磁带上,并通过了一系列的“随
机数”检验后用于蒙特卡洛计算当中。
消除奇数计数的几率并不精确等于1/2所引起的偏差的
1
处理方法:
利用上面介绍的装置得到的“0”或者“1”的真随机数
序列中,0和1出现的几率P(0)和P(1)可能并不精确等于
1/2。
我们从原始的真随机数序列出发,将序列中的二进制数
依次成对组合;如果这组中的两个数相同,则舍去这两个数;
如果这组中的两个数不相同,则保留第二个二进制数而丢弃
第一个数。
这样构成的一个新序列可以保证:在原始序列中的数是
相互独立的情况下,“0”和“1”出现的概率相等。
这一点可以从如下的计算中看出:“0”出现在新序列中
的概率为。这是因为新序列中的“0”只能在原
始序列中“1”后面跟着“0”时才出现。同样“1”在新序
列中出现的概率
() ()()010 PPP =′
() ( ) ( )10 PP1P =′
)1(p′
() ()10
22
PP +
。因而无论和等于什么
值,p和都相等。由于在构成新序列时,舍去了一组数
的几率为,因而
)0(p )1(p
)0(′
( ) ( )10 PP ′+′不等于1,而小于或等
于1/2。在这种方法中,对两个数不相同的一组数至少要丢
掉一个二进制数。很明显,它的产生效率为( )()P =1 ( )PP ?10P,
其中
p
为或。其产生效率的最大值为25 %。
)0(p )1(p
巴夫昂投针实验在真随机数产生器中由于物理偏差所
引起的问题:
(1)在投针实验中平行线间间距必须保证为一个常数
2
值,并在所要求的误差范围内与针长相等。如果我们仅要求
π值的一至二位有效数字,这个要求是不难满足做到的,但
是如果要求更多位的有效数字,这就比较困难了。
(2)正确地判断临界状态下的针与平行线的相交也非
易事。第三,我们还必须保证针的投掷位置和角度的分布是
均匀分布的。为保证角度分布的均匀性,可以在投针的时候,
让针迅速旋转,并采用非常平的、摩擦系数是各向同性的桌
面。
(3)投针位置的分布决不是均匀分布的,而是在投掷
目标点周围服从高斯分布。在实际应用中,我们必须由实验
来决定这一分布宽度,并且要对它引起的偏差做类似于前面
所述的由弗里吉雷欧等人所做的复杂修正。
二、准随机数
准随机数序列并不具有随机性质,仅仅是它用来处理问
题时能够得到正确结果。
准随机数概念是来自如下的事实:对伪随机数来说,要
实现其严格数学意义上的随机性,在理论上是不可能的,在
实际应用中也没有这个必要。关键是要保证“随机”数数列
具有能产生出所需要的结果的必要特性。例如,在多重积分
和大多数模拟研究中,多维空间的每个点或模拟事例被认为
是相互独立的,而这些点或事例的顺序则似乎并不重要。因
3
而我们可以在大多数运算中,放心地置随机性的概念于不
顾。同样,我们也可以不考虑对某些分布均匀性的涨落程度。
事实上在许多情况下,超均匀的分布比真随机数的均匀分布
更合乎实际需要。
事实上,准蒙特卡洛是将蒙特卡洛方法处理问题的维数
向高维扩展的方法。由此可见准蒙特卡洛方法的理论与真蒙
特卡洛的理论很接近。
三、 伪随机数
实际应用的随机数通常都是通过某些数学公式计算而
产生的伪随机数。这样的伪随机数从数学意义上讲已经一点
不是随机的了。但是,只要伪随机数能够通过随机数的一系
列的统计检验,我们就可以把它当作真随机数而放心地使
用。这样我们就可以很经济地、重复地产生出随机数。
对物理问题的计算机模拟所需要的伪随机数应当满足
如下的标准:
理论上,要求伪随机数产生器具备以下特征:良好的统
计分布特性、高效率的伪随机数产生、伪随机数产生的循环
周期长,产生程序可移植性好和伪随机数可以重复产生。其
中满足良好的统计性质是最重要的。
然而实际使用的伪随机数产生程序还没有一个是十全
十美的。因此我们要求产生出的伪随机数应当能通过尽可能
4
多的统计检验,以便人们放心地使用。
1. 伪随机数的产生方法
伪随机数产生器产生的实际上是伪随机数序列。
最基本的产生器是均匀分布的伪随机数产生器。
最早的伪随机数产生器可能是冯?诺曼平方取中法:该
方法首先给出一个2r位的数,取它的中间的r 位数码作为
第一个伪随机数;然后将第一个伪随机数平方构成一个新的
2r 位数,再取中间的r 位数作为第二个伪随机数…。如此
循环便得到一个伪随机数序列。类似上述方法,利用十进制
公式表示2r 位数的递推公式。
n
x
[ ]( )
r
nn
r
n
r
n
x
xx
2
22
1
10/
10mod10
=
=
?
+
ξ
.
这样得到的{}
i
ξ伪随机数序列是分布在[0,1]上的。相应的二
进制递推公式为(为2r 位二进制数):
n
x
[ ]( )
r
nn
r
n
r
n
x
xx
2
22
1
2/
2mod2
=
=
?
+
ξ
,
但是这种方法不是很好,现在已很少使用。这主要是因为该
方法产生的数列具有周期性,有些数(如零)甚至会紧接着重
复出现。
实际使用的伪随机数产生器常常比平方取中法简单。如
今比较流行,并用得最多的是同余产生器。我们通过如下的
线性同余关系式来产生数列。
5
,
mx
mcaxx
nn
nn
/
))(mod(
1
=
+=
+
ξ
其中称为种子,改变它的值就得到基本序列的不同区段。
为大于零的整数,分别叫做乘子、增量、初值和模。
使用时需要仔细地挑选模数和乘子,使得产生出的伪随
机数的循环周期要尽可能长。
0
x
m,
0
xca ,,
m
a
0≠c时能实现最大的周期,但
是得到的伪随机数的特性不好。0≠c的这类情况称为混合同
余发生器。通常选取为任意非负整数,乘子和增量取
如下形式
0
x
a c
,
14 += qa 12 += pc
.
p和q为正整数。这两种方法中的值的选择一般是
通过定性分析和计算机试验来选择,使得到的伪随机数列具
有足够长的周期,而且独立性和均匀性都能通过一系列的检
验。
mxqp ,,,
0
对c的情况叫做乘同余法,由于减少了一个加法,因
而可以使产生伪随机数的速度快些。这种方法产生的伪随机
数递推公式为
0=
( )
mx
maxx
nn
nn
/
mod
1
=
=
+
ξ
,
max ,,
0
也为正整数,并分别叫做初值、乘子和模。
其他的产生伪随机数的方法:混沌法伪随机数产生、反
馈移位寄存器(RNG)等。
6
2. 伪随机数的统计检验
统计检验: 均匀性检验、独立性检验、组合规律检验、
无连贯性检验、参数检验等等。
最基本的是它的均匀性和独立性的检验。
均匀性是指在[0,1]区域内等长度区间的随机数分布的
个数应相等。
独立性是按先后顺序出现的若干个随机数中,每一个数
的出现都和它前后的各个数无关。
一个好的伪随机数序列除了能通过这两种主要的统计
检验外,还需要能通过别的多种检验。能通过的检验越多,
则该产生器就越优良可靠。
(1) 均匀性检验—频率检验
均匀性检验是所有检验中最简单的一种。它的方法很多,
如方法。
2
χ
设有在区间[0,1]上的伪随机数序列为{ }
N
ξξξ ,......,,
21
i
N
。如
果该伪随机数是均匀分布的,则将[0,1]区间分成k个相等
的子区间后,落在每个子区间的伪随机数个数应当近似为
。此数也称频数。它的统计误差kN / kN /=N
ii
=σ。统计量
按定义应为
2
χ
()
()
2
11
2
2
/
/
/
∑∑
?=
?=
?
=
k
i
i
k
i
i
kNN
N
k
kN
kNN
χ
.
7
在此问题中应服从的分布。据此可以假定一
个显著性水平值来进行检验。我们可以从表查得个
自由度的显著水平为
2
χ )1(
2
?kχ
2
χ ()1?k
α时的值。计算出来的小于t,
则认为在
α
t
2
χ
α
α的显著水平下,原伪随机数在[0,1]区间是均
匀分布的假定是正确的。
如果计算的得到的大于,则认为在
2
χ
α
t α的显著水平
下,伪随机数不满足均匀性的要求。
通常取显著水平为0.01或0.05。为了反映均匀性分
布的特性,k的取值不宜太小,但也不能太大。一般选取
的k值,要能使每个子区间有若干个伪随机数时就比较合
适。
(2) 独立性检验—无重复联列检验
如果把[0,1]上的伪随机数序列{ }
N221
,......,, ξξξ分成两列
121231
,...,,...,
?? Ni
ξξξξ
Ni 2242
,...,,..., ξξξξ
第一列作为随机变量的取值,第二列作为随机变量的取
值。在平面内的单位正方形域
x y
xy?
[ ]10,10 ≤≤≤≤ yx
kk
上,分别以
平行于坐标轴的平行线,将正方形域分成×个相同面积的
小正方形网格。落在每个网格内的随机数的频数应当近似
等于。由此可以算出为
ij
n
2
/Nk
2
χ
8
2
2
2
2
,1
k
ij
ij
kN
n
Nk
χ
=
??
=?
??
??
∑
.
2
χ应满足( )( )
22
1?kχ的分布。据此可以采用与均匀性检验的
方法,假定出显著性水平来进行检验。我们也可以把伪随机
数序列分为三列、四列、…,用与上面所述相似的方法进行
多维独立性检验。
2
χ
3. 独立于计算机机型的伪随机数产生器
在实际应用中,我们常常希望使用能够在各种型号的计
算机上工作,并能重复产生相同伪随机数序列的产生器。
这种产生器的实现是基于如下的思想:如果要产生[0,1]
区间的伪随机浮点数,选择精度最低的计算机作为标准精
度,而对字长较长的计算机,用将较低的数位人为置零的方
法,即在高精度的计算机上进行较低精度的运算。
这样的伪随机数产生器无论从伪随机数的重复周期和
产生伪随机数的速度都不算理想,但它却可以在大多数的计
算机上工作。
这些伪随机数产生器产生的前几个数近似为:
R1=0.10791504…,R2=0.58747506…。
FUNCTION RN32(IDUMMY)
C CDC VERSION F.JAMES, 1978
C IY IS THE SEED. CONS=2**-31
9
DATA IY/65539/
DATA CONS/16614000000000000000B/
DATA MASK31/17777777777B/
IY=IY*69069
C KEEP ONLY LOWER 31 BITS
IY=IY.AND.MASK31
C SET LOWER 8 BITS TO ZERO TO ASSURE EXACT FLOAT.
IY=IY.AND.07777777777777777400B
YFL=JY
RN32=YFL*CONS
RETURN
C ENTRY TO INPUT SEED
ENTRY RN32IN
IY=IDUMMY
RETURN
C ENTRY TO OUTPUT SEED
ENTRY RN32OT
IDUMMY=IY
RETURN
END
FUNCTION RN32(DUMMY)
10
C IBM VERSION, F.JAMES, 1978
C IY IS THE SEED, CONS=2**-31
DATA IY/65539/
DATA CONS/Z39200000/
IY=IY*69069
C ASSURE LEFTMOST BIT ZERO(POSITIVE INTEGER)
IF(IY.GT.0) GOTO 6
IY=IY+2147483647+1
6 CONTINUE
C SET LOWER 8 BITS TO ZERO TO ASSURE EXACT FLOAT
JY=(IY/256)*256
YFL=JY
RN32=YFL*CONS
RETURN
C ENTRY TO INPUT SEED
ENTRY RN32IN(IX)
IY=IX
RETURN
C ENTRY TO OUTPUT SEED
ENTRY RN32OT(IX)
IX=IY
RETURN
11
END
12