生成准随机数
拟随机序列
准随机数发生器(qrng)产生高度均匀的单位超立方体样本。qrng最小化差异在生成点的分布与超立方体的均匀分区的每个子立方体中点的等比例分布之间。因此,qrng系统地填充所生成的准随机序列的任何初始段中的“洞”。
与中描述的伪随机序列不同常见伪随机数生成方法,准随机序列的随机性未能通过许多统计检验。然而,接近真正的随机性并不是他们的目标。准随机序列寻求均匀地填充空间,并以这样一种方式,即初始段近似这种行为,直到指定的密度。
QRNG应用包括:
准蒙特卡罗(QMC)积分。蒙特卡罗技术经常用于计算困难的多维积分,没有一个封闭形式的解。QMC采用准随机序列来改善这些技术的收敛性。
空间填充实验设计。在许多实验设置中,在每个因素设置中进行测量是昂贵的或不可行的。准随机序列提供了高效、均匀的设计空间采样。
全局优化。优化算法通常在初始值附近找到一个局部最优值。利用准随机初值序列,对所有局部极小值的吸引盆地进行均匀抽样,求全局最优。
示例:使用Scramble、Leap和Skip
想象一个简单的一维序列,它产生从1到10的整数。这是基本顺序,前三个点是(1、2、3)
:
现在看看争夺
,跳过
,飞跃
协同工作:
争夺
- scramble以几种不同的方式之一洗牌。在本例中,假设打乱将序列变成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)
:飞跃
——一个飞跃
Value指定要忽略的每一个点的数量。继续这个例子跳过
设置为2,如果设置飞跃
到1,序列使用其他所有点。在本例中,序列为now5、9、4、8
前三点是[5 9 4]
:
准随机点集
统计和机器学习工具箱™功能支持这些准随机序列:金宝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打乱方法:无
的对象p
封装指定的准随机序列的属性。点集是有限的,其长度由跳过
而且飞跃
属性和限制点集索引的大小。
使用争夺
应用反向基置乱。
P = scramble(P,“RR2”)
p = Halton点集在2个维度(89180190640991点)属性:跳过:1000跳:100打乱方法:RR2
使用网
生成前500个点。
X0 =净(p,500);
这相当于
X0 = p(1:500,:);
点集的值X0
不生成并存储在内存中,直到您访问p
使用网
或圆括号索引。
为了理解准随机数的性质,在中创建二维的散点图X0
.
散射(X0 (: 1), X0 (:, 2), 5,“r”)轴广场标题(“{\bf准随机散射}”)
方法生成的统一伪随机数的散点兰德
函数。
X =兰特(500,2);散射(X (: 1) X (:, 2), 5,“b”)轴广场标题(“{\bf均匀随机散射}”)
准随机散射更加均匀,避免了伪随机散射中的聚块现象。
从统计学意义上讲,准随机数过于均匀,无法通过传统的随机性检验。例如,Kolmogorov-Smirnov检验,由键糟
,用于评估一个点集是否具有均匀随机分布。当对均匀伪随机样本重复执行时,例如由兰德
时,试验产生的均匀分布p值。
nTests = 1e5;sampSize = 50;PVALS =零(nTests,1);为测试x = rand(sampSize,1);[h,pval] = kstest(x,[x,x]);PVALS(test) = pval;结束直方图(PVALS,100) h = findobj(gca,“类型”,“补丁”);包含(“{\ p}值”) ylabel (“测试次数”)
在均匀准随机样本上重复进行试验时,结果有很大差异。
P = haltonset(1,“跳过”1 e3,“飞跃”1 e2);P = scramble(P,“RR2”);nTests = 1e5;sampSize = 50;PVALS =零(nTests,1);为x = p(test:test+(sampSize-1),:);[h,pval] = kstest(x,[x,x]);PVALS(test) = pval;结束直方图(PVALS 100)包含(“{\ p}值”) ylabel (“测试次数”)
小p-values对数据均匀分布的零假设提出了质疑。如果假设成立,大约5%的p-值预计下降到0.05以下。结果非常一致,他们都未能挑战这一假设。
拟随机流
拟随机流,由qrandstream
函数,用于生成连续的准随机输出,而不是特定大小的点集。流的使用类似于伪rng,例如兰德
,当客户端应用程序需要一个大小不定的准随机数源时,可以间歇地访问。准随机流的属性,例如它的类型(Halton或Sobol)、维度、跳过、跳跃和打乱,都是在构建流时设置的。
在实现中,准随机流本质上是非常大的准随机点集,尽管它们的访问方式不同。的状态准随机流的是流中要取的下一个点的标量索引。使用qrand
方法qrandstream
类从流中从当前状态开始生成点。使用重置
方法将状态重置为1
.与点集不同,流不支持圆括号索引。金宝app
生成一个准随机流
这个例子展示了如何从准随机点集中生成样本。
使用haltonset
创建一个准随机点集p
,然后重复增加索引到点集中测验
生成不同的样本。
P = haltonset(1,“跳过”1 e3,“飞跃”1 e2);P = scramble(P,“RR2”);nTests = 1e5;sampSize = 50;PVALS =零(nTests,1);为x = p(test:test+(sampSize-1),:);[h,pval] = kstest(x,[x,x]);PVALS(test) = pval;结束
通过使用,得到了相同的结果qrandstream
构造一个准随机流问
基于这个点集p
并让流处理索引的增量。
P = haltonset(1,“跳过”1 e3,“飞跃”1 e2);P = scramble(P,“RR2”);Q = qrandstream(p);nTests = 1e5;sampSize = 50;PVALS =零(nTests,1);为X = qrand(q,sampSize);[h,pval] = kst (X,[X,X]);PVALS(test) = pval;结束