交互式图论学习
交互式图论学习
Guest User
Using app without sign in
第 1 章Graph Theory Foundations
第 2 章Exploring a Graph
第 3 章Shortest Paths
第 4 章Connecting Cheaply
第 5 章Hard Problems
第 6 章Network Flows
选择算法并生成步骤以开始可视化
PERT项目计划计算器
通过三种时间估计来处理任务工期的不确定性:乐观 (O)、最可能 (M) 和悲观 (P)。
选择算法并生成步骤以开始可视化
计划评审技术(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。
期望工期为 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 处在确定性排期与完整仿真之间。你需要多大的严谨程度,决定了该选哪一个。
| 替代算法 | 以下情况更合适 | 代价 |
|---|---|---|
| CPM | 工期依据经验已经相当清楚。更简单,而且那套不确定性机制也带不来什么。 | O(V + E) |
| 蒙特卡洛仿真 | 你需要可靠的概率。它避开了「只有一条关键路径」这一假设,也能处理相关的工期。 | O(次数·(V + E)) |
| RCPSP | 真正的约束是资源竞争而不是工期的不确定性。 | 指数级 |
| 关键链法 | 你想显式地管理缓冲,而不是把每一个估计值各自加水。 | O(V + E) |
相关算法: 关键路径法 (CPM), 资源受限项目调度 (RCPSP), 拓扑排序