前面讲到计划评审技术PERT中三点估计项目完成概率的计算,这里我们应用模拟仿真来近似计算这个概率。
在三点估计中使用了每首工序中的三种估计值——最可能估计、乐观估计和悲观估计,这些数据分别用来估计最可能时长、最小时长和最大时长。在计划评审技术中,还假设每道工序持续时间的概率分布为β-分布。通过三个简化的近似假设,获得按时完成任务的粗略估计概率。
而在模拟仿真中,则不需要计划评审技术中的三个简化假设,同时也不局限于哪一种概率分布,相反,可以灵活运用各种概率分布。
仿真通过随机生成符合某种概率分布的不同事件来模拟一个随机系统的运行。它可以用来预测复杂以至不易应用数学模型进行分析的系统表现。使用计算机模拟仿真可采用四种软件:一是电子表格软件;二是通用程序语方来编写仿真程序;三是通用仿真语言来设计仿真模型;四是面向应用的仿真器。下面介绍使用Crystal Ball对项目完成概率进行模拟估算。
Crystal Ball是基于Excel的一个插件,可用来建模、预测、模拟和优化。对比Excel规划求解工具,Crystall Ball可以处理变量较多,较复杂的,不易使用Excel规划求解工具来求解的问题。
Crystal Ball的下载:https://www.oracle.com/applications/crystalball/.
下载安装后,在Excel加载项中激活Crystall Ball:
在“选项”对话框中切换到“加载项”选项卡,从“管理”下拉列表选择加载项类型(如COM加载项),点击“转到”按钮;
在弹出窗口中勾选目标加载项并确认启用。

使用Crystal Ball 执行仿真有几个步骤:
1.定义随机的输入单元格;
2.定义预测的输出单元格;
3.设定运行参数;
4.运行仿真;
(1)定义随机的输入单元格
一个随机的输入单元格是一个用来输入随机数的单元格。Crystal Ball将每一个这样的随机输入单元格都作为一个假设单元格(assumption cell)。
定义假设单元格的步骤:
1)点击选择一个单元格;
2)如果这个单元格没有包含有一个数值,那么任意输入一个数值;
3)点击Crystal Ball 工具条的第一个按钮(定义假设/Define Assumption);
4)点击选择分布图例(Distribution Gallery)中相应的分布曲线,选择一个合适的概率分布函数输入到这个单元格中;
5)点击确定按钮,生成了一个选定分布函数的对话框;
6)在对话框中输入此分布函数的参数(可关联到电子表格中包含有这些参数数值的单元格);如果需要的话,可在假设单元格中输入一个名字标签;
7)点击确定。
(2)定义预测的输出单元格
定义预测单元格的步骤:
1)通过点击选中一个单元格;
2)点击 Crystal Ball 工具条的第三个按钮(定义预测/Define Forecast),弹出定义预测对话框(Forecast Dialogue);
3)在对话框中输入一个名字标签,并且定义预测单元格的单位;
4)点击确定。
(3)设定运行参数
设定运行参数由试验次数和决定如何执行仿真的选项组成。点击 Crystal Ball 工具条的运行参数按钮(Run Preferences),在对话框中,输入或修改参数设定值。
(4)运行仿真
点击开始仿真(Start Simulation)按钮。如果之前已经运行过仿真,那么应该在本此运行前首先点击重置仿真(Reset Simulation)按钮来重置仿真。
用仿真技术来估计项目在要求工期内完成的概率,首先需要了解项目中,每个工序的工时具有一定的不确定性,要估算整个计划的完成时间在要求工期内的概率,首先要知道这个项目时间的概率分布。通常,在处理工序持续时间时长时常使用三角分布,如下图:最小值,最可能值,最大值分别代表乐观估计、最有可能估计和悲观估计。

我们将每道工序的工时估计列入表中,如下图:

乐观估计、最可能估计、悲观估计 数值列入E、F、G列中,H列和J列给出了每道工序的开始时间和结束时间。公式如下:

由于工序时间主要是可变的,所以单元格 I5: I26 作为假设单元格,对于仿真的每次试验,完成时间的最大值是工序最后工序给出的项目持续时间,这个值输入到预测单元格J26 中。假设单元格中的工时分布采用三角分布,乐观估计、最可能估计、悲观估计 数值 输入三角分布的最小值、最可能值、最大值中。如下图:

从I6:I26的输入采用复制粘贴方式来完成:其中,单元格I19输入固定值8,这是因为这道工序的o=p=m=8,说明这道工序时间实际上是固定值。设置后如下图:

设置完后,这个模型总结如下:
输入单元格(假设单元格):单元格I5 :I18 和 I20 :I26
输出单元格(预测单元格):单元格 J28
现在我们已经准备好了执行模型仿真。在运行选项对话框中默认设定 1000 次作为仿真次数,运行后我们来看频率图统计表和百分比图的结果。




如果仿真运行再重复 1000 次,这个百分数将会稍微地变动一点。由此看出,仿真估计在决定项目计划是否应该改善以提高能满足截止期的可能性方面提供了一个良好的管理向导。
使用敏感性图进一步提供关键分析
Crystal Ball的敏感性图很清楚地指出了项目计划的什么环节应该被修改。点击 CrystalBall 工具条上的敏感性图(Sensitivity Chart)打开它,如下图所示:

在两个变量之间的相互关联系数衡量了这些变量之间的依存关系的强度。每个相互关联系数都衡量了工序时间在多大程度上影响了项目的完成时间。相互关联系数越高,则这个时间的影响程度就越大。所以,那些对应相互关联系数最高的工序,就是应该尽最大努力来缩短时间的工序。
图中 说明工序C1(I7)的时间比其他的任何一个工序的时间都有相对较高的相互关联系数。工序C1在关键路径上,,完成工序C1 上的任何延迟都会推迟处于它之后的所有工序的开始时间。从单元格E7:G7 说明了工序C1的时间是最容易变化的,它的最可能时间和最悲观时间相差高达6天,而最可能可能与最大时间相等,所以超过最可能时间的较长延迟也会经常发生。
由于工序C1的相当高的相互关联系数,缩减项目完成时间的最好方法是关注于缩减这一工序的时间(和它的变动范围)。这样就可以通过修改项目计划以指派更多的人力、更好的设备、更强的监督管理等实现项目的按时完成。