蒙特卡洛方法

文章详细介绍了蒙特卡罗方法,一种基于随机抽样和概率统计的数值计算方法。它利用随机数来解决复杂问题,涉及理论基础、基本思想、分类、应用示例及计算流程,包括直接模拟型和间接模拟型的区别,以及如何通过实例演示如求圆周率、定积分和三门问题中的应用。
摘要由CSDN通过智能技术生成

蒙特卡罗方法是由冯诺依曼和乌拉姆等人发明的,“蒙特卡罗”这个名字是出自摩纳哥的蒙特卡罗赌场,这个方法是一类基于概率的方法的统称,不是特指一种方法。蒙特卡罗方法也成统计模拟方法,是指使用随机数(或者更常见的伪随机数)来解决很多计算问题的方法。他的工作原理就是两件事:不断抽样、逐渐逼近。蒙特卡罗方法是一种计算方法。原理是通过大量随机样本,去了解一个系统,进而得到所要计算的值。

理论基础

蒙特卡洛方法是一种以概率统计理论为指导的数值计算方法,它通过随机抽样来获取对一个问题的数值解。蒙特卡洛方法的理论基础深植于概率论和统计学之中,细节如下:

  1. 随机抽样与概率分布:蒙特卡洛方法运用各种概率分布来生成样本点,例如均匀分布、正态分布、指数分布等。概率分布是蒙特卡洛方法能够模拟各种随机现象的根基。
  2. 大数定律:大数定律是统计学中的一个基本定理,它说明如果一个随机试验重复进行,那么随着试验次数的增加,观察到的频率(即样本均值)会趋近于其真实概率(即期望值)。在蒙特卡洛方法中,这意味着随着样本数量的增加,对期望值的估计将变得越来越准确。
  3. 中心极限定理:中心极限定理解释了为什么在许多自然和人工过程中,独立随机变量的平均值会趋于正态分布,即使这些变量本身不是正态分布的。对于蒙特卡洛来说,这一原理保证了即使基于非正态分布的样本,其结果的总体分布也会接近正态分布,这样可以使用正态分布的性质来估计结果的置信区间。
  4. 估计与误差分析:蒙特卡洛方法通常用来估计某个量的数值,如积分、期望值等。估计的准确性和可靠性可以通过统计误差分析来评估,这包括了对结果的方差和标准差的计算以及置信区间的估计。
  5. 方差缩减技术:为了提高蒙特卡洛模拟的效率,可以采用各种方差缩减技术,如控制变量、抗差性估计、条件期望法、分层抽样和重要性抽样等。这些技术的目的是在不增加样本数量的情况下,减少估计值的方差,从而提高估计的精确度。
  6. 随机数生成:蒙特卡洛模拟依赖于高质量的随机数或伪随机数生成器。理想的随机数生成器应具备良好的统计特性、较长的周期和高效的计算能力。

基本思想

蒙特卡洛方法的基本思想是利用随机数(或伪随机数)来模拟或估计复杂系统的行为,它依赖于概率和统计理论,特别是大数定律和中心极限定理。这种方法不是直接解决问题,而是通过大量的随机样本来估计问题的解,适用于那些传统分析方法难以解决的问题。
以下是蒙特卡洛方法的详细介绍:

  1. 随机抽样:蒙特卡洛方法的核心在于生成代表性的随机样本。这些样本用于模拟复杂系统的行为或计算数值解。样本的生成必须满足问题的概率分布要求,这是整个方法的基础。
  2. 大数定律的应用:通过随机抽样产生的大量数据,根据大数定律,样本均值将趋向于整个概率分布的期望值。因此,可以通过计算样本的平均值来估计期望值或其他统计量。
  3. 概率模型:蒙特卡洛方法在构建时需要一个概率模型,该模型决定了如何生成随机样本。在金融领域,这可能是股票价格的随机走势模型;在物理学中,可能是粒子运动的随机模型。
  4. 处理不确定性:蒙特卡洛方法非常适合用于处理具有不确定性的问题,如预测模型中的未来事件或在工程分析中的偶然失效。
  5. 积分计算:在数值积分中,尤其是维度较高时,蒙特卡洛方法通过随机点估计积分值,能有效处理维度的诅咒(Curse of Dimensionality)。
  6. 方差减少技术:为了提高估计的准确性和效率,蒙特卡洛方法常采用各种方差减少技术,比如重要性抽样、控制变量方法等。
  7. 迭代与收敛性:通过迭代的方式增加样本数量,可以不断提高估计结果的准确性。蒙特卡洛方法通常需要足够的迭代次数来确保收敛于真实值。
  8. 实现和计算:蒙特卡洛方法的计算一般可以并行执行,因为每次试验(或者称为“抽样”)都是独立的,这使得它可以高效地在现代多核处理器或者分布式计算环境中实现。
  9. 应用范围:蒙特卡洛方法的应用极其广泛,从物理学中的粒子运动模拟到金融数学中的期权定价,再到机器学习中的随机优化,甚至在图形学中生成逼真的光照效果等等。
  10. 结果解释:蒙特卡洛方法的结果通常具有统计意义,需要通过置信区间和假设检验来解释。这意味着计算得到的结果是以一定的概率表达的,而非确定性的值。

分类

蒙特卡罗方法可以分为两大类:

  1. 直接模拟型:这类问题本身具有内在的随机性,可以通过计算机的运算能力直接模拟这种随机的过程。例如在核物理研究中,分析中子在反应堆中的传输过程,科学家会依据其概率进行随机抽样得到裂变位置、速度和方向。
  2. 间接模拟型:这类问题可以将求解问题转化为某种随机分布的特征数,比如随机事件出现的概率,或者随机变量的期望值。通过随机抽样的方法,以随机事件出现的频率估计其概率,或者以抽样的数字特征估算随机变量的数字特征,并将其作为问题的解

基本步骤

  1. 构造或描述概率过程: 对于本身就具有随机性质的问题,如粒子输运问题,主要是正确描述和模拟这个概率过程,对于本来不是随机性质的确定性问题,比如计算定积分,就必须事先构造一个人为的概率过程,它的某些参量正好是所要求问题的解。即要将不具有随机性质的问题转化为随机性质的问题。
  2. 实现从已知概率分布抽样: 构造了概率模型以后,由于各种概率模型都可以看作是由各种各样的概率分布构成的,因此产生已知概率分布的随机变量(或随机向量),就成为实现蒙特卡罗方法模拟实验的基本手段,这也是蒙特卡罗方法被称为随机抽样的原因。最简单、最基本、最重要的一个概率分布是(0,1)上的均匀分布(或称矩形分布)。随机数就是具有这种均匀分布的随机变量。随机数序列就是具有这种分布的总体的一个简单子样,也就是一个具有这种分布的相互独立的随机变数序列。产生随机数的问题,就是从这个分布的抽样问题。在计算机上,可以用物理方法产生随机数,但价格昂贵,不能重复,使用不便。另一种方法是用数学递推公式产生。这样产生的序列,与真正的随机数序列不同,所以称为伪随机数,或伪随机数序列。不过,经过多种统计检验表明,它与真正的随机数,或随机数序列具有相近的性质,因此可把它作为真正的随机数来使用。由已知分布随机抽样有各种方法,与从(0,1)上均匀分布抽样不同,这些方法都是借助于随机序列来实现的,也就是说,都是以产生随机数为前提的。由此可见,随机数是我们实现蒙特卡罗模拟的基本工具。 建立各种估计量: 一般说来,构造了概率模型并能从中抽样后,即实现模拟实验后,我们就要确定一个随机变量,作为所要求的问题的解,我们称它为无偏估计。
  3. 建立各种估计量,相当于对模拟实验的结果进行考察和登记,从中得到问题的解。 例如:检验产品的正品率问题,我们可以用1表示正品,0表示次品,于是对每个产品检验可以定义如下的随机变数Ti,作为正品率的估计量: 于是,在N次实验后,正品个数为: 显然,正品率p为: 不难看出,Ti为无偏估计。当然,还可以引入其它类型的估计,如最大似然估计,渐进有偏估计等。但是,在蒙特卡罗计算中,使用最多的是无偏估计。 用比较抽象的概率语言描述蒙特卡罗方法解题的手续如下:构造一个概率空间(W ,A,P),其中,W 是一个事件集合,A是集合W 的子集的s 体,P是在A上建立的某个概率测度;在这个概率空间中,选取一个随机变量q (w ),w Î W ,使得这个随机变量的期望值 正好是所要求的解Q ,然后用q (w )的简单子样的算术平均值作为Q 的近似值。

示例

求圆周率

在图中区域产生足够多的随机数点,然后计算落在圆内的点的个数与总个数的比值再乘以4,就是圆周率。

import math
import random
m = 10000
n = 0
for i in range(m):
    # x、y为0-1之间的随机数
    x = random.random()
    y = random.random()
    # 若点(x,y) 属于图中1/4圆内 则有效个数+1
    if math.sqrt(x**2 + y**2) < 1:
        n += 1
# 计算pi
pi = 4 * n / m
print("pi = {}".format(pi))

# pi = 3.1508(结果具有随机性 不一定完全一样)

求定积分

计算函数 y = x 2 y=x^2 y=x2的区间 [ 0 , 1 ] [0,1] [0,1]的积分,随机采样a,选择 1 ≤ a ≤ y 1 \le a \le y 1ay的占整体的概率就是积分值。

import math
import random
m = 10000
n = 0
for i in range(m):
    # x、y为0-1之间的随机数
    x = random.random()
    y = random.random()
    # 若点(x,y) 属于图中1/4圆内 则有效个数+1
    if math.sqrt(x**2 + y**2) < 1:
        n += 1
# 计算pi
pi = 4 * n / m
print("pi = {}".format(pi))

# pi = 3.1508(结果具有随机性 不一定完全一样)

三门问题

三门问题(Monty Hall probelm)亦称为蒙提霍尔问题,出自美国电视游戏节目Let’s Make a Deal。
参赛者会看见三扇关闭了的门,其中一扇的后面有一辆汽车,选中后面有车的那扇门可赢得该汽车,另外两扇门则各藏有一只山羊。
当参赛者选定了一扇门,但未去开启它的时候,节目主持人开启剩下两扇门的其中一扇,露出其中一只山羊。主持人其后问参赛者要不要换另一扇仍然关上的门。
问题是:换另一扇门是否会增加参赛者赢得汽车的几率?如果严格按照上述条件,即主持人清楚地知道,自己打开的那扇门后面是羊,那么答案是会。不换门的话,赢得汽车的几率是1/3,,换门的话,赢得汽车的几率是2/3。
应用蒙特卡洛重点在使用随机数来模拟类似于赌博问题的赢率问题,并且通过多次模拟得到所要计算值的模拟值。
基本思想:在三门问题中,用0、1、2分代表三扇门的编号,在[0,2]之间随机生成一个整数代表奖品所在门的编号prize,再次在[0,2]之间随机生成一个整数代表参赛者所选择的门的编号guess。用变量change代表游戏中的换门(true)与不换门(false)。

import math,random
def play(change):
    prize = random.randint(0,2)
    guess = random.randint(0,2)
    if guess == prize:
        if change:
            return False
        else:
            return True
    else:
        if change:
            return True
        else:
            return False
def winRate(change, N):
    win = 0
    for i in range(N):
        if(play(change)):
            win += 1
    print("中奖率为{}".format(win / N))
N = 1000000
print("每次换门的中奖概率:")
winRate(True,N) 
print("每次都不换门的中奖概率:")
winRate(False,N)

# 理论换门2/3 不换门1/3
#每次换门的中奖概率:
#中奖率为0.665769
#每次都不换门的中奖概率:
#中奖率为0.33292
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值