均匀性较好的随机数生成
zz from www.ahcit/lanmuyd.asp?id=3379
随机数生成算法[1]是一类重要的算法,广泛应用于仿真技术等场合。然而,目前的伪随机数生成器(Pseudo-random number generator, PRNG)[2]存在一个重要缺陷,即样本分布与真实分布不一致,这主要发生在以下两种情况:①抽样代价过高,样本数目较少;②空间维数较高[3]。
因此,有必要寻一类新的随机数发生器。准随机数发生器(Quasi-random number generator, QRNG)[4]能够生成稳定、低差异性的(low-discrepancy)样本,而与样本数目或空间维数无关[5]。故针对蒙特卡罗积分结果不稳定的情况,提出一种基于QRNG的蒙特卡罗积分,发现比传统方法性能有所提升。
伪随机数介绍
伪随机数是由确定的算法生成的,其分布函数与相关性均能通过统计测试。与真实随机数的差别在于,它们是由算法产生的,而不是一个真实的随机过程。一般地,伪随机数的生成方法主要有以下3种[6]:
(1) 直接法(Direct Method),根据分布函数的物理意义生成。缺点是仅适用于某些具有特殊分布的随机数,如二项式分布、泊松分布。
(2) 逆转法(Inversion Method),假设U服从[0,1]区间上的均匀分布,令X=F-1(U),则X的累计分布函数(CDF)为F。该方法原理简单、编程方便、适用性广。
(3)接受拒绝法(Acceptance-Rejection Method):假设希望生成的随机数的概率密度函数(PDF)为f,则首先到一个PDF为g的随机数发生器与常数c,使得f(x)≤cg(x),然后根据接收拒绝算法求解。由于算法平均运算c次才能得到一个希望生成的随机数,因此c的取值必须尽可能小。显然,该算法的缺点是较难确定g与c。
因此,伪随机数生成器(PRNG)一般采用逆转法,其基础是均匀分布,均匀分布PRNG的优劣决定了整个随机数体系的优劣[7]。下文研究均匀分布的PRNG。
伪随机数生成器的缺点
重复做N=10000次试验,每次产生S=20与S=100个随机分布的样本,同时采用Kolmogorov- Smirnov假设检验(hypothesis test)来确定样本是否满足均匀分布。规定:
① 0假设(null hypothesis)为样本服从均匀分布;② 1假设(alternative hypothesis)为样本不服从均匀分布。
采用P值(∈[0, 1])衡量,P值越趋近于0,表示越有理由拒绝0假设,即样本不服从均匀分布;P值
越趋近于1,表示越有理由接受0假设,即样本服从均匀分布。
如图1与图2所示:随着P值下降,样本也越来越不服从均匀分布。实践中希望P值越大越好。然而统计学的结论显示,P值一定服从均匀分布,与N、S大小无关,这表明由于随机性,总会出现某次抽样得到的
样本不服从、甚至远离均匀分布。另外,样本大小的不同,造成检验标准的不同,直观上看S=100对应的均匀分布普遍比S=20对应的更均匀。因此,小样本情况下均匀分布PRNG的差异性尤为严重。
准随机数发生器
上节讨论了造成差异性的两个情况:小样本与高维空间。本节讨论如何构建一类新的随机数发生器,使其具有较低的差异性。
PRNG缺陷的根源在于“随机性”与“均匀性”的矛盾。因此,不要求新的发生器模拟真实的均匀分布,而力求任意大小的样本(尤其是小样本)都能满足低差异 性。换言之,以牺牲随机性为代价,换来均匀性的提高,称其为准随机数发生器(QRNG)。均匀分布QRNG的优势在于,其生成的样本更趋于均匀分布。在其 基础上构建的各类分布(包括高斯分布)的QRNG,其生成的样本也更趋于服从对应的分布。
目前有3种准随机序列(Quasi-random sequency)可用来辅助生成均匀分布随机数,分别是Halton序列、Sobol序列、Latin超立方体序列。
www.mathworks/access/helpdesk/help/toolbox/stats/qrandstream.html
matlab的方法:
qrandstream - Class: qrandstream
Construct quasi-random number stream
Syntax
q = qrandstream(type,d)
matlab生成随机数q = qrandstream(type,d,prop1,val1,prop2,val2,...)
q = qrandstream(p)
Description
q = qrandstream(type,d) constructs a d-dimensional quasi-random number stream q of the qrandstream class, of type specified by the string type. type is either 'halton' or 'sobol', and q is based on a point set from either the haltonset class or sobolset class, respectively, with default property settings.
q = qrandstream(type,d,prop1,val1,prop2,val2,...) specifies property name/value pairs for the point set on which the stream is based. Applicable properties depend on type.
q = qrandstream(p) constructs a stream based on the specified point set p. p must be a point set from either the haltonset class or sobolset class.
Examples
Construct a 3-D Halton stream, based on a point set that skips the first 1000 values and then retains every 101st point:
q = qrandstream('halton',3,'Skip',1e3,'Leap',1e2)
q =
Halton quasi-random stream in 3 dimensions
Point set properties:
Skip : 1000
Leap : 100
ScrambleMethod : none
nextIdx = q.State
nextIdx =
1
Use qrand to generate two samples of size four:
X1 = qrand(q,4)
X1 =
0.0928    0.3475    0.0051
0.6958    0.2035    0.2371
0.3013    0.8496    0.4307
0.9087    0.5629    0.6166
nextIdx = q.State
nextIdx =
5
X2 = qrand(q,4)
X2 =
0.2446    0.0238    0.8102
0.5298    0.7540    0.0438
0.3843    0.5112    0.2758
0.8335    0.2245    0.4694
nextIdx = q.State
nextIdx =
9
Use reset to reset the stream, and then generate another sample:
reset(q)
nextIdx = q.State
n
extIdx =
1
X = qrand(q,4)
X =
0.0928    0.3475    0.0051
0.6958    0.2035    0.2371
0.3013    0.8496    0.4307
0.9087    0.5629    0.6166
See Also
haltonset | qrand | reset | sobolset
类别:默认分类 |  | 添加到搜藏 | 分享到i贴吧 | 浏览(274) | 评论 (0)
上一篇:zz关于交叉验证   
最近读者:
网友评论:
发表评论:
姓 名: habby1985
内 容:
插入表情
同时将此文章分享给好友
验证码:  请点击后输入四位验证码,字母不区分大小写
?2011 Baidu

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。