伪随机数:比真实的均匀数据分布更均匀


43

我正在寻找一种生成似乎均匀分布的随机数的方法-每个测试都将显示它们是均匀的-除了它们比真实的均匀数据分布更均匀外。

我对“真实的”统一随机数存在的问题是,它们有时会聚类。在较小的样本量下,这种效果会更强。粗略地说:当我在U [0; 1]中绘制两个均匀随机数时,它们在0.1范围内的几率约为10%,在0.01范围内的几率约为1%。

因此,我正在寻找一种生成比统一随机数分布更均匀的随机数的好方法。

用例示例:比如说我在做电脑游戏,我想在地图上随机放置宝藏(不在乎其他任何东西)。我不想把宝藏全部放在一个地方,它应该遍布整个地图。如果使用统一的随机数,如果我放置10个对象,则彼此之间有5个左右的机会并不算低。这可以使一个玩家比另一个玩家更具优势。想想扫雷者,您很有可能(如果有足够的地雷的话)很幸运,只需单击一下即可获胜。

解决我的问题的一种非常幼稚的方法是将数据划分为网格。只要数量足够大(并且有足够的因素),就可以通过这种方式实现额外的统一性。因此,与从U [0; .1]提取12个随机变量不同,我可以从U [0; .5]提取6和从U [0.5; 1]提取6,或从U [0; 1/3] + 4提取4来自U [1/3; 2/3] + 4来自U [2/3; 1]。

有什么更好的方法可以使制服获得额外的均匀性?它可能仅适用于批量随机数(绘制单个随机数时,我显然必须考虑整个范围)。特别是,我可以在之后再次重新整理记录(因此它不是前三分之一中的前四个)。

如何逐步进行?那么第一个在U [0; 1]上,然后在每个半部分中两个,每个三分之一中一个,每个四个中一个?是否对此进行了调查,效果如何?我可能必须谨慎使用x和y的不同生成器,以使它们不相关(第一个xy总是在下半部分,第二个在左半部分和下三分之一,第三个xy在中心第三个和上三分之一。 ..因此至少还需要一些随机的bin排列。从长远来看,我想这会太均匀。

作为副节点,是否存在众所周知的测试,即某些分布是否过于均匀以至于无法真正统一?因此,测试“真正的统一”与“有人弄乱数据并使项目更均匀地分布”。如果我没记错的话,霍普金斯统计局(Hopkins Statistic)可以衡量这一点,但它也可以用于测试吗?KS-Test也是相反的:如果最大偏差低于某个预期阈值,数据分布是否过于均匀?


7
您听说过哈尔顿序列吗?对于“太均匀”,人们(从费舍尔对孟德尔豌豆实验结果的费舍尔研究开始)就将(通常)卡方统计量称为卡方分布的尾。
ub

对此进行形式化的一种方法是希望分配使得(1)在边缘化为(2 )是对称的,即是可交换的,并且(3)当分散时大。我认为(2)和(3)存在一个真正的问题,因为无限可交换序列不能负相关,因此我们要使用的越大,我们可以执行的斥力就越小;另一方面,对于大的,无论如何我们应该有良好的利差。1 X 1X Ñ - 1X 1X ÑX 1X ÑX 1X Ñ ř Ñg(x1,...,xn)g()1x1,...,xn1gX1,...,Xng(x1,...,xn)x1,...,xnRnn
家伙

霍尔顿序列与我所想到的方法非常接近。包括跳过前几个条目以减少关联的风险。我还考虑为每个级别使用随机置换。感谢您提供此指针,因为这给了我寻找相关方法的好机会!
Anony-Mousse 2012年

wrt。浩盾序列再次出现。我需要使它们不确定,至少除了初始种子外。我在这里看到两种方式。我可以按随机偏移量+随机起始偏移量+步长进行循环移位。问题是,保留给游戏示例的“宝藏”当然也不应每次都相对于彼此处于相同位置。或者,我可以使用在问题中使用的“从子间隔统一”的方法来添加一些“随机扭曲”。可以这么说:对于我的使用来说,霍尔顿似乎又太可预测且常规。
Anony-Mousse 2012年

3
en.wikipedia.org/wiki/Low-discrepancy_sequencemathworld.wolfram.com/QuasirandomSequence.html。统一RNG的几种常见测试(例如Diehard / Dieharder测试电池组中的测试)对这种情况很敏感。例如,点之间的“小距离”太少。
Glen_b 2012年

Answers:


60

是的,有许多方法可以产生比随机制服更均匀分布的数字序列。实际上,有一个专门针对这个问题的领域。它是准蒙特卡罗(QMC)的骨干。以下是绝对基础知识的简要介绍。

测量均匀度

有很多方法可以执行此操作,但是最常见的方法具有强烈的,直观的几何风格。假设我们关心的是在为某个正整数生成个点。定义 其中是的矩形,使得和X 1X 2... X Ñ [ 0 1 ] d dnx1,x2,,xn[0,1]dd- [R [ 一个1b 1 ] × × [ 一个db d ] [ 0 1 ] d 0 一个b 1 - [R [R [R v ø [R = Π b - 一个

Dn:=supRR|1ni=1n1(xiR)vol(R)|,
R[a1,b1]××[ad,bd][0,1]d0aibi1R是所有此类矩形的集合。模内的第一项是内部的点的“观察”比例,第二项是体积,。RRvol(R)=i(biai)

数量通常被称为点集的差异极端差异。直观地,我们发现“最差”的矩形,其点的比例与理想均匀性下的期望值相差最大。x iRDn(xi)R

这在实践中难以操作并且难以计算。在大多数情况下,人们更喜欢工作与星偏差, 唯一的区别是集合的绝对值。它是一组锚定矩形(在原点处),即。A a 1 = a 2 = = a d = 0

Dn=supRA|1ni=1n1(xiR)vol(R)|.
Aa1=a2==ad=0

引理:对于所有,。证明。自以来,左手界很明显。右边的边界如下,因为每个可以通过不超过锚定矩形的并集,交集和补码(例如,在)组成。 Ñ d - [R [R - [R 2 d DnDn2dDnnd
ARRR2dA

因此,我们看到和在某种意义上是等效的,如果一个随着增大而变小,那么另一个也将相等。这是一张(卡通)图片,显示每个差异的候选矩形。d ñ ñDnDnn

极星差异

“好”序列的例子

毫不奇怪,通常将具有可低星际差异序列称为低差异序列Dn

范德Corput。这也许是最简单的例子。对于,通过将整数扩展为二进制形式,然后在小数点附近“反映数字” 来形成范德Corput序列。更正式地说,这与完成的自由基逆在基本函数, 其中和是的基数扩展中的数字。此功能也构成许多其他序列的基础。例如,二进制文件中的是,因此b φ b= Σ ķ = 0ķ b - ķ - 1d=1ib

ϕb(i)=k=0akbk1,
i=k=0akbkakbi41101001a0=1,,,,和。因此,范德Corput序列中的第41个点是。a1=0a2=0a3=1a4=0a5=1x41=ϕ2(41)=0.100101(base 2)=37/64

请注意,由于的最低有效位在和之间振荡,奇数的点在,而偶数的点在。i01xii[1/2,1)xii(0,1/2)

霍尔顿序列。在最流行的经典低差异序列中,这些是范德科普特序列到多个维度的扩展。令为第个最小素数。然后,个点所述的维哈尔顿序列是 对于低它们工作得很好,但是在较大尺寸上存在问题pjjixid

xi=(ϕp1(i),ϕp2(i),,ϕpd(i)).
d

霍尔顿序列满足。它们也很不错,因为它们是可扩展的,因为这些点的构造不依赖于序列长度的先验选择。Dn=O(n1(logn)d)n

哈默斯利序列。这是Halton序列的非常简单的修改。我们改为使用 也许令人惊讶的是,这样做的好处是它们具有更好的星形差异。

xi=(i/n,ϕp1(i),ϕp2(i),,ϕpd1(i)).
Dn=O(n1(logn)d1)

这是二维Halton和Hammersley序列的示例。

霍尔顿和哈默斯利

Faure置换的Halton序列。生成Halton序列时,可以将一组特殊的置换(作为的函数固定)应用于每个的数字扩展。这有助于(在某种程度上)纠正较高维度中提到的问题。每个排列都具有将和保持为固定点的有趣特性。iaki0b1

格规则。令为整数。取 其中表示小数部分。值的明智选择会产生良好的均匀性。选择不当会导致顺序错误。它们也是不可扩展的。这是两个例子。β1,,βd1

xi=(i/n,{iβ1/n},,{iβd1/n}),
{y}yβ

好的和坏的格子

(t,m,s)。在基网是点的集合,使得体积的每矩形在包含点。这是一种很强的均匀性形式。在这种情况下,小是您的朋友。Halton,Sobol'和Faure序列是网络的示例。它们很容易通过加扰进行随机化。网络的随机加扰(正确完成)会产生另一个网络。该薄荷项目保持这种序列的集合。(t,m,s)bbtm[0,1]sbtt(t,m,s)(t,m,s)(t,m,s)

简单随机化:Cranley-Patterson旋转。令是点的序列。设。然后,点均匀分布在。xi[0,1]dUU(0,1)x^i={xi+U}[0,1]d

这是一个示例,其中蓝点是原始点,红点是旋转的点,并用线将它们连接起来(并在适当时显示为环绕)。

克兰利·帕特森

完全均匀分布的序列。这是有时甚至会发挥作用的更强的一致性概念。令为中点的序列,现在形成大小为重叠块以获得序列。因此,如果,我们取则,。如果对于每个,,则被说成是完全均匀分布的。换句话说,该序列产生一组任意(ui)[0,1]d(xi)s=3x1=(u1,u2,u3)x2=(u2,u3,u4) s1Dn(x1,,xn)0(ui)具有理想的属性的尺寸。Dn

例如,范德·科珀特序列不是完全均匀分布,因为对于,点在平方,而点在。因此,在平方中没有点,这意味着对于,对于所有,。s=2x2i(0,1/2)×[1/2,1)x2i1[1/2,1)×(0,1/2)(0,1/2)×(0,1/2)s=2Dn1/4n

标准参考

的Niederreiter(1992)专着和方和王(1994年)文本的地方去作进一步的探索。


4
这个答案非常好,我只是想感谢您付出的努力。谢谢!
Anony-Mousse 2012年

1
一个小的后续问题。霍尔顿序列看起来不错,因为它们似乎也不太规则。对于我来说,格子的东西很常规,而且Hammersley序列似乎在通过原点的线上有很多对象。控制真制服与假制服之间平衡的好方法是什么?只需从Halton中获取80%的贡献+ 20%的均等随机数?
Anony-Mousse 2012年

1
+ 10k,绝对是历史最低(87 !!!!)的答案!哦,我非常喜欢这篇文章。实际上,我因此将其添加为书签。干得好,@ cardinal。
2013年

@Macro:谢谢你这么好的评论!你真好 我认为这1万件事对我来说可能是暂时的。我怀疑一旦拖延拖延票,我可能会远低于1万。我很惊讶,实际上还没有发生。我相信他们在这个网站上投了将近3000票。也感谢您在这里发布;不知何故,我从未见过Anony-Mousse的后续问题!
红衣主教

@ Anony-Mousse:抱歉在响应中出现了严重的延迟。我一定忽略了这些评论。我认为建立平衡将取决于您的目标。从理论上讲,引入任何随机的均匀点势必会破坏的最佳特性。实际上,最好使用QMC点的非常小的抖动,其中基于序列的属性选择抖动。您还可以在所有点上引入随机刚体变换,例如平移和坐标旋转。d DD
主教

3

一种方法是生成统一的随机数,然后使用您喜欢的任何方法测试“紧密度”,然后删除与其他项目过于接近的随机项目,然后选择另一组随机制服来弥补它们。

这样的分布会通过所有的一致性测试吗?我当然希望不会!它不再是均匀分布的,而是其他分布。

概率的一个单方面性是机会是团块。随机数据的运行次数超出了人们的预期。我认为Tversky对此进行了一些研究(尽管他进行了很多研究,所以很难记住)。


2
这种方法的(很多)问题之一是很难描述结果的分布。
ub

OP似乎最关注小样本量。这表明他不需要关心整个分布。假设您有一组坐标,则生成另一个坐标,然后计算相对于所有其他坐标的欧几里得距离。如果最小距离小于某个阈值,则将数字扔掉并生成一个新的数字。我认为Peter的解决方案效果很好。
约翰·

@whuber他似乎对此并不感兴趣,尽管我可能错了。
彼得·弗洛姆

2
彼得,让我更清楚地陈述我的反对意见:当您以特殊方式删除和/或调整伪随机值以近似某些所需属性(例如缺乏聚类)时,很难确保所得序列具有任何理想的特性。例如,使用您的方法,您能否告诉我们结果处理过程的第一时间是什么?(也就是说,您甚至可以向我们保证强度是均匀的吗?)第二时刻呢?通常,这些构成了有效使用序列进行推理所需的最少信息。
ub

2
可以,但是,在问题的示例中,他想在游戏中的地图上放置宝藏。这不会涉及推理或片刻或任何其他类型的内容。我承认我的方法在很多方面都不是好方法,但我认为它与示例相符。当然,也许这个例子并不是他真正想要的。...也许他想要更正式的东西,在这种情况下,所有其他答案都应该考虑。
彼得·弗洛姆

3

这就是所谓的“硬核”泊松积分过程-由Brian Ripley在1970年代命名。也就是说,您希望它是随机的,但是您不希望任何点太靠近。可以将“核心”想象为一个缓冲区,其他点无法进入该缓冲区。

想象一下,您正在记录城市中某些汽车的位置-但是您只记录了汽车标称中心的点。当它们在大街上时,没有两个点对可以靠在一起,因为这些点受车身的“硬核”保护-我们将忽略多层停车场中潜在的超级位置:-)

有生成此类点过程的程序-一种方法是均匀地生成点,然后删除任何太靠近的点!

有关此类过程的一些详细信息,请参考示例


2

关于预先生成批处理,我将生成大量伪随机变量集,然后使用诸如Kolmogorov-Smirnov检验之类的检验对其进行测试。您将要选择具有最高 p值的集合(即,是理想的)。注意,这会很慢,但是随着变大,它的必要性可能会降低。 Ñp1N

关于增量生成,您实质上是在寻找一个具有中等负自相关的序列。我不确定执行此操作的最佳方法是什么,因为我在时间序列方面的经验非常有限,但是我怀疑已有用于此操作的算法。

对于“太均匀”检验,任何关于样本是否遵循特定分布的检验(例如上述KS)都可以,您只想检查而不是标准方法。我在这里写了一个有关这种替代方法的示例:卡方始终是单面测试p>(1α)


1

我可以这样来形式化您的问题:您想要在进行分布,以使密度为,其中量化点的排斥力。 ˚F X α ë 1[0,1]n k<0f(x)e(1kij|xixj|k)1kk<0

生成此类向量的一种简单方法是进行Gibbs采样。


您能详细说明一下吗?Gibbs采样在这里似乎无济于事,因为条件分布=边际分布=均匀?还是您建议使用以前的样本在分布中产生“空洞”以作为样本?
Anony-Mousse 2012年

选择一个统一的随机向量,然后重复统一地选择一个索引并对重新采样。计算重采样前后的比率,并用几率拒绝重采样。这比向量很长时得到的其他答案要快得多,因为您执行的是局部拒绝而不是全局拒绝。x i r f x rixirf(x)r
尼尔G
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.