【发布时间】:2020-12-08 20:09:56
【问题描述】:
我正在尝试使用 Networkx 制作甘特图。网络中的所有节点都是完成项目需要执行的“任务”。使用 Networkx 可以轻松计算项目的总时间。但是制作甘特图我需要每个节点的最新开始。
NetworkX 包含一个函数(dag_longest_path_length),但这会计算整个网络中最长的路径。另一个函数(astar_path_length)导致源和节点之间的最短路径,但没有可用的函数给出最长的路径,或者在我的情况下是最新的开始。 (如果一个节点作为两个前置节点,它将采取最快的路线,但实际上它也必须等待第二个才能启动。
我正在考虑一种选择。 评估先前连接的节点并选择最长的路径。非正式我没有成功。
start_time=[]
time=0
DD=nx.DiGraph()
for i in range(df.shape[0]):
DD.add_edge(str(df.at[i,'blockT'])+'_'+df.at[i,'Task'], str(df.at[i,'blockS'])+'_'+df.at[i,'Succ'], weight=df.at[i,'duration'])
fig, ax = plt.subplots()
labels=[]
for i in range(df.shape[0]):
labels.append(str(df.at[i,'blockT'])+'_'+df.at[i,'Task'])
print(nx.astar_path_length(DD, '0_START', str(df.at[i,'blockT'])+'_'+df.at[i,'Task']) )
ax.broken_barh([(nx.astar_path_length(DD, '0_START', str(df.at[i,'blockT'])+'_'+df.at[i,'Task']), heuristic=None, weight='weight'),df.at[i,'duration'] )],(i-0.4,0.8), facecolors='blue' )
【问题讨论】:
-
youtube.com/watch?v=a3ww0gwEszo 好吧,这个视频是关于无向图的,所以你的问题在计算上很容易解决,但我仍然喜欢它。