Python networkx-查找2个节点之间DAG中最重的路径

Python networkx-查找2个节点之间DAG中最重的路径,python,python-3.x,networkx,directed-acyclic-graphs,Python,Python 3.x,Networkx,Directed Acyclic Graphs,我完全惊讶于python networkx不支持特定2个节点之间的重路径 我有一个非常大的图(DAG),~70K个节点,其中每条边上都有一个权重属性(权重=0) 我想创建一个函数,获取源和目标,并返回这两个特定节点之间最重的路径 我尝试使用all_simple_path并实现了获取路径并返回总权重的get_权重函数,正如某些解决方案中所建议的那样 然而,所有的简单路径永远不会以这个图结束,这个图肯定没有任何循环(运行networkx find_cycle函数),这个解决方案适用于非常小的图 我在

我完全惊讶于python networkx不支持特定2个节点之间的重路径

我有一个非常大的图(DAG),~70K个节点,其中每条边上都有一个权重属性(权重=0

我想创建一个函数,获取源和目标,并返回这两个特定节点之间最重的路径

我尝试使用all_simple_path并实现了获取路径并返回总权重的get_权重函数,正如某些解决方案中所建议的那样

然而,所有的简单路径永远不会以这个图结束,这个图肯定没有任何循环(运行networkx find_cycle函数),这个解决方案适用于非常小的图

我在这里和其他地方找到的所有建议解决方案都返回整个图中最重的路径(从开始到结束),而dag有这个函数(dag_最长路径),但这不是我需要的

python中是否有任何networkx函数或图形库可用于获取2个节点之间的重路径? 或任何达到要求的方向


提前谢谢

只需对每个路径中的边的权重(或任何其他边数值属性)进行求和,方法是迭代
所有简单路径
,最后取最大值:

import networkx as nx
import random

G = nx.complete_graph(10)

# add a random weight between 0 and 1 to each edge
for src, target, _ in G.edges.data():
    G[src][target]['weight'] = round(random.random(), 2)

def aggregate_weights(G, path):
    """
    Calculate sum of the weights in a path.
    """
    return sum([G[i][i + 1]['weight'] for i in range(len(path) - 2)])

def find_heaviest_path(G, source, target):
    """
    Find the heaviest path between source and target nodes.
    """
    return max([aggregate_weights(G, path) for path in nx.all_simple_paths(G, source, target)])

注意:上述算法具有很高的时间复杂度。

您能在此上下文中定义最重路径吗?如果您指的是“最长路径”这一行,那么这将很困难。这是一首关于它的歌:,这是一篇维基百科文章:@Joel这是一条权重最大的路径你是说权重总和最大的路径吗?如果是这样的话,那么这是一个很难解决的问题,对于一个像您这样大的网络,我不希望它在合理的时间内完成。谢谢!是的,这就是问题所在,时间复杂度很高,最后我只限制了1条最短路径:D所以复杂度消失了,非常感谢!