Closed mlgiraud closed 8 years ago
Wer hat das mit den Graphalgorithmen überhaupt eingebaut?
Ich wäre gar nich darauf gekommen im Vorfeld, die Graphen Representation mit den Graphenalgorithmen zu verknüpfen.
Kann sein, dass ich das da rein hab. Wie würdest du das denn machen? Ich mein die Knoten müssen nach irgendeinem Schema (Algorithmus) angeordnet werden.
Na klar... Aber eigentlich ist mir egal wie eine Graphenbibliothek die Konten sortiert :) bzw. Ich weiß nicht was es da für möglichkeiten gibt... Ich wusste auch gar nicht, dass man da genau spezifizieren kann nach welchem Algorithmus der Graph jetzt die Knoten sortiert usw....
Jo gibt halt verschiedene Verfahren, wie das angeordnet werden soll. Ich denke es wär schon sinnvoll dem Nutzer diese Möglichkeit dann auch zu geben, wenn es sie schon gibt. Müssen uns halt einfach nur 2 Beispiele raussuchen und die da rein packen?
Aber hat jede Graphenbibliothek die gleichen Darstellungsalgos?
Müssen wir schauen. Wir müssen uns sowieso bald mal einigen, welche Bibliotheken und Sprachen wir für unser Projekt verwenden wollen. Was mich im Moment am meisten beschäftigt, ist die Interprozesskommunikation. Zwischen Java und C ist das nämlich garn nicht mal so trivial.
Eigentlich ist das sehr einfach auf Linux:
Aber ich finde im Pflichtenheft muss man sich halt noch nicht auf die verwendete Software festlegen...und daher wäre es finde ich schwierig sich schon auf Graphenalgorithmen festzulegen, weil wir gar nicht wissen welche Alogirhtmen am ende verfügbar sein werden.
Das Problem dabei ist nicht, wie wir die Verbindung aufbauen zwischen zwei Prozessen, sondern wie wir effizient die Daten rüberschieben können. Von c zu c prozess könnte man einfach ein struct rüberschicken und das sofort wieder auslesen. Mit Java geht das glaube ich nicht so einfach. Da muss man die Daten dann halt irgendwie serialisieren.
Mit java muss man einfach die Daten auslesen... also mit DataInputStream oder ByteBuffer... Aber zurück zum Graphenalgo problem.. :D
JUNG ist eine open source BSD lizensierte java graphen bibliothek... Anscheind laut diesem paper genau das richtige um Netzwerkaktivitäten graphisch darzustellen:
Diese Algorthmen gibt es in Jung für das Layout:
http://jung.sourceforge.net/doc/api/index.html -> edu.uci.ics.jung.algorithms.layout
Ich würde daraus z.B. gerne den Kamada-Kawai algorithmus verwenden. Der sieht ganz gut aus, bzw. Graphen sehen damit sehr schön geordnet aus.
Also ich habe mir das nochmal genauer angeguckt. Ich habe noch diese library gefunden zu leicht zu benutzten ist und auch für Projekte wie unsere vorgesehen ist. (Da ist zum Beispiel erklärt wie man die library in eine andere view gut einbindet, und es sind auch Klassen dafür vorhanden.) Alles ist sehr schön und gut dort, die Graphen werden auch gut dargestellt - aber ich habe bislang noch nicht rausgefunden ob man den Graphendarstellungsalgorithmus ändern kann. Auf jeden Fall ist neuste version der library aus 2014, also relativ modern. Hier ist der link. http://graphstream-project.org/
Der große vorteil dieser library ist das sie dafür gemacht ist Graphen dynamisch zu verändern. Bei jung hatte ich gelesen auf stack overflow das manche meinten das Jung probleme mit dynamischer Graphendarstellung hat was für uns natürlich sehr wichtig ist. Ich habe mal ein kleines testprogramm mit dieser graphenlibrary geschrieben - bzw. von deren webseite genommen - und alles funktioniert sehr schön. Ich kann mal die sources auf github hochladen wenn ihr es auch bauen wollt oder ich zeige es euch so morgen.
Auf jeden Fall würde ich vieleicht nochmal überlegen welche library wir nutzten - und welche Algorithmen wir im Pflichtenheft angeben, weil nur an eine Library gebunden zu sein weil sie bestimmte Algorithmen supportet ist ziemlich scheisse. Vorallem ist die neuste version von JUNG aus 2010 - also nicht gerade das neuste.
Ich schau mir beide mal an und versuch anfang nächster woche mal nen Prototypen oder so zusammenzuhacken. Dann schauen wir mal was die jeweils für Vorteile haben.
Wir müssen mindestens 2 Graphalgorithmen beim Namen nennen.