拟随机数字生成器(qrng)产生高度均匀的单位超立方样品。QRNGs最小化差异生成点的分布与超立方体的均匀划分的每个子立方体中具有相同比例的点的分布之间。因此,qrng系统地在生成的准随机序列的任何初始片段中填充“空穴”。
不同于伪随机序列描述常见的伪随机数生成方法,准随机序列通过了许多随机性统计测试。然而,接近真实的随机性并不是他们的目标。准随机序列寻求均匀地填充空间,并以这样一种方式进行填充,即初始段将此行为近似到指定的密度。
QRNG应用程序包括:
准蒙特卡罗(QMC)积分。蒙特卡罗技术通常用于计算困难的多维积分,而没有封闭形式的解。QMC使用准随机序列来改善这些技术的收敛性。
空间实验的设计。在许多实验设置中,对每个因素设置进行测量是昂贵的或不可行的。拟随机序列提供了有效的、均匀的设计空间采样。
全局优化。优化算法通常在初值的邻域内寻找局部最优值。利用准随机初值序列,均匀采样所有局部最小值的吸引域来搜索全局最优。
想象一个简单的一维序列,生成从1到10的整数。这是基本的顺序前三点是(1、2、3)
:
现在看看怎么做争夺
,跳过
,飞跃
协同工作:
争夺
-混乱会以几种不同的方式之一洗牌。在本例中,假设加扰将序列转换为1、3、5、7、9,2,4,6,8,10
.前三点是现在(1、3、5)
:
跳过
——一个跳过
Value指定要忽略的初始点的数量。在本例中,设置跳过
值为2。顺序是5、7、9、2、4、6、8、10
前三点是(5、7、9)
:
飞跃
——一个飞跃
值指定每次获取时要忽略的点数。继续使用跳过
设置为2,如果你设置飞跃
到1时,序列使用每一个其他点。在本例中,序列是now5、9、4、8
前三点是[5 9 4]
:
Statistics和Machine Learning Toolbox™函数支持这些准随机序列:金宝app
拟随机序列是从正整数到单位超立方的函数。为了在应用中有用,首字母点集必须生成一个序列。点集是大小矩阵n——- - - - - -d,在那里n点数是多少d为被采样的超立方体的维数。的函数haltonset
和sobolset
构造具有特定拟随机序列性质的点集。点集的初始段由净
的方法haltonset
和sobolset
类,但是点可以更普遍地使用括号索引生成和访问。
由于准随机序列的产生方式,它们可能包含不良的相关性,特别是在它们的初始段,特别是在高维。为了解决这一问题,通常采用准随机点集跳过,飞跃结束了,或争夺序列中的值。的haltonset
和sobolset
函数允许你指定两个跳过
和一个飞跃
拟随机序列的性质,以及争夺
的方法haltonset
和sobolset
类允许您应用各种置乱技术。置乱降低了相关性,同时也改善了均匀性。
这个例子展示了如何使用haltonset
构造一个二维Halton拟随机点集。
创建一个haltonset
对象p
,它跳过序列的前1000个值,然后保留每101个点。
rng默认的%的再现性p = haltonset (2“跳过”1 e3,“飞跃”1 e2)
p = Halton点设置在2维(89180190640991点)属性:跳过:1000跳过:100 ScrambleMethod:无
的对象p
封装指定的准随机序列的属性。点集是有限的,其长度由跳过
和飞跃
性质和对点集指数大小的限制。
使用争夺
应用反向基数置乱。
(p, p =争夺“RR2”)
p = Halton点设置在2维(89180190640991点)属性:跳过:1000跳跃:100 ScrambleMethod: RR2
使用净
生成前500点。
X0=净(p,500);
这个等价于
X0 = p (1:50 0:);
点集的值X0
是否生成并存储在内存中,直到您访问p
使用净
或括号索引。
要了解准随机数的性质,请在中创建二维散点图X0
.
散射(X0 (: 1), X0 (:, 2), 5,“r”)轴广场标题(“{\ bf拟随机散射}”)
将其与由。生成的均匀伪随机数的散布进行比较兰德
函数。
X =兰德(500 2);散射(X (: 1) X (:, 2), 5,“b”)轴广场标题('{\bf均匀随机散射}')
准随机散射更加均匀,避免了伪随机散射中的聚集现象。
在统计意义上,准随机数过于均匀,无法通过传统的随机性检验。例如,Kolmogorov-Smirnov测试,由键糟
,用来评估点集是否具有均匀随机分布。当对均匀伪随机样本重复执行时,例如由兰德
时,该检验产生均匀分布p值。
nTests = 1 e5;sampSize = 50;PVALS = 0 (nTests, 1);为test = 1:nTests x = rand(sampSize,1);[h, pval] =键糟(x (x, x));PVALS(测试)= pval;结束直方图(PVALS,100) h = findobj(gca,“类型”,“补丁”);包含(“{\ p}值”) ylabel (测试的数量)
在均匀的准随机样本上反复进行试验,结果有很大的不同。
p = haltonset (1,“跳过”1 e3,“飞跃”1 e2);(p, p =争夺“RR2”); nTests=1e5;sampSize=50;PVALS=零(NTEST,1);为test = 1:nTests x = p(test:test+(sampSize-1),:);[h, pval] =键糟(x (x, x));PVALS(测试)= pval;结束直方图(PVALS 100)包含(“{\ p}值”) ylabel (测试的数量)
小p-values质疑数据是均匀分布的null假设。如果假设成立,大约5%的p-值预计将低于0.05。结果是非常一致的,他们没有挑战假设。
拟随机流,由qrandstream
函数,用于生成序列的准随机输出,而不是特定大小的点集。流的使用类似于pseudoRNGS,例如兰德
,当客户端应用程序需要可以间歇访问的大小不定的准随机数源时。准随机流的属性,比如它的类型(Halton或Sobol)、维度、跳过、跳跃和混乱,在构造流时设置。
在实现中,准随机流本质上是非常大的准随机点集,尽管它们的访问方式不同。的状态准随机流的标量索引是从流中取下的下一个点的标量索引。使用qrand
的方法qrandstream
类从流生成点,从当前状态开始。使用重置
方法将状态重置为1
.与点集不同,流不支持括号索引。金宝app
这个例子展示了如何从一个准随机点集生成样本。
使用haltonset
来创建一个准随机点集p
,然后重复增加索引到点集测试
生成不同的样本。
p = haltonset (1,“跳过”1 e3,“飞跃”1 e2);(p, p =争夺“RR2”); nTests=1e5;sampSize=50;PVALS=零(NTEST,1);为test = 1:nTests x = p(test:test+(sampSize-1),:);[h, pval] =键糟(x (x, x));PVALS(测试)= pval;结束
同样的结果通过使用qrandstream
构造一个准随机流问
基于点集p
并让流处理索引的增量。
p = haltonset (1,“跳过”1 e3,“飞跃”1 e2);(p, p =争夺“RR2”);q = qrandstream (p);nTests = 1 e5;sampSize = 50;PVALS = 0 (nTests, 1);为测试X = qrand(q,sampSize);[h, pval] =键糟(X (X, X));PVALS(测试)= pval;结束