2016-04-06 8 views
0

Ich habe Probleme die Methode write_dimacs der igraph Python-Bibliothek:Probleme der Methode `write_dimacs` von IGRAPH mit

Aus irgendwelchen Gründen, die ich nicht verstehe, wenn ich versuche, es zu benutzen ich die Fehler: KeyError: 'Attribute does not exist' (siehe vollständige Ausgabe unten).

Hier ist ein Beispiel-Code-Snippet, das den Fehler auf meinem System (Mac OS X 10.10.5, Python 3.5.1, Python-IGRAPH-0.7.1.post6) wiedergibt:

from igraph import * 

g = Graph.Read_Edgelist("graph3.txt") 

print(g) 

# This works fine 
g.write_adjacency("graph4.txt") 

# This gives the error 
g.write_dimacs("graph5.txt") 

ich auch die gleichen Fehler, wenn ich gehe ausdrücklich die anderen Argumente der Methode, wie in: g.write_dimacs("graph5.txt", 1)

Ausgang:


IGRAPH D--- 15 22 -- 
+ edges: 
1->2 1->8 1->11 1->14 2->3 2->6 3->4 4->5 5->4 5->1 6->4 6->7 7->4 8->9 8->11 
8->12 9->10 10->9 10->5 11->12 12->13 13->10 
Traceback (most recent call last): 
    File "test.py", line 10, in <module> 
    g.write_dimacs("graph5.txt") 
    File "build/bdist.macosx-10.10-intel/egg/igraph/__init__.py", line 1676, in write_dimacs 
KeyError: 'Attribute does not exist' 

Weiß jemand, was passiert?

Vielen Dank im Voraus.

+0

Zeigen Sie uns die ursprüngliche DIMACS-Datei. Gemessen an der Ausgabe von igraph wurde die ursprüngliche DIMACS-Datei so gelesen, dass der Vertex Null ein isolierter Vertex ist. –

+0

@ Tamás Vertex Null existiert nicht in der ursprünglichen DIMACS-Datei, da das Format angibt, dass das erste Label 1 sein muss. Die Eingabedatei ist identisch mit den geschriebenen, aber die Vertexbezeichnungen beginnen bei 1: [(1, 2), (1 , 8), (1, 11), (1, 14) ...] –

+0

Trotzdem muss ich deine Originaldatei sehen, um zu sehen, was mit igraph passiert - sonst kann ich nicht helfen. Der Versuch mit einer zufälligen DIMACS-Datei, die ich manuell erstellt habe, scheint zu funktionieren. –

Antwort

1

Die Methode write_dimacs dient zum Schreiben von Graphen in der DIMACS maximum flow problem format. Dieses Format erfordert, dass Sie zu:

  • die source Scheitel des maximalen Strömungsproblem
  • geben Sie den target Scheitelpunkt des maximalen Strömungsproblem
  • angeben, die Kapazitäten der Kanten geben

Die Quelle und Zielscheitelpunkte werden aus den Attributen source und target des Graphen definiert. Es wird angenommen, dass die Kapazitäten vom Kantenattribut capacity stammen. Die Dokumentation von igraph hat hier einen Fehler: Die Dokumentation besagt, dass wenn das capacity Attribut fehlt, es einfach davon ausgehen wird, dass alle Kapazitäten gleich 1 sind, aber das ist nicht der Fall - Sie müssen die Kapazitäten explizit übergeben oder den Namen angeben eines Kantenattributs, das die Kantenkapazitäten angibt.

In Ihrem Fall ist der einfachste Weg ist es funktioniert wie folgt zu erhalten:

g.write_dimacs("graph5.txt", source=0, target=1, capacity=[1]*g.ecount()) 

, wo ich einfach zwei beliebige Ecken als Quelle und Ziel festgelegt haben.

+0

Danke für die Lösung, ich muss zugeben, dass ich den Docs und habe nicht versucht, "Kapazität" einzustellen.Ich habe immer noch ein paar Probleme mit den Etiketten in der geschriebenen Datei (soweit ich weiß, DIMACS Etiketten sollten von 1 beginnen) und ich aktualisierte meine Frage entsprechend. Wenn Sie eine andere Einsicht haben, werde ich mich freuen, aber ich denke, Sie antworten richtig, danke nochmal. –

Verwandte Themen