我正在尝试使用Networkx制作甘特图。网络中的所有节点均为完成项目所需执行的“任务”。使用Networkx很容易计算出项目的总时间。但是,要制作甘特图,则需要每个节点的最新开始时间。
NetworkX包括一个函数(dag_longest_path_length),但它计算的是整个网络中的最长路径。另一个函数(astar_path_length)可以获得源节点和目标节点之间的最短路径,但没有可用于提供最长路径或最新开始时间的函数。(如果一个节点有两个前置节点,则会选择最快的路线,但实际上还必须等待第二个节点才能开始。
我考虑了一种方案:评估前面连接的节点并选择最长路径。不太正式,我没有成功。
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' )