求关键路径
1、重要概念
(1)AOE (Activity On Edges)网络 如果在无有向环的带权有向图中用有向边表示一个工程中的各项活动(Activity),用边上的权值表示活动的持续时间(Duration),用顶点表示事件(Event),则这样的有向图叫做用边表示活动的网络,简称AOE (Activity On Edges)网络。AOE网是一个带权的有向无环图。
AOE网络在某些工程估算方面非常有用。例如,可以使人们了解:
a、完成整个工程至少需要多少时间(假设网络中没有环)?
b、为缩短完成工程所需的时间, 应当加快哪些活动?
(2)关键路径(Critical Path) 在AOE网络中, 有些活动顺序进行,有些活动并行进行。从源点到各个顶点,以至从源点到汇点的有向路径可能不止一条。这些路径的长度也可能不同。完成不同路径的活动所需的时间虽然不同,但只有各条路径上所有活动都完成了,整个工程才算完成。因此,完成整个工程所需的时间取决于从源点到汇点的最长路径长度,即在这条路径上所有活动的持续时间之和。这条路径长度最长的路径就叫做关键路径(Critical Path)。
如果一个活动的最早开始时间等于它的最迟开始时间,那么这个活动就被称为是关键活动,关键活动连接在一起就是关键路径。
如图1就是一个AOE网,该网中有11个活动和9个事件。每个事件表示在它之前的活动已经完成,在它之后的活动可以开始。如事件v5表示a4和a5活动已经完成,a7和a8活动可以开始。每个弧上的权值表示完成相应活动所需要的时间,如完成活动a1需要6天,a8需要7天。
图1
AOE网常用于表示工程的计划或进度。由于实际工程只有一个开始点和一个结束点,因此AOE网存在唯一的入度为0的开始点(又称源点)和唯一的出度为0的结束点(又称汇点),例如图1的AOE网从事件v1开始,以事件v9结束。同时AOE网应当是无环的。
(3)算法描述中要用到的几个表达
e(i)表示活动ai的最早开始时间,l(i)表示活动ai的最迟开始时间; l(i)-e(i)表示完成活动的时间余量。事件vi 的最早开始时间表示为ve(i), 事件vi 的最迟允许开始时间vl(i)。
l[k] = e[k]的活动就是关键活动。为求得e[k]与l[k],需要先求得从源点v0到各个顶点vi 的 ve[i] 和 vl[i]。如果活动ai 由弧<j,k>表示,其持续时间记为dut(<j,k>),则有如下关系:
e(i)=ve(j)
l[i] = vl[k] – dut(<i, k>)
求ve(j)和vl(j)需分两步进行:
(1)
其中, T是所有以第j个顶点为头的弧的集合。
(2)
其中, S是所有以第i个顶点为尾的集合。
这两个递推公式的计算必须分别在拓扑有序及逆拓扑有序的前提下进行。也就是说,ve(j-1)必须在vj 的所在前驱的最早发生时间求得之后才能确定,而vl(j-1)则必须在vj 的所有后继的最迟发生时间求得之后才能确定。因此,可以在拓扑排序的基础上计算ve(j-1)和vl(j-1)。
2、需要说明的地方
(1)上面的图1中的关键路径就为
(2)影响关键活动的因素是多方面的,任何一项活动持续时间的改变都会影响关键路径的改变。关键活动的速度提高是有限度的,只有在不改变网的关键路径的情况下,提高关键活动的速度才有效。如果网中有几条关键路径,那么单是提高一条关键路径上的关键活动的速度,还不能导致整个工程缩短工期,而必须同时提高几条关键路径上的活动的速度。
更通俗地来理解:
从左边开始每个活动所需要最长的时间就是 最早开始时间 ,如C,只有A指向它,那么最早开始时间就是5;F, A->C->F
5+4=9, A->D->F 10+9=19,两者比较,后者大,故19为最早开始时间,依次类推。
从右边倒推,可以求的 最迟开始时间, 如J为49,以I为例,I->J 倒推 49-4=45 所以I最迟开始时间为45;H为例,H->J 倒推49-10=39,H->I->J 倒推 49-4-1=44,两者取最小的,所以H的最迟开始时间为39。