蒙特卡洛模拟(Monte Carlo Simulation)浅析
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了蒙特卡洛模拟(Monte Carlo Simulation)浅析相关的知识,希望对你有一定的参考价值。
参考技术A 蒙特卡洛模拟作为一种常用的模拟技术,在PMBOK里经常可以看到它的身影,其主要出现在风险管理知识领域中的定量风险分析过程,是用于做项目定量风险分析的工具之一,同时蒙特卡洛模拟也可以用于估算进度或成本以及制定进度计划等。(全文共 2741 字,阅读大约需要 10 分钟。)蒙特卡洛模拟由于在PMBOK里讲得较为简单和抽象,理解起来稍微有点困难。为了让大家更加通透地理解蒙特卡洛模拟的作用及其过程原理,本文试图通过一个简单的例子来实操模拟一下这个蒙特卡洛模拟的过程。
一、简要介绍
到底什么是蒙特卡洛模拟呢?蒙特卡洛模拟是一种统计学的方法,用来模拟大量数据。可能童鞋们看到这个定义更晕了,到底什么是统计学方法,模拟大量数据干什么?别着急下面会慢慢一一道来。
我们先来简单介绍一下关于蒙特卡洛模拟的一些背景知识。蒙特卡洛模拟是在二战期间,当时在原子弹研制的项目中,为了模拟裂变物质的中子随机扩散现象,由美国数学家冯·诺伊曼(学计算机的同学都知道这位冯同志的大名,人称“计算机之父”)和乌拉姆等发明的一种统计方法。之所以起名叫蒙特卡洛模拟,是因为蒙特卡洛在是欧洲袖珍国家摩纳哥一个城市,这个城市在当时是非常著名的一个赌城。因为赌博的本质是算概率,而蒙特卡洛模拟正是以概率为基础的一种方法,所以用赌城的名字为这种方法命名。
蒙特卡洛模拟是在计算机上模拟项目实施了成千上万次,每次输入都随机选择输入值。由于每个输入很多时候本身就是一个估计区间,因此计算机模型会随机选取每个输入的该区间内的任意值,通过大量成千上万甚至百万次的模拟次数,最终得出一个累计概率分布图,这个就是蒙特卡洛模拟。
二、 模拟过程
蒙特卡洛模拟在实际的项目管理应用中一般较为复杂,而且很多时候用在专业的项目风险分析软件里面(比如Pertmaster),通常用在较为大型的项目和企业中。我们这篇文章只是为了让童鞋们对于蒙特卡洛模拟有个更为直观清晰的认识,同时鉴于篇幅和不至于让讲解过于晦涩,所以这儿我们只是准备用Excel工具来简单地模拟和介绍一下蒙特卡洛模拟的实施操作过程,这样大家也能对蒙特卡洛模拟有个更为直观地了解。
我们以定量分析项目总持续时间为例来简要介绍一下蒙特卡洛模拟。比如说我们现在有个项目,该项目共有三个WBS要素分别是设计、建造和测试,为了简单起见我们假设这三个WBS要素的预估的工期概率分布都呈标准正态分布,各自的平均工期、标准差以及最悲观、最可能和最乐观的估计工期如下图所示(我们这儿简单地认为基于正态分布的工期的最悲观/最乐观的估算工期定在均值正负3个标准差的位置),而且三者之间都是完成到开始的逻辑关系,这样整个项目工期就是这三个WBS要素工期之和。
现在我们需要用蒙特卡洛模拟来以这三个要素的工期的分布为输入,来模拟得到整个项目的工期概率分布图。由于设计、建造和测试这三个要素都是呈标准正态分布,我们可以根据上面表格中的各自的均值和标准差数据大致画出这三个要素工期的概率分布图如下面的样子:
我们要用蒙特卡洛模拟来定量分析整个项目的工期进度风险。于是我们用计算机来模拟项目的实施,我们的思路是: 第一步: 随机选取每个WBS要素的工期值作为输入(因为每个要素的工期不是恒定的,本身就是一个估计的分布区间); 第二步: 然后把三个WBS要素的值相加得到整个项目的工期值,这样就完成了一次模拟; 第三步: 重复第一二步,然后就这样一次一次的模拟,需要模拟成千上万次最终得到成千上万个整个项目总工期的数值; 第四步: 再对这些海量模拟次数得到海量总工期数值进行统计分析,得出其最终的项目总工期估计的概率分布。
我们先做第一步。第一步需要我们先产生这些每个要素的随机工期值。Excel里面有个函数可以生成呈正态分布的随机数,就是NORMINV。我们的设计要素的第一个随机工期取值的公式就是这么写的:=ROUND(NORMINV(RAND(),$E$3,$F$3),0),如下图所示:
解释一下这个公式:ROUND(NORMINV(RAND(),$E$3,$F$3),0),RAND() 是生成0到1之间的随机数,NORMINV(RAND(),$E$3,$F$3) 是生成呈均值为E3(图中为14)、标准差为F3(图中为2)的正态分布的随机数,ROUND 是四舍五入的意思,这样回车我们就生成了设计这个要素的第一个随机工期值17。同理我们把这个公式值往下拉,复制400次(我们此例中模拟400次),就得到了400个呈正态分布的随机工期值;然后建造和测试的随机工期值也是照葫芦画瓢,这样我们就得到了这3个要素的400次模拟的随机值,再每次的3个要素的随机值相加得到总工期的模拟值,如下图所示:
此时前三步就做完了得到了总工期的一组数据(400个)。现在开始做第四步对这组数据做统计分析和作图。
4.1 先把总工期这一列(图中E列)400个值拷贝一份,粘贴数值到另外一列(注意粘贴的时候选择“选择性粘贴”然后选“值”,因为随机数随时变动,这儿需要把值固定下来),用MAX和MIN函数计算出这一列400个值的最大值为76,和最小值为45,作为分组依据,然后在旁边 I 列依次升序排列42-78(前后多取几个数值图像更完整)这部分数值作为分组数据,如下图所示:
4.2 然后计算每个分组数据在总工期这组数据中出现的概率,这儿需要用到函数FREQUENCY,计算概率的公式为:=FREQUENCY(H8:H407,I8:I40)/400,意思是统计每个分组数据在总工期这一组数据中出现的次数,再除以模拟总次数400就得到这个分组数据出现的概率。再计算一个累积概率值,累积概率值就是前面的所有单个概率值加起来的概率,比如算分组数据46的累积概率值就是把46以下的数值的概率值全部加起来,这样我们就得到关于分组数据在总工期这组数据中出现的概率和累积概率的数据,如下表格所示:
4.3 通过对上面表格的数据,以分组数据为X轴,出现概率和累积概率的值为Y轴于是可以做出下面关于总工期的概率分布图:
红色柱状图是整个项目估计刚好多少天完工的概率数据,比如图中60天对应的概率大约是11%,表示整个项目刚好60天完工的概率是11%;蓝线就是我们PMBOK上定量风险分析得到的那张S曲线图,也是我们最终蒙特卡洛模拟需要得到的最终的模拟输出:总工期的概率分布图。通过这个S曲线,我们可以预测整个项目在多少天内完工的概率。比如我们需要预测整个项目在56天完工的概率,通过S曲线了解到56天对应的累积概率是34%左右,也就是整个项目56天内完工的概率是34%,那么56天内不能完工的概率就是1-34%=66%,这就是风险。如果觉得风险太高无法接受,那么我们可以把工期适当规划长一些,比如60天,这样查询S曲线可以得到60天内整个项目完工的概率是70%,这样就只有剩下30%的不能按时完工的风险,项目在进度方面的风险就大大降低了。
好了,至此关于蒙特卡洛模拟的基本概念和操作流程就说完了,希望能通过本文对大家学习和理解蒙特卡洛模拟有所助益,如有任何疑问、建议或指正,欢迎留言交流,谢谢阅读。
推荐阅读作者更多的文章(直接点击下面的标题):
详解挣值管理(EVM)
详解净现值(NPV)与内部报酬率(IRR)
什么是边际效益递减规律?
“活动”失踪了吗? | 《PMBOK®指南》第6版解读
如何用通俗的案例解释「借壳上市」?
蒙特卡罗方法(Monte Carlo method)
蒙特卡罗方法(Monte Carlo method)
蒙特卡罗方法概述
蒙特卡罗方法又称统计模拟法、随机抽样技术,是一种随机模拟方法,以概率和统计理论方法为基础的一种计算方法,是使用随机数(或更常见的伪随机数)来解决很多计算问题的方法。将所求解的问题同一定的概率模型相联系,用电子计算机实现统计模拟或抽样,以获得问题的近似解。为象征性地表明这一方法的概率统计特征,故借用赌城蒙特卡罗命名。
蒙特卡罗方法的提出
蒙特卡罗方法于20世纪40年代美国在第二次世界大战中研制原子弹的“曼哈顿计划”计划的成员S.M.乌拉姆和J.冯·诺伊曼首先提出。数学家冯·诺伊曼用驰名世界的赌城—摩纳哥的Monte Carlo—来命名这种方法,为它蒙上了一层神秘色彩。在这之前,蒙特卡罗方法就已经存在。1777年,法国Buffon提出用投针实验的方法求圆周率∏。这被认为是蒙特卡罗方法的起源。
蒙特卡罗方法的基本思想
Monte Carlo方法的基本思想很早以前就被人们所发现和利用。早在17世纪,人们就知道用事件发生的“频率”来决定事件的“概率”。19世纪人们用投针试验的方法来决定圆周率π。本世纪40年代电子计算机的出现,特别是近年来高速电子计算机的出现,使得用数学方法在计算机上大量、快速地模拟这样的试验成为可能。
考虑平面上的一个边长为1的正方形及其内部的一个形状不规则的“图形”,如何求出这个“图形”的面积呢?Monte Carlo方法是这样一种“随机化”的方法:向该正方形“随机地”投掷N个点,有M个点落于“图形”内,则该“图形”的面积近似为M/N。可用民意测验来作一个不严格的比喻。民意测验的人不是征询每一个登记选民的意见,而是通过对选民进行小规模的抽样调查来确定可能的优胜者。其基本思想是一样的。
科技计算中的问题比这要复杂得多。比如金融衍生产品(期权、期货、掉期等)的定价及交易风险估算,问题的维数(即变量的个数)可能高达数百甚至数千。对这类问题,难度随维数的增加呈指数增长,这就是所谓的“维数的灾难”(Curse of Dimensionality),传统的数值方法难以对付(即使使用速度最快的计算机)。Monte Carlo方法能很好地用来对付维数的灾难,因为该方法的计算复杂性不再依赖于维数。以前那些本来是无法计算的问题现在也能够计算量。为提高方法的效率,科学家们提出了许多所谓的“方差缩减”技巧。
另一类形式与Monte Carlo方法相似,但理论基础不同的方法—“拟蒙特卡罗方法”(Quasi-Monte Carlo方法)—近年来也获得迅速发展。我国数学家华罗庚、王元提出的“华—王”方法即是其中的一例。这种方法的基本思想是“用确定性的超均匀分布序列(数学上称为Low Discrepancy Sequences)代替Monte Carlo方法中的随机数序列。对某些问题该方法的实际速度一般可比Monte Carlo方法提出高数百倍,并可计算精确度。
蒙特卡罗方法的基本原理
由概率定义知,某事件的概率可以用大量试验中该事件发生的频率来估算,当样本容量足够大时,可以认为该事件的发生频率即为其概率。因此,可以先对影响其可靠度的随机变量进行大量的随机抽样,然后把这些抽样值一组一组地代入功能函数式,确定结构是否失效,最后从中求得结构的失效概率。蒙特卡罗法正是基于此思路进行分析的。
设有统计独立的随机变量Xi(i=1,2,3,…,k),其对应的概率密度函数分别为fx1,fx2,…,fxk,功能函数式为Z=g(x1,x2,…,xk)。
首先根据各随机变量的相应分布,产生N组随机数x1,x2,…,xk值,计算功能函数值 Zi=g(x1,x2,…,xk)(i=1,2,…,N),若其中有L组随机数对应的功能函数值Zi≤0,则当N→∞时,根据伯努利大数定理及正态随机变量的特性有:结构失效概率,可靠指标。
从蒙特卡罗方法的思路可看出,该方法回避了结构可靠度分析中的数学困难,不管状态函数是否非线性、随机变量是否非正态,只要模拟的次数足够多,就可得到一个比较精确的失效概率和可靠度指标。特别在岩土体分析中,变异系数往往较大,与JC法计算的可靠指标相比,结果更为精确,并且由于思路简单易于编制程序。
蒙特卡罗方法在数学中的应用
通常蒙特·卡罗方法通过构造符合一定规则的随机数来解决数学上的各种问题。对于那些由于计算过于复杂而难以得到解析解或者根本没有解析解的问题,蒙特·卡罗方法是一种有效的求出数值解的方法。一般蒙特·卡罗方法在数学中最常见的应用就是蒙特·卡罗积分。
蒙特卡罗方法的应用领域
蒙特卡罗方法在金融工程学,宏观经济学,生物医学,计算物理学(如粒子输运计算、量子热力学计算、空气动力学计算)等领域应用广泛。
蒙特卡罗方法的工作过程
在解决实际问题的时候应用蒙特·卡罗方法主要有两部分工作:
1.用蒙特·卡罗方法模拟某一过程时,需要产生各种概率分布的随机变量。
2.用统计方法把模型的数字特征估计出来,从而得到实际问题的数值解。
蒙特卡罗方法分子模拟计算的步骤
使用蒙特·卡罗方法进行分子模拟计算是按照以下步骤进行的:
1.使用随机数发生器产生一个随机的分子构型。
2.对此分子构型的其中粒子坐标做无规则的改变,产生一个新的分子构型。
3.计算新的分子构型的能量。
4.比较新的分子构型于改变前的分子构型的能量变化,判断是否接受该构型。
·若新的分子构型能量低于原分子构型的能量,则接受新的构型,使用这个构型重复再做下一次迭代。
·若新的分子构型能量高于原分子构型的能量,则計算玻尔兹曼因子,并产生一个随机数。
* 若这个随机数大于所计算出的玻尔兹曼因子,则放弃这个构型,重新计算。
* 若这个随机数小于所计算出的玻尔兹曼因子,则接受这个构型,使用这个构型重复再做下一次迭代。
5.如此进行迭代计算,直至最后搜索出低于所给能量条件的分子构型结束。
蒙特卡罗模型的发展运用
从理论上来说,蒙特卡罗方法需要大量的实验。实验次数越多,所得到的结果才越精确。以上Buffon的投针实验为例、历史上的记录如下表1。
从表中数据可以看到,一直到公元20世纪初期,尽管实验次数数以千计,利用蒙特卡罗方法所得到的圆周率∏值,还是达不到公元5世纪祖冲之的推算精度。这可能是传统蒙特卡罗方法长期得不到推广的主要原因。
计算机技术的发展,使得蒙特卡罗方法在最近10年得到快速的普及。现代的蒙特卡罗方法,已经不必亲自动手做实验,而是借助计算机的高速运转能力,使得原本费时费力的实验过程,变成了快速和轻而易举的事情。它不但用于解决许多复杂的科学方面的问题,也被项目管理人员经常使用。
借助计算机技术,蒙特卡罗方法实现了两大优点:
一是简单,省却了繁复的数学报导和演算过程,使得一般人也能够理解和掌握;
二是快速。简单和快速,是蒙特卡罗方法在现代项目管理中获得应用的技术基础。
蒙特卡罗方法有很强的适应性,问题的几何形状的复杂性对它的影响不大。该方法的收敛性是指概率意义下的收敛,因此问题维数的增加不会影响它的收敛速度,而且存贮单元也很省,这些是用该方法处理大型复杂问题时的优势。因此,随着电子计算机的发展和科学技术问题的日趋复杂,蒙特卡罗方法的应用也越来越广泛。它不仅较好地解决了多重积分计算、微分方程求解、积分方程求解、特征值计算和非线性方程组求解等高难度和复杂的数学计算问题,而且在统计物理、核物理、真空技术、系统科学、信息科学、公用事业、地质、医学,可靠性及计算机科学等广泛的领域都得到成功的应用。
项目管理中蒙特卡罗模拟方法的一般步骤
项目管理中蒙特卡罗模拟方法的一般步骤是:
1、对每一项活动,输入最小、最大和最可能估计数据,并为其选择一种合适的先验分布模型;
2、计算机根据上述输入,利用给定的某种规则,快速实施充分大量的随机抽样;
3、对随机抽样的数据进行必要的数学计算,求出结果;
4、对求出的结果进行统计学处理,求出最小值、最大值以及数学期望值和单位标准偏差;
5、根据求出的统计学处理数据,让计算机自动生成概率分布曲线和累积概率曲线(通常是基于正态分布的概率累积S曲线);
6、依据累积概率曲线进行项目风险分析。
非权重蒙特卡罗积分
非权重蒙特卡罗积分,也称确定性抽样,是对被积函数变量区间进行随机均匀抽样,然后对被抽样点的函数值求平均,从而可以得到函数积分的近似值。此种方法的正确性是基于概率论的中心极限定理。当抽样点数为m时,使用此种方法所得近似解的统计误差恒为 1除于根号M,不随积分维数的改变而改变。因此当积分维度较高时,蒙特卡罗方法相对于其他数值解法更优。
蒙特卡罗方法案例分析
案例一:蒙特卡罗模型在投资项目决策中的开发应用[1]
一、问题的提出
随着社会主义市场经济体制的逐步完善、经济水平的逐步提高,我国社会经济活动日趋复杂,越来越多变,其影响越来越广泛,越来越深远,不确定性逐渐成为企业决策时所面临的主要难题。因此,如何在不确定条件下做出投资决策,就成为目前理论和实践工作者们广泛关注的一个核心课题。
传统的投资评价理论——以净现值法(NPV)为代表的投资决策分析方法,其根本缺陷在于它们是事先对未来的现金流量做出估计,并假设其为不变或静态的状况,无法衡量不确定因素的影响,不能体现递延决策以应对所带来的管理弹性。所以,在不确定环境下的投资,用净现值法评估项目不能体现柔性投资安排决策所体现的价值,无助于项目在决策中回避风险。在多变的市场环境中,不确定性与竞争者的反应使实际收入与预期收入有所出入,所以净现值法(NPV)适用于常规项目,未来不确定性比较小的项目。
为此理论界对未来投资环境不确定性大的项目提出了实物期权法,但在实践中应用的还是比较少。实物期权法的应用对企业决策者的综合素质要求比较高,对企业资源能力要求也比较高。但是实物期权法改变了我国管理者对战略投资的思维方式。
基于以上的分析,我们得出这样的结论:传统的投资决策方法对风险项目和不确定性项目的评价有较多不完善之处,有必要对其改进;实物期权法理论上解决了传统决策方法对不确定性项目评价的不足,但其应用尚处于体系不成熟阶段,在实践中应用并不广泛。至此,引入蒙特卡罗模型的理论和其分析方法,此方法特别适用于参数波动性大,且服从某一概率分布的项目,例如地质勘察、气田开发等项目。
蒙特卡罗模型是利用计算机进行数值计算的一类特殊风格的方法,它是把某一现实或抽象系统的某种特征或部分状态,用模拟模型的系统来代替或模仿,使所求问题的解正好是模拟模型的参数或特征量,再通过统计实验,求出模型参数或特征量的估计值,得出所求问题的近似解。目前评价不确定和风险项目多用敏感性分析和概率分析,但计算上较为复杂,尤其各因素变化可能出现概率的确定比较困难。蒙特卡罗模型解决了这方面的问题,各种因素出现的概率全部由软件自动给出,通过多次模拟,得出项目是否应该投资。该方法应用面广,适应性强。
惠斯通(Weston)对美国1 000 家大公司所作的统计表明:在公司管理决策中,采用随机模拟方法的频率占29 % 以上,远大于其他数学方法的使用频率。特别,该方法算法简单,但计算量大,在模拟实际问题时,要求所建模型必须反复验证,这就离不开计算机技术的帮助,自然可利用任何一门高级语言来实现这种方法。通过一案例具体实现了基于Excel 的Monte Carlo 模拟系统,由于Microsof tExcel 电子表格软件强大的数据分析功能和友好的界面设计能力,使系统实现起来颇感轻松自如。
二、理论和方法
蒙特卡洛模拟早在四十年前就用于求解核物理方面的问题。当管理问题更为复杂时,传统的数学方法就难以进行了。模拟是将一个真实事物模型化,然后对该模型做各种实验,模拟也是一个通过实验和纠正误差来寻求最佳选择的数值性求解的过程。模拟作为一种有效的数值处理方法,计算量大。以前只是停留在理论探讨上,手工是无法完成的。在管理领域由于规律复杂随机因素多,很多问题难以用线性数学公式分析和解决,用模拟则有效得多。在新式的计算机普及后,用模拟技术来求解管理问题已成为可能。
计算机模拟技术和其它方法相比有以下优点:
1)成本低、风险小,在产品未投产,实际生产未形成就可以对市场进行分析模拟,极大地减少费用和风险。
2)环境条件要求低,工作人员不需要高深的数学能力,完全依靠计算机进行,在硬件和软件日益降价的情况下,可以成为现实。
3)可信度高,常用的统计推理方法需要大量历史数据(如平均数法、最小二乘法),对无历史资料的场合就无能为力(如新产品),而且精度低。
模拟的最大特点是借助一个随机数来模仿真实的现实,随机数的产生则由计算机来产生。称为伪随机数。即:
Rn = F (r - 1 , r - 2 ,……r - k)
在以对象为中心的软件中, EXCEL 有一个RANE()函数实现伪随机数功能。RANE()实际上是一个会自动产生伪随机数的子程序。用产生的伪随机数模拟市场购买行为,得出产品销售量,在生产成本相对固定时进而推测出产品的利润。此方法不用编制复杂的程序,思路假设为,作为系统内部是可以控制的,即企业内部生产成本可以人为控制,但系统外部因素是不可控制的(消费心理导致的消费行为),则生产与销售就会产生矛盾。生产量小于销售量,造成开工不足资源浪费;生产量大于销售量,造成产品积压,资金占用,同样形成资源的浪费。最好生产量等于销售量,则资源浪费最小,自然经济效益就最高,实际就是利润最大化。如果能科学地测算出在什么情况下利润最大,则这时的产量就是最佳产量,成本也就最低。这就是市场作为导向,以销定产的公认市场经济的准则。实际工作中,很多产品的消费是具有随机性的,主要是一些需求弹性大、价格弹性大、价格低、与日常生活有关的中、小商品,如副食品、日用消费品、玩具、轻工业产品。对企业而言利润较高的产品。
从以上分析可以看出,蒙特卡洛模拟可以动态实现对产品利润的预测,从而对产品产量科学控制,实现资源优化,是一种较好的决策支持方法。
三、蒙特卡罗模型在Excel 表中的应用
某气田投资项目期投资、寿命期、残值以及各年的收入、支出,以及应付税金的税率、项目的资本成本等都是独立的随机变量,他们的概率密度函数如表1所示。
表各变量对应概率密度函数表
|
A
|
B
|
C
|
D
|
2
|
|
概率
|
对应的随机数
|
可能值
|
3
|
投资Yo
|
0.2
|
0
|
450
|
4
|
0.5
|
0
|
6
|
|
5
|
0.3
|
70
|
550
|
|
6
|
寿命N
|
0.5
|
0
|
6
|
7
|
0.3
|
50
|
7
|
|
8
|
0.2
|
80
|
8
|
|
9
|
残值F
|
0.25
|
0
|
40
|
10
|
0.5
|
25
|
50
|
|
11
|
0.25
|
75
|
60
|
|
12
|
税率Te
|
0.2
|
再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow |
以上是关于蒙特卡洛模拟(Monte Carlo Simulation)浅析的主要内容,如果未能解决你的问题,请参考以下文章
Markov Chain Monte Carlo 和 Gibbs Sampling算法