news 2026/4/15 18:23:46

Gantt 图和 PERT 图是软件工程中用于项目进度管理的两种重要图形化工具,各有侧重,适用于不同场景

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Gantt 图和 PERT 图是软件工程中用于项目进度管理的两种重要图形化工具,各有侧重,适用于不同场景

Gantt 图和 PERT 图是软件工程中用于项目进度管理的两种重要图形化工具,各有侧重,适用于不同场景。

Gantt 图(甘特图)是一种以时间为横轴、任务为纵轴的水平条形图。每个条形代表一个任务,其长度对应任务的持续时间,位置反映任务的开始与结束时间。通过颜色区分(如绿色表示已完成,灰色表示未完成),可直观展示各任务的进展情况以及任务之间的并行关系。例如,在图 5-12 中,任务 1 从 1 月持续到 6 月,任务 2 从 2 月到 10 月,任务 3 从 7 月到 11 月,可以看出任务 2 与任务 1 和任务 3 均存在重叠,并行执行。但 Gantt 图的主要局限在于无法明确表达任务之间的依赖关系(如任务 3 是否必须等待任务 1 完成才能开始),因此难以识别关键路径。

PERT 图(计划评审技术图)则是一种有向图,其中箭头表示任务(边上标注预计耗时),节点表示“事件”——即某个任务的完成或下一个任务的开始。每个事件有两个时间属性:最早时刻(该事件可发生的最早时间)和最迟时刻(该事件必须发生的时间,否则会影响总工期)。通过计算路径上所有任务的总耗时,可以找出项目的“关键路径”,即决定项目最短完成时间的最长路径。关键路径上的任何延迟都会直接导致整个项目延期。这使得 PERT 图在复杂项目中尤为重要,能够帮助管理者优化资源分配、识别重点监控任务。

相较而言,Gantt 图更注重可视化表达,适合向团队成员或非技术人员展示进度;而 PERT 图强调逻辑关系与时间分析,更适合项目经理进行工期预测与风险控制。

# 示例:简化版 Gantt 图任务表示(仅数据结构示意)tasks_gantt=[{"name":"任务1","start":1,"end":6,"status":"completed"},{"name":"任务2","start":2,"end":10,"status":"in_progress"},{"name":"任务3","start":7,"end":11,"status":"not_started"}]# 示例:简化版 PERT 路径计算(假设任务序列)defcalculate_pert_path(paths):returnmax(sum(times)fortimesinpaths)paths=[[3,4],# 任务A->任务B:共7个月[2,3,4],# 任务C->任务D->任务E:共9个月(关键路径)[5,3]# 任务F->任务G:共8个月]print("项目最短工期(关键路径):",calculate_pert_path(paths),"个月")

计算 PERT 图中每个事件的最早时刻和最迟时刻是识别关键路径、进行项目工期分析的核心步骤。具体分为两个阶段:前向遍历计算最早时刻后向遍历计算最迟时刻


1.最早时刻(Earliest Time, ET)

表示从项目开始到该事件可能发生的最早时间

  • 计算方式:从前向后(从起点到终点)逐个节点计算。
  • 公式:
    ET(j)=max⁡{ET(i)+tij} ET(j) = \max\{ET(i) + t_{ij}\}ET(j)=max{ET(i)+tij}
    即:事件 j 的最早时刻 = 所有指向 j 的任务中,“前驱事件最早时刻 + 对应任务耗时” 的最大值。
  • 起点设置:起始事件的 $ ET = 0 $

2.最迟时刻(Latest Time, LT)

表示该事件必须发生的时间,否则会影响整个项目的完成时间。

  • 计算方式:从后向前(从终点到起点)反向推导。
  • 公式:
    LT(i)=min⁡{LT(j)−tij} LT(i) = \min\{LT(j) - t_{ij}\}LT(i)=min{LT(j)tij}
    即:事件 i 的最迟时刻 = 所有由 i 发出的任务中,“后继事件最迟时刻 - 当前任务耗时”的最小值。
  • 终点设置:终点事件的 $ LT = ET $(即等于其最早时刻,保证项目按时完成)

3.示例说明

假设有以下任务关系:

任务前序事件后续事件耗时
A3
B4
C5
D2

构造 PERT 图节点为 ①→②→③→④,其中 ② 分支出 B 和 C,最终汇合于 ④。

步骤一:计算最早时刻(前向)
  • $ ET(①) = 0 $
  • $ ET(②) = ET(①) + 3 = 3 $
  • $ ET(③) = ET(②) + 4 = 7 $
  • $ ET(④) = \max(ET(②)+5, ET(③)+2) = \max(8, 9) = 9 $

→ 项目最早完成时间为9

步骤二:计算最迟时刻(后向)
  • $ LT(④) = ET(④) = 9 $
  • $ LT(③) = LT(④) - 2 = 7 $
  • $ LT(②) = \min(LT(③)-4, LT(④)-5) = \min(3, 4) = 3 $
  • $ LT(①) = LT(②) - 3 = 0 $
结果表:
事件最早时刻最迟时刻
00
33
77
99

→ 若某事件满足 $ ET = LT $,则它在关键路径上。本例中所有节点都相等 → 关键路径为 ①→②→③→④,总工期 9。

# Python 示例:简化版最早/最迟时刻计算(基于邻接表)fromcollectionsimportdefaultdictdefcompute_earliest_times(graph,start):et={start:0}visited=set()defdfs(u):ifuinvisited:returnvisited.add(u)forv,tingraph.get(u,[]):ifvnotinetoret[v]<et[u]+t:et[v]=et[u]+t dfs(v)dfs(start)returnetdefcompute_latest_times(graph_rev,et,end):lt={end:et[end]}queue=[end]whilequeue:u=queue.pop(0)forv,tingraph_rev.get(u,[]):ifvnotinltorlt[v]>lt[u]-t:lt[v]=lt[u]-tifvnotinqueue:queue.append(v)returnlt

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/28 23:08:08

连锁门店管理系统对比解析,助力标准化运营与效率提升

连锁门店经营之际&#xff0c;管理者常遇系列复杂挑战&#xff0c;库存数据不透明致使断货或者积压&#xff0c;各分店销售情形无法实时同步&#xff0c;会员信息分散于不同渠道&#xff0c;促销活动难以统一施行&#xff0c;这些痛点不但影响运营效率&#xff0c;而且直接限制…

作者头像 李华
网站建设 2026/4/8 18:13:13

django-flask基于python的电竞赛事报名裁判管理系统

目录 Django-Flask 电竞赛事管理系统摘要 关于博主开发技术路线相关技术介绍核心代码参考示例结论源码lw获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01; Django-Flask 电竞赛事管理系统摘要 该系统基于Python技术栈&#xff0c;采用Django与Fl…

作者头像 李华
网站建设 2026/4/14 21:15:03

大模型备案:常见驳回原因与优化经验分享

近年来&#xff0c;随着大模型在各行业的深入应用&#xff0c;备案已成为服务合规上线的重要环节。在协助多家企业完成大模型备案的过程中&#xff0c;我们积累了丰富的实战经验。2025年以来&#xff0c;备案要求更为细致&#xff0c;但核心依然围绕“真实、合规、完整、规范”…

作者头像 李华
网站建设 2026/4/8 10:11:24

毕设实战:基于多尺度空洞注意力(MSDA)的YOLOv8改进与视觉识别优化

文章目录 毕设实战:基于多尺度空洞注意力(MSDA)的YOLOv8改进与视觉识别优化 一、技术背景与方案优势 二、环境搭建与依赖准备 2.1 虚拟环境配置 2.2 数据集准备 三、MSDA模块的代码实现 3.1 多尺度空洞注意力(MSDA)核心代码 3.2 嵌入MSDA到YOLOv8的Backbone 四、模型训练与…

作者头像 李华