1、理解

蒙特卡罗方法是以概率统计原理为基础,模拟事物的形成过程,以达到认识事物特征及其变化规律的方法。 这种方法的前提假设是不确定性参数可以用概率分布来描述。

蒙特卡罗方法是以概率和统计理论方法为基础的一种计算方法,目的是用随机概率的方式(抽样或统计模拟)求解一定计算问题的近似解(不同可能解的概率大小)。

2、蒙特卡罗方法的工作过程

在解决实际问题的时候应用蒙特·卡罗方法主要有两部分工作:

1. 用蒙特·卡罗方法模拟某一过程时,需要产生各种概率分布的随机变量。

2. 用统计方法把模型的数字特征估计出来,从而得到实际问题的数值解。

3、模拟过程

蒙特卡洛模拟在实际的项目管理应用中一般较为复杂,而且很多时候用在专业的项目风险分析软件里面(比如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%的不能按时完工的风险,项目在进度方面的风险就大大降低了。

以上案例来自:https://www.zhihu.com/question/263316961/answer/362674489

蒙特卡罗模拟/蒙特卡罗方法相关推荐

  1. 在 Python 中使用蒙特卡罗方法预测股票价格,使用蒙特卡罗模拟确定明年 SPY 最有可能的价格

    股票市场是历史上研究最多的领域之一.几十年来,人们一直在努力预测未来的价格.大多数人(如果不是全部)都在为这项任务而苦苦挣扎,因为股票市场是一个随机过程.由于其随机性,随机过程本质上很难或不可能准确预 ...

  2. 蒙特卡罗(Monte Carlo)方法

    蒙特卡罗(Monte Carlo)方法,也称为计算机随机模拟方法,是一种基于"随机数"的计算方法.          一 起源 这一方法源于美国在第二次世界大战进研制原子弹的&qu ...

  3. 蒙特卡罗模拟_Stata博文 | 使用蒙特卡罗模拟计算功率part 1:基础知识

    功率和样本大小的计算是科学研究计划的重要组成部分.可以使用Stata的power命令来计算许多常用统计测试的功率和样本大小需求.但对于更复杂的模型是没有简单公式的,如多层/纵向模型和结构方程模型(SE ...

  4. Matlab蒙特卡罗模拟

    Matlab蒙特卡罗模拟: 可以用蒙特卡罗方法来近似模拟求pi值: 思路: 设相互独立的随机变量X,Y均服从[-1,1]上的均匀分布,则(X,Y)服从{-1≤x≤1, 1≤y≤1}上的二元均匀分布(即 ...

  5. 用计算机核裂变模拟实验,SAS和蒙特卡罗模拟(1):开篇

    SAS for Monte Carlo Simulations (1): Introduction 一.为什么选择SAS做蒙特卡罗模拟? 为什么要用SAS做蒙卡?首先,对我来说,我只会用SAS,而且打 ...

  6. 蒙特卡罗模拟概述(Monte Carlo Simulation)

    Overview 蒙特卡洛(Monte Carlo)方法,或称计算机随机模拟方法,是一种基于"随机数"的计算方法.这一方法源于美国在第二次世界大战中研制原子弹的"曼哈顿计 ...

  7. 蒲丰投针计算机模拟ppt,蒙特卡罗模拟课件.ppt

    <蒙特卡罗模拟课件.ppt>由会员分享,提供在线免费全文阅读可下载,此文档格式为ppt,更多相关<蒙特卡罗模拟课件.ppt>文档请在天天文库搜索. 1.蒙特卡洛模拟数学实验之前 ...

  8. 基于蒙特卡罗模拟的股票风险价值VaR测算

    基于蒙特卡罗模拟的股票风险价值VaR测算 前言:如果各位观看博客的想学的,可以通过Tushare金融数据注册链接注册账号,在获得相关数据集,这是本人的分享链接注册后,我可以获得50积分,谢谢各位支持. ...

  9. 用计算机怎么做蒙特卡洛模拟,蒙特卡罗模拟

    蒙特卡罗模拟因摩纳哥著名的赌场而得名.它能够帮助人们从数学上表述物理.化学.工程.经济学以及环境动力学中一些非常复杂的相互作用. 数学家们称这种表述为"模式",而当一种模式足够精确 ...

  10. 蒙特卡罗模拟——Java实现

    蒙特卡洛模拟是使用随机数和概率来解决问题. 这个方法在计算数学.物理.化学和金融等方面有广泛的应用. 本节给出一个使用蒙特卡罗模拟来估算π的例子. circleArea / squareArea = ...

最新文章

  1. 解决国内GitHub加载慢的问题
  2. 如何在Linux下统计高速网络中的流量
  3. Groovy的春天从Java7诞生那日开始
  4. linux安装下载中文包,linux下安装中文包和字体
  5. 1600802038
  6. 4. 怎么在生活中提升专注力?
  7. 三分钟带你了解移动通讯办公软件
  8. putty screen 快捷键
  9. Java实现数组排序
  10. 【STM32训练—SIM900A模块】第二篇、STM32驱动SIM900A发送中文和英文短信
  11. CAD转换PDF文件失败,打开后内容是空白的
  12. windows手动清理垃圾文件
  13. HDU - 1873 看病要排队(优先队列)
  14. 全球及中国塑料机械行业十四五发展战略与竞争格局展望报告2022版
  15. 【神经网络】梯度消失与梯度爆炸问题
  16. Docker镜像拉取报错:Error response from daemon: Get https://registry-1.docker.io/v2/
  17. 白话数字签名(3)——Web程序中的数字签名【转】
  18. 用mysql创建一张电子杂志表_MySQL数据库——动手实践: 电子杂志订阅表的操作
  19. 高等数学:第十二章 微分方程(3)高阶线性微分方程、二阶常系数齐次线性微分方程
  20. 03.PyTorch与CNN(4-1 机器学习和神经网络的基本概念(1))

热门文章

  1. matlab的数值求解实验报告,偏微分方程数值及matlab实验报告
  2. 豆瓣高分JAVA书籍,你都读过吗?
  3. JAVA多线程是什么
  4. 获取本机的ip地址(Windows和linux的区别)
  5. vs2005启动不了,手把手教你修复它
  6. 网络系统设计综合布线方案
  7. android电话记录仪,零费用变身记录仪 安卓手机探索改造
  8. 06-Docker数据管理实践
  9. ITIL4服务管理的新思路与实践案例介绍
  10. 【openv450-samples】像素点聚类EM 图像聚类目标检测