2. 5 实用蒙特卡洛计算复合技术
在蒙特卡洛方法应用中减小方差的基本技术:重要抽样法,
分层抽样法,控制变量法和对偶变量法。然而,单独使用这四种
减小方差的技巧仍然有其局限性。
人们发展了一些复合蒙特卡洛计算技术,如适应性蒙特卡洛
方法和多道蒙特卡洛抽样方法等。这些蒙特卡洛技巧对于被积函
数在积分范围内具有多个尖峰的情况,特别具有实用价值。
一、 适应性蒙特卡洛方法(adaptive Monte Carlo method)
适应性蒙特卡洛方法是一种在执行过程中通过试探,了解被
积函数习性,然后有针对性地采用蒙特卡洛技巧来减少方差的算
法。
采用此方法的子程序有利帕格(G.P. Lepage)的VEGAS[5]。它
是用于计算多重积分的子程序,广泛地应用在高能物理领域。
VEGAS编程的基本思想是将重要抽样法和分层抽样法结合到迭代
算法之中,该算法能够做自动调整,将对被积函数的计算集中到
被积函数值最大的区间。
以一维定积分为例,VEGAS程序一开始处于试探阶段,即将积
分区间划分为正交子区间,并在每一个子区间中进行积分;然
后按照各个子区间积分得到的结果来调整子区间大小以备下一
次迭代计算,调整子区间大小的原则是按照该子区间对总积分贡
[1,0 ]
1
献的大小来确定,贡献大的子区间调整得更小一些,贡献小的子
区间调整得更大一些。
VEGAS程序用这种方式实际上就是采用了重要抽样法。它采用
阶梯函数来近似子区间的最佳几率密度函数。该最佳几率密度函
数定义
()
( )
()
0 1
0
fx
px
f xdx
=
∫
.
对于高维(d维)积分问题,由于存贮的需要,我们必须采用分
离变量的分布密度函数
()( ) ( ) ( )
dd
upupupuuup ???= ...,...,,
2121
.
最后通过若干次迭代,达到在要求的精度下,各子区间(或子空
间)的积分估计值都相等,则我们就找到了优化的子区间(或子
空间)。在调整子区间(或子空间)过程中为了避免子区间(或
子空间)剧烈的变化,子区间(子空间)大小的调整通常有一个
衰减项。在程序的第二阶段,子区间(子空间)网格就固定下来
了,并通过通常的蒙特卡洛方法得到在这些优化子区间(子空间)
中迭代计算高精度的积分结果。每次迭代积分都得到一个估计值
{ }
j
IE和一个方差{ }
j
IV:
{}
()
()
,
1
1
∑
=
=
j
N
n n
n
j
j
xp
xf
N
IE {}
()
()
{}
j
N
n
n
n
j
jj
IE
xp
xf
N
I
j
2
2
1
1
?
?
?
?
?
?
?
?
?
=
∑
=
V .
其中表示在第二阶段第
j
N j次迭代( )mj ,...,2,1=积分的随机点个数。
在该阶段第j次积分值对总积分的贡献权重应当为
{}
j
j
j
IV
N
w =
2
将每次迭代的积分值乘上与投点数和方差相关的权重,然后累
加起来求平均。则总的积分估计值为
j
N
{} {}
{ }
{} {}
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
==
∑∑∑∑
====
m
j j
j
m
j j
jj
m
j
j
m
j
jj
IV
N
IV
IEN
wIEwIE
1111
.
此外,VEGAS程序返回时给出每个自由度(per degree of freedom)
的为
2
χ
{ } { }( )
{}
∑
=
?
?
=
m
j
j
j
IV
IEIE
m
dof
1
2
2
1
1
/χ .
这个结果可以作为检验各种估计值是否一致。我们期望不
要比1大很多。
dof/
2
χ
按照上面的思想,VEGAS程序计算高维积分的步骤可以概括
如下:
(1) 将积分区域(或空间)划分为大量不相交的子区间(或子
空间)。原则上可以任意划分,但为了方便起见,往往采用均匀
划分的办法。
(2) 用原始蒙特卡洛方法估计每个子区间(或子空间)上的积
分值,再将各个积分值迭加起来作为整个积分域上的估计值。
(3) 调整子区间(或子空间)的边界,使得被积函数在个子区
间(或子空间)内的积分估计值大致相等。
(4) 重复(1)-(3)的过程,利用原始蒙特卡洛方法计算每次
迭代的积分估计值,直到在要求达到的精度下,各子区间(或子
空间)的积分估计值都相等。此时才将得到的子区间(或子空间)
3
固定下来。以上为程序计算的第一阶段。在这一阶段,投点个数
可以少一些,并不记这个阶段的积分结果(因为一般方差都很
大)。
(5) 最后,采用蒙特卡洛方法,按照公式(2.5.3)计算各子区间
(或子空间)积分值和方差,然后利用公式(2.5.5)将每次迭代
计算的积分值加权累加平均得到该积分在总区间的积分估计值,
用公式(2.5.6)计算每个自由度的。这就得到该积分的数值计
算结果。这是程序计算的第二阶段。
2
χ
二、多道蒙特卡洛抽样方法(multi-channel Monte Carlo
method)
我们仍然以前面一维定积分为例,如果被积函数()f x在被积
区间有尖峰,则采用原始的蒙特卡洛积分的结果误差肯定是很大
的。当然,我们可以采用变量变换,按照重要抽样方法,将被积
函数的峰值特性吸收到随机点的分布函数中。这种方法多少会使
积分结果精度得到改善。但是,可能会有下面的情况:被积函数
()f x在被积区间的不同区域有多个不同的尖峰。在这种情况下,
往往不可能找到一个变量代换,它既吸收了被积函数所有的峰值
特性,又比较容易进行按特定分布的随机数抽样。多道蒙特卡洛
方法就是针对被积函数( )f x具有多个尖峰情况下的计算方法。
它的基本思想是源于蒙特卡洛方法的迭加原则加上重要抽
样法。该方法应用的前提是每个峰结构变换成的近似抽样分布密
4
度函数形式已经知道。每个峰的变换称为一个道。如果对应第个
道抽样,它所选择的分布密度函数为
i
( )
i
hx。根据分布密度函数的
正定和归一化,我们有:()
1
0
1
i
dxh x =
∫
, ( )1,...,im=,其中i为道数。
令
i
α为非负的实数,并且满足
,
1
1
m
i
i
α
=
=
∑
由于我们定义
() ()
1
m
ii
i
hx h xα
=
=
∑
这就表明:对分布密度函数( )hx抽样时,可以分别对抽样。
但是选择对第个道的分布密度函数抽样的几率为
()
i
hx
i
i
α。明显地被积
函数()f x与分布密度函数( )hx具有同样的多峰值结构。利用关系
式(2.5.8),我们将积分I如做如下形式推导:
()
( )
()
()
( )
()
()
11 1
00 0
1
m
ii
i
fx fx
I f x dx h x dx h x dx
hx hx
α
=
?? ??
==
?? ??
?? ??
∑
∫∫ ∫
()
()
()
1
0
1
m
ii
i
fx
dH x
hx
α
=
??
=
??
??
∑
∫
.
此时被积函数
() ()f xhx中已经没有原来所有的峰值特性了,这些
峰值特性已经被分布密度函数( )hx抵消。这就是我们多道蒙特卡
洛方法计算积分的基本公式。从公式中可以看出:我们可以通过
对各个道i,按分布密度函数( )
i
hx(对应分布函数为)产生
随机数
()
i
Hx
i
n
x。例如具体做抽样时可以用反函数法:
()
1
ii
nin
xHξ
?
=
实践中,我们按照离散型变量抽样法,以
i
α为取分布密度函数
()
i
hx
5
抽样的概率。若固定总投点数为,计算第i道时所投点次数大约
是
N
ii
NNα≈。采用这样的方法,可以得到积分的蒙特卡洛估计值为
()
α
2
H
(α
()
i
x
α
{}
( )
()
11
1
i
i
i
i
N
m
n
in
n
fx
EI
N
hx==
??
??
=
??
∑∑
.
该蒙特卡洛积分的误差期望值为
()
2
WI
N
α ?
其中W定义为
()
()
()
()
1
0
1
m
ii
i
fx
hx
αα
=
??
=
??
??
∑
∫
Wd. x
该方法计算的关键之一是确定参数
i
α。实践中往往通过调整参数
i
α,使W )达到最小值来优化参数
i
α的选择。理论上积分计算值I
应与参数
i
α值的选择无关,因此在积分过程中我们可以改变
i
α的
值,而不会影响积分值的估计。当然这是会影响计算结果的误差
的。
建议首先采用一组初始参数{ }
i
α′,在按照上面介绍的步骤进
行几百次蒙特卡洛计算后,再计算
()
()
()
2
1
0
ii
fx
hx
α
??
′ =
??
??
∫
Wh d
最后按照下面公式重新决定参数。
()()
()
()
1
i
i
i m
j
j
j
W
W
β
β
αα
α
αα
=
′′
=
′′
∑
根据经验,建议上面公式中的参数β值取在
[ ]
1/4,1/2之间。
6