1. 概念
关键路径法(Critical Path Method)是一种用来预测总体项目历时的项目网络分析技术。所谓“关键路径”,是指当我们完成了项目进度计划后,在项目的网络图上,存在着若干条从项目启动到项目结束之间的路径,但是对其中一条(严格的来说,可能存在一条以上)路径上来说:
l
l
l
这条路径就是项目的关键路径。如下图:
关键路径是项目网络图中(历时)最长的路径。一个项目的关键路径:是指一系列决定项目最早完成时间的活动。在关键路径上的活动都很“关键”,因为它们直接决定了项目的进度。每个活动都只有最少的浮动时间或时差。所谓浮动时间或时差是指一项活动在不耽误后续活动或项目完成日期的条件下可以拖延的时间长度。
现在所有的项目管理软件工具都将寻找一个项目的关键路径作为最基本的功能。它是运用某种运算法则来计算而得出项目关键路径信息的。该运算法则被称为 正推法 和 倒推法,这个法则输出的结果就是项目的关键路径,当然也包括项目的总历时和项目中每个活动关于进度的“关键”信息。虽然今天已经很少需要手工计算来得到项目的关键路径了,但是仔细了解一下它的算法将会非常有助于更深刻地理解所得到各项信息的意义。下面我们就来看一下如何用正推法和倒推法来计算项目的关键路径。
正推法和倒推法主要是用来计算有关一个项目活动的:
l
l
l
l
如下图所示,对每一个项目活动的这4个参数都是一个时间点。
2. 正推法
所谓正推法就是从项目的第一个活动到最后一个活动跟踪全部活动的先后关系,计算出每个活动的最早开始时间(ES)和最早结束时间(EF)。
所谓倒推法则是从最后一个活动开始向前追溯到第一个活动,计算出每个活动的最晚开始时间(LS)和最晚结束时间(LF)。
正推法的计算过程包括四步:
步骤一:设定项目的第一个活动的最早开始时间是从第一天开始,如图:
步骤二:计算第一个活动的最早结束时间,可以用第一个活动的最早开始时间加该活动的历时减1得出:EF = ES + 历时-1,如图:
步骤三:计算该活动的所有后续活动的最早开始时间(ES):
后续活动的ES=前导活动的EF+1
步骤四:过重复步骤二、三,为项目中的每个活动计算最早开始时间(ES)和结束时间(EF),如图所示:
EF = ES + 历时 – 1
ES = 前导活动EF + 1
但是这里有一种情况需要特别考虑,因为正推法是依赖每个活动的前导活动来决定的,所以如果一个活动存在多个前导活动的话,需要采用前导活动中EF最晚的那个活动来计算该活动的ES。
3. 倒推法
倒推法的计算过程也包括四个步骤,只不过这次你是从项目的结束时间开始。但这里要用到正推法的结果:
步骤一:因为你不能延误项目的完成时间,因此最后一个活动的最早结束时间EF等同于最晚结束时间LF。
步骤二:计算最后一个活动的最晚开始时间,可以通过用最晚结束时间减去该活动的历时然后加1来得出。
LS = LF – 历时+1
步骤三:每个活动必须在后续活动开始之前完成,因此可以为每个活动计算最晚结束时间。
LF = 后续活动 LS – 1
步骤四:然后重复第二、三步骤,计算出每个活动的最晚开始时间和最晚结束时间
同样在计算过程中也需要处理一个特殊情况,由于倒推法是依赖每个活动的后续活动来考虑的,所以如果一个活动出现多个后续活动的时候,应该取后续活动中LS最早的那个来计算该活动的LF。
事实上在完成倒推法的计算之后,我们得到了每个活动有关进度的关键信息:
l
l
l
l
l
l
l
4. 示例
下面我们来看一个例子的推演,帮助大家更好的理解。如下图是一个小项目的网络图,已经完成每个活动的历史估算,我们需要确定利用正推法和倒推法求出个活动的ES-EF-LS-LF,以及项目的关键路径:
4.1 正推法求ES-EF
步骤一:活动A的ES=1,EF=ES+20-1=20,如下图:
步骤二:求出以活动A为前导活动的那些活动的ES以及EF。
ES = 前导活动的EF+1
如下图:
步骤三:重复步骤二,计算出所有活动的ES-EF。但对于出现了两个前导活动的活动E来说,由于B的EF晚于D的EF,所以其计算取B的EF。如下图:
4.2 倒推法来计算LS-LF
步骤一:设最后一个活动E的LF=EF。LS = LF – 历时 + 1。如下图:
步骤二:计算那些以活动E为后续活动的活动的LF-LS。
LF = 后续活动的LS – 1
如下图:
步骤三:重复步骤二计算所有活动的LS-LF。其中活动A有两个后续活动B和C,
|
现在我们就得到了这个项目的关键路径:A- B-E。对于每一个活动的进度要求信息也很清楚,我们可以看到每个活动的浮动时间。在关键路径上活动的浮动时间都为0,意味着这些活动不能有半点拖延。
而活动C和D的浮动时间为10,所以只要延误在10以内就不影响项目的总进度。因此我们可以灵活安排活动C和活动D的资源,可以在这些活动即将开始的时候再 安排资源。这些活动也可以在最早开始时间时开始,也可以延后10天才开始,但都不会影响项目的结束。在资源平衡过程中,我们也经常会用到总时差。
实际上,活动C和活动D有10天的浮动时间,并不是意味着每个活动都有10天的浮动时间,而是两个活动共有10天的浮动时间。我们习惯上将活动C的浮动时间扣除掉,即只有活动D有浮动时间。路径CD的浮动时间仅为10天。
但是活动C的总时差和活动D的总时差是有差别的。换句话说,就是活动C允许偏离进度的时间和活动D允许偏离进度的时间是有差别的。
如果活动D在第31天开始,这是活动D的最早开始时间,由于活动D有10天的延误时间,那么该活动在第60天结束,那么会不会影响项目的结束呢?回答是:不会。
现在,我们假设活动C 可以准时在第21天开始,并且最晚要在第40天时完成。如果这样的话就不会影响项目的进度。但由于活动C的进度发生偏离,那么会影响项目D不能在最早时间 开始和最早时间结束。如果在工作计划中,被安排到活动D的资源的使用时间段为:第31天到第40天。在第40天的时候,这些资源将被撤走,安排到其它的项 目中。因为活动C的进度延误将会导致活动D的资源出现短缺,因而活动D也会出现延误,并最终导致项目的延误。因此活动C间接地导致了项目的延误。
在这里我就可以看到总时差和自由浮动时间的区别,例如:
FF(活动C)=31(后续活动最早ES)-30(EF(活动C))- 1 = 0
FF(活动D)=61(后续活动最早ES)-50(EF(活动C))- 1 = 10
因此活动D有10天的自由浮动时间,而活动C没有。