蒙特卡罗(Monte Carlo)方法简介
蒙特卡罗(Monte Carlo)方法,也称为计算机随机模拟方法,是一种基于"随机数"的计算方法。
二 解决问题的基本思路
Monte Carlo方法的基本思想很早以前就被人们所发现和利用。早在17世纪,人们就知道用事件发生的"频率"来决定事件的"概率"。19世纪人们用投针试验的 方法来决定圆周率π。本世纪40年代电子计算机的出现,特别是近年来高速电子计算机的出现,使得用数学方法在计算机上大量、快速地模拟这样的试验成为可 能。
为了说明Monte Carlo方法的基本思想,让我们先来看一个简单的例子,从此例中你可以感受如何用Monte Carlo方法考虑问题。
例1:比如y=x^2(对x)从0积到1。结果就是下图红色部分的面积:
注意到函数在(1,1)点的取值为1,所以整个红色区域在一个面积为1的正方形里面。所以所求区域的面积即为
在正方形区域内任取点,点落在所求区域的概率。这个限制条件是y<x^2。用matlab模拟,做一百万次(即共取1000000个点),结果为
0.3328。
1)总结Monte Carlo方法的基本思想:所求解问题是某随机事件A出现的概率(或者是某随机变量B的期望值)。通过某种“实验”的方法,得出A事件出现的频率,以此估计出A事件出现的概率(或者得到随机变量B的某些数字特征,得出B的期望值)。
2)工作过程
在解决实际问题的时候应用蒙特卡罗方法主要有两部分工作:
用蒙特卡罗方法模拟某一过程时,需要产生各种概率分布的随机变量。
用统计方法把模型的数字特征估计出来,从而得到实际问题的数值解。
3)蒙特卡罗解题三个主要步骤:
(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 的近似值。
三 本方法特点
直接追踪粒子,物理思路清晰,易于理解。
· 采用随机抽样的方法,较真切的模拟粒子输运的过程,反映了统计涨落的规律。
· 不受系统多维、多因素等复杂性的限制,是解决复杂系统粒子输运问题的好方法。
· MC程序结构清晰简单。
· 研究人员采用MC方法编写程序来解决粒子输运问题,比较容易得到自己想得到的任意中间结果,应用灵活性强。
· MC方法主要弱点是收敛速度较慢和误差的概率性质,其概率误差正比于,如果单纯以增大抽样粒子个数N来减小误差,就要增加很大的计算量。
另一类形式与Monte
Carlo方法相似,但理论基础不同的方法-"拟蒙特卡罗方法"(Quasi-Monte
Carlo方法)-近年来也获得迅速发展。我国数学家华罗庚、王元提出的"华-王"方法即是其中的一例。这种方法的基本思想是"用确定性的超均匀分布序列
(数学上称为Low Discrepancy Sequences)代替Monte
Carlo方法中的随机数序列。对某些问题该方法的实际速度一般可比Monte Carlo方法提出高数百倍,并可计算精确度。
蒙特卡罗方法在金融工程学,宏观经济学,计算物理学(如粒子输运计算、量子热力学计算、空气动力学计算)等领域应用广泛。
四 Monte Carlo方法的计算程序
关于蒙特卡罗方法的计算程序已经有很多,如:EGS4、FLUKA、
ETRAN、ITS、MCNP、GEANT等。这些程序大多经过了多年的发展,花费了几百人年的工作量。除欧洲核子研究中心(CERN)发行的GEANT
主要用于高能物理探测器响应和粒子径迹的模拟外,其它程序都深入到低能领域,并被广泛应用。就电子和光子输运的模拟而言,这些程序可被分为两个系列:
1.EGS4、FLUKA、GRANT
2.ETRAN、ITS、MCNP 这两个系列的区别在于:对于电子输运过程的模拟根据不同的理论采用了不同的算法。
EGS4和ETRAN分别为两个系列的基础,其它程序都采用了它们的核心算法。
ETRAN(for Electron Transport)由美国国家标准局辐射研究中心开发,主要模拟光子和电子,能量范围可从1KeV到1GeV。
ITS(The integrated TIGER Series of Coupled Electron/Photon Monte Carlo
Transport Codes )是由美国圣地亚哥(Sandia)国家实验室在ETRAN的基础上开发的一系列模拟计算程序,包括TIGER
、CYLTRAN 、ACCEPT等,它们的主要差别在于几何模型的不同。
TIGER研究的是一维多层的问题,CYLTRAN研究的是粒子在圆柱形介质中的输运问题,ACCEPT是解决粒子在三维空间输运的通用程序。
NCNP(Monte Carlo Neutron and Photo Transport Code)由美国橡树林国家实验室(Oak Ridge
National Laboratory)开发的一套模拟中子、光子和电子在物质中输运过程的通用MC
计算程序,在它早期的版本中并不包含对电子输运过程的模拟,只模拟中子和光子,较新的版本(如MCNP4A)则引进了ETRAN,加入了对电子的模拟。
FLUKA 是一个可以模拟包括中子、电子、光子和质子等30余种粒子的大型MC计算程序,它把EGS4容纳进来以完成对光子和电子输运过程的模拟,并且对低能电子的输运算法进行了改进。
五 Monte Carlo方法相关的一些资料
一个网站:http://csep1.phy.ornl.gov/mc/mc.html
《蒙特卡罗方法》 徐钟济著 上海科学技术出版社
《科学计算中的蒙特卡罗策略》(当代科学前沿论丛)(Monte Carlo Strategies in Scientific Computing) 作者:刘军 译者:唐年胜 周勇 徐亮
统计物理学中的蒙特卡罗模拟方法 ( 德) 宾德(Binder,K.),赫尔曼(Heermann,D.W.) 著 北京大学出版社 1994.2
小尺寸半导体器件的蒙特卡罗模拟 叶良修编著 科学出版社 1997.2
蒙特卡罗方法及其在粒子输运问题中的应用 裴鹿成, 张孝泽著 科学出版社 1980.10
统计试验法:( 蒙特卡罗法) 及其在电子数字计算机上的实现 (苏) 布斯连科( Н. П. Бусленко), (苏) 施 上海科学技术出版社
若干本书:人大经济论坛http://www.pinggu.org/bbs/thread-445802-1-1.html
高分子科学中的Monte Carlo方法 杨玉良 复旦大学出版社 1993.12 7-309-01361-1
Monte Carlo simulation of semiconductor devices C. Moglestue. Chapman & Hall, 1993. 041247770X
Monte Carlo methods in statistical physics with contributions by K. Binder ... [et al.] ; edi Springer-Verlag, 1979.
guide to Monte Carlo simulations in statistical physics David P.
Landau, Kurt Binder. Cambridge University Press, c2000.
Monte Carlo methods in statistical physics edited by K. Binder ; with contributions by K. Bin Springer-Verlag, c1986.
Applications of the Monte Carlo method in statistical physics edited by K. Binder. Springer, 1984.
Monte Carlo Device Simulation Karl Hess Kluwer Acadmic
http://blog.sciencenet.cn/blog-324394-292355.html
蒙特卡罗(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
转载 http://blog.sciencenet.cn/blog-324394-292355.html 蒙特卡罗(Monte Carlo)方法,也称为计算机随机模拟方法,是一种基于"随机数 ...
- 增强学习(四) ----- 蒙特卡罗方法(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与TD算法
RL 博客:http://blog.sciencenet.cn/home.php?mod=space&uid=3189881&do=blog&view=me&from= ...
- [Bayes] MCMC (Markov Chain Monte Carlo)
不错的文章:LDA-math-MCMC 和 Gibbs Sampling 可作为精进MCMC抽样方法的学习材料. 简单概率分布的模拟 Box-Muller变换原理详解 本质上来说,计算机只能生产符合均 ...
随机推荐
- 【Laravel5】 定制错误页面
laravel5 所有异常错误都由类 App\Exceptions\Handler 处理,该类包含两个方法: report 和 render . 这里我们只看 render ...
- elasticsearch基础----->elasticsearch环境的搭建
这里面我们主要是在ubuntu系统上对elasticsearch进行一个环境的搭建,记录一下这个过程中遇到的一些问题以及解决方案.我总是躲在梦与季节的深处,听花与黑夜唱尽梦魇,唱尽繁华,唱断所有记忆的 ...
- Linux 下误删除恢复,(文件名无法找回)
手贱命令写错了,直接把一个目录下的文件全删了,用下面的方法虽然恢复了,但是还是有几个文件没有找回来...(可以找回,但是要在另一个盘进行操作) 如果不小心用rm –rf xxx删除了文件或目录,在ex ...
- vuex - 简单使用步骤梳理,轻松掌握、附源码
-----------------------往期----------------------------- vuex - 学习日记 vuex - 辅助函数学习 vuex - 常用命令学习及用法整理 ...
- javah生成jni头文件时报错 Error: cannot access android.support...
javah生成jni头文件时报错: Error: cannot access android.support.v7.app.AppCompatActivity class file for andro ...
- linux的shell后门尝试以及Cython转成C代码编译
零.背景 最近研究了一下之前的反弹shell的python代码块,写了一点代码尝试在LInux下绑定和反弹shell(正反向),看了一些代码,基本是两种思路.1.本地shell的输入输出通过管道与so ...
- RDMA卡的检测方法
1. udaddy This script covers RDMA_CM UD connections. (It establishes a set of unreliable RDMA datagr ...
- Android 简单计算器实现源码
1.string.xml代码 <?xml version="1.0" encoding="utf-8"?> <resources> &l ...
- Run-Time Check Failure #2 Stack around the variable ‘xxx’ was corrupted
在改别人代码时,运行报错: Run-Time Check Failure #2 Stack around the variable 'buffer' was corrupted 这表明你对某变量的赋值 ...
- iOS - UIScreen的 bound、frame、scale属性
A UIScreen object contains the bounding rectangle of the device’s entire screen. When setting up you ...