求关键路径

求关键路径

1、重要概念

           1AOE (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表示a4a5活动已经完成,a7a8活动可以开始。每个弧上的权值表示完成相应活动所需要的时间,如完成活动a1需要6天,a8需要7天。

14、求关键路径 - 墨涵 - 墨涵天地

1

       AOE网常用于表示工程的计划或进度。由于实际工程只有一个开始点和一个结束点,因此AOE网存在唯一的入度为0的开始点(又称源点)和唯一的出度为0的结束点(又称汇点),例如图1AOE网从事件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]。如果活动a由弧<j,k>表示,其持续时间记为dut(<j,k>),则有如下关系:          
        e(i)=ve(j)
        l[i] = vl[k] – dut(<i, k>)

ve(j)vl(j)需分两步进行:

1

14、求关键路径 - 墨涵 - 墨涵天地

其中, T是所有以第j个顶点为头的弧的集合。

2

14、求关键路径 - 墨涵 - 墨涵天地

其中, S是所有以第i个顶点为尾的集合。

这两个递推公式的计算必须分别在拓扑有序及逆拓扑有序的前提下进行。也就是说,ve(j-1)必须在v的所在前驱的最早发生时间求得之后才能确定,而vl(j-1)则必须在v的所有后继的最迟发生时间求得之后才能确定。因此,可以在拓扑排序的基础上计算ve(j-1)vl(j-1)

2、需要说明的地方

1)上面的图1中的关键路径就为

14、求关键路径 - 墨涵 - 墨涵天地

2)影响关键活动的因素是多方面的,任何一项活动持续时间的改变都会影响关键路径的改变。关键活动的速度提高是有限度的,只有在不改变网的关键路径的情况下,提高关键活动的速度才有效。如果网中有几条关键路径,那么单是提高一条关键路径上的关键活动的速度,还不能导致整个工程缩短工期,而必须同时提高几条关键路径上的活动的速度。


更通俗地来理解:

 
在这种AOE网中, 最长的一条路径就是关键路径 ,因为图中每个活动都是必须的,只有最长的工期完成后,项目才真正完成了,图中10+9+20+10 也就是ADFHJ  ,显然是最长的,所以为关键路径

从左边开始每个活动所需要最长的时间就是 最早开始时间 ,如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。

在AOE网中,关键路径的步骤如下: 1. 首先,需要计算每个活动的最早开始时间ve(i)。从源点开始,逐个计算每个活动的最早开始时间,直到汇点。ve(i)的计算公式为:ve(i) = max{ve(j) + d(j,i)},其中j为活动i的前驱活动,d(j,i)为活动j到活动i的持续时间。 2. 接下来,需要计算每个活动的最迟开始时间vl(i)。从汇点开始,逐个计算每个活动的最迟开始时间,直到源点。vl(i)的计算公式为:vl(i) = min{vl(j) - d(i,j)},其中j为活动i的后继活动,d(i,j)为活动i到活动j的持续时间。 3. 然后,计算每个活动的最早完成时间e(i)。e(i)的计算公式为:e(i) = ve(i)。 4. 接着,计算每个活动的最迟完成时间l(i)。l(i)的计算公式为:l(i) = vl(i) - d(i),其中d(i)为活动i的持续时间。 5. 最后,计算每个活动的总浮动时间l(i) - e(i)。如果某个活动的总浮动时间为0,则该活动为关键活动。关键活动所在的路径即为关键路径。 需要注意的是,只有减少关键活动的时间才可能缩短工期,而且只有在不改变关键路径的前提下减少关键活动的时间才可能缩短工期。 #### 引用[.reference_title] - *1* [(数据结构)AOE网关键路径](https://blog.csdn.net/weixin_51609435/article/details/123817811)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [图的关键路径(AOE网络)](https://blog.csdn.net/m0_61433144/article/details/128730798)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值