蒙特卡洛模拟(Monte Carlo simulation)
1、蒙特卡罗模拟简介
蒙特卡罗模拟,也叫统计模拟,这个术语是二战时期美国物理学家Metropolis执行曼哈顿计划的过程中提出来的,其基本思想很早以前就被人们所发现和利用。早在17世纪,人们就知道用事件发生的"频率"来决定事件的"概率"。19世纪人们用投针试验的方法来决定圆周率π。本世纪40年代电子计算机的出现,特别是近年来高速电子计算机的出现,使得用数学方法在计算机上大量、快速地模拟这样的试验成为可能。
蒙特卡洛模拟是一种通过设定随机过程,反复生成时间序列,计算参数估计量和统计量,进而研究其分布特征的方法。蒙特卡洛模拟方法的原理是当问题或对象本身具有概率特征时,可以用计算机模拟的方法产生抽样结果,根据抽样计算统计量或者参数的值;随着模拟次数的增多,可以通过对各次统计量或参数的估计值求平均的方法得到稳定结论。由于涉及到时间序列的反复生成,蒙特卡洛模拟法是以高容量和高速度的计算机为前提条件的,因此只是在近些年才得到广泛推广。
2、蒙特卡洛模拟步骤
版本1:
(1)构造或描述概率过程:对于本身就具有随机性质的问题,如粒子输运问题,主要是正确描述和模拟这个概率过程,对于本来不是随机性质的确定性问题,比如计算定积分,就必须事先构造一个人为的概率过程,它的某些参量正好是所要求问题的解。即要将不具有随机性质的问题转化为随机性质的问题。
(2)实现从已知概率分布抽样:构造了概率模型以后,由于各种概率模型都可以看作是由各种各样的概率分布构成的,因此产生已知概率分布的随机变量(或随机向量),就成为实现蒙特卡罗方法模拟实验的基本手段,这也是蒙特卡罗方法被称为随机抽样的原因。最简单、最基本、最重要的一个概率分布是(0,1)上的均匀分布(或称矩形分布)。随机数就是具有这种均匀分布的随机变量。随机数序列就是具有这种分布的总体的一个简单子样,也就是一个具有这种分布的相互独立的随机变数序列。产生随机数的问题,就是从这个分布的抽样问题。在计算机上,可以用物理方法产生随机数,但价格昂贵,不能重复,使用不便。另一种方法是用数学递推公式产生。这样产生的序列,与真正的随机数序列不同,所以称为伪随机数,或伪随机数序列。不过,经过多种统计检验表明,它与真正的随机数,或随机数序列具有相近的性质,因此可把它作为真正的随机数来使用。由已知分布随机抽样有各种方法,与从(0,1)上均匀分布抽样不同,这些方法都是借助于随机序列来实现的,也就是说,都是以产生随机数为前提的。由此可见,随机数是我们实现蒙特卡罗模拟的基本工具。建立各种估计量:一般说来,构造了概率模型并能从中抽样后,即实现模拟实验后,我们就要确定一个随机变量,作为所要求的问题的解,我们称它为无偏估计。
(3)建立各种估计量,相当于对模拟实验的结果进行考察和登记,从中得到问题的解。例如:检验产品的正品率问题,我们可以用1表示正品,0表示次品,于是对每个产品检验可以定义如下的随机变数Ti,作为正品率的估计量:于是,在N次实验后,正品个数为:显然,正品率p为:不难看出,Ti为无偏估计。当然,还可以引入其它类型的估计,如最大似然估计,渐进有偏估计等。但是,在蒙特卡罗计算中,使用最多的是无偏估计。
版本2:
(1)根据提出的问题构造一个简单、适用的概率模型或随机模型,使问题的解对应于该模型中随机变量的某些特征(如概率、均值和方差等),所构造的模型在主要特征参量方面要与实际问题或系统相一致;
(2)根据模型中各个随机变量的分布,在计算机上产生随机数,实现一次模拟过程所需的足够数量的随机数。通常先产生均匀分布的随机数,然后生成服从某一分布的随机数,方可进行随机模拟试验。
(3)根据概率模型的特点和随机变量的分布特性,设计和选取合适的抽样方法,并对每个随机变量进行抽样(包括直接抽样、分层抽样、相关抽样、重要抽样等);
(4)按照所建立的模型进行仿真试验、计算,求出问题的随机解;
(5)统计分析模拟试验结果,给出问题的概率解以及解的精度估计。
3、蒙特卡洛模拟应用
(1)直接应用蒙特卡洛模拟:应用大规模的随机数列来模拟复杂系统,得到某些参数或重要指标;
(2)蒙特卡洛积分:利用随机数列计算积分,维数越高,积分效率越高;
(3)MCMC:直接应用蒙特卡洛模拟的推广,该方法中随机数的产生是采用的马尔科夫链形式。
4、蒙特卡洛模拟举例
(1) 有一个例子可以使你比较直观地了解蒙特卡罗方法:假设我们要计算一个不规则图形的面积,那么图形的不规则程度和分析性计算(比如,积分)的复杂程度是成正 比的。蒙特卡罗模拟是怎么计算的呢?假想你有一袋豆子,把豆子均匀地朝这个图形上撒,然后数这个图形之中有多少颗豆子,这个豆子的数目就是图形的面积。当 你的豆子越小,撒的越多的时候,结果就越精确。
(2)蒙特卡洛积分
蒙特卡洛方法与定积分计算:随机投点法与平均值法
蒙特卡洛方法与定积分计算
http://lijiwei19850620.blog.163.com/blog/static/978415382013629113824585/
蒙特卡洛模拟(Monte Carlo simulation)的更多相关文章
- 强化学习读书笔记 - 05 - 蒙特卡洛方法(Monte Carlo Methods)
强化学习读书笔记 - 05 - 蒙特卡洛方法(Monte Carlo Methods) 学习笔记: Reinforcement Learning: An Introduction, Richard S ...
- Markov Chain Monte Carlo Simulation using C# and MathNet
Math.Net Numerics has capability to conduct Markov Chair Monte Carlo simulations, yet the document i ...
- 蒙特卡洛(Monte Carlo)方法求面积
如图,刷微博时,看到一个问题,第一个想到的就是用蒙特卡洛方法求解,当时正在练python,于是尝试用python编写程序. import random # 先求s1 k=0 n=100000000 f ...
- 蒙特卡洛(Monte Carlo)法求定积分
https://blog.csdn.net/baimafujinji/article/details/53869358
- 蒙特卡罗方法、蒙特卡洛树搜索(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)方法简介
蒙特卡罗(Monte Carlo)方法,也称为计算机随机模拟方法,是一种基于"随机数"的计算方法. 二 解决问题的基本思路 Monte Carlo方法的基本思想很早以前就被人们所发 ...
- Monte carlo
转载 http://blog.sciencenet.cn/blog-324394-292355.html 蒙特卡罗(Monte Carlo)方法,也称为计算机随机模拟方法,是一种基于"随机数 ...
- Introduction To Monte Carlo Methods
Introduction To Monte Carlo Methods I’m going to keep this tutorial light on math, because the goal ...
随机推荐
- Webpack 备忘录
Webpack 属于在项目中配置一次就很少改动的那种工具,但这样就导致新项目再配置 Webpack 时会有些生疏,所以将 Webpack 核心概念及常用配置记录如下. 1)核心概念 Webpack 4 ...
- php curl-class post
use \Curl\Curl; $curl = new Curl();$curl->setHeader('Content-Type', 'application/json');$curl-> ...
- Linux 下Redis集群安装部署及使用详解(在线和离线两种安装+相关错误解决方案)
一.应用场景介绍 本文主要是介绍Redis集群在Linux环境下的安装讲解,其中主要包括在联网的Linux环境和脱机的Linux环境下是如何安装的.因为大多数时候,公司的生产环境是在内网环境下,无外网 ...
- 对Java中使用两个大括号进行初始化的理解
最近重读Java 编程思想,读到有关实例化代码块儿 的内容,使我对于使用两个大括号进行初始化有了更深的理解. 实例化代码块儿: 和静态代码块儿的概念相对应,静态代码块儿是static 关键字 + 大括 ...
- Linux大文件已删除,使用df查看已使用的空间并未减少
今天在一台Linux系统里,使用df命令查看磁盘使用情况,发现/根分区使用了100% 然后删除一大文件/var/lib/pgsql/9.1/pgstartup.log,再使用df查看使用情况,显示内容 ...
- python nose测试框架全面介绍九---各种html报告插件对比
一直在使用Nose-html-reporting,并输出html报告,但今天在使用时发出有点问题:于时,将python目前可能的html报告插件下载后进行对比,如下 一.Nose-html-repor ...
- jQuery里面ajax请求的封装
为了避免ajax漫天飞,我们需要对jQuery的代码进行封装,封装代码: function api_request(name, params, cb, scope, async, el) { if ( ...
- mysql判断一个字符串是否包含某几个字符
使用locate(substr,str)函数,如果包含,返回>0的数,否则返回0
- 思科SVI接口和路由接口区别
Cisco多层交换中提到了一个SVI接口,路由接口.在多层交换机上可以将端口配置成不同类型的接口. 其中SVI接口 类似于 interface Vlan10ip address 192.168.20 ...
- 基于Token的多平台身份认证价格设计
1 概述 在存在账号体系的信息系统中,对身份的鉴定是非常重要的事情. 随着移动互联网时代到来,客户端的类型越来越多, 逐渐出现了 一个服务器,N个客户端的格局 . 不同的客户端产生了不同的用户使用 ...