Monte Carlo方法简介(转载)
Monte Carlo方法简介(转载)
今天向大家介绍一下我现在主要做的这个东东。 Monte Carlo方法又称为随机抽样技巧或统计实验方法,属于计算数学的一个分支,它是在上世纪四十年代中期,为适应当时的曼哈顿计划需求而在美国Los Alamos实验室发展起来的,说白了就是美国为了造原子弹才逼出来的。Monte Carlo方法与一般的计算方法有很大的区别,一般计算方法对解决多维或因素复杂的问题非常困难,而Monte Carlo方法对解决这类问题却比较简单,因此Monte Carlo方法自从它诞生之日起就得到了快速的发展,现以发展成为计算数学中一个不可缺少的重要组成部分。
Monte Carlo方法创始人主要是这四位:Stanislaw Marcin Ulam, Enrico Fermi, John von Neumann(学计算机的肯定都认识这个牛人吧)和 Nicholas Metropolis。 Stanislaw Marcin Ulam是波兰裔美籍数学家,早年是研究拓扑的,后因参与曼哈顿工程,兴趣遂转向应用数学,他首先提出用Monte Carlo方法解决计算数学中的一些问题,然后又将其应用到解决链式反应的理论中去,可以说是MC方法的奠基人;Enrico Fermi是个物理大牛,理论和实验同时都是大牛,这在物理界很少见,在“物理大牛的八卦”那篇文章里提到这个人很多次,对于这么牛的人只能是英年早逝了(别说我嘴损啊,上帝都嫉妒!);John von Neumann可以说是计算机界的牛顿吧,太牛了,结果和Fermi一样,被上帝嫉妒了;Nicholas Metropolis,希腊裔美籍数学家,物理学家,计算机科学家,这个人对Monte Carlo方法做的贡献相当大,正式由于他提出的一种什么算法(名字忘了),才使得Monte Carlo方法能够得到如此广泛的应用,这人现在还活着,与前几位牛人不同,Metropolis很专一,他一生主要的贡献就是Monte Carlo方法。




Monte Carol方法这个名字比较有意思,为什么叫Monte Carlo呢?这得从Monte Carlo方法的历史讲起。原来卓卓跟我吹牛b的时候提到过一个地方叫摩纳哥,在法国(不是摩洛哥哦,这个在北非),Monte Carlo是摩纳哥的一个地名,有人说摩纳哥只有两个地方,除了皇宫就是Monte Carlo……MonteCarlo与拉斯维加斯、澳门并称为世界三大赌城。Ulam说之所以叫做Monte Carlo方法,是为了纪念他的舅舅,而他的舅舅是个赌徒,经常去Monte Carlo赌钱,所以就叫做Monte Carlo方法,这个理由确实比较诡异,不过如果了解Monte Carlo方法原理的话,我们会发现Monte Carlo方法其实就是个赌博游戏,叫这个名字还是很贴切的。
现在来看一下为什么说MC方法是赌博游戏,这要从它的基本思想入手。MC方法的基本思想是:当所要求解的问题是某种事件出现的概率或者是某个随机变量的期望时,可以通过某种实验的方法得到该事件出现的概率,或者这个随机变量的平均值,并用它们作为问题的解。应用MC方法解决实际问题时,并不是像通常的数理统计方法那样通过真实的实验来完成的,而是抓住事物运动过程的数量和几何特征,利用数学方法加以模拟,即进行一种数字模拟实验,模拟实验的次数越多,其模拟结果就越接近于真实值。对于特定的数学或物理问题,若要得到较为准确的模拟结果,往往需要上万次,甚至数十万、数百万次的数字模拟实验,其运算量相当庞大,因此在电子计算机没有发明以前,MC方法本身并没有多大的发展与应用。在电子计算机出现和飞速发展以后,利用MC方法进行大量的数字模拟实验成为可能,MC方法终于迎来了发展的春天。由此可见,MC方法是与电子计算机的发展紧密的联系在一起的,是数理统计与电子计算机相结合的产物。
上一段说的比较抽象,下面可以举个简单的例子:比如说要计算圆周率pi,用MC方法解决此问题的思路如下:
x=(random#)*r
y=(random#)*r
dist=sqrt(x^2 + y^2)
if dist.from.origin (less.than.or.equal.to) r
let hits=hits+1
上面这段话可以这样理解:在一个边长为r的正方形内均匀投点,然后判断所投点是否落在与此正方形内切的半径为r的圆内,若点落在圆内,则记录之,否则不记录。那么,如果所投的点足够多且足够均匀的话,落在圆内的点的数目除以总投点数既为圆面积与正方形面积之比,知道了这个值,我们就能够得出pi的值了。
上面这个例子只是为了说明MC方法的原理,并不能体现出MC方法的优越性,我们来想想下面这个稍微复杂点的例子:扑克摆别扭大家都玩过吧?如果操作无误的话,问一副扑克摆别扭能解开的几率有多少?这个只要制定好规则,用MC方法解就非常easy,别的方法就无法想象了…………………………………………
由此可见,MC方法说白了其实就是暴力破解法,用咱们的话讲就叫做“简单粗暴”!所以有人把MC方法叫做“最后的方法”。但往往就是这种简单粗暴的方法在处理复杂问题时是非常有效的,上面讲的只是一个最简单的例子,类似的,我们还可以通过MC方法计算各种复杂变态的定积分,方法与上面算pi的手段完全一样。
现在MC方法已经应用于许多领域,在物理方面,通过MC方法可以模拟粒子与物质相互作用时,发生的各种反应,并对我们感兴趣的物理量进行统计,这里面许多物理量是通过实验手段无法测量的;在金融学领域,好多大公司都用MC方法计算风险投资的风险系数;前几天还看到一篇埃及人的文章是用MC方法模拟埃及的洪灾,然后指导如何修水坝的……总之,只要建立的模型足够好,MC得出的结论就非常可信,还能模拟出统计涨落呢,太逼真了。
函数图像
注意到函数在(1,1)点的取值为1,所以整个红色区域在一个面积为1的正方形里面。所以所求区域的面积即为在正方形区域内任取点,点落在所求区域的概率。这个限制条件是y<x^2。用matlab模拟,做一百万次(即共取1000000个点),结果为0.3328,与用积分法算出来的三分之一非常接近。
4三个主要步骤
5模拟的特点
Monte Carlo方法简介(转载)的更多相关文章
- 蒙特卡罗(Monte Carlo)方法简介
蒙特卡罗(Monte Carlo)方法,也称为计算机随机模拟方法,是一种基于"随机数"的计算方法. 二 解决问题的基本思路 Monte Carlo方法的基本思想很早以前就被人们所发 ...
- 利用蒙特卡洛(Monte Carlo)方法计算π值[ 转载]
部分转载自:https://blog.csdn.net/daniel960601/article/details/79121055 圆周率π是一个无理数,没有任何一个精确公式能够计算π值,π的计算只能 ...
- 基于Monte Carlo方法的2048 A.I.
2048 A.I. 在 stackoverflow 上有个讨论:http://stackoverflow.com/questions/22342854/what-is-the-optimal-algo ...
- 增强学习(四) ----- 蒙特卡罗方法(Monte Carlo Methods)
1. 蒙特卡罗方法的基本思想 蒙特卡罗方法又叫统计模拟方法,它使用随机数(或伪随机数)来解决计算的问题,是一类重要的数值计算方法.该方法的名字来源于世界著名的赌城蒙特卡罗,而蒙特卡罗方法正是以概率为基 ...
- 蒙特卡罗方法、蒙特卡洛树搜索(Monte Carlo Tree Search,MCTS)初探
1. 蒙特卡罗方法(Monte Carlo method) 0x1:从布丰投针实验说起 - 只要实验次数够多,我就能直到上帝的意图 18世纪,布丰提出以下问题:设我们有一个以平行且等距木纹铺成的地板( ...
- 马尔科夫链蒙特卡洛(Markov chain Monte Carlo)
(学习这部分内容大约需要1.3小时) 摘要 马尔科夫链蒙特卡洛(Markov chain Monte Carlo, MCMC) 是一类近似采样算法. 它通过一条拥有稳态分布 \(p\) 的马尔科夫链对 ...
- Monte carlo
转载 http://blog.sciencenet.cn/blog-324394-292355.html 蒙特卡罗(Monte Carlo)方法,也称为计算机随机模拟方法,是一种基于"随机数 ...
- Monte Carlo与TD算法
RL 博客:http://blog.sciencenet.cn/home.php?mod=space&uid=3189881&do=blog&view=me&from= ...
- 简析Monte Carlo与TD算法的相关问题
Monte Carlo算法是否能够做到一步更新,即在线学习? 答案显然是不能,如果可以的话,TD算法还有何存在的意义?MC算法必须要等到episode结束后才可以进行值估计的主要原因在于对Return ...
随机推荐
- Python’s SQLAlchemy vs Other ORMs[转发 0]
原文地址:http://pythoncentral.io/sqlalchemy-vs-orms/ Overview of Python ORMs As a wonderful language, Py ...
- map erase iterator
错误写法: map<int, int> m; for (map<int, int>::iterator it = m.begin(); it != m.end(); it++) ...
- ZACC_DOCUMENT
method if_ex_acc_document~change. data: wa_extension type bapiparex, ext_value() type c, wa_accit ty ...
- 将centos7打造成桌面系统
前言以下所有操作默认在root权限下执行,桌面环境是kde,使用gnome的也可以参考一下.我收集的以下要用到的一些安装包,360网盘http://yunpan.cn/csMhBAp92vTgN 提取 ...
- C# Bitmap 复制
以后再详述,先上代码. public bool CopyBitmap(Bitmap source, Bitmap destination) { if ((source.Width != destina ...
- Jquery基础之DOM操作
转自:http://www.cnblogs.com/bro-ma/p/3063942.html JQuery中的DOM操作主要对包括:建[新建].增[添加].删[删除].改[修改].查[查找][像数据 ...
- 使用 Eclipse PhoneGap 构建 Android 应用程序入门
Eclipse 是一种支持多种技术的开源集成开发环境 (IDE),但本文重点介绍 Java 支持,这也是 Android 应用程序的“母语”.Android 是 Google 发布的开源移动操作系统. ...
- window下关闭nginx
nginx -s stop taskkill /F /IM nginx.exe > nul
- IOS --- OC与Swift混编
swift 语言出来后,可能新的项目直接使用swift来开发,但可能在过程中会遇到一些情况,某些已用OC写好的类或封装好的模块,不想再在swift 中再写一次,哪就使用混编.这个在IOS8中是允许的. ...
- 同表复制修改日期的procedure
同表复制数据,让其日期增加 算出总共的天数,用group by 分类后的. space 提前求出第一块数据的总和 sum = select count(*) from tbl_event; 固定操作第 ...