1. 前言
在介绍秒杀法之前,先了解一下项目进度网络图时间参数,主要包括这些参数:各项工作的最早开始时间ES、最迟开始时间LS、最早完成时间EF、最迟完成时间LF、各项工作的自由时差FF和总时差TF、工期T以及确定关键线路等 [1] 。计算各项参数目的在于为工程索赔、相关时间的调整、项目进度网络图的优化提供依据。因此,项目进度网络图的时间参数的计算和关键线路的确定尤其重要。相对而言,目前对项目进度网络图时间参数的研究比较多的是标号法和节点法,先对每—个节点进行标号,然后利用标号值确定项目进度网络图的计算工期和关键线路 [2] ,比传统的图上法在确定计算工期和关键线路上更快捷,但只是停留在计算工期和关键线路上,其它时间参数的计算并没作进一步研究。传统的计算法,计算时间参数时,过程繁杂,且计算各项工作的自由时差和总时差时与工作的最后时间有关联性,一旦最后时间算错,会引起链锁反应,后面自由时差和总时差全错。因此,研究一种简便、快捷的方法尤为重要,称之为秒杀法,本为主要以双代号网络图为例介绍这种方法。
2. 秒杀法
(一) 定义
秒杀法是借鉴双代号时标网络的思想,在节点法和标号法的基础上,经过改进的一种极速寻求项目进度网络图中各工作的最早开始时间、自由时差、计算工期和关键线路的方法,称为时标化法。由于计算时间之极速,简称秒杀法。按五步口决法:“累加时间取最大定点、减小定波、定房、定线、定总时差”进行计算。
(二) 计算步骤
第一步:定点,从左往右算,累加时间取最大。在每个节点处取值 = max(紧前节点处的值 + 以箭头指向该节点的工作的持续时间),箭头指向如图1:工作、箭头及节点图所示。注:紧前节点指箭头指向该节点的工作其箭尾处节点。实际上,每个节点处取值 = max(进入该节点的之前所有线路上每个工作持续时间累加求和),其节点取值bj按式(1)进行计算,将该值标于节点之上,称为定点。节点上标注的最
Figure 1. Work, arrow and node diagrams
图1. 工作、箭头及节点图
大值即为以该节点为完成节点的工作的最早开始时间(ES),按式(2)进行计算。注意:起始节点的取值b1的最早开始时间其默认值为0 (
)。
,
(1)
(2)
式中,bj为欲求节点的取值,bi为bj的紧前节点,
为节点i和节点j所代表工作(i~j工作)的持续时间,
为以j节点为开始节点工作的最早开始时间。
第二步:定波,减小定波。此过程为双代号网络图进行时标化的过程。定点时,如果出现多条箭线指向该节点,会有多个累加时间,分别用累加时间最大值(标注在节点上的最大值) − 其余各个累加时间较小值 = 每条箭线对应工作的自由时差(FF)。为什么用累加时间最大值分别减去其余累加时间较小值得到的是每条箭线对应工作的自由时差呢?因为,定点时,累加时间得到的节点较小值是箭头指该节点的工作M的最早完成时间
,而在该节点处取了最大值,这个大值对应的是以该节点为开始节点的紧后工作的最早开始时间,其工作的自由时差(FF) = 其紧后工作的ES − 本工作的EF [1] ,其计算式如式(3)所示。然后,在每条差值大于0的箭线上画一条波浪线,称之为定波。并将上述得到的差值标注在每条的波浪线下面,称之为波形线值,这样一眼便能识别出以该节点为完成节点对应工作的自由时差。此时,将双代号网络图时标化了,转换成类似于双代时标网络图了。
(3)
式中,
为欲求工作的自由时差,
为工作i~j的紧后工作(即以j节点为开始节点的工作)的最早开始时间,
为工作i~j的最早完成时间。
第三步,定房。继续第二步,从左往右计算,以此类推,计算至终点节点,终点节点取累加时间最大值,将得到的最大值标于终点节点之上,并用一方框将标于终点节点之上的最大值框住,称之为定房,得到的该值为该网络计划项目的计算工期TC,其计算式如式(4)所示。
(4)
式中,TC为欲求项目进度网络图计算工期,b终为项目进度网络图终点节点处的最大取值。
第四步,定线。注意,前面三步是从左往右,沿着箭线的方向计算,到第四步,应从右往左,逆向箭线的方向查找,没有出现波形线的线路为关键线路 [1] (包括用虚线表示的虚工作),称为定线。
第五步,计算总时差。上面四步只完成了各项工作的最早开始时间、自由时差、关键线路,那其余各项参数又该如何计算呢?欲求各项工作的最迟开始时间(LS)和最迟完成时间(LF),必须先求该工作的总时差(TF)。因为,各项工作LS = ES (最早开始时间) + TF,各项工作LF = LS (最迟开始时间) + 该工作的持续时间 [1] 。由上述可知,第五步须先求出各工作的总时差(TF),各工作的其他时间参数(最迟开始、最迟完成)就迎刃而解了。求各项工作的总时差 = min(各项工作自身的波形线值 + 通过该工作的后续所有线路上各个波形线值之和) = 本工作自身的自由时差 + min(紧后工作的总时差),其计算式如式(5)所示。注意:在项目进度网络图中,箭头指向终点节点的所有工作及关键线路上的关键工作的总时差与自由时差相等。而且,当计划工期与计算工期相等时,关键工作的自由时差和总时差均为零 [3] 。利用上面几点,可以先求出关键线路上的每项工作的总时差。
(5)
式中,
为欲求工作的总时差,
为欲求工作的自由时差,
为欲求工作的所有紧后工作的总时差。
第六步:各项工作的总时差求出后,可根据需求计算各项工作的最早完成时间(EF)、最迟开始时间(LS)和最迟完成时间(LF):① 各项工作的最早完成时间(EF) = 各项工作的ES + 本工作的持续时间 [1] ,其计算式如式(6)所示。② 各项工作的最迟开始时间(LS) = ES (最早开始时间) + TF (总时差),其计算式如式(7)所示;各项工作的最迟完成时间(LF) = LS (最迟开始时间) + 该工作的持续时间 [1] ,其计算式如式(8)所示。这样就完成了双代号网络图各大时间参数的计算和关键线路的确定工作。
(6)
(7)
(8)
式中,
为欲求工作的最早完成时间,
为欲求工作的最迟开始时间,
为欲求工作的最迟完成时间,Di−j为欲求工作的持续时间。
如果需验算各时间参数计算是否准确,只需利用各项工作:
即可,如果各项工作的
说明计算无误,如果
需要核算。
3. 秒杀法的应用案例
下面以一个相对复杂的建造师考试双代号网络图真题为例,来介绍如何用“秒杀法”计算双代号网络图的时间参数和确定关键线路。网络图如下图2:双代号网络图所示。
前三步计算过程:
1) 从①节点开始,由于①节点b1为本工作计划网络图的起始节点,其默认为
。工作A、B、C的最早开始时间
。进入②节点的只有一条箭线,由①节点进入,因此,②节点的取值
,将3标于②节点之上,即工作F、D的最早开始时间为
。
2) 进入③节点的同样也只有一条箭线,由①节点进入,因此,③节点的取值
,将4标于③节点之上,即工作I、E的
。
3) 以此类推,注意进入④节点的有3条箭线,其中两条为虚箭线,由于虚工作的持续时间为0。④节点取值
,G、H的
,定点完成。此时,需进行第二步定波,由于指向④节点的有3条箭线,分别是虚工作D、E和工作B,而
,
,
。因此,虚工作D的自由时差
;同理,
虚工作
。将波形线画于D、E的箭线上,并将2和1标于D、E的波形线上;另外,B没有波形线,说明其自由时差为0。定波完成,一眼就能识别出工作B、D、E的自由时差。
4) 进入⑤的只有一条箭线,由④节点进入,因此⑤节点取值 = 5 + 6 = 11,将11标于⑤节点之上,即工作J、K、M的最早开始时间
。
5) 以此类推,计算⑥节点的取值。注意进入⑥节点的有3条箭线,分别计算⑥节点累加值,⑥节点之上取最大值
,即工作L的
,定点完成。再进行第二步定波,由于指向⑥节点的有3条箭线,分别是虚工作J和工作F、G,因此,得到工作F的自由时差
;同理,工作G的
;将波形线画于F、G的箭线上,并将4和3标于F、G箭线的波形线上。当然,
。定波完成。
6) 再看⑦节点,进入⑦节点的有2条箭线,⑦节点之上取值
,即工作N的
,定点。再进行定波,由于进入⑦节点的两条箭线的取值都是最大值11,说明虚工作K和工作I的自由时差均为0。
7) 最后看终点节点,⑧节点之上取值
,最大值19 = 计算工期TC。将数值19标于⑧节点之上,并用方框框住19,这样,第三步定房完成。注意,由于指向⑧节点的有3条箭线,分别是工作L、M、N,同理,计算出
,
,
;将波形线画于M、N的箭线上,并将数值3和2标于M、N箭线的波形线上。工作L的
,没有波形线,定波完成。这样所有工作的最早开始时间和自由时差计算完成。
第四步,定线,即查找关键线路。按从右往左,沿着逆箭线的方向查找,无波形线的所有箭线的连线即为该项目进度网络图工作计划的关键线路。上图所示项目进度网络图的关键线路为①→④→⑤→⑥→⑧。以上四步是关键,缺一不可。各项工作计算结果如图3:各项工作节点、自由时差、关键线路图所示。
第五步,求总时差,工作A的总时差 = min(A工作自身的波形线值 + 通过A工作的后续所有线路上波形线值之和),工作A自身无波形线(即
)。其后续线路有5条线路:后续线路工作F、L所有波形线值之和 = 4 + 0 = 4;后续线路工作D、G、L所有波形线值之和 = 2 + 3 = 5;后续线路工作D、G、L所有波形线值之和 = 3 + 3 = 6;后续线工作路D、H、J、L所有波形线值之和 = 2;后续线路工作D、H、M所有波形线值之和 = 2;后续线路工作D、H、K、N所有波形线值之和 = 2 + 2 = 4,对上述波形线值之和取最小 = 2,则工作A总时差 = 0 + 2 = 2。同理,求工作G的总时差,由于通过工作G的后续线路只有工作L的箭线(无波,
,波形线值0),工作G自身的波形线值为3 (即
),则G
Figure 3. Work nodes, free time difference, key circuit diagrams
图3. 各项工作节点、自由时差、关键线路图
工作的总时差 = 0 + 3 = 3;再比如工作M、N与L一样,都是以终点⑧节点为工作的完成节点,工作M、N、L的
工作M、N、L的
。工作M、N也可以这样来检验前面的计算工作是否有误:N工作的总时差 = min(N工作自身的波形线值 + 通过N工作的后续所有线路上波形线值之和),N工作自身的波形线值是2,后续没线路了,因此,N工作的总时差 = 2,此时,如果计算的总时差与前面的2不相等,说明计算过程出现了错误情形,需检查核验。
最后,根据需要来求其他时间参数,比如现已知G工作的最早开始时间 = 5,G工作的自由时差 = 3,G工作的总时差 = 3,则G工作的最迟开始时间 = 3 + 5 = 8,G工作的最迟完成时间 = 8 + 3 = 11。各项工作计算结果如图4:各项工作6大时间参数及关键线路图所示。
Figure 4. Six time parameters and key circuit diagrams for each work
图4. 各项工作6大时间参数及关键线路图
同时,本方法也适用于单代号网络图时间参数的计算。计算单代号网络图时,累加持续时间取最大值同样还是各工作的最早开始时间,只是在第二步定波时,确定的是相邻两项工作的时间间隔LAG,相邻两项工作的时间间隔LAG = 用秒杀法计算双代号网络图时的波形线值,再求各工作自由时差 = min(该工作与其紧后工作之间的所有时间间隔LAG),总时差 = min[该工作的各个紧后工作的总时差(TF) +该工作与其紧后各工作之间的时间间隔LAG] [4] 。确定关键线路时,同样还是逆箭线方向,所有时间间隔LAG为0的工作的连线组成的线路为关键线路。其它参数的计算方法原理与双代号网络图相同,在这里不再累赘。
4. 对传统计算方法的改革
传统的图上计算法、节点法、标号法,第一步沿箭线方向计算,从起始节点一个一个的向终点节点算起,算最早开始时间ES,累加取最大;但第二步,往往是计算最早完成时间
,第三步,逆箭线方向计算最迟完成时间,从终点节点一个一个的向起始节点算起。然后,再利用口诀:迟开减早开或迟完减早完=总时差(
)。最后,再利用口诀:紧后早开减本早完 = 本工作的自由时差(
)。其计算顺序最早时间→最迟时间→总时差→自由时差。由上面可知,所有的节点都被计算过两次。再研究计算顺序,不难发现,计算最迟时间时,逆向箭线后面的所有工作都与本工作的最迟(最迟开始和最迟完成)时间发生关联,一环套一环,只要出现一项工作的最迟时间计算错误,不仅仅会引起自身工作的总时差出现错误,也会引起后面所有工作的最迟时间、总时差产生错误,相当于发生链琐反应,蝴蝶效应,这也是为什么传统的计算方法繁琐,易出错,检查起来也费时,费劲。以图2所示的H工作为例,检查时,发现
,两种计算方法不相等,只能重新开始,再一步一步从网络图的起始节点到终点节点检查最早时间有没有计算错误,再从终点节点到起始节点看最迟时间有没有计算错误,相当于要将所有节点的时间参数再重新算一遍,这样增加了大量的工作,消耗了很多宝贵的考试时间。
秒杀法从计算步骤来看,在第二步定波时,首先,打破传统的第二步计算:最早完成时间,而是直接先计算出各工作的自由时差,并将自由时差值波形线值标于网络图和箭线上,进行时标化过程,这样便一眼就能识读出各项工作的自由时差。同时,各项工作的总时差按双代号时标网络图的原理:逆向箭线方向由各工作自身的自由时差与后续所有线路上各工作的自由时差之和取最小得到。先找到所有经过该工作的后续线路,直接逆向箭线从终点节点看向本工作,加各条波形线值相加即可,将总时差的计算转变成简单的加减运算。其次,各工作的最迟时间(最迟开始时间和最迟完成时间)反过来由各工作的总时差推算得出。整个计算过程节点的计算只进行了一次,计算顺序与逻辑关系按:最早开始时间→由自由时差→总时差→最迟时间(最迟开始时间、最迟完成时间),层层递进的过程,虽然层层递进,但各工作又有相对独立性,即使是中间有些过程计算出现错误,也便于检查,加以改正。例如利用工作最迟完成时间 = 工作的最早完成时间 + 总时差 = 工作最迟开始时间+持续时间进行验算时,如果在计算中用上述两种计算方法检查发现最迟完成时间两者不等,这就说明计算有误,先看该工作的最早开始时间有没有计算错误,发现有误直接纠正;如计算无误,再检查工作的总时差是否有误,检查方法按总时差
进行,如果发现计算有误及时纠正,再次循环回去检查最迟时间是否相等;如果按上述方法检查总时差计算也无误时,这时就需检查其相关联(其自身工作及后续所有线路上各工作)的自由时差是否计算错误,再进行纠正,没必要所有工作都进行纠正,也很容易找到错误之处。同样以图2中的H工作为例,
,先看H工作的最早开始时间
是否有误,有误及时纠正;如果无误,再看H工作的总时差有误否,有误及时纠正;如果发现无误,这时就需看H的所有后续线路的工作的自由时差,最后发现将N工作的自由时差计算成
,应该是
,纠正,最后再检查核算无误。
秒杀法其核心就是将传统计算法在后面进行计算的自由时差和总时差提前进行运算,首先进行时标化过程,转换成时标网络图的形式(不完全是时标网络图,只是意思表达),由自由时差和总时差反推最迟时间,而有别于非传统方法:由最迟时间正推自由时差和总时差。
5. 结束语
计算项目进度网络图所有时间参数,需按上面七步来完成。前二步定点、定线是相互穿插进行,第一步,定点后,第二步就需立即定线,判定各工作的自由时差。前三步计算方向:从左往右,沿着箭线方向,从起始节点往终点节点的工作方向计算;第四步,从右往左从,逆箭线方向,以终点节点为完成节点的工作向以起始节点为开始节点的工作方向计算。所有工作的自由时差计算完成后,就可进行总时差计算。
需要说明的一点,所有时间参数计算基础是计划工期(TP)等于计算工期(TC),当计划工期与计算工期不等时,只需在前面求出的各项工作的最迟开始时间(LS)、最迟完成时间(LF)和总时差(TF)这3个参数的基础上加上计划工期(TP)与计算工期(TC)的差值即可。另外,在项目进度网络图中,箭头指向终点节点的工作的自由时差也应加上计划工期(TP)与计算工期(TC)的差值。那么,最早开始时间、最早完成时间及自由时差(箭头指向终点节点的工作除外)的数值与计划工期(TP)等于计算工期时相同,数值保持不变。还是以图2所示网络图为例,各项工作计算结果如下图5:需加差值的时间参数图所示,图中红色部分即为需加计划工期(TP)与计算工期(TC)的差值。
Figure 5. Time parameter diagram with additional difference
图5. 需加差值的时间参数图
秒杀法是经过多年国家注册工程师考试和教学归纳总结出的一种最为简单快捷的方法,是对标号法和节点法的进一步简化和升华,其特点:精、准、快,只需简单的加减运算,小学生水平都能完成项目进度网络图时间参数计算和关键线路确定,并能快速应对索赔中某工作的总时差的计算,达到了登峰造极的地步,到目前为止,可以说计算项目进度网络图中没有哪种方法比秒杀法更为精准、快捷和简便了。