7.6.2 用边表示活动的网络AOE
问题的提出
把工程计划表示为有向图,用顶点表示事件,弧表示活动;每个事件表示在它之前的活动已完成,在它之后的活动可以开始。
【例】设一个工程有11项活动,9个事件事件。V1——表示整个工程开始事件,V9——表示整个工程结束。
问题:(1)完成整项工程至少需要多少时间?
(2)哪些活动是影响工程进度的关键?
相关定义
- 边表示活动 activity on edge,AOE
有向边表示一个工程中的各项活动,边上的权值表示活动持续的时间(duration)。
顶点表示事件(event),事件的发生说明在它之前的活动已完成,而在它之后的活动可以开始。 - 源点:没有入边的点;汇点:没有出边的点。
一个工程可能有多个源点,但AOE网络中只能有一个源点和一个汇点。 - 从源点到汇点可能有多条有向路径,路径上各活动所需时间之和叫该路径的路径长度。(路径上各活动持续时间之和)
- 具有最大路径长度的路径叫做关键路径,上图的关键路径有a1,a4,a7,a10 和a1,a4,a8,a11,它们的路径长度均为18。
- 关键路径上的所有活动都叫做关键活动,对上图的AOE,关键活动是a1,a4,a7,a8,a10,a11。
关键活动上持续时间的变化可能影响整个工程的工期。任意一个关键活动延迟,整个工期都会延迟;反之,任意一个关键活动缩短,整个工期会缩短。 - Ve(j)——表示事件Vj的最早发生时间,是从源点V0到顶点Vj的最长路径长度。Ve[j]决定了以顶点Vj为弧尾的弧所代表的活动可以开始的最早时间。
- Vl(j)——表示事件Vj的最迟发生时间,是工程按期完成情况下Vj的最迟允许开始时间。
- e(i)——表示活动ai的最早开始时间,设ai是在<Vk,Vj>上,e[i]是从源点到Vk的最长路径长度,故e[i]=Ve[k]。
- l(i)——表示活动ai的最迟开始时间,是工程按期完成情况下ai的最迟允许开始时间。设ai在<Vk,Vj>上,并且aj的持续时间为dur(<k,j>),l[i]=Vl[j]-dur(<k,j>)。
- l(i)-e(i)——表示完成活动ai的时间余量(松弛时间)。是活动ai的最迟允许开始时间和最早可能开始时间之差(l[i]-e[i])。
- 关键活动——关键路径上的活动,即*l(i)=e(i)*的活动。
求关键路径的方法
- 求解AOE顶点的拓扑排序序列
(1)按拓扑序列次序,从V0开始求各事件的Ve[ i ]
求Ve[i]的递推公式:从Ve[0]-0开始,向前递推,Ve[ j ]=Max{ Ve[ i ] + dur(<i 、j>) | <Vi、Vj>∈T },j=1,2,……,n-1;其中,T是所有以顶点Vj为弧头的弧<Vi、Vj>的集合。
(2)按逆拓扑序列次序,从Vn-1开始求各事件的Vl[ i ]
求Vl[i]的递推公式:从Vl[n-1]=Ve[n-1]开始,反向递推,Vl[ i ]=Min{ Vl[ j ]-dur(<i、j>) | <Vi、Vj>∈T },i=0,1,2,……,n-2;其中,T是所有以顶点Vi为弧尾的弧<Vi、Vj>的集合。
(3)设活动ak(k=1,2,…,e