Python使用NetworkX绘制时标网络图并计算时间参数

本文将介绍如何使用Python的NetworkX库绘制时标网络图,并计算以下时间参数:

  • 最早开始时间(ES)- 最早完成时间(EF)- 最晚开始时间(LS)- 最晚完成时间(LF)- 总时差(SLACK)

**代码示例:**pythonimport networkx as nximport matplotlib.pyplot as plt

创建有向图G = nx.DiGraph()

添加节点和边edges = [('a', 'b'), ('b', 'c'), ('c', 'd'), ('d', 'e'), ('e', 'f'), ('f', 'g'), ('g', 'h'), ('h', 'i'), ('i', 'j')]for edge in edges: G.add_edge(edge[0], edge[1])

设置节点位置pos = {'a': (0, 2), 'b': (1, 3), 'c': (2, 2), 'd': (3, 3), 'e': (4, 2), 'f': (5, 3), 'g': (6, 2), 'h': (7, 3), 'i': (8, 2), 'j': (9, 3)}

绘制时标网络图plt.figure(figsize=(10, 5))nx.draw_networkx(G, pos, with_labels=True, node_size=500, node_color='lightblue', font_size=12, font_color='black')nx.draw_networkx_edges(G, pos, edge_color='gray', arrows=True)plt.title('时标网络图')plt.axis('off')plt.show()

计算时间参数es = nx.algorithms.dag.lexicographical_topological_sort(G) # 最早开始时间ef = nx.algorithms.dag.dag_longest_path_length(G) # 最早完成时间ls = list(reversed(list(nx.algorithms.dag.topological_sort(G)))) # 最晚开始时间lf = nx.algorithms.dag.dag_longest_path_length(G, reverse=True) # 最晚完成时间

print('节点的最早开始时间(ES):', dict(zip(G.nodes, es)))print('节点的最早完成时间(EF):', ef)print('节点的最晚开始时间(LS):', dict(zip(G.nodes, ls)))print('节点的最晚完成时间(LF):', lf)print('节点的总时差(SLACK):', {node: lf - ef for node in G.nodes})

代码说明:

  1. 导入库: 导入networkxmatplotlib.pyplot库。2. 创建有向图: 使用nx.DiGraph()创建一个有向图对象。3. 添加节点和边: 定义边列表,并使用add_edge()方法将节点和边添加到图中。4. 设置节点位置: 定义节点坐标,用于绘制图形时的布局。5. 绘制时标网络图: 使用nx.draw_networkx()nx.draw_networkx_edges()绘制图形,并设置节点、边和标签的样式。6. 计算时间参数: 使用nx.algorithms.dag模块中的函数计算最早开始时间、最早完成时间、最晚开始时间、最晚完成时间。7. 打印结果: 将计算得到的时间参数打印输出。

注意:

  • 本代码需要安装networkxmatplotlib库,可以使用pip install networkx matplotlib命令安装。 - 可以根据实际情况修改节点、边、位置等参数,以生成不同的时标网络图。
Python使用NetworkX绘制时标网络图并计算时间参数

原文地址: http://www.cveoy.top/t/topic/pqw 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录