Tool oder Bibliothek zur Graphenerstellung mit Export

Ich starte gerade ein akademisches Projekt und muss syntetische Netzwerke erstellen , dh Graphen mit speziellen Eigenschaften.

Die Arten von Diagrammen (Netzwerktopologien ) , die ich generieren muss, sind:

  • Erdos-Renyi
  • Barabasi-Albert
  • Zufällig regelmäßig
  • Watts-Strogatz (optional)

Ich kann 2 der mit den obigen Modellen erstellten Graphen nehmen und sie miteinander verknüpfen, zum Beispiel einen Erdos-Renyi-Graphen mit einem zufälligen regulären Graphen verbinden.

Ich benötige ein Tool oder eine Bibliothek, die Diagramme erstellen und exportieren kann . Zulässige Exportformate sind: CSV-, JSON-, XML- und gml-Dateien. Je einfacher das Exportformat, desto besser.

Bögen im Graphen können gerichtet oder ungerichtet, gewichtet oder ungewichtet sein, und Knoten sollten in der Lage sein, grundlegende Informationen (z. B. einen "Verbrauchs"-Parameter) zu enthalten. Letzteres kann durch Vererbung erfolgen und ist nicht entscheidend.

Ich muss die generierten Diagramme jetzt nicht visualisieren , dafür könnte ich ein anderes Tool verwenden. Es wäre schön, es zu haben, aber was mir am wichtigsten ist, ist die Qualität des generierten Netzwerks.

Ich bevorzuge Tools mit einer guten Dokumentation und qualitativ hochwertigen Tutorials .

Ich kenne Java und C++ , wobei ich ersteres bevorzuge. Ich könnte auch Python verwenden (wenn das die beste Option ist), aber ich bin nicht wirklich vertraut damit.

Einige der Bibliotheken, die ich in Betracht ziehe, sind:

JGraphT ist eine berühmte Java-Bibliothek, hat ein umfassendes JavaDoc , aber ihre Tutorials sind ziemlich schlecht und es scheint nicht in der Lage zu sein, alle Netzwerktopologien zu generieren, die ich brauche.

Boost Graph Library ist eine berühmte C++-Bibliothek, hat eine umfassende Dokumentation , aber ich kann keine Tutorials dafür finden und ich bin mir nicht sicher, ob sie alle Generatoren enthält, die ich brauche.

Neo4j ist ein Satz von Java - Algorithmen , hat ein umfassendes JavaDoc , aber keine Tutorials und scheint den regulären Zufallsgenerator zu vermissen .

NetworkX ist eine Python-Bibliothek, die die beste Dokumentation und Tutorials zu haben scheint, sie scheint alle Generatoren zu haben, die ich brauche, aber ich müsste Python verwenden. Ist es wirklich so gut?

Ihr Rat ist willkommen.

Antworten (1)

Ich würde ernsthaft vorschlagen, sich ein paar Tage Zeit zu nehmen, um mit dem Erlernen von Python zu beginnen - es und seine Bibliotheken sind sowohl in der Einfachheit der Verwendung als auch in der Leistung großartig. Einer der großen Vorteile der Arbeit mit Python ist, dass es fast überall funktioniert und Sie sogar eine USB-Stick-Installation haben können, die ohne Installation auf den meisten Windows-Rechnern funktioniert - machen Sie eine Sicherungskopie Ihrer Arbeit und Tools darauf und Sie können sie demonstrieren/machen ändert sich überall.

NetworkX ist sehr gut, aber ich würde auch vorschlagen, einen Blick auf plotly/matplotlib/scipy zu werfen, um einige zusätzliche Tools zu finden.

Um das letzte bisschen zu beantworten, Python ist wirklich so gut - es gibt nur ein paar wirklich wichtige Dinge, an die man denken muss, und wenn Ihr Code <space>*nnicht <tab>gut angelegt ist, wird er nicht wie erwartet oder überhaupt nicht ausgeführt.

Ich versuche es mal. Leider habe ich keine Zeit, Python richtig zu lernen. Die Bibliotheks-Tutorials lassen es so aussehen, als wäre es so einfach wie das Eingeben einer Befehlszeile. Vielleicht schaffe ich es.