关键路径 AOE:软考系统架构设计师进度网络图怎么算

图论课上找最短路找惯了,软考进度题一上来就栽:工期不是最短那条,是最长那条。

这篇是为软考系统架构设计师准备的进度网络图 / 关键路径复习笔记。和站内 DFD 考点梳理 同一套路:先把符号和直觉立住,再用同一道自拟例题把 AOE 的事件时间、活动六时标、虚活动一次算完。

软考里它到底考什么

综合知识、案例分析里都会撞上进度题,翻来覆去就这几问:

  • 关键路径是哪一条?总工期多少天?
  • 某个活动最早 / 最晚什么时候开、什么时候完?
  • 延误几天会不会拖总工期?能拖的余地(时差)是多少?
  • 双代号网络图里虚工作该不该画、画在哪?

题干常给一张「活动—紧前—工期」表,或者直接丢一张网络图。你会画、会算,比会背定义重要得多。

先分清:AOE、AOV,以及为什么是 DAG

进度建模里有两张常被混在一起的网:

AOE 用边表示活动、AOV 用顶点表示活动的对比示意

  • AOE(Activity On Edge):边是活动,边上的权是工期;顶点是事件(某批活动都做完了)。软考进度网络图、双代号网络图,本质上就是 AOE。
  • AOV(Activity On Vertex):顶点是活动,边只表示先后。适合拓扑排序、排课表,不直接用来累加工期

两张图都必须是 DAG(有向无环图)。有环就意味着「A 等 B、B 又等 A」,工程永远开不了工,拓扑排序也会失败。算关键路径之前,脑子里先确认:这是一张无环的依赖图。

关键路径是什么:人话版

项目里很多活动可以并行。真正决定「最早什么时候能收工」的,不是你跑得最快的那条支路,而是最拖后腿的那条依赖链

这条从开工事件到收工事件、路径权和最大的通路,就叫关键路径;路上的活动叫关键活动

两条并行支路汇合时,总工期由较长支路决定

几个立刻能用的推论:

  • 总工期 = 关键路径长度(不是最短路径)。
  • 关键活动延误一天,总工期通常就晚一天。
  • 非关键活动有缓冲(时差);缓冲没吃完之前,总工期不动。
  • 想压缩工期,得动关键路径上的活动;只砍非关键活动,总工期往往纹丝不动——有时还会冒出另一条新的关键路径。

贯穿例题:先把图画出来

下面这张活动表会贯穿全文。数字不大,方便手算;依赖里故意放了「多紧前」,方便后面讲虚活动。

活动紧前活动工期(天)
A2
BA3
CA4
DB2
EC、D1

画成 AOE:顶点是事件 V0…V5,边是活动。E 要等 C 和 D 都完,C 走下面、D 走上面,中间用一条工期为 0 的虚活动把两条支路并到 V4

贯穿例题的 AOE 网络图,含虚活动

读图口诀:圆圈是「某个时刻已经发生的事」,箭头是「正在干活」,箭头上的数字是「干多久」。

DAG 怎么算:四步走完

算法课写法是拓扑排序 + 正推 + 逆推;卷面上你只要记住口诀:顺推取大,逆推取小,时差为零便是主线。

flowchart LR A[确认 DAG / 画网络图] --> B[正向算 ve] B --> C[逆向算 vl] C --> D[算活动 e、l 与时差] D --> E[时差为 0 → 关键路径]

1. 事件最早发生时间 ve(正向)

ve(i):事件 i 最早能发生的时刻——所有指向它的活动都做完的最早时间。

  • 源点:ve(源) = 0
  • 其他:ve(j) = max{ ve(i) + 工期(i→j) }(多个前驱,取大

对本例:

  • ve(V0)=0
  • ve(V1)=0+2=2
  • ve(V2)=2+3=5
  • ve(V3)=2+4=6
  • ve(V4)=max(5+2, 6+0)=max(7,6)=7
  • ve(V5)=7+1=8

汇点的 ve 就是项目最短总工期:8 天

正向推演各事件的 ve 值

为什么是 max 不是 min?因为事件要发生,最慢的那条紧前活动也得做完。等齐了才能往下走。

2. 事件最迟发生时间 vl(逆向)

vl(i):事件 i 最迟必须发生的时刻——再晚,总工期就被拖住。

  • 汇点:vl(汇) = ve(汇)(计划工期等于计算工期时)
  • 其他:vl(i) = min{ vl(j) - 工期(i→j) }(多个后继,取小

对本例:

  • vl(V5)=8
  • vl(V4)=8-1=7
  • vl(V2)=7-2=5
  • vl(V3)=7-0=7
  • vl(V1)=min(5-3, 7-4)=min(2,3)=2
  • vl(V0)=2-2=0

逆向推演各事件的 vl 值

3. 活动的最早 / 最迟开始

<i,j> 表示活动,工期为 d

符号含义公式
e活动最早开始e = ve(i)
l活动最迟开始l = vl(j) - d
时差可延误而不拖总工期l - e

e = l(时差为 0)→ 关键活动。

本例算一遍:

活动el时差关键?
A000
B220
C231
D550
671
E770

4. 串起关键路径

关键活动串起来:A → B → D → E,长度 2+3+2+1=8,和 ve(V5) 一致。

红色高亮标出的关键路径 A-B-D-E

也可以从事件侧记:关键路径上每个事件都满足 ve = vl。本例里 V3ve=6vl=7,不相等,所以经过 C 的那条支路不是关键路径。

卷面更爱考的六时标

教材 / 真题里更常见的是直接对活动算六个数,不显式写 ve/vl。两套东西是同一件事的两种写法。

符号名字怎么算
ES最早开始无紧前则为 0;有紧前则取紧前 EF 的最大值
EF最早完成EF = ES + 工期
LF最迟完成无紧后则为总工期;有紧后则取紧后 LS 的最小值
LS最迟开始LS = LF - 工期
TF总时差TF = LS - ES = LF - EF(不影响总工期的最大延误)
FF自由时差FF = min(紧后 ES) - 本活动 EF(不影响紧后最早开始的最大延误)

同一例子用六时标再算一遍:

活动 A 到 E 的 ES EF LS LF TF 计算结果表

  • TF = 0 → 关键活动;全部关键活动串起来 → 关键路径。
  • 活动 C:TF = 1,最多延误 1 天还不拖总工期;若延误 2 天,总工期被拖 2-1=1 天。
  • 按活动表口径,C 的紧后是 E,FF = ES(E) - EF(C) = 7 - 6 = 1。本例 TF 与 FF 碰巧都是 1,不是定理——别把两者当成同一个数背。

若把虚活动也当成一条边来算,C 的紧后变成「虚 / 0」,FF(C)=0,那 1 天缓冲会记在虚活动的时差上。卷面给的是活动表时,按表上的紧后关系算即可,不必自己再拆一遍虚边。

铁律:ES 直接等于紧前 EF,不要加 1。
EF(A)=2 表示时刻 2 结束;B 立刻接着干,ES(B)=2。加 1 是把「时间点」误当成「自然日序号」,整张表会全错。

虚活动:只表逻辑,不占工期

双代号网络图里,虚箭线工期为 0、不消耗资源,只回答一件事:「必须等谁」

虚活动把 C 完成事件并入 V4 后再开始 E

本例若漏画 V3→V4 虚工作,E 的紧前关系就画残了,关键路径和总工期都会跟着错。选题时看到「某活动有多个紧前、且这些紧前没有自然汇到同一节点」,就要警惕虚工作。

练习题(先自己算,再对答案)

活动紧前工期
P3
QP2
RP5
SQ、R2
TS1

请回答:

  1. 关键路径是哪条?总工期几天?
  2. 活动 Q 的总时差是多少?
  3. 若 Q 延误 3 天,总工期会延长几天?
展开答案

顺推:

  • P:ES=0,EF=3
  • Q:ES=3,EF=5
  • R:ES=3,EF=8
  • S:ES=max(5,8)=8,EF=10
  • T:ES=10,EF=11 → 总工期 11

逆推:

  • T:LF=11,LS=10
  • S:LF=10,LS=8
  • R:LF=8,LS=3
  • Q:LF=8,LS=6
  • P:LF=min(LS_Q, LS_R)=min(6,3)=3,LS=0

TF:P=0,Q=6-3=3,R=0,S=0,T=0。

  1. 关键路径 P → R → S → T,总工期 11
  2. Q 的总时差 3
  3. Q 延误 3 天,刚好吃完时差,总工期延长 0 天;若延误 4 天,则延长 1 天

考场易错清单

  • 把关键路径当成最短路:工期是最长依赖链。
  • 顺推取了 min、逆推取了 max:口诀反了就全盘错。
  • ES = 紧前 EF 之后又加 1:软考按时间点算,不加 1。
  • TF 和 FF 混用:问「影响不影响总工期」看 TF;问「影响不影响紧后最早开始」看 FF。
  • 压缩非关键活动还以为总工期变了:先确认它是否仍在关键路径上;压缩后可能换线。
  • 漏画 / 画反虚工作:多紧前并点是重灾区。

结语

关键路径这考点,骨架就三句话:AOE 是带权 DAG;总工期是最长路径;顺推取大、逆推取小、时差为零就是主线。 六时标、虚活动、延误问答,都是围着这三句话转。

下次再碰到进度表,先别急着套公式——把图画对,标出最长那条链,后面的数基本会自己跳出来。进度管理在卷面上是计算题,落到项目里,其实是在问:你到底知不知道,此刻真正卡住整条线的是哪一环。

参考资料

  • 图 - AOE & 关键路径(pdai) — AOE / AOV 术语与四个时间参数关系
  • 数据结构教材中「AOE 网与关键路径」章节 — ve/vle/l 的标准递推写法
  • 软考进度管理中双代号网络图、总时差与自由时差的常规考法(与项目管理「六时标」同一套公式)

版权声明: 本文首发于 指尖魔法屋-关键路径 AOE:软考系统架构设计师进度网络图怎么算https://blog.thinkmoon.cn/post/1041-notes-aoe-critical-path/) 转载或引用必须申明原指尖魔法屋来源及源地址!