蒙特卡罗方法(英语:Monte Carlo method),也称统计模拟方法,是1940年代中期由于科学技术的发展和电子计算机的发明,而提出的一种以概率统计理论为指导的数值计算方法。是指使用随机数(或更常见的伪随机数)来解决很多计算问题的方法。

20世纪40年代,在科学家冯·诺伊曼(John von Neumann)、斯塔尼斯拉夫·乌拉姆(Stanisław Marcin Ulam)和尼古拉斯·梅特罗波利斯(Nicholas Constantine Metropolis)于洛斯阿拉莫斯国家实验室为核武器计划工作时,发明了蒙特卡罗方法。因为乌拉姆的叔叔经常在摩纳哥的蒙特卡洛赌场输钱得名,而蒙特卡罗方法正是以概率为基础的方法。

与它对应的是确定性算法。

蒙特卡罗方法在金融工程学、宏观经济学、生物医学、计算物理学(如粒子输运计算、量子热力学计算、空气动力学计算)、机器学习等领域应用广泛。

基本思想[编辑]

通常蒙特卡罗方法可以粗略地分成两类:一类是所求解的问题本身具有内在的随机性,借助计算机的运算能力可以直接模拟这种随机的过程。例如在核物理研究中,分析中子在反应堆中的传输过程。中子与原子核作用受到量子力学规律的制约,人们只能知道它们相互作用发生的概率,却无法准确获得中子与原子核作用时的位置以及裂变产生的新中子的行进速率和方向。科学家依据其概率进行随机抽样得到裂变位置、速度和方向,这样模拟大量中子的行为后,经过统计就能获得中子传输的范围,作为反应堆设计的依据。

另一种类型是所求解问题可以转化为某种随机分布的特征数,比如随机事件出现的概率,或者随机变量的期望值。通过随机抽样的方法,以随机事件出现的频率估计其概率,或者以抽样的数字特征估算随机变量的数字特征,并将其作为问题的解。这种方法多用于求解复杂的多维积分问题。

假设我们要计算一个不规则图形的面积,那么图形的不规则程度和分析性计算(比如,积分)的复杂程度是成正比的。蒙特卡罗方法基于这样的思想:假想你有一袋豆子,把豆子均匀地朝这个图形上撒,然后数这个图形之中有多少颗豆子,这个豆子的数目就是图形的面积。当你的豆子越小,撒的越多的时候,结果就越精确。借助计算机程序可以生成大量均匀分布坐标点,然后统计出图形内的点数,通过它们占总点数的比例和坐标点生成范围的面积就可以求出图形面积。

工作过程[编辑]

使用蒙特卡罗方法估算π值. 放置30000个随机点后,π的估算值与真实值相差0.07%.

在解决实际问题的时候应用蒙特卡罗方法主要有两部分工作:

  1. 用蒙特卡罗方法模拟某一过程时,需要产生各种概率分布的随机变量。
  2. 用统计方法把模型的数字特征估计出来,从而得到实际问题的数值解。

分子模拟计算的步骤[编辑]

使用蒙特卡罗方法进行分子模拟计算是按照以下步骤进行的:

  1. 使用随机数生成器产生一个随机的分子构型。
  2. 对此分子构型的其中粒子坐标做无规则的改变,产生一个新的分子构型。
  3. 计算新的分子构型的能量。
  4. 比较新的分子构型与改变前的分子构型的能量变化,判断是否接受该构型。
    • 若新的分子构型能量低于原分子构型的能量,则接受新的构型,使用这个构型重复再做下一次迭代。
    • 若新的分子构型能量高于原分子构型的能量,则计算玻尔兹曼因子,并产生一个随机数。
      • 若这个随机数大于所计算出的玻尔兹曼因子,则放弃这个构型,重新计算。
      • 若这个随机数小于所计算出的玻尔兹曼因子,则接受这个构型,使用这个构型重复再做下一次迭代。
  5. 如此进行迭代计算,直至最后搜索出低于所给能量条件的分子构型结束。

在数学中的应用[编辑]

通常蒙特卡罗方法通过构造符合一定规则的随机数来解决数学上的各种问题。对于那些由于计算过于复杂而难以得到解析解或者根本没有解析解的问题,蒙特卡罗方法是一种有效的求出数值解的方法。一般蒙特卡罗方法在数学中最常见的应用就是蒙特卡罗积分。下面是蒙特卡罗方法的两个简单应用:

积分[编辑]

非权重蒙特卡罗积分,也称确定性抽样,是对被积函数变量区间进行随机均匀抽样,然后对抽样点的函数值求平均,从而可以得到函数积分的近似值。此种方法的正确性是基于概率论的中心极限定理。当抽样点数为m时,使用此种方法所得近似解的统计误差只与m有关(与正相关),不随积分维数的改变而改变。因此当积分维度较高时,蒙特卡罗方法相对于其他数值解法更优。

圆周率[编辑]

蒙特卡罗方法可用于近似计算圆周率:让计算机每次随机生成两个0到1之间的数,看以这两个实数为横纵坐标的点是否在单位圆内。生成一系列随机点,统计单位圆内的点数与总点数,(圆面积和正方形面积之比为PI:4,PI为圆周率),当随机点获取越多时,其结果越接近于圆周率(然而准确度仍有争议:即使取10的9次方个随机点时,其结果也仅在前4位与圆周率吻合[来源请求])。用蒙特卡罗方法近似计算圆周率的先天不足是:第一,计算机产生的随机数是受到存储格式的限制的,是离散的,并不能产生连续的任意实数;上述做法将平面分割成一个个网格,在空间也不是连续的,由此计算出来的面积当然与圆或多或少有差距。

在机器学习中的应用[编辑]

蒙特卡洛算法也常用于机器学习,特别是强化学习的算法中。一般情况下,针对得到的样本数据集创建相对模糊的模型,通过蒙特卡洛方法对于模型中的参数进行选取,使之于原始数据的残差尽可能的小。从而达到创建模型拟合样本的目的。

https://blog.csdn.net/bitcarmanlee/article/details/82716641

蒙特卡洛方法python实例

首先看一个经典的用蒙特卡洛方法求ππ值。

import randomdef calpai():n = 1000000r = 1.0a, b = (0.0, 0.0)x_neg, x_pos = a - r, a + ry_neg, y_pos = b - r, b + rcount = 0for i in range(0, n):x = random.uniform(x_neg, x_pos)y = random.uniform(y_neg, y_pos)if x*x + y*y <= 1.0:count += 1print (count / float(n)) * 4

简单介绍下思路:
正方形内部有一个相切的圆,它们的面积之比是π/4。现在,在这个正方形内部,随机产生n个点,计算它们与中心点的距离,并且判断是否落在圆的内部。若这些点均匀分布,则圆周率 pi=4 * count/n, 其中count表示落到圆内投点数 n:表示总的投点数。

然后看一个求定积分的例子。
假设我们想求的值。具体代码如下。

def integral():n = 1000000x_min, x_max = 0.0, 1.0y_min, y_max = 0.0, 1.0count = 0for i in range(0, n):x = random.uniform(x_min, x_max)y = random.uniform(y_min, y_max)# x*x > y,表示该点位于曲线的下面。所求的积分值即为曲线下方的面积与正方形面积的比。if x*x > y:count += 1integral_value = count / float(n)print integral_value

机器学习:蒙特卡罗方法相关推荐

  1. 【机器学习入门到精通系列】蒙特卡罗方法简介和代码演示

    文章目录 1 蒙特卡罗方法简介 2 求圆周率pi的近似值 3 求定积分的近似值 1 蒙特卡罗方法简介 蒙特卡罗(Monte Carlo)方法:简单来说,蒙特卡洛的基本原理简单描述是先大量模拟,然后计算 ...

  2. 机器学习知识点(三十五)蒙特卡罗方法

    强化学习中免模型学习采用蒙特卡罗方法去逼近最优解,那这种采样原理是怎样的呢? 1.蒙特卡罗思想 是一类随机方法的统称.这类方法的特点是,可以在随机采样上计算得到近似结果,随着采样的增多,得到的结果是正 ...

  3. 西瓜书+实战+吴恩达机器学习(二十)随机算法(拉斯维加斯方法、蒙特卡罗方法)

    文章目录 0. 前言 1. 拉斯维加斯方法 2. 蒙特卡罗方法 如果这篇文章对你有一点小小的帮助,请给个关注,点个赞喔,我会非常开心的~ 0. 前言 随机算法主要分为两种类型: 拉斯维加斯方法:采样次 ...

  4. java使用蒙特卡罗方法计算半径为r圆的面积_不用微积分,如何计算圆面积

    选自medium 作者:Andre Ye 机器之心编译 机器之心编辑部 杀鸡用牛刀,我们用机器学习方法来算圆的面积. 询问任何人圆的面积是多少,他们都会告诉你不就是r²吗.但如果你问他们为什么,他们很 ...

  5. 2020-4-5 深度学习笔记17 - 蒙特卡罗方法 3 ( 马尔可夫链蒙特卡罗方法MCMC-先验分布/后验分布/似然估计,马尔可夫性质)

    第十七章 蒙特卡罗方法 中文 英文 2020-4-4 深度学习笔记17 - 蒙特卡罗方法 1 (采样和蒙特卡罗方法-必要性和合理性) 2020-4-4 深度学习笔记17 - 蒙特卡罗方法 2 ( 重要 ...

  6. 蒙特卡洛方法(Monte Carlo method,也有翻译成“蒙特卡罗方法”)

    蒙特卡洛方法(Monte Carlo method,也有翻译成"蒙特卡罗方法")是以概率和统计的理论.方法为基础的一种数值计算方法,将所求解的问题同一定的概率模型相联系,用计算机实 ...

  7. 【历史上的今天】6 月 11 日:蒙特卡罗方法的共同发明者出生;谷歌推出 Google 地球;谷歌收购 Waze

    整理 | 王启隆 透过「历史上的今天」,从过去看未来,从现在亦可以改变未来. 今天是 2022 年 6 月 11 日,在 2007 年的今天,中国第一门户网站新浪与全球最大的搜索引擎公司谷歌(Goog ...

  8. MCMC 蒙特卡罗方法 (一)

    作为一种随机采样方法,马尔科夫链蒙特卡罗(Markov Chain Monte Carlo,以下简称MCMC)在机器学习,深度学习以及自然语言处理等领域都有广泛的应用,是很多复杂算法求解的基础.比如我 ...

  9. 蒙特卡罗方法在金融领域中的应用:从风险管理到投资组合优化

    作者:禅与计算机程序设计艺术 "蒙特卡罗方法"这个词已经存在很久了,它最早由英国数学家罗素提出,是指用随机数模拟的方法解决复杂问题的一个数学方法.由于其随机性质,蒙特卡罗方法在数值 ...

  10. 比特币的价格今年会达到10万美元吗?有人用蒙特卡罗方法预测了一下

    翻译 | AI 科技大本营 参与 | 刘畅 编辑 | Donna [AI 科技大本营导读]科技博客作者 Xoel López Barata 正尝试着用简单的蒙特卡罗模拟方法,来预测比特币的每日收益,并 ...

最新文章

  1. 19年BAT常问面试题汇总:JVM+微服务+多线程+锁+高并发性能
  2. 使用dplyr进行数据操作(30个实例)
  3. asp.net的三层架构图
  4. 百度面试题:生产者 消费者问题
  5. IIS负载均衡-Application Request Route详解第五篇:使用ARR来配置试点项目
  6. 原码一位乘法器设计_十分钟带你彻底搞懂原码、反码、补码
  7. ySQL挑战搭建一个简易的成绩管理系统的数据库
  8. 两个list取交集_利用jieba计算两个句子的相似度
  9. Freemarker内置函数使用
  10. 对Excel或者其他office操作推荐使用NPOI
  11. 计算生物学_01机器学习理论部分
  12. java+围棋+棋谱回放_聂卫平对战围棋高手Master完整比赛视频回放 全局棋谱复盘...
  13. 大学往事 第五章 计算机班的女生
  14. linux 驱动之PWM蜂鸣器驱动
  15. 值得收藏:程序员必去的社区与网站
  16. Linux究竟值多少钱?
  17. 如何用html5绘制圆形图片,javascript – 如何使用html5画布绘制连续的圆形图案
  18. Redis使用方法介绍
  19. Vmware虚拟机安装Linux系统(cent OS 7 64)
  20. .NET网站发布常见问题解决方案

热门文章

  1. 基于JAVA大众点评管理系统计算机毕业设计源码+系统+lw文档+部署
  2. Latex自由设置虚线的作用区间及间距
  3. C语言超市商品管理系统代码(精)
  4. 把sql中的image数据在网页中显示成图片
  5. win2003修改密码后提示确认用户名及域无误_周知!贵州高考志愿填报系统提示!...
  6. 桌面HTML更换图标,桌面图标怎么制作更换 桌面ico图标制作软件
  7. matlab求两向量夹角_10373 高中立体几何向量法全攻略
  8. 你属于哪种性感女人?
  9. cyclone小知识(二)——cyclone加载扫描工程的数据
  10. 2567 HDU 寻梦