Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python NetworkX最大流最小代价函数永远运行_Python_Algorithm_Graph_Graph Algorithm_Networkx - Fatal编程技术网

Python NetworkX最大流最小代价函数永远运行

Python NetworkX最大流最小代价函数永远运行,python,algorithm,graph,graph-algorithm,networkx,Python,Algorithm,Graph,Graph Algorithm,Networkx,我试图在某些图上使用max_flow_min_代价,但有时算法似乎永远运行(或者至少运行很长时间),我不明白为什么会出现这种情况。这是一个导致它运行那么长时间的图表。它们都有相同的节点 nodes = [ ('1in', {'y': -1, 'x': -1, 'type': 'passenger in', 'number': 1}), ('2out', {'y': 1, 'x': -1, 'type': 'passenger out', 'number': 2}), (

我试图在某些图上使用max_flow_min_代价,但有时算法似乎永远运行(或者至少运行很长时间),我不明白为什么会出现这种情况。这是一个导致它运行那么长时间的图表。它们都有相同的节点

nodes = [
    ('1in', {'y': -1, 'x': -1, 'type': 'passenger in', 'number': 1}), 
    ('2out', {'y': 1, 'x': -1, 'type': 'passenger out', 'number': 2}),
    ('destination', {'y': 0, 'x': 0, 'type': 'destination'}), 
    ('2in', {'y': 1, 'x': -1, 'type': 'passenger in', 'number': 2}),
    ('source', {'type': 'meta'}), 
    ('4in', {'y': -1, 'x': 1, 'type': 'passenger in', 'number': 4}),
    ('1out', {'y': -1, 'x': -1, 'type': 'passenger out', 'number': 1}),
    ('4out', {'y': -1, 'x': 1, 'type': 'passenger out', 'number': 4}),
    ('sink', {'type': 'meta'}), 
    ('3in', {'y': 1, 'x': 1, 'type': 'passenger in', 'number': 3}),
    ('3out', {'y': 1, 'x': 1, 'type': 'passenger out', 'number': 3})
]

edges = [
    ('1in', '1out', {'cost': 0, 'capacity': 1}), 
    ('2out', '4in', {'cost': -9.48, 'capacity': 1}), 
    ('2out', 'destination', {'cost': -10.9, 'capacity': 1}), 
    ('2out', '3in', {'cost': -10.31, 'capacity': 1}), 
    ('destination', 'sink', {'cost': 0, 'capacity': 1}), 
    ('2in', '2out', {'cost': 0, 'capacity': 1}), 
    ('source', '2in', {'cost': 0, 'capacity': 1}), 
    ('source', '4in', {'cost': 0, 'capacity': 1}), 
    ('source', '1in', {'cost': 0, 'capacity': 1}), 
    ('source', '3in', {'cost': 0, 'capacity': 1}), 
    ('4in', '4out', {'cost': 0, 'capacity': 1}), 
    ('1out', '2in', {'cost': -10.31, 'capacity': 1}), 
    ('1out', '4in', {'cost': -10.31, 'capacity': 1}), 
    ('1out', 'destination', {'cost':-10.9, 'capacity': 1}), 
    ('1out', '3in', {'cost': -9.48, 'capacity': 1}), 
    ('4out', 'destination', {'cost': -10.9, 'capacity': 1}), 
    ('3in', '3out', {'cost': 0, 'capacity': 1}), 
    ('3out', '4in', {'cost': -10.31, 'capacity': 1}), 
    ('3out', 'destination', {'cost': -10.9, 'capacity': 1})
]
如果我修改了上面的图表,但将从目的地到接收器的容量设为2或3,那么它也将永远运行。如果将容量设为4,则算法运行良好。这就是确切的要求:

nx.max_flow_min_cost(G,'source','sink',weight='cost')
谢谢大家!!任何帮助都将不胜感激。值得一提的是,G是一个有向图(有向图)

编辑:我在NetworkX项目上,以防他们的代码出现问题

对我来说很好:

>>> G = nx.Graph()
>>> G.add_edges_from([
    ('1in', '1out', {'cost': 0, 'capacity': 1}), 
    ('2out', '4in', {'cost': -9.48, 'capacity': 1}), 
    ('2out', 'destination', {'cost': -10.9, 'capacity': 1}), 
    ('2out', '3in', {'cost': -10.31, 'capacity': 1}), 
    ('destination', 'sink', {'cost': 0, 'capacity': 1}), 
    ('2in', '2out', {'cost': 0, 'capacity': 1}), 
    ('source', '2in', {'cost': 0, 'capacity': 1}), 
    ('source', '4in', {'cost': 0, 'capacity': 1}), 
    ('source', '1in', {'cost': 0, 'capacity': 1}), 
    ('source', '3in', {'cost': 0, 'capacity': 1}), 
    ('4in', '4out', {'cost': 0, 'capacity': 1}), 
    ('1out', '2in', {'cost': -10.31, 'capacity': 1}), 
    ('1out', '4in', {'cost': -10.31, 'capacity': 1}), 
    ('1out', 'destination', {'cost':-10.9, 'capacity': 1}), 
    ('1out', '3in', {'cost': -9.48, 'capacity': 1}), 
    ('4out', 'destination', {'cost': -10.9, 'capacity': 1}), 
    ('3in', '3out', {'cost': 0, 'capacity': 1}), 
    ('3out', '4in', {'cost': -10.31, 'capacity': 1}), 
    ('3out', 'destination', {'cost': -10.9, 'capacity': 1})
])

>>> nx.max_flow_min_cost(G, 'source', 'sink', weight='cost')
{'1in': {'1out': 0, 'source': 0},
 '1out': {'1in': 0, '2in': 1, '3in': 1, '4in': 1, 'destination': 1},
 '2in': {'1out': 1, '2out': 1, 'source': 0},
 '2out': {'2in': 0, '3in': 1, '4in': 1, 'destination': 1},
 '3in': {'1out': 1, '2out': 1, '3out': 0, 'source': 0},
 '3out': {'3in': 0, '4in': 1, 'destination': 1},
 '4in': {'1out': 1, '2out': 1, '3out': 1, '4out': 0, 'source': 0},
 '4out': {'4in': 0, 'destination': 1},
 'destination': {'1out': 1, '2out': 0, '3out': 1, '4out': 1, 'sink': 1},
 'sink': {'destination': 0},
 'source': {'1in': 0, '2in': 1, '3in': 0, '4in': 0}}
这对我来说很好:

>>> G = nx.Graph()
>>> G.add_edges_from([
    ('1in', '1out', {'cost': 0, 'capacity': 1}), 
    ('2out', '4in', {'cost': -9.48, 'capacity': 1}), 
    ('2out', 'destination', {'cost': -10.9, 'capacity': 1}), 
    ('2out', '3in', {'cost': -10.31, 'capacity': 1}), 
    ('destination', 'sink', {'cost': 0, 'capacity': 1}), 
    ('2in', '2out', {'cost': 0, 'capacity': 1}), 
    ('source', '2in', {'cost': 0, 'capacity': 1}), 
    ('source', '4in', {'cost': 0, 'capacity': 1}), 
    ('source', '1in', {'cost': 0, 'capacity': 1}), 
    ('source', '3in', {'cost': 0, 'capacity': 1}), 
    ('4in', '4out', {'cost': 0, 'capacity': 1}), 
    ('1out', '2in', {'cost': -10.31, 'capacity': 1}), 
    ('1out', '4in', {'cost': -10.31, 'capacity': 1}), 
    ('1out', 'destination', {'cost':-10.9, 'capacity': 1}), 
    ('1out', '3in', {'cost': -9.48, 'capacity': 1}), 
    ('4out', 'destination', {'cost': -10.9, 'capacity': 1}), 
    ('3in', '3out', {'cost': 0, 'capacity': 1}), 
    ('3out', '4in', {'cost': -10.31, 'capacity': 1}), 
    ('3out', 'destination', {'cost': -10.9, 'capacity': 1})
])

>>> nx.max_flow_min_cost(G, 'source', 'sink', weight='cost')
{'1in': {'1out': 0, 'source': 0},
 '1out': {'1in': 0, '2in': 1, '3in': 1, '4in': 1, 'destination': 1},
 '2in': {'1out': 1, '2out': 1, 'source': 0},
 '2out': {'2in': 0, '3in': 1, '4in': 1, 'destination': 1},
 '3in': {'1out': 1, '2out': 1, '3out': 0, 'source': 0},
 '3out': {'3in': 0, '4in': 1, 'destination': 1},
 '4in': {'1out': 1, '2out': 1, '3out': 1, '4out': 0, 'source': 0},
 '4out': {'4in': 0, 'destination': 1},
 'destination': {'1out': 1, '2out': 0, '3out': 1, '4out': 1, 'sink': 1},
 'sink': {'destination': 0},
 'source': {'1in': 0, '2in': 1, '3in': 0, '4in': 0}}

如果权重是浮点数,
networkx.max\u flow\u min\u cost
中的算法不能保证有效。请参见networkx网站上回答的原始作者问题


如果权重是浮点数,则
networkx.max\u flow\u min\u cost
中的算法不保证有效。请参见networkx网站上回答的原始作者问题



以后,将代码用4个空格制成表格,使其看起来像代码:p。@imaluengo谢谢!在编辑器中,它显示为一行,所以我很害怕,没有这样做。是的,它只有一行,我把它分成几行(每个节点和边一行),并用4个空格将其制表。第一行很吓人!看起来您希望我们在您没有提供的代码中找到一个无止境的循环!我建议添加调试打印语句,直到您找到循环的位置,然后开始打印足够的上下文,以便您可以跟踪导致它成为无止境循环的原因。问题是我使用的是NetworkX库代码,我不能在他们的代码@Btilly中添加打印语句,因为将来会用4个空格将代码制成表格,使其看起来像代码:P.@imaluengo谢谢!在编辑器中,它显示为一行,所以我很害怕,没有这样做。是的,它只有一行,我把它分成几行(每个节点和边一行),并用4个空格将其制表。第一行很吓人!看起来您希望我们在您没有提供的代码中找到一个无止境的循环!我建议添加调试打印语句,直到您找到循环的位置,然后开始打印足够的上下文,以便您可以跟踪导致它成为无止境循环的原因。问题是我使用的是NetworkX库代码,我无法将打印语句放入其代码@btillySorry!我忘了提到G是一个DiGraph@Arya编辑!没有指向源和汇的边的
容量
,它可以完美地工作。networkx文档的示例也没有这些属性。这有什么原因吗?根据我试图实现的算法,我必须制作一个从目的地到接收器具有不同容量的图,然后返回成本最低的图。例如,对于目的地到接收器,这个有向图适用于1到7之间的每个容量:基本上,问题是我只希望从源节点到每个“in”节点有1个单元,而我只希望该目的地->接收器容量单元通过该图。嗯,这似乎是我的错误。容量实际上相当重要。。(认为
容量
成本
)。更多信息(max flow调用该函数)。我的第二次编辑是错误的(删除了),并且仍然让人困惑(并且很难调试)为什么特定的网络不能聚合。对不起!我忘了提到G是一个DiGraph@Arya编辑!没有指向源和汇的边的
容量
,它可以完美地工作。networkx文档的示例也没有这些属性。这有什么原因吗?根据我试图实现的算法,我必须制作一个从目的地到接收器具有不同容量的图,然后返回成本最低的图。例如,对于目的地到接收器,这个有向图适用于1到7之间的每个容量:基本上,问题是我只希望从源节点到每个“in”节点有1个单元,而我只希望该目的地->接收器容量单元通过该图。嗯,这似乎是我的错误。容量实际上相当重要。。(认为
容量
成本
)。更多信息(max flow调用该函数)。我的第二次编辑是错误的(删除),并且仍然混淆(并且很难调试)为什么特定的网络不能聚合。