Ich versuche, die Max_flow_min_cost auf bestimmte Grafiken zu verwenden, aber es scheint wie manchmal der Algorithmus läuft für immer (oder zumindest für eine extrem lange Zeit), und ich verstehe nicht, warum dies ist der Fall. Hier ist ein Graph, der dazu führt, dass er so lange läuft. Sie alle haben die gleichen KnotenPython NetworkX Max_flow_min_cost Funktion läuft für immer
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})
]
Wenn ich das obige Diagramm ändern, aber die Kapazität von Ziel machen zu versenken 2 oder 3, läuft es auch für immer. Wenn ich Kapazität gleich 4 mache, läuft der Algorithmus gut. Dies ist der genaue Anruf:
nx.max_flow_min_cost(G,'source','sink',weight='cost')
Vielen Dank! Jede Hilfe wird geschätzt. Es ist erwähnenswert, dass G ist ein gerichteter Graph (DiGraph)
Edit: I opened an issue auf dem NetworkX-Projekt, falls es ein Problem mit ihrem Code ist.
Für die Zukunft des Codes mit 4 Leerzeichen um tabellarisieren, um es wie Code aussehen: P. –
@imaluengo Danke! Im Editor zeigte es sich als eine Zeile, also habe ich Angst und habe es nicht gemacht. – Arya
Yep es war nur 1 Zeile, ich brach es in mehrere Zeilen (eine pro Knoten und Kante) und tabellieren Sie es mit 4 Leerzeichen. Die 1 Linie war gruselig! –