learngraphtheory.org

交互式图论学习

Guest User

Using app without sign in

图论,循序渐进

20 节课,163 分钟|英文、阿拉伯文和德文字幕

含一份任何人都可验证的证书预览
算法选择

选择算法并生成步骤以开始可视化

此算法需要有向图。 检查设置选项卡进行配置。

PERT计算器

PERT项目计划计算器

通过三种时间估计来处理任务工期的不确定性:乐观 (O)、最可能 (M) 和悲观 (P)。

时间: O(V + E)
空间: O(V)
用例: 在各项任务工期不确定时估算项目完成时间。
算法执行

选择算法并生成步骤以开始可视化

关于计划评审技术 (PERT)

计划评审技术(PERT)把关键路径分析扩展到不确定的活动工期。每个活动获得三个时间估计:乐观、最可能与悲观,据此推导期望工期和项目完工概率。

工作原理

每个活动的期望工期用贝塔分布公式(乐观 + 4 乘最可能 + 悲观)/ 6 计算,方差为 ((悲观 - 乐观) / 6) 的平方。随后用期望工期像 CPM 那样分析网络,沿关键路径的方差相加得到项目方差。正态近似把它转换为在任一目标日期前完工的概率。

应用场景

PERT 于 1958 年为美国海军北极星导弹项目创建,凡进度面临不确定之处皆可使用:研发、国防承包、新产品发布以及大型 IT 迁移。它教授概率如何叠加到基于图的规划模型之上。

伪代码

PERT 就是把不确定性接到 CPM 上。每项活动得到三个估计值而不是一个,它们先被浓缩成一个均值和一个方差,然后再执行常规的网络分析。

// 每项活动,由乐观 o、最可能 m、
// 悲观 p 得到(Beta 分布的近似):
te[a]  = (o + 4m + p) / 6          // 期望工期
var[a] = ((p - o) / 6)^2           // 方差

// 然后以 te 作为工期执行 CPM
用 te 跑正向与反向扫描
关键路径 = 时差为零的活动

// 项目层面的不确定性
E[T]   = 关键路径上 te 之和
Var[T] = 关键路径上 var 之和
z = (目标 - E[T]) / 根号(Var[T])
P(完工 <= 目标) = normalCDF(z)

最可能值上的权重 4 来自对 Beta 分布的近似,而该分布是偏斜的而非对称的,因此期望工期通常并不等于最可能工期。沿路径把方差相加依赖于中心极限定理,也依赖于「各活动工期相互独立」这一假设,而这恰恰是真实项目中最容易被违背的一条。

分步示例演算

把 PERT 用在与 CPM 相同的四活动项目上,只是现在改用三点估计而不是固定工期。

示例图: 各活动的乐观、最可能与悲观估计:A(2, 3, 4)、B(1, 2, 3)、C(2, 4, 6)、D(1, 2, 3)。依赖关系同前:A 与 B 先于 C,C 先于 D。

  1. 计算期望工期. A 得 (2 + 12 + 4) / 6 = 3。B 得 (1 + 8 + 3) / 6 = 2。C 得 (2 + 16 + 6) / 6 = 4。D 得 (1 + 8 + 3) / 6 = 2。它们与 CPM 例子中使用的固定工期一致,因此网络分析完全相同。
  2. 计算方差. A 为 ((4 - 2) / 6) 的平方 = 0.111。B 同样是 0.111。C 为 ((6 - 2) / 6) 的平方 = 0.444,是前者的四倍,因为它的估计区间宽了一倍。D 为 0.111。
  3. 执行网络分析. 用期望工期计算,关键路径是 A 到 C 到 D,期望项目工期为 3 + 4 + 2 = 9 天,与 CPM 完全一致。
  4. 沿关键路径累加方差. 方差合计为 0.111 + 0.444 + 0.111 = 0.667,因此标准差是它的平方根,约 0.82 天。请注意 C 一项就贡献了全部不确定性的三分之二。
  5. 回答一个概率问题. 对于 10 天这个目标,z = (10 - 9) / 0.82 = 1.22,而标准正态分布函数在 1.22 处约为 0.89。因此在 10 天内完工的概率大约是 89%。

期望工期为 9 天,标准差约 0.82,因此在第 10 天之前完工的把握大约是 89%。可付诸行动的结论是:活动 C 主导着风险,它贡献了三分之二的方差,因此收窄 C 的估计区间对提升进度把握的作用,胜过在 A、B 或 D 上做的任何工作。单靠 CPM 只能告诉你 C 是关键活动,却无法告诉你不确定性正藏在那里。

复杂度及其来源

时间: O(V + E) · 空间: O(V)

为每项活动计算期望工期和方差是每项常数级的工作,即 O(V)。网络分析与 CPM 一样是一次拓扑排序加两趟扫描,为 O(V + E)。概率计算只是对正态分布函数求一次值,是常数时间。因此 PERT 在渐进意义上与 CPM 代价相同,只多出一个很小的常数因子。PERT 真正的成本不在计算上,而在于为每项活动收集三个站得住脚的估计值,而不是一个。

何时使用计划评审技术 (PERT),何时不宜

PERT 处在确定性排期与完整仿真之间。你需要多大的严谨程度,决定了该选哪一个。

替代算法以下情况更合适代价
CPM工期依据经验已经相当清楚。更简单,而且那套不确定性机制也带不来什么。O(V + E)
蒙特卡洛仿真你需要可靠的概率。它避开了「只有一条关键路径」这一假设,也能处理相关的工期。O(次数·(V + E))
RCPSP真正的约束是资源竞争而不是工期的不确定性。指数级
关键链法你想显式地管理缓冲,而不是把每一个估计值各自加水。O(V + E)

常见陷阱

  • 只沿一条关键路径累加方差. 这是 PERT 最广为人知的弱点。当某条接近关键的路径方差很大时,一旦工期实际落定,它很容易变成真正最长的路径,因此项目的真实方差比 PERT 报出来的更大。于是 PERT 对进度把握的估计系统性地偏乐观。蒙特卡洛仿真没有这个毛病。
  • 把期望工期当成最可能工期. Beta 近似是偏斜的,因此 te 通常不等于 m。若估计值为 2、3 和 10,最可能值是 3,而期望工期却是 4。把众数当作均值来汇报会低估进度。
  • 假定各活动工期相互独立. 只有在相互独立时方差才能相加。实际中一个单一原因,比如关键人员离职或供应商出问题,会同时拖慢好几项活动,而这种相关的延误会使真实方差远大于各项之和。
  • 把正态近似用在很短的路径上. 中心极限定理需要足够多的活动才可信。在只有两三项活动的关键路径上,正态假设相当脆弱,由此得到的概率应当当作参考而不是精确值。
  • 收集到的三个估计并非独立判断. 如果乐观值与悲观值只是机械地取最可能值加减一个固定百分比,那么方差就不携带任何真实信息,PERT 也就退化成了多做一些算术的 CPM。

常见问题

什么是 PERT?
计划评审技术是一种处理工期不确定性的项目排期方法。每项活动给出乐观、最可能与悲观三个估计,它们被合成一个期望工期和一个方差。随后像 CPM 那样分析网络,而这些方差则给出在目标日期完工的概率。
PERT 的公式是什么?
期望工期为 (o + 4m + p) 除以 6,其中 o 是乐观、m 是最可能、p 是悲观。方差为 ((p - o) / 6) 的平方。最可能值上的权重 4 来自对 Beta 分布的近似,而该分布是偏斜的,因此期望工期通常与最可能工期并不相同。
PERT 与 CPM 有什么区别?
CPM 为每项活动使用固定工期,用来确定关键路径和时差。PERT 为每项活动使用三个估计以给出期望工期和方差,从而能说明某个目标完工日期有多大可能。网络分析本身完全一致;PERT 只是把期望工期喂给它,同时把不确定性一并带着走。
在 PERT 中如何计算按时完工的概率?
把关键路径上的期望工期相加得到项目期望工期,再把同一条路径上的方差相加得到项目方差。然后用目标日期减去期望工期、除以标准差算出 z,最后查标准正态分布函数在 z 处的值。在上面的例子中,期望 9 天、标准差 0.82、目标 10 天,结果约为 89%。
PERT 的主要局限有哪些?
它只沿一条关键路径累加方差,因此方差很大的接近关键路径被忽略,把握程度被系统性高估。它假定各活动工期相互独立,而现实中相关的延误会违背这一点。它还依赖正态近似,当关键路径上活动很少时这一近似相当脆弱。蒙特卡洛仿真能同时应对这三点。

相关算法: 关键路径法 (CPM), 资源受限项目调度 (RCPSP), 拓扑排序

交互式控制
基本操作
• 双击 → 添加节点
• 拖拽 → 移动节点
• Shift + 点击 → 连接节点
• 右键点击 → 上下文菜单
高级
• Ctrl + 点击 → 多选
• 删除键 → 删除选中项
• 双击边 → 编辑权重
• Ctrl + 拖拽 → 平移视图

Zoom Controls

100%
节点: 4
边: 4