AOE关键路径步骤+例题

一、 基本概念

在带权有向图中,以顶点表示事件,以有向边表示活动,以边上的权值表示完成该活动的开销(如完成活动所需的时间),称之为用边表示活动的网络,简称AOE网(Activity On Edge NetWork)

AOE网具有以下两个性质

  1. 只有在某顶点所代表的事件发生后,从该顶点出发的各有向边所代表的活动才能开始;
  2. 只有在进入某顶点的各有向边所代表的活动都已结束时,该顶点所代表的事件才能发生
    另外,有些活动是可以并行进行的

在AOE网中仅有一个入度为0的顶点,称为开始顶点(源点),它表示整个工程的开始;也仅有一个出度为0的顶点,称为结束顶点(汇点),它表示整个工程的结束。

从源点到汇点的有向路径可能有多条,所有路径中,具有最大路径长度的路径称为
关键路径,而把关键路径上的活动称为关键活动

完成整个工程的最短时间就是关键路径的长度
eg1.
在这里插入图片描述
图中,源点为V1,汇点为V4。从V1到V4有两条路径,2更长。故2为关键路径。长度为6


1.1 ve(k),e(i),vl(k),l(i)的定义

事件 v k v_k vk(结点)的最早发生时间设为 v e ( k ) ve(k) ve(k)。只有指向该结点的所有活动 a i a_i ai都完成后,才可发生事件 v k v_k vk

活动 a i a_i ai(边)的最早开始时间设为 e ( i ) e(i) e(i)。只有活动的弧头的时事件完成后,才可进行活动 a i a_i ai

事件 v k v_k vk最迟发生时间 v l ( k ) vl(k) vl(k)。它是指在不推迟整个工程完成的前提下,该事件最迟必须发生的时间。

活动 a i a_i ai最迟开始时间 l ( i ) l(i) l(i)。它是指该活动弧的终点所表示事件 v k v_k vk的最迟发生时间 v l ( k ) vl(k) vl(k)与该活动所需时间 a ( i ) a(i) a(i)之差。

活动 a i a_i ai的时间余量 d ( i ) = l ( i ) − e ( i ) d(i)=l(i)-e(i) d(i)=l(i)e(i),表示在不增加完成整个工程所需总时间的情况下,活动 a i a_i ai,可以拖延的时间。
若一个活动的时间余量为零,则说明该活动必须要如期完成, d ( i ) = 0 d(i)=0 d(i)=0 l ( i ) = e ( i ) l(i)=e(i) l(i)=e(i)的活动 a i a_i ai是关键活动

二、例题

在这里插入图片描述

  1. 求最早发生时间
01234
ve(k)0146
e(i)0014

e(i)通过ve(k)得出

  1. 若必须在6分钟之后结束
    求各个事件和活动的最迟发生时间
01234
vl(k)0146
l(i)2014

三、求关键路径的步骤

思路:通过 d ( i ) = 0 d(i)=0 d(i)=0求得关键活动
d ( i ) = 0 d(i)=0 d(i)=0通过求ve()…等四个量得出
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

3.1关键活动、关键路径的特性

  • 若关键活动耗时增加,则整个工程的工期将增长
  • 缩短关键活动的时间,可以缩短整个工程的工期
  • 当缩短到一定程度时,关键活动可能会变成非关键活动
  • 可能有多条关键路径,只提高一条关键路径上的关键活动速度并不能缩短整个工程的工期。只有加快那些包括在所有关键路径上的关键话动才能达到缩短工期的目的。
### AOE网络的概念 AOE (Activity On Edge) 网络是一种带权有向无环图(DAG, Directed Acyclic Graph),用于表示工程项目的进度安排。它由顶点和边组成,其中顶点代表事件,而边则表示活动及其持续时间。通过分析这种网络,可以找到关键路径以及整个项目完成所需的最少时间。 #### 关键术语解释 - **顶点**:表示事件,通常是一个活动的结束或者另一个活动的开始。 - **边**:表示具体的活动,每条边上附有一个权重,该权重代表此活动所需的时间长度。 - **源点**:入度为零的节点,即没有任何前置条件即可启动的任务集合所对应的起点。 - **汇点**:出度为零的节点,意味着所有前导任务都已完成的位置。 - **关键路径**:从源到汇最长的一条路径,这条路径决定了整个项目的最短工期[^1]。 #### 如何求解关键路径? 为了找出AOE网中的关键路径,需先计算两个重要的参数——最早发生时间和最迟发生时间: 1. **ve[k]** 表示事件vk允许发生的最早时刻; 2. **vl[k]** 则指明了不推迟后续工作前提下,事件vk能够延迟至的最后一刻; 对于任意一条弧<vi,vj>而言, 其早开工时间为 e(i)= ve[i]; 晚完工时间为 l(i)= vl[j]- w(<i,j>) ; 当且仅当e(i)==l(i),说明这个作业位于关键路线上[^3]。 以下是基于上述理论的一个简单伪代码实现来寻找关键路径: ```python def find_critical_path(graph): n = len(graph) # 初始化距离数组 dist = [-float('inf')] * n path = [[] for _ in range(n)] topo_order = topological_sort(graph) # 设置起始点的距离为0 start_node = get_start_node(topo_order) dist[start_node] = 0 path[start_node].append(start_node) # 动态规划更新各节点的最大到达时间 for u in topo_order: for v, weight in graph[u]: if dist[v] < dist[u] + weight: dist[v] = dist[u] + weight path[v] = list(path[u]) path[v].append(v) end_node = get_end_node(topo_order) return path[end_node], dist[end_node] # 假设存在辅助函数获取拓扑序列、起点终点编号等操作... ``` 以上程序片段展示了如何利用拓扑排序配合动态规划技术去发现给定AOE图表里的关键路径[^2]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

快苏排序OAO

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值