关键路径法(Critical Path Method,CPM)是一种基于数学计算的项目计划管理方法,是网络图计划方法的一种,属于肯定型的网络图。关键路径法将项目分解成为多个独立的活动并确定每个活动的工期,然后用逻辑关系(结束-开始、结束-结束、开始-开始和开始结束)将活动连接,从而能够计算项目的工期、各个活动时间特点(最早最晚时间、时差)等。在关键路径法的活动上加载资源后,还能够对项目的资源需求和分配进行分析。关键路径法是现代项目管理中最重要的一种分析工具。
关键路径法_关键路径法 -分类
关键路径法
根据绘制方法的不同,关键路径法可以分为两种:即箭线图(ADM)和前导图(PDM)。
箭线图(ADM)法又称为双代号网络图法,它是以横线表示活动而以带编号的节点连接活动,活动间可以有一种逻辑关系,结束-开始型逻辑关系。
在箭线图中,有一些实际的逻辑关系无法表示,所以在箭线图中需要引入虚工作的概念。
关键路径法_关键路径法 -箭线图
关键路径法
箭线图(ADM)要表示的是一个项目的计划,所以其清晰的逻辑关系和良好的可读性是
非常重要的,除了箭线图(ADM)本身具有正确的逻辑性,良好的绘图习惯也是必要的。因此在绘图时遵守上面的这些规则就是非常重要的,另外,在绘图时,一般尽量使用直线和折线,在不可避免的情况下可以使用斜线,但是要注意逻辑方向的清晰性。
绘制箭线图时主要有以下一些规则:
⒈在箭线图(ADM)中不能出现回路。如上文所述,回路是逻辑上的错误,不符合实际的情况,而且会导致计算的死循环,所以这条规则是必须的要求。
⒉箭线图(ADM)一般要求从左向右绘制。这虽然不是必须的要求,但是符合人们阅读习惯,可以增加箭线图(ADM)的可读性。
⒊每一个节点都要编号,号码不一定要连续,但是不能重复,且按照前后顺序不断增大。这条规则有多方面的考虑,在手工绘图时,它能够增加图形的可读性和清晰性,另外,在使用计算机运行箭线图(ADM)这一条就非常重要,因为在计算机中一般通过计算节点的时间来确定各个活动的时间,所以节点编号不重复是必须的。
⒋一般编号不能连续,并且要预留一定的间隔。主要是为了在完成的箭线图(ADM)中可能需要增加活动,如果编号连续,新增加活动就不能满足编号由小到大的要求。
⒌表示活动的线条不一定要带箭头,但是为了表示的方便,一般推荐使用箭头。这一条主要是绘制箭线图(ADM)时可以增加箭线图(ADM)的可读性。
⒍一般要求双代号网络图要开始于一个节点,并且结束于一个节点。此要求可以在手工绘图增加可读性,而在计算机计算时,可以增加效率和结果的清晰性。
⒎在绘制网络图时,一般要求连线不能相交,在相交无法避免时,可以采用过桥法或者指向法等方法避免混淆。此要求主要是为了增加图形的可读性。
关键路径法_关键路径法 -起源
关键路径法(CPM)
关键路径法
关键路径法(CPM)最早出现于1956年,当时美国杜邦(Du Pont)公司拥有一台UNⅣAC 1 计算机,他们使用这台计算机进行他们公司几乎所有的数据处理工作,但是仍然还有大量的剩余时间,杜邦(Du Pont)公司的管理层开始研究计算机在其它方面使用的可能性,因为当时电脑的费用是非常高昂的,他们考虑工程计划可能是应用电脑的一个方向。
他们联系了雷明顿兰德(Remington Rand)公司的Macuchy 博士,帮他们解决计算机使用的问题,后者派出了年轻的数学家James E. Kelly去协助杜邦(Du Pont)公司解决问题,杜邦公司方面的负责人是Morgan Walker。
他们要解决的问题是在工程项目中工期和费用之间的关系,他们研究的是如何能够采取正确的措施,在减少工期的情况下能尽可能少的增加费用。1957年5月7日,在特拉华州内瓦克召开的一个会议正式确定开始新计划技术的开发。Kelly借用了线性规划的概念来解决项目计划自动计算的问题,简单的说就是确定了每个活动的工期和活动间的逻辑关系,输入电脑后就能自动计算项目的工期,为了电脑的计算,Kelly在活动间使用了i,j这样的节点来表示活动间的前后逻辑关系。
当时遇到的一个问题是,杜邦公司的管理层并不理解Kelly所使用的方法,为了让其他人能够理解所使用方法的原理,Kelly就绘制了图形来解释电脑所作的工作,图形以箭线表示活动,以节点表示活动间的逻辑关系,这就是最早的箭线图(ADM)。
关键路径法
前面提到过,Kelly和Walker最初研究的目的是为了解决项目中工期和费用之间关系的问题,所以在Kelly和Walker最初提出的方法中,也包括费用的计划方法,其做法是,在每个活动上加载其相应的费用,从而得到整个项目的费用,就能分析与进度相关的费用问题,这种做法与现用的方法没有太大差别。但在当时的情况下,项目收集费用并分解到各个活动上存在较大困难。所以,在之后的很长时期
内,关键路径法主要还是用于进度的计划和控制方面。Kelly和Walker还提出了资源加载和分配的方法,当然也存在和费用分析一样的问题。
算法简化
尽管存在这些问题,在1957年7月24日,他们已经做了一个简化的例子,称为”George Fischer Works”,这个计划包括了61条活动,其中有8个时间限制和16条虚工作。在刚开发出这种方法时,他们将这种方法称为Kelly-Walker法,而计划中的关键线路,他们称之为主链路(Main chain)。
关键路径法
根据Kelly和Walker的论文和其它相关书籍的记载,当时他们一共进行了三个试验对Kelly-Walker法进行检验。第一个试验是在1957年12月份,杜邦公司成立了一个测试小组对这种新的计划方法测试,有一个传统的计划组与他们同时独立对一个价值1000万美元的化学设备项目进行计划。这个测试小组的成员没有参与Kelly-Walker法的开发,但是在开始测试之前,他们接受40个小时的培训。此项目的计划从初步设计的完成开始,在编制计划时,他们首先将整个项目分解成一些较小的工作包,然后再将这些工作包最终分解成为活动,项目共有800条活动,其中包括400条施工活动,150条采购和设计活动。根据记载,在此项目中显示出的Kelly-Walker法的最大优势在于,此项目在实施中出现了较大的变更,相对于传统计划方法,使用Kelly-Walker法更容易更新计划,其工作量仅有最初建立计划的10%,另外,在设计信息只有30%的情况下,能够比较准确的预测劳动力,还有就是能够比较准确的识别关键的采购工作。
1958年,他们进行了第二次试验,此试验所针对的是一个价值2000万美元的化学设备项目,根据Kelly和Walker在1959年发表的论文,此次试验显示的最主要的优点是能够比较容易的包含设计部分的计划。
不过现在人们最常提及的一个试验是他们随后进行的维护设备的试验,在此项目中,他们使用Kelly-Walker法进行分析和计划,使得设备维护时间减少了25%。
培训和推广
1959年,Kelly和Walker共同发表了”Critical Path Planning and Scheduling” 论文,在这篇长达25页的论文中,Kelly和Walker不仅阐述了关键路径法的基本原理,还提出了资源分配与平衡,费用计划的方法。我们今天所使用的方法的原理,与Kelly和Walker在论文中提出的方法,并没有原则上的不同。
不过随后关键路径法的发展并不是很顺利,杜邦公司开发此项技术的领导层更换之后,不再使用这项技术,而雷明顿兰德公司也认为这项技术没有太大前途。
对于关键路径法的发展起到重要作用的是Mauchly博士和Kelly随后成立的Mauchly合伙公司。在60年代初期,在Kelly的带领下,此公司进行了大量的关键路径法的培训和推广工作。
与此同时,另外一个对关键路径法(CPM)的发展起到重要作用的是美国海军北极星计划开发的计划评审技术(PERT)。在1955年11月17日,美国海军北极星计划成立了一个特别项目管理办公室(SPO),管理其Fleet Ballistic Missile计划,负责人是Admiral Raborn。在1956年和1957年期间,他们研究了各种已经存在的项目管理技术,在大约1957年秋季的时候,他们接触到了杜邦公司开发的计划管理技术,这对他们开发PERT起到了重要的作用。1958年1月份,SPO研究了在计算机上实现计划和控制的可行性,1958年1月27日,SPO正式成立了一个小组开发PERT技术,在大约一年以后,PERT技术成为一种可操作性的技术,计划评审技术(PERT)和关键路径法(CPM)基本上一样,唯一的区别是计划评审技术的每个活动的工期不是确定的,而是包括了悲观值,乐观值和最有可能值三个值。比较有趣的是,1959年,北极星计划的这个特别项目管理办公室(SPO)开了一个招待会,介绍他们的这种新技术,并希望参会者能给出更多的意见,Kelly和Walker在被邀请之列,在会上,他们发现SPO开发的PERT和他们的Kelly-Walker法原理上完全一样,而SPO所说的关键线路(Critical Path),就是他们的Kelly-Walker法中的主链路(Main Chain)。回去之后,他们决定将它们的方法的名称改为关键路径法(Critical Path Method)。
应用
在60年代初期,PERT的发展比较迅速,据统计,到1964年,关于PERT的参考书目和论文达到了1000多种。到1961年,各种基于PERT的类似的方法出现,如PERT/Cost,PERT-RAMPS(Resource Allocation & Multi-Project Schedule),MAPS,SCANS,TOPS,PEP,TRACE,LESS和PAR等。其中PEP法是将甘特图的活动赋以逻辑关系,这是计划软件一般采用的一种图形输出方法。1962年的时候,时任美国国防部长MacNamara在起草一项法令时,指出计划评审法和关键路径法同时并存的局面容易引起混淆,以后国防部的所有部门一律使用计划评审法(PERT),这在当时对于关键路径法的提倡者是一个重大打击,不过在随后的发展中,关键路径法(CPM)逐渐占了优势,真正使用计划评审法的其实已经很少。而且即使是在当时,很多所谓的计划评审法(PERT),其实质其实是关键路径法(CPM)。如美国航空局(NASA)当时使用的NASA-PERT,实际就是关键路径法(CPM)。
无论是关键路径法(CPM)还是计划评审法(PERT),最初使用的表示方法都是箭线法(ADM),在之后很长的一段时间箭线法(ADM)都是人们主要使用的方法,直到70年代以后,前导图(PDM)才开始逐渐流行起来,但是箭线法(ADM)仍然使用极为广泛。在90年代以后,美国Primavera公司开发出其Windows版本的计划管理软件时,只采用前导图(PDM)作为其计算平台,从根本上改变了这一局面,从此以后,前导图(PDM)成了人们主要使用的方法,而箭线图(ADM)则很少使用。
前导图(PDM)的发展
在早期对于前导图(PDM)的发展起到重要作用的是美国斯坦福大学的John W. Fondahl,他是60年代初期的非计算机关键路径法的权威,1961年他发表了一篇题为”A Non-computer Approach to Critical Path Methods for the Construction Industry”,在这篇论文中,他阐述了前导图系统,并把它作为一种效率比较高的手工绘制关键路径法的方法,因为当时使用计算机运行CPM是非常昂贵的。Fondahl从1958年开始作为斯坦福大学的成员,受美国海军委托为其研究提高生产效率的方法。其中最主要的成果就是这份论文,这份论文当时一共出售了20000份。
在这份论文中,根据习惯使用的流程图方法,Fondahl提出了以节点表示活动以连接线表示活动间的逻辑关系。论文论述了流程图的简易性和使用手算在较少的人力投入下采用关键路径法的可能性,同时论文也论述了费用工期互为反比的问题。斯坦福大学之后继续研究了前导图(PDM)的手工进度更新的问题,并在1964年发表了相关的技术报告。
虽然Fondahl博士极力强调他提出的方法是为了手工计算关键路径法,但是H.B Zachry公司在1962年开始研究将前导图法用于计算机上,1963年3月他们与IBM公司联合进行该项研究,之后形成了IBM的计划软件,名为”Project Control System(PCS)”。该系统还是第一个在计划中引入时间间隔(LAG)的软件。虽然前导图法最初被应用于大型机,但是随后被广泛应用于小型机和个人电脑上的软件,这一趋势使得前导图(PDM)逐渐成为主要使用的方法,在国外前导图(PDM)基本已经成为唯一在使用的方法,而箭线图(ADM)只有在教学和培训中还有时用到。而发展势头曾一度压过关键路径法(CPM)的计划评审技术(PERT),正在使用的已经很少了。
在美国发展出关键路径法(CPM)和计划评审技术(PERT)的同时,其它一些国家如欧洲和英国等,也曾经开发出一些类似的项目管理技术,但是关于这些技术的记载已经很少。
关键路径法(CPM)最初被开发是用于项目管理,不过,在发展过程中,它逐渐在工程项目的合同索赔和纠纷解决上起到重要作用。最早在诉讼中涉及到要求使用关键路径法(CPM)是1972(Appeal of Minmar Builders,Inc,GSBCA No. 3430,72-2 BOA)年,在此案例中,法庭由于承包商没有使用关键路径法(CPM)而拒绝了承包商的索赔,因为其使用的横道图不能显示具体的活动是否在关键线路上,从而无法判断活动耽误对于整体的影响。之后,关键路径法(CPM)逐渐成为工期延误索赔中必须的做法,并逐渐形成了很多专门的分析方法,甚至有很多人专业从事工期延误分析的工作。
关键路径法_关键路径法 -时间参数
在关键路径法中,一般有以下一些时间参数:
最早开始时间(Early Start)活动最早开始时间由所有前置活动中最后一个最早结束时间确定。
最早结束时间(Early Finish)活动的最早结束时间由活动的最早开始时间加上其工期确定。
最迟结束时间(Late Finish)一个活动在不耽误整个项目的结束时间的情况下能够最迟结束的时间。它等于所有紧后工作中最早的一个最晚开始时间。
最迟开始时间(Late Start)一个活动在不耽误整个项目的结束时间的情况下能够最迟开始的时间。它等于活动的最迟结束时间减去活动的工期。
总时差(Total Float) 指一项活动在不影响整体计划工期的情况下最大的浮动时间。
自由时差(Free Float)指活动在不影响其紧后工作的最早开始时间的情况下可以浮动的时间。
如果是对于箭线图法,用到的时间参数还常有:
最早节点时间(Early Event Occurrence Time)最早节点时间由其前置活动中最晚的最早结束时间确定。
最迟节点时间(Late Event Occurrence Time)最迟节点时间由其后置活动中最早的最迟开始时间确定。
关键路径法_关键路径法 -时间计算
在进行计算时,箭线图和前导图的计算过程有所不同。
正推法
箭线图(ADM)的计算一般有正推法(Forward Pass)和逆推法(Backward Pass)两种,正推法用于计算活动和节点的最早时间,其算法如下:
关键路径法
⒈设置箭线图(ADM)中的第一个节点的时间,如设置为1。
⒉选择一个开始于第一个节点的活动开始进行计算。
⒊令活动最早开始时间等于其开始节点的最早时间。
⒋在选择的活动的最早开始时间上加上其工期,就是其最早结束时间。
⒌比较此活动的最早结束时间和此活动结束节点的最早时间。如果结束节点还没有设置时间,则此活动的最早结束时间就是该结束节点的最早时间;如果活动的结束时间比结束节点的最早时间大,则取此活动的最早结束时间作为节点的最早时间;如果此活动的最早结束时间小于其结束节点的最早时间,则保留此节点时间作为其最早时间。
⒍检查是否还有其它活动开始于此节点,如果有,则回到步骤3进行计算;如果没有,则进入下一个节点的计算,并回到步骤3开始,直到最后一个节点。
逆推法
活动和节点的最迟时间采用逆推法(Backward Pass)计算,逆推法(Backward Pass)一般从项目的最后一个活动开始计算,直到计算到第一个节点的时间为止,在逆推法的计算中,首先令最后一个节点的最迟时间等于其最早时间,然后开始计算,具体的计算步骤如下所示:
⒈设置最后一个节点的最迟时间,令其等于正推法计算出的最早时间。
⒉选择一个以此节点为结束节点的活动进行计算。
⒊令此活动的最迟结束时间等于此节点的最迟时间。
⒋从此活动的最迟结束时间中减去其工期,得到其最迟开始时间。
⒌比较此活动的最迟开始时间和其开始节点的最迟时间,如果开始节点还没有设置最迟时间,则将活动的最迟开始时间设置为此节点的最迟时间,如果活动的最迟开始时间早于节点的最迟时间,则将此活动的最迟开始时间设置为节点的最迟时间,如果活动的最迟开始时间迟于节点的最迟时间,则保留原节点的时间作为最迟时间
⒍检查是否还有其它活动以此节点为结束节点,如果有则进入第二步计算,如果没有则进入下一个节点,然后进入第二步计算,直至最后一个节点。
⒎第一个节点的最迟时间是本项目必须要开始的时间,假设取最后一个节点的最迟时间和最早时间相等,则其值应该等于1。
关键路径法_关键路径法 -公式计算
上面介绍了活动的最早和最迟时间的计算方法,以上的过程可以用比较简单的公式来表达。
节点计算法
上面所讲述的方法,我们一般称为节点计算法,节点和活动的最早时间按照正推法进行计算,起点节点未规定时间时,我们取其时间为1,即
ETi=1(i=1)
对于任意一个节点,如果其之前只有一条活动时,则其最早时间按照下式计算,
ETj= ETi+Di-j
关键路径法
如果该节点之前有多条活动时,则其最早时间按照下式计算,
ETj= max{ETi+Di-j}
其中Di-j为活动i-j的工期
对于活动的最早时间,最早开始时间为:
ESi-j=ETi
最早结束时间为
EFi-j= ESi-j+ Di-j
计划的总工期
T=ETn-1
节点和活动的最迟时间以逆推法计算,计算时,首先令最后一个节点的最迟时间等于其最早时间,即
LTn=ETn
对于其之后只有一条活动的节点,最迟时间如下式所示
LTi=LTj-Di-j
对于其之后有多条活动的节点,最迟时间如下式所示
LTj=min{ LTj-Di-j}
工作i-j的最迟完成时间以下式计算,
LFi-j=LTj
最迟开始时间为
LSi-j=LFj- Di-j
工作计算法
以上的算法是节点计算法,另外,也可以采用一种叫做工作计算法的方法进行活动时间的计算,具体如下。
对于最早时间,采用正推法计算。在没有指定节点的开始时间时,则起点开始活动的最早开始时间定为1,即
ESi-j=1
关键路径法
当工作i-j只有一条紧前工作h-i时,其最早开始时间按如下公式计算
ESi-j=ESh-i+ Dh-i
当工作i-j有多条紧前工作时,其最早开始时间按照以下公式计算
ESi-j=max {ESh-j+ Dh-i}
工作i-j的最早完成时间按照下式计算
EFi-j=ESi-j+ Di-j
网络计划的计算工期按照下式确定
T=max {EFi-n}-1
活动的最迟结束时间和最迟开始时间需要采用逆推法计算。
以终点节点为箭头节点的活动的最迟完成时间按照网络计划的工期确定,即
LFi-j=T+1
其它活动的最迟开始时间按照下式计算
LFi-j=min {LFj-k- Dj-k}
活动的最迟开始时间以下式确定
LSi-j=LFi-j- Di-j
对于总时差和自由时差可以采用如下的公式计算。
总时差可以按照下式计算:
TFi-j= LSi-j- ESi-j
或者
TFi-j= LFi-j- EFi-j
当工作i-j有紧后工作j-k时,自由时差可以按照下式计算:
FFi-j=ESi-k- ESi-j- Di-j
或者
FFi-j=ESj-k-EFi-j
由于引入了多种逻辑关系,前导图(PDM)的时间计算和箭线图(ADM)有一些差别。除了前导图(PDM)中不存在节点最早时间和最迟时间,在箭线图(ADM)中提及的其它时间参数也都适合前导图(PDM)。
正推法计算
对于活动的最早开始和最早结束时间,采用正推法计算,其算法如下所示:
⒈将第一个活动的最早开始时间设置为1.
⒉在活动的最早开始时间上加上其工期,得到活动的最早结束时间。
⒊根据该活动与后置活动的逻辑关系,计算后置活动应该的最早开始时间,并与其已有的最早开始时间对比,如果其后置活动还没有设置最早开始时间,则将此时间设为其最早开始时间,如果此时间早于其后置活动已有的最早开始时间,则保留后置活动的原有最早开始时间,如果此时间迟于其后置活动已有的最早开始时间,则将此时间设置为后置活动的最迟开始时间。
⒋重复步骤2和3,直到所有活动的时间被计算完为止。
对于以上所示的最早时间的计算过程,可以以公式的形式表示如下:
当活动间的逻辑关系为SS,则计算如下
ESj=max{ ESi+ STS}
当活动间的逻辑关系为FS,则计算如下
ESj= max{ESi+ Di+ FTS}
当活动间的逻辑关系为FF,计算如下
ESj= max{ESi+ Di- Dj+FTF}
当活动间的逻辑关系为SF,计算如下
ESj=max{ ESi- Dj+STF}
在计算出各个活动的最早开始和结束时间之后,就可以计算活动的自由时差,在计算前导图(PDM)的自由时差时应注意,由于引入了多种逻辑关系,并且活动间可以存在延时,所以其计算方法与箭线图(ADM)的计算方法不一样。
计算自由时差
对于前导图(PDM)的活动间,除了延时还可以存在时间间隔(LAG),一般可以按照下面的方式计算。
当活动间的逻辑关系为SS,则计算如下
LAGi-j= ESj- ESi- STS
当活动间的逻辑关系为FS,则计算如下
LAGi-j= ESj- EFi- FTS
当活动间的逻辑关系为FF,计算如下
LAGi-j= EFj- EFi- FTF
当活动间的逻辑关系为SF,计算如下
LAGi-j= EFj- ESi- STF
则对于任意一个活动,其自由时差为
FFi=min{ LAGi-j}
最后一个活动的自由时差为0.
对于总时差,终点节点的总时差为0,对于其它任意一个节点,总时差按照下式进行计算
TFi=min{TFj+ LAGi-j}
对于任意一个活动的最晚开始时间可以由其最早开始时间加上总时差得到,同样,其最晚开始时间可以由最早结束时间加上其总时差得到,公式表示如下
LSi=ESi+TFi
LFi=EFi+TFi