蒙特卡洛方法(Monte Carlo method,也有翻译成“蒙特卡罗方法”)是以概率和统计的理论、方法为基础的一种数值计算方法,将所求解的问题同一定的概率模型相联系,用计算机实现统计模拟或抽样,以获得问题的近似解,故又称随机抽样法或统计试验法。上述就是蒙特卡洛方法的基本概念,比较抽象,下面结合实际工作中的理解,谈一谈对蒙特卡洛方法的一些认识。

(1)首先,蒙特卡洛不是个人名,而是个地名,说明该方法与概率有着密切的关联。

蒙特卡洛方法的提出者是大名鼎鼎的数学家冯·诺伊曼,搞计算机的不可能不知道他(计算机之父),冯·诺伊曼在20世纪40年代中期用驰名世界的赌城—摩纳哥的蒙特卡洛来命名这种方法。(大家也别把蒙特卡洛当一个城市,估计和北京的一条街差不了多少,因为摩纳哥(不是非洲的摩洛哥)本身就是个袖珍国家,比我国澳门都小的多)。说明该方法与赌博中的随机性、概率性有着天然而密切的联系。几乎涉及到复杂的、与概率相关的数值计算的领域都有可能会用到。比如计算物理、经济金融、统计学、机器学习等。

(2)蒙特卡洛没有什么高深的理论,它只是一种方法或者说策略。

蒙特卡洛方法并没有什么高深的理论支撑,如果一定要说有理论也就只有概率论或统计学中的大数定律了。蒙特卡洛的基本原理简单描述是先大量模拟,然后计算一个事件发生的次数,再通过这个发生次数除以总模拟次数,得到想要的结果。比如投3个骰子,计算3个骰子同时是6的概率,可以模拟投N次(随机样本数),统计同时是6出现的次数C,然后C除以N即是计算结果。

(3)蒙特卡洛方法可以应用在很多场合,但求的是近似解,在模拟样本数越大的情况下,越接近与真实值,但样本数增加会带来计算量的大幅上升。

蒙特卡洛方法不仅仅是算概率哦,再看一个稍复杂点的实例:求函数y=x2在[0,2]区间的积分,即求如下图所示的红色区域的面积。当然直接用数学中的定积分公式算更简单精确,这里主要是举例说明下蒙特卡洛方法的使用过程。

绘图代码如下:

import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(0, 2, 1000)
y = x ** 2
plt.plot(x, y)
plt.fill_between(x, y, where=(y > 0), color='red', alpha=0.5)
plt.show()

该红色区域在一个2×4的正方形里面。使用蒙特卡洛方法,随机在这个正方形里面产生大量随机点(数量为N),计算有多少点(数量为count)落在红色区域内(判断条件为y<x2),count/N就是所要求的积分值,也即红色区域的面积。

1.模拟1000个随机点:

NN = 1000
points = [[xy[0] * 2, xy[1] * 4] for xy in np.random.rand(N, 2)]
plt.scatter([x[0] for x in points], [x[1] for x in points], s=5, c=np.random.rand(N), alpha=0.5)

plt.show()

2.计算落在红色区域的比重:

count = 0
for xy in points:
    if xy[1] < xy[0] ** 2:
        count += 1
print((count / N) * (2 * 4))

输出结果:

2.832

这与精确值(2.666666)的差距只有6.2%,而对于更大规模的模拟,N=100万,输出结果为:2.66528,这与精确值的差距只有0.051975%(万分之五)。可以看出,蒙特卡洛方法有一定的误差,误差的大小与模拟的样本大小直接相关,模拟样本越大,误差越小,但计算量也会大幅上升。

(4)对于简单问题来说,蒙特卡洛是个“笨”办法。但对许多问题来说,它往往是个有效,有时甚至是唯一可行的方法。

对于上面的简单问题,蒙特卡洛方法就显得有点“笨”了。直接用数值积分运算更简单,更精确。

print(scipy.integrate.quad(lambda x: x ** 2, 0, 2)[0])

输出结果:

2.666666666666667

但对于涉及不可解析函数或概率分布的模拟及计算,蒙特卡洛方法是个有效的方法。

我们都玩过套圈圈的游戏,想过为什么你总是套不上吗?用蒙特卡洛方法来算一算。

1.设物品中心点坐标为(0,0),物品半径为5cm。

iimport matplotlib.pyplot as plt
import matplotlib.patches as mpatches
import numpy as np
circle_target = mpatches.Circle([0, 0], radius=5, edgecolor='r', fill=False)
plt.xlim(-80, 80)
plt.ylim(-80, 80)
plt.axes().add_patch(circle_target)

plt.show()

2.设投圈半径8cm,投圈中心点围绕物品中心点呈二维正态分布,均值μ=0cm,标准差σ=20cm,模拟1000次投圈过程。

N = 1000
u, sigma = 0, 20
points = sigma * np.random.randn(N, 2) + u

plt.scatter([x[0] for x in points], [x[1] for x in points], c=np.random.rand(N), alpha=0.5)

上图中红圈为物品,散点图为模拟1000次投圈过程中,投圈中心点的位置散布。

3.计算1000次投圈过程中,投圈套住物品的占比情况。

print(len([xy for xy in points if xy[0] ** 2 + xy[1] ** 2 < (8-5) ** 2]) / N)

输出结果:0.014,即投1000次,有14次能够套住物品,就是个小概率事件,知道你为什么套不住了吧。

(5)蒙特卡洛方法本身不是优化方法,与遗传算法、粒子群等优化算法有着本质的区别。

蒙特卡洛方法与遗传算法、粒子群算法等智能优化算法有相似之处,比如都属于随机近似方法,都不能保证得到最优解等,但它们也有着本质的差别。一是层次不一样,蒙特卡洛只能称之为方法,遗传算法等则属于仿生智能算法,比蒙特卡洛方法要复杂。二是应用领域不同,蒙特卡洛是一种模拟统计方法,如果问题可以描述成某种统计量的形式,那么就可以用蒙特卡洛方法来解决;遗传算法等则适用于大规模的组合优化问题(选址问题、排班问题、管理调度、路线优化)等,以及复杂函数求最值、参数优化等。
--------------------- 
作者:saltriver 
来源:CSDN 
原文:https://blog.csdn.net/saltriver/article/details/52194918 
版权声明:本文为博主原创文章,转载请附上博文链接!

蒙特卡洛方法到底有什么用(两个案例说明)相关推荐

  1. 蒙特卡洛方法到底有什么用(转)

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

  2. 蒙特卡洛方法_基本理论-蒙特卡洛方法与定积分

    全球图形学领域教育的领先者.自研引擎的倡导者.底层技术研究领域的技术公开者,东汉书院在致力于使得更多人群具备内核级竞争力的道路上,将带给小伙伴们更多的公开技术教学和视频,感谢一路以来有你的支持.我们正 ...

  3. 机器学习笔记马尔可夫链蒙特卡洛方法(二)马尔可夫链与平稳分布

    机器学习笔记之马尔可夫链蒙特卡洛方法--马尔可夫链与平稳分布 引言 回顾:蒙特卡洛方法 马尔可夫链与平稳分布 马尔可夫链 平稳分布 细致平衡 关于平稳分布的补充 马尔可夫链的本质 平稳分布的收敛性证明 ...

  4. python使用蒙特卡洛方法计算圆周率的流程图怎么画_在python中用蒙特卡洛算法计算圆周率...

    本文写给那些python初学者与对蒙特卡洛算法感兴趣,但却不知该如何理解或应用的人. (虽然我发现这个貌似有许多人做过了,但是程序都相对复杂,不便于理解,于是我就自己编写了一段程序,海龟的可视化请看下 ...

  5. 【概率论与数理统计 Probability and Statistics 1】—— 必需夯实的几个概念以及几个重要的概率模型,蒙特卡洛方法介绍

    这是<概率论与数理统计>网上授课的第一次笔记,记录一下这门课基本的几个概念.概率论是相当重要的一门课,在许多领域,例如深度学习,机器学习,数据挖掘等都广泛地运用了概率论的知识 文章目录 一 ...

  6. 多重采样和超级采样哪个流畅_蒙特卡洛方法-多重采样

    全球图形学领域教育的领先者.自研引擎的倡导者.底层技术研究领域的技术公开者,东汉书院在致力于使得更多人群具备内核级竞争力的道路上,将带给小伙伴们更多的公开技术教学和视频,感谢一路以来有你的支持.我们正 ...

  7. 蒙特卡洛方法及其求积分应用

    本文发自:http://www.haopeng233.top/2018/06/16/math-probability-MC/ 欢迎大家访问:) 前言 最初听到蒙特卡洛方法(Monte Carlo,下文 ...

  8. 机器学习笔记之马尔可夫链蒙特卡洛方法(四)吉布斯采样

    机器学习笔记之马尔可夫链蒙特卡洛方法--吉布斯采样 引言 回顾:MH采样算法 基于马尔可夫链的采样方式 细致平衡原则与接收率 MH采样算法的弊端 吉布斯采样方法 吉布斯采样的采样过程 吉布斯采样的推导 ...

  9. 强化学习(四) - 蒙特卡洛方法(Monte Carlo Methods)及实例

    强化学习(四) - 蒙特卡洛方法(Monte Carlo Methods)及实例 4. 蒙特卡洛方法 4.1 蒙特卡洛预测 例4.1:Blackjack(21点) 4.2 动作价值的蒙特卡洛估计 4. ...

  10. 不用数学也能讲清贝叶斯理论的马尔可夫链蒙特卡洛方法?这篇文章做到了

    作者 | Ben Shaver 翻译 | 刘畅 编辑 | Donna 大多数时候,贝叶斯统计在结果在最好的情况下是魔法,在最糟糕时是一种完全主观的废话.在用到贝叶斯方法的理论体系中,马尔可夫链蒙特卡洛 ...

最新文章

  1. 编写同时在PyTorch和Tensorflow上工作的代码
  2. Activiti工作流从入门到入土:工作流简介
  3. Appium之创建、连接夜神模拟器
  4. 985女研究生连算法都不会,还面试什么大厂!
  5. Category 特性在 iOS 组件化中的应用与管控
  6. 第1篇:Flowable快速工作流脚手架Jsite_克隆项目
  7. 深圳不完全启示录之初来乍到----1
  8. DistBelief 框架下的并行随机梯度下降法 - Downpour SGD
  9. Windows学习总结(4)——Host文件的作用和如何修改Host文件
  10. 用markdown + html写一封简历
  11. 数据交互之封装request请求(微信小程序篇)
  12. 我和计算机作文450字,我和朋友作文450字
  13. 超酷的jQuery百叶窗图片滑块实现教程
  14. CT影像数据(nrrd文件和dicm文件)的读取和预处理
  15. 关于C语言的字符常量和符号常量
  16. r语言如何计算t分布临界值_如何利用R语言进行meta分析—详细教程(2)
  17. APEX光学分析设计软件
  18. 电子邮箱市场盈利模式
  19. linux软件版本管理命令update-alternatives使用详解
  20. 计算机网络基础之安全防范措施

热门文章

  1. Atitit session机制的实现web目录1. Sessionid的发送 11.1. session大部分情况下基于cookie实现。 11.2. 基于url的session 11.
  2. Atitit 歌曲年份抓取的nlp ai项目 原理通过百度搜索,抓取第一页数据,正则数字,过滤年份。。 显示格式。。歌曲,年份,年份周围前后40字符,方便核对 通过百科抓取比较准确 红尘情歌
  3. Atitit springboot mybatis spring 集成 Springboot1.4 mybatis3.4.6 /springbootMybatis 目录 1.1. 设置map
  4. Atitit q2016 q4 doc list on home ntpc.docx
  5. Atitit 图像处理 调用opencv 通过java  api   attilax总结
  6. Atitit.变量的定义 获取 储存 物理结构 基本类型简化 隐式转换 类型推导 与底层原理 attilaxDSL
  7. paip.python错误解决10
  8. paip.使用泛型时未能找到类型或命名空间名称“T
  9. Rust:命令行参数与环境变量操作
  10. Kubernetes 是什么?为什么也称为 K8S?| 科普