关键路径法的代码
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
关键路径法(Critical Path Method,CPM)是一种项目管理技术,用于计算项目中各个任务的最早开始时间、最晚开始时间以及确定哪些任务是决定整个项目完成时间的关键任务。
以下是一个使用Python实现的简单关键路径法的例子:
Python
1import networkx as nx
2
3# 创建一个有向无环图(DAG),节点代表任务,边代表任务间的依赖关系
4G = nx.DiGraph()
5
6# 添加任务及其所需时间
7G.add_node('A', duration=3)
8G.add_node('B', duration=4)
9G.add_node('C', duration=2)
10G.add_node('D', duration=1)
11G.add_node('E', duration=5)
12G.add_node('F', duration=2)
13
14# 添加任务间的依赖关系及对应边的权重(此处假设为0,实际上可以为空或者表示并行开始的时间间隔)
15G.add_edge('A', 'B', weight=0)
16G.add_edge('A', 'C', weight=0)
17G.add_edge('B', 'D', weight=0)
18G.add_edge('C', 'D', weight=0)
19G.add_edge('C', 'E', weight=0)
20G.add_edge('D', 'F', weight=0)
21G.add_edge('E', 'F', weight=0)
22
23# 计算每个节点的最早开始时间和最晚开始时间
24for node in G:
25if node == 'Start':
26G.nodes[node]['early_start'] = 0
27else:
28predecessors = [pred for pred in G.predecessors(node)]
29early_starts = [G.nodes[pred]['early_start'] + G.edges[pred, node]['weight'] for pred in predecessors]
30G.nodes[node]['early_start'] = max(early_starts)
31
32for node in reversed(G.nodes):
33if node == 'End':
34continue
35successors = [succ for succ in G.successors(node)]
36latest_ends = [G.nodes[succ]['early_start'] - G.nodes[node]['duration'] for succ in successors]
37G.nodes[node]['latest_start'] = max(latest_ends) if latest_ends else0
38
39# 找出所有最早开始时间等于最晚开始时间的任务,这些就是关键路径上的任务
40critical_tasks = [node for node in G.nodes if G.nodes[node]['early_start'] ==
G.nodes[node]['latest_start']]
41
42print("关键路径上的任务:", critical_tasks)
在这个代码中,我们首先创建了一个表示任务和依赖关系的有向无环图(DAG)。
然后,我们遍历每个节点,根据其前驱节点的最早完成时间来计算它的最早开始时间。
接着,我们反向遍历每个节点,根据其后继节点的最早开始时间来计算它的最晚开始时间。
最后,找出那些最早开始时间等于最晚开始时间的任务,这些任务就构成了关键路径。
注意:此代码示例仅为基础逻辑实现,实际项目中可能需要处理更复杂的情况,例如多个结束节点、浮动时间等。