一、说明
低差异序列是因为要引入伪随机序列空间而提出的。因为伪随机数虽然可以电脑产生,但是分布不够均匀,在仿真实验中产生不准。比如,用蒙特卡洛算法就要求无论所取空间大小如何,都应该将样本均匀分布在集合中。因此,范德科皮特序列就显得尤其有用。
二、Van der Corput数列的引入
2.1 基本概念
Van der Corput数列是一种在数论和计算几何中广泛使用的低差异序列。它由荷兰数学家Johannes G. van der Corput于1935年引入。该数列通常由一个关于基数的数字分数表示,其中分子的数字位于1到基数-1之间,分母是基数的一些幂。例如,当基数为2时,Van der Corput数列是:0.0,0.5,0.25,0.75,0.125,0.625,0.375,0.875,以此类推。这个序列有许多有用的性质,例如它的分布接近于均匀分布。在应用中,Van der Corput数列可用于生成随机分布的点,以及在数值积分和蒙特卡罗模拟中用于生成样本点。
2.2 低差异序列示例
在数学中,低差异序列是具有以下性质的序列:对小于 N 的所有值排成序列,其子序列 这些值,具有低差异(就是均匀分割【0,N】集合区域)。或者说, 其子序列
几乎均匀分布。
在任意子区域内,既不过度密集,也不过度疏松。那与随机有啥区别?答:比均匀分布的随机还要均匀分摊,而不受N规模大小的影响。
对于随机抽样来说,均匀分布的抽样其实不够“均匀”;更好的抽样(或更均匀的抽样)是低差异序列(Low Discrepancy Sequence),下图给出图像中均匀抽样和低差异序列的效果:
图中左侧是随机抽样的结果,图中右边是低差别序列的效果,是不是用低差别序列比均匀分布的抽样还要均匀?
2.3 低差异定义
我们将序列 (s1, s2, s3, ...) 相对于区间 [a, b] 的差异 DN 定义为:
因此,如果差异 DN 趋于零,而 N 趋于无穷大,则序列是等分布的。等分布是一个相当弱的标准来表达一个序列填充片段不留空隙的事实。
三、什么是范德科皮特序列?
范德科皮特(van der Corput) 序列是单位区间上最简单的一维低差异序列的示例;它于 1935 年由荷兰数学家 J. G. van der Corput 首次描述。它是通过反转自然数序列 (1, 2, 3, ...) 的 base-n 表示来构造的。
正整数 n (≥ 1) 的b进制表示是:
其中 b 是表示数字 n 的基数,并且,即 n 的 b 进制展开中的第 k 位。
此处不难理解:比如10进制数5067
van der Corput 序列中的第m 个数是
举个例子:van der Corput序列的第213项是
四、实例说明范德科皮特序列
以上的公式可能抽象,现在用实际范例说明:
要获得十进制范德科普特序列,我们首先将数字 1 到 9 除以十分之一 (x/10),然后将分母更改为 100 以开始除以百分之一 (x/100)。
就分子而言,我们从 10 到 99 的所有两位数开始,但按数字倒序排列(个位数优先)。因此,我们将得到按末尾数字分组的分子。首先是所有以 1 结尾的两位数分子,所以接下来的分子是 01、11、21、31、41、51、61、71、81、91。然后是以 2 结尾的分子,所以它们是 02、12 , 22, 32, 42, 52, 62, 72, 82, 92. 以 3 结尾的分子之后的一个:03, 13, 23 等等...
总之,是按照个位优先的顺序将分数排列起来:
对应的小数表示为:
0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 0.01, 0.11, 0.21, 0.31, 0.41, 0.51, 0.61, 0.71, 0.81, 0.91, 0.02, 0.12, 0.22, 0.32, …,
- 对于二进制数字系统也可以这样做,二进制范德科普特序列是:
,
对应的小数表示为:
五、实际应用
5.1 用范德科皮特序列构建halton序列
halton序列是高维度的的德科皮特(van der Corput)的序列。
对于高维度(d=N)的德科皮特(van der Corput)的序列,需要用N个不同质数为基底,都成在超立方体内的采样。
对于二维序列(d=2),将范两个不同基底(2和3)的德科皮特(van der Corput) 序列共同组成二维的序列。在文低差别序列:高维序列(Halton sequence)中已经详细介绍。
5.2 用halton采样与randon函数随机采样的比较
下图表示用halton序列和计算机内randon函数生成的10、100、1000、10000个点的随机序列。从中可见,halton序列在二维空间的采样,对二维空间集合的覆盖更匀称高效。