Processing math: 100%
蒙特卡洛近似圆周率的数学原理 - Yigeng’s Blog

蒙特卡洛近似圆周率的数学原理

yigeng 2023-05-22 {Mathematics} [Monte Carlo, Python, Reinforcement Learning]

组内需要我接手做一个强化学习的项目,由于是第一次接触强化学习,很多东西都不懂,于是找了一些相关资料来看。

在阅读王树森的《深度强化学习》一书中,作者将蒙特卡洛方法作为学习强化学习的基础知识进行了介绍,并举例说明了如何使用蒙特卡洛近似 π 。但我对于书中的解释不是很理解,在网上也并未找到合适的蒙特卡洛近似 π 的数学解释,在与朋友的讨论过程中,我觉得自己似乎找到了一种较为合理的数学解释方法。

先来简单介绍一下蒙特卡洛方法。蒙特卡洛方法(Monte Carlo methods)是一类随机算法的总称,它们依靠重复随机采样来估算真实值。其提出者为冯·诺伊曼斯塔尼斯拉夫·乌拉姆尼古拉斯·梅特罗波利斯,由于乌拉姆的叔叔经常在摩纳哥蒙特卡洛赌场输钱得名。

接下来,我们来看看如何使用蒙特卡洛方法估算圆周率。假设我们有一个随机数生成器,可以均匀地生成 [1,1] 区间的数,也就是说[1,1]区间内的任何数被抽中的概率是相等的。

我们利用这个随机数生成器生成两个数分别记为 xy ,并将其作为平面坐标系中的一个点(x,y) 用三角形表示。如下图所示,由于xy[1,1]上均匀分布,因此正方形内的点被抽中的概率是相等的。

image-20230522211357414

设事件 A 表示点位于圆内。由于抽样是均匀的,对于每次随机生成一个点而言,事件A发生的概率为圆的面积与正方形的面积之比,也就是 P(A)=π4 我们重复试验 n 次,生成 n 个点。在每次试验中,事件 A 或者发生,或者不发生。显然,这 n 次试验结果互不影响,相互独立。

设随机变量 X 表示这 n 次独立重复试验中事件 A 发生的次数,也就是在这 n 个点中位于圆内的点的数量。每次试验中事件 A 发生的概率为 p ,则 X 服从伯努利分布,即 XB(n,p).

每次试验只有两种可能结果,即事件A发生或者不发生,令

Xi={1,在第i次试验中事件A发生0,在第i次试验中事件A不发生(i=1,2,...n)

则每一个 Xi(i=1,2,,n)服从01分布,且有相同的分布律

Xi01pi1π4π4

其中i=1,,nn 次伯努利试验中圆内点的数量 X=X1+X2++Xn 即伯努利分布随机变量可以分解成 n 个 取值互不影响的01分布随机变量之和。

伯努利大数定理可得

limnP{Xnp<ε}=1

上式表明,事件A发生的频率收敛于事件A发生的概率。换言之,假如我们进行了 n 次试验,生成了 n 个点,其中位于圆内的有 m 个点。如果 n 足够大,mn 的比值就会非常接近点位于圆内的概率: mnπ4 由此得到 π4mn 使用蒙特卡洛方法近似 π 的数学解释到此结束,编程倒是很容易啦,代码如下

def approxiate_pi(n):
    m = 0
    for i in range(n):
        x = np.random.uniform(-1, 1)
        y = np.random.uniform(-1, 1)
        if x**2 + y**2 <= 1:
            m += 1
    pi = 4.0 * m / n
    return pi

在这里需要注意的是,我们使用了np.random.uniform方法从给定的区间中均匀抽样,利用圆的解析方程 x2+y2=1 来判断点是否位于圆内。

References

  1. 苏德矿 张继昌. 概率论与数理统计[M]. 1. 高等教育出版社, 2006-6-1.
  2. 王树森 黎彧君 张志华. 深度强化学习[M]. 1. 人民邮电出版社, 2022-11.