项目关键路径CPM与进度压缩分析器|工程效率工具
这个工具解决什么问题
这类需求往往不值得上系统,但值得写个脚本。
非标项目、产线改造、新设备导入往往任务多、依赖杂,项目经理凭经验排程容易高估工期或漏掉瓶颈。本工具用经典 CPM(关键路径法)把一张任务网络正推逆推一遍,立刻标出哪条链决定总工期、哪些任务有浮动可以挪用。更进一步,它能在关键路径上按「赶工单价最低优先」的原则逐天压缩,输出把总工期压到目标值所需的最小费用,以及每轮压缩的费用累积;同时按天累加人力,找出超过上限的超载日并给出错峰建议。让进度决策从拍脑袋变成有数字支撑的方案对比。
输入数据格式
数据文件 project_tasks.csv,列顺序为:task_id、task_name、duration_days、predecessors、crash_days、crash_cost_per_day、headcount。
示例首行:A,需求与方案确认,3,,0,0,2
示例输出(真实运行结果节选)
============================================================================== 项目关键路径(CPM)与进度压缩分析报告 生成时间:2026-10-02 09:54 ============================================================================== 【一、任务进度参数表】 共 15 个任务,正常总工期 29 天 任务 名称 工期 ES EF LS LF 总浮动 自由浮动关键 A 需求与方案确认 3 0 3 0 3 0 0 是 B 设备选型与采购 5 3 8 3 8 0 0 是 C 厂房基建施工 4 3 7 8 12 5 0 否 D 公用动力配接 4 3 7 12 16 9 0 否 E 核心设备进场安装 6 8 14 8 14 0 0 是 F 辅助系统布线 3 7 10 12 15 5 0 否 G 二次配工程 3 7 10 16 19 9 0 否 H 设备调试与联调 4 14 18 14 18 0 0 是 I 辅助系统调试 3 10 13 15 18 5 5 否 J 动力系统试运行 3 10 13 19 22 9 0 否 K 工艺参数标定 5 18 23 18 23 0 0 是 L 动力验收 2 13 15 22 24 9 0 否 N 量产爬坡准备 4 23 27 23 27 0 0 是 M 辅助区域验收 3
一句话
输入任务清单与紧前关系,自动算关键路径、总浮动、每日人力峰值,并给出把工期压到目标值的最小赶工费用方案。
运行环境与快速开始
纯 Python 标准库,无需安装任何第三方包,Python 3.8+ 即可。
cd 09_项目关键路径CPM与进度压缩分析器 python project_cpm.py
首次运行若目录下没有示例 CSV,会用固定种子自动生成一份带真实感的项目数据并直接分析;之后若想换自己的数据,把 project_tasks.csv 改成你的任务表再运行即可。控制台会打印完整中文报告,同时写入 示例输出报告.txt(UTF-8)。
输入数据格式
project_tasks.csv 各列含义如下: · task_id:任务编号,建议用 A/B/C 或 T01 这类短标识,且作为紧前引用的主键。 · task_name:任务名称,仅用于报告展示。 · duration_days:正常工期(天),正整数。 · predecessors:紧前任务编号,多个用分号 ; 或竖线 | 分隔;首任务(无紧前)留空。 · crash_days:该任务最多可压缩的天数,0 表示不可赶工。 · crash_cost_per_day:每压缩 1 天新增的赶工费用(元)。 · headcount:该任务投入人数,用于累加每日人力需求。
输出说明
1. 任务进度参数表:含正常工期、ES/EF/LS/LF、总浮动、自由浮动与是否关键。 2. 关键路径:逐条列出 TF==0 的任务链及总工期(支持多条并行关键链)。 3. 每日人力需求与超载:峰值天数与超载日清单,并给出顺延浮动任务的错峰建议。 4. 进度压缩方案表:每压缩 1 轮的被压任务、当轮与累计费用、压缩后工期。 5. 目标工期达成情况与总赶工费用;若压不到则说明还差几天。 6. 结论与风险提示:含压缩后关键路径是否转移的判断。
算法口径(关键公式)
· 正推:ES = max(紧前 EF),EF = ES + duration;项目工期 = max(EF)。 · 逆推:LF = min(紧后 LS)(无紧后者 LF = 项目工期),LS = LF - duration。 · 总浮动 TF = LS - ES;自由浮动 FF = min(紧后 ES) - EF(无紧后者 FF = 项目工期 - EF)。 · 关键路径:所有 TF == 0 任务构成的链。 · 压缩:在关键路径上反复选取 crash_cost_per_day 最低且仍可压缩的任务压 1 天,每轮重算关键路径,直至达到目标工期或无任务可压。 · 资源:按天累加各任务人数为每日人力需求,超过 headcount_limit 记为超载日。
参数与调整点
CONFIG = { "seed": 42, # 固定随机种子,保证示例可复现 "headcount_limit": 12, # 每日人力上限,超过即记为超载 "target_offset": 6, # 目标工期 = 原工期 - 此值 }
常见误判与注意事项
1. 别把「单任务 TF==0」直接当关键路径:关键路径是 TF==0 的整条任务链,孤立看会漏掉并行链与分支汇合点。 2. 别压非关键任务:只有关键路径上的压缩才缩短总工期,压非关键任务只是吃掉它自己的浮动,白花费用。 3. 别忽视赶工单价:应优先压 crash_cost_per_day 最低的关键任务,否则总费用虚高。 4. 人力超载要看时点而非只看均值:峰值往往集中在某些天,应顺延有浮动的非关键任务错峰,而非盲目加人。
附赠
配套 AI 提示词见 附赠提示词.txt,可直接用于让大模型辅助拆解你的真实项目任务网络。
可调参数与计算口径
脚本顶部集中了主要阈值与常量:CONFIG={、CSV_NAME="project_tasks.csv"、REPORT_NAME="示例输出报告.txt"。改完直接重跑即可,不必改动计算逻辑。
会生成哪些文件
运行后除控制台输出外,还会生成:project_tasks.csv、示例输出报告.txt。
工具中出现的字段与提示
- 需求与方案确认
- 设备选型与采购
- 厂房基建施工
- 公用动力配接
- 核心设备进场安装
- 辅助系统布线
- 二次配工程
- 设备调试与联调
- 辅助系统调试
- 动力系统试运行
- 工艺参数标定
- 动力验收
- 辅助区域验收
- 量产爬坡准备
- 项目竣工验收
- 任务 {0} 的紧前任务 {1} 不存在
- 检测到任务网络存在环,无法进行拓扑排序,请检查紧前关系
- 项目关键路径(CPM)与进度压缩分析报告
其余字段以界面与示例报告为准。
下载与文件清单
压缩包内包含:主程序脚本、示例数据文件、示例输出报告、中文说明文档,以及同主题 AI 提示词一套。解压后按说明运行即可,示例数据可直接试跑。
主程序文件:project_cpm.py。
本站工具免费下载,无需注册。工具为 Python 脚本,Python 3.8 及以上环境可直接运行,核心功能尽量不依赖第三方库。
常见问题
输入数据要准备成什么样?
按 示例首行中的列顺序准备即可,共 7 列:task_id、task_name、duration_days、predecessors、crash_days、crash_cost_per_day、headcount。列为空或格式不符时结果会失真,建议先用示例数据试跑一遍。
跑完最该关注哪几项?
报告按 一、任务进度参数表、二、关键路径、三、每日人力需求与超载、四、进度压缩方案、五、目标工期达成情况 等部分组织,其中判定结论与建议部分直接对应下一步动作。
阈值可以改成我们自己的标准吗?
可以,脚本顶部已把主要阈值与常量集中声明,按自己产线的标准修改后重跑即可,不需要改计算逻辑。
附赠的提示词怎么用?
把提示词与自己的数据一起交给大模型,可以让它按同一套口径帮你改写分析流程或扩展报告字段。





