本文主要介绍 Monte Carlo 方法及它的一些简单应用,还有它的一些难点。

简介(Introduction)

为了知道一些随机变量的期望值,我们产生大量这些变量,然后计算它们的平均值。这些随机变量通常有一个概率分布。

The idea of Monte Carlo methods is this—generate some random samples for some random variable of interest, then use these samples to compute values you’re interested in.

Monte Carlo 方法的主要优势是它把 随机性(randomness )和真实世界的复杂性(real-world complexity) 加入到模型中,使得模型更加鲁棒。

Monte Carlo 方法 的主要理论是 大数定理(law of large numbers)。

估计PI(Estimating Pi)

在正方形内放一个直径最大的圆,很容易求得它们之间的面积比:

蒙特卡罗法(Monte Carlo Methods)_javascript


因此,如果我们可以估计上面的值,我们就可以估计出PI来.我们随机地采样正方形内的点,并计算圆内和正方形内的点的数量之比,再乘以 4 ,就是 P 了。

蒙特卡罗法(Monte Carlo Methods)_methods_02


随着采样的点的数量的增加,我们获得的值越接近 PI 。

蒙特卡罗法(Monte Carlo Methods)_变量_03

代码见 ​​PI code​

模拟交通流量(Simulating Traffic)

接着我们使用 Nagel–Schreckenberg model 来模拟交通流量。这个模型中,我们有一条由 cells or spaces 组成的限速道路,和一定数量的汽车。我们迭代地遍历所有车和基于以下四个准则来更新它们的速率。(汽车速率为 v)。

  1. 不在最大速度的车每次增加它们的速率一个单位。
  2. 计算一个车和它前面的车之间的距离 d ,如果车的速率大于或等于这个距离,我们修改它的速率为 d-1。
  3. 现在我们加入一些随机化,使它 Monte Carlo 化。以概率 p,我们把车的速率减少 1.
  4. 接着我们移动车的速率为 v。

蒙特卡罗法(Monte Carlo Methods)_应用_04

这个模型很简单,但它能很好地模拟交通流量。当然它没有考虑事故和不好的驾驶,它仅仅对交通没有任何明显的原因的情况下刚出现和消失时的这段时间进行评估(it’s purpose is to assess those times when traffic just appears and vanishes without any apparent reason)。更复杂的模型也是基于这个简单的模型。

代码见 ​​Traffic code​

挑战(Challenges with Monte Carlo Methods)

Monte Carlo 有两个难点:
1)无论处理何种分布,如何找出它的独立样本(how to come up with independent samples for whatever distribution your dealing with)?

2)如何快速收敛(getting the error to converge)?大多数应用使用较大的样本数量只是因为它们所需的计算代价比较低。

参考及引用文献:
[1] ​​​Introduction To Monte Carlo Methods​​​
[2] ​​​Monte Carlo theory, methods and examples​