Ve事件的最早发生时间
最早发生时间是由最长路径决定的,
结点是事件,边是活动,一个事件C被两个活动a、b所指向,a活动耗时3、b活动耗时5,则c事件最早要耗时5才能发生,因为事件C发生的前提是a、b两活动完成(可同时进行)。
事件最早发生时间=max{目标顶点的所有前提顶点的最早完成时间,对应的前提结点到目标顶点的活动消耗}(上图中C的前提顶点为A、B)
Ve(c )=max{A的最早完成时间+A到C的消耗(a(3)),B的最早完成时间+B到C的活动消耗(b(5))}
递推公式如下:
1、ve(源点)=0
2、ve(k)=max{ve{j},weight(j,k)},j为k的任意前提结点,weight(j,k)表示<j,k>上的权值
Vl事件的最迟发生事件
在不推迟整个工程完成的情况下,保证后继事件j能在其最迟发生时间vl(j)能够发生时,该时间必须发生。
首先,汇点的最迟发生时间就是它的最早发生时间(汇点的最早发生时间就是工期),所以求Vl的过程是从汇点倒推回去的。
为什么会有最迟发生时间呢?
在一个工程中,通常会存在某条路径耗时比其他路径久的多,所以耗时短的时间可以不必太早发生,有多余的缓冲时间。
D是汇点,110是D事件的最早发生时间也是最迟发生事件。
如果在110天内工程必须完成,那么A事件最迟要在什么事件发生呢?
我们可以用110减去A到D的消耗(活动a(5)),得到105,也就是说A事件最迟可以在第105天发生,因为A一旦在第105完成就要立马执行活动a(5),否则整个工期就会延后。指向A的活动最迟发生事件为100,可以在第100天开始。
而事件A最早可以在第5天就发生(最早第5天就完成了),但是可以推迟到第105天完成(最迟发生事件)
同理事件B的最迟发生事件是10,超过第10天发生工期就会延迟,最早也是在第10天发生。
图中添加了一个顶点C,它是B顶点的前提,最迟发生时间用绿色表示,最早发生时间用红色表示。
则事件C的最迟发生时间为多少呢?
事件C的顶点有两个出度,也就意味影响两个后继顶点。如果用110-10得100,B顶点的发生前提是C顶点要发生,如果C在第100天发生,那么事件B发生要110天,事件D最早发生时间要120天,推迟了整个工期。
正确算法是事件B的最迟发生时间减去4得到6。一个顶点的最迟发生时间其实是由它的后继结点锁决定的,所以要从汇点往起点到推。找离C最近的结点,C的后继结点。
在上述例子中C有两个选择,第6天或者第100天,必须选择最小的才能不耽误后继结点的最迟发生。
递推公式:
1、vl(汇点)=ve(汇点)
2、vl(k)=min{vl(j)-weight(k,j)},k为j的前驱结点
活动最早开始时间–e
开始是针对活动,也就是图中的边。活动的开始时间,边的事件一旦发生就立刻开始,就是最早开始时间了。
公式:e(i)=ve(k),边<k,j>表示活动i,k为以ai为出度的结点
活动最迟开始时间–l
假如你9点上班,坐车要2个小时,那么最晚为7点上班。
活动最迟开始时间=边所指向的事件最晚发生事件-边对应的活动所需要的时间
公式:l(i)=vl(j)-weight(k,j),边<k,j>表示活动i,j表示以ai为入度的结点
时间余量d
活动最迟时间与最早开始是时间的差额,代表活动可以拖延时间,如果一个活动的时间余量为0,则表示该活动不能拖延时间,为关键活动,必须完成否则会拖延整个工期。
时间余量=活动最迟开始时间-活动最早开始时间
公式:d(i)=l(i)-e(i)
练习题
注意
- 关键路径上的活动都是关键活动,是决定整个工程的关键因素,因此可以可以通过加快关键活动来缩短整个工期,但是也不能随意缩短,因为一旦缩短到一定的程度,该关键活动就可能变成了非关键活动。
- 图中的关键活动不唯一,对于有好几条关键路径的图,只能加快其中某一条关键路径活动并不能缩短工期,只有加快所有关键路径上的关键活动才能缩短工期。