Der Clusteringmodus
ibm_ilog.graphlayout.circular.CircularLayout.AUTOMATIC
kann Cluster und die Reihenfolge
der Knoten in den Clustern berechnen, um Linkkreuzungen zu vermeiden.
Standardmäßig werden die Cluster relativ zueinander mit einem Baumstrukturlayout
(ibm_ilog.graphlayout.tree.TreeLayout
) im Radialmodus platziert.
Sie können auch andere Layouts für die Clusterplatzierung angeben.
Die folgenden Parameter funktionieren nur im Clusteringmodus AUTOMATIC
. Optimierung des Clusterings
Der Clusteringmodus
AUTOMATIC
verwendet die angegebenen Cluster als
Anfangscluster.
Wenn für einige oder alle Knoten kein Cluster angegeben ist, werden die Cluster anhand der Topologie
des Graphen berechnet. In diesem Modus werden die Topologiekriterien berücksichtigt:
- Bikonnektivität
- Minimale Anzahl der Knoten pro Cluster
- Maximale Anzahl der Knoten pro Cluster
- Knoten mit hoher Wertigkeit für die Bildung von Sternclustern
Clustering durch Bikonnektivität
Wenn eine Gruppe von Knoten viele Verbindungen untereinander hat, müssen sie einen Cluster bilden.
Die formlose Eigenschaft "viele Verbindungen" kann mathematisch
mit dem Begriff "Bikonnektivität" beschrieben werden: Eine Gruppe von Knoten ist
zweifach verbunden, wenn die Knoten beim Entfernen nur eines einzigen Knotens oder eines einzigen Links
verbunden bleiben.
Ein Verbindungsring ist beispielsweise immer zweifach verbunden bzw. weist Bikonnektivität auf.
Dies ist ein geeignetes Kriterium für Cluster. Der Algorithmus
erkennt standardmäßig zuerst die zweifach verbundenen Teile des Graphen und bildet
einen regulären Cluster (keinen Sterncluster) für jeden Teil.
Wenn dieses Vorgehen nicht geeignet ist, kann die Erkennung zweifach verbundener
Komponenten auch inaktiviert werden.
Beispiel für das Inaktivieren der Erkennung zweifach verbundener Teile (CL-Algorithmus)
Gehen Sie wie folgt vor, um die Erkennung zweifach verbundener Teile zu inaktivieren:
Verwenden Sie die folgende Methode:
layout.setClusterByBiconnectivity(false)
Dieser Parameter hat keine Auswirkung, wenn der Clusteringmodus
BY_CLUSTER_IDS
oder BY_SUBGRAPHS
verwendet wird. Minimale Clustergröße
Es ist möglich, die minimale Größe regulärer Cluster (keine Sterncluster) anzugeben.
Wenn die Anfangscluster zu klein sind, können sie zu größeren Clustern zusammengeführt werden.
Beispiel für die Angabe der minimalen Clustergröße (CL-Algorithmus)
Gehen Sie zum Festlegen der minimalen Clustergröße wie folgt vor:
Verwenden Sie die folgende Methode:
layout.setMinimumClusterSize(10)
Dieser Parameter hat keine Auswirkung, wenn der Clusteringmodus
BY_CLUSTER_IDS
oder BY_SUBGRAPHS
verwendet wird. Maximale Clustergröße
Es ist möglich, die maximale Größe regulärer Cluster (keine Sterncluster) anzugeben.
Wenn die Anfangscluster zu groß sind, können sie in kleinere Clustern aufgeteilt werden.
Der Wert ist nur ein Hinweis. Wenn die minimale Clustergröße und die maximale Clustergröße eng beieinander liegen, kann
die maximale Clustergröße nicht immer eingehalten werden.
Beispiel für die Angabe der maximalen Clustergröße (CL-Algorithmus)
Gehen Sie zum Festlegen der maximalen Clustergröße wie folgt vor:
Verwenden Sie die folgende Methode:
layout.setMaximumClusterSize(20)
Das Aufteilen von Clustern ist ein iterativer Prozess. Es ist möglich, die maximale Anzahl an Iterationen
für das Ermitteln der maximalen Clustergröße festzulegen.
Je mehr Iterationen durchgeführt werden, desto besser ist die Qualität und desto langsamer ist das Layout.
Beispiel für die Angabe der maximalen Anzahl an Iterationen für das Ermitteln der maximalen Clustergröße
(CL-Algorithmus)
Gehen Sie wie folgt vor, um die maximale Anzahl der Iterationen festzulegen:
Verwenden Sie die folgende Methode:
layout.setMaximumNumberOfIterationsToReachMaxClusterSize(100)
Diese Parameter haben keine Auswirkung, wenn der Clusteringmodus
BY_CLUSTER_IDS
oder BY_SUBGRAPHS
verwendet wird. Minimale Ringclustergröße
Neben regulären Clustern können die Layoutalgorithmen auch Sterncluster erkennen.
Sie erkennen Knoten mit hoher Wertigkeit, die viele Nachbarknoten haben, die keinem Cluster zugeordnet sind, und formen
sie zu Clustern mit dem Knoten mit der hohen Wertigkeit als Sternmitte.
Beispiel für die Angabe der minimalen Sternclustergröße (CL-Algorithmus)
Gehen Sie wie folgt vor, um die Mindestwertigkeit für die Bildung eines Sternclusters aus einem Knoten und seinen Nachbarknoten festzulegen:
Verwenden Sie die folgende Methode:
layout.setHighDegreeStarClusterSize(5)
Dieser Parameter hat keine Auswirkung, wenn der Clusteringmodus
BY_CLUSTER_IDS
oder BY_SUBGRAPHS
verwendet wird. Reduktion von Kreuzungen optimieren
Wenn die Sortierung der Knoten in jedem Cluster nicht über
Clusterindizes (siehe Clusterzugehörigkeit und Reihenfolge der Knoten in einem Cluster (CL)) angegeben ist,
werden die Knoten im Modus
AUTOMATIC
so in den Clustern angeordnet, dass Linkkreuzungen vermieden werden.
Es handelt sich hierbei um ein reines heuristisches Verfahren, das die minimale Anzahl an Linkkreuzungen nicht
immer gewährleisten kann.
Es gibt zwei Typen von Links: Clusterinterne Links verbinden Knoten, die zu demselben Cluster gehören, und clusterübergreifende Links verbinden Knoten verschiedener Cluster.
Während der Reduktion der Kreuzungen konkurrieren clusterinterne Links mit clusterübergreifenden Links.
Einige Knotensortierungen eines Clusters erzeugen mehr Linkkreuzungen innerhalb des Clusters, während andere Knotensortierungen
mehr Kreuzungen von Links erzeugen, die verschiedene Cluster miteinander verbinden.
Das Verhalten kann mithilfe von Wertigkeiten von Kreuzungen gesteuert werden. Reduktion clusterinterner Linkkreuzungen
Der Schritt der Kreuzungsreduktion, der clusterinterne Links berücksichtigt, ist der langsamste Teil der Kreuzungsreduktion.
Er ist standardmäßig aktiviert, kann aber inaktiviert werden.
Wenn er inaktiviert wird, werden nur clusterübergreifende Links für die Berechnung der Knotensortierung innerhalb der Cluster berücksichtigt.
Beispiel für das Inaktivieren der Reduktion clusterinterner Linkkreuzungen (CL-Algorithmus)
Gehen Sie zum Inaktivieren der Reduktion clusterinterner Linkkreuzungen wie folgt vor:
Verwenden Sie die folgende Methode:
layout.setInterClusterCrossingReduction(false)
Dieser Parameter hat keine Auswirkung, wenn der Clusteringmodus
BY_CLUSTER_IDS
oder BY_SUBGRAPHS
verwendet wird. Strafe für clusterinterne Linkkreuzungen
Bei der Kreuzungsreduktion wird versucht, die Summe der Strafen für Kreuzungen zu minimieren.
Wenn zwei clusterinterne Links kreuzen, wird die Summe
um die clusterinterne Strafe erhöht.
Erhöhen Sie diese Strafe, wenn clusterinterne Links bei der Berechnung der Knotensortierung für jeden Cluster eine höhere Wertigkeit haben müssen.
Beispiel für die Angabe der clusterinternen Strafe (CL-Algorithmus)
Gehen Sie zum Festlegen der Strafe für clusterinterne Linkkreuzungen wie folgt vor:
Verwenden Sie die folgende Methode:
layout.setIntraClusterLinkCrossingPenalty(2)
Dieser Parameter hat keine Auswirkung, wenn der Clusteringmodus
BY_CLUSTER_IDS
oder BY_SUBGRAPHS
verwendet wird. Strafe für clusterübergreifende Linkkreuzungen
Wenn zwei clusterübergreifende Links kreuzen, wird die Strafsumme
um die clusterübergreifende Strafe erhöht.
Erhöhen Sie diese Strafe, wenn clusterübergreifende Links bei der Berechnung der Knotensortierung für jeden Cluster eine höhere Wertigkeit haben müssen.
Beispiel für die Angabe der clusterübergreifenden Strafe (CL-Algorithmus)
Gehen Sie zum Festlegen der Strafe für clusterübergreifende Linkkreuzungen wie folgt vor:
Verwenden Sie die folgende Methode:
layout.setInterClusterLinkCrossingPenalty(3)
Dieser Parameter hat keine Auswirkung, wenn der Clusteringmodus
BY_CLUSTER_IDS
oder BY_SUBGRAPHS
verwendet wird. Strafe für Kreuzungen clusterinterner und clusterübergreifender Links
Wenn ein clusterinterner Link einen clusterübergreifenden Link kreuzt, erhöht sich die
Strafsumme um die Strafe für gemischte Kreuzungen.
Beispiel für die Angabe der Strafe für gemischte Linkkreuzungen (CL-Algorithmus)
Gehen Sie zum Festlegen der Strafe für gemischte Linkkreuzungen wie folgt vor:
Verwenden Sie die folgende Methode:
layout.setMixedClusterLinkCrossingPenalty(4)
Dieser Parameter hat keine Auswirkung, wenn der Clusteringmodus
BY_CLUSTER_IDS
oder BY_SUBGRAPHS
verwendet wird. Layout des Clustergraphen
Die Knoten jedes Clusters werden in einem Kreis platziert. Anschließend wird jeder Kreis
auf der Ebene platziert.
Das zirkuläre Layout verwendet standardmäßig ein Baumstrukturlayout im Radialmodus für die Platzierung der Kreise.
Beispiel für die Verarbeitung eines Layouts von Clustergraphen
Die Layoutparameter des Baumstrukturlayouts können über den Zugriff auf das Baumstrukturlayout
geändert werden:
Verwenden Sie dazu die folgende Methode:
var layoutOfClusterGraph = layout.getLayoutOfClusterGraph()
für den Zugriff auf das Layout des Clustergraphen. Standardmäßig ist dies eine Instanz
von
ibm_ilog.graphlayout.tree.TreeLayout
. Sie können einen beliebigen globalen Baumstrukturlayoutparameter
in dieser Layoutinstanz definieren.
Sie können auch eine andere Layoutinstanz angeben, um die Cluster zu platzieren:
Verwenden Sie dazu die folgende Methode:
layout.setLayoutOfClusterGraph(otherLayout)
Verarbeitung nicht verbundener Graphen
Der Layoutalgorithmus kann den generischen Mechanismus verwenden, um verbundene Komponenten anzulegen.
(Weitere Informationen zu diesem Mechanismus
finden Sie unter Layout verbundener Komponenten.) Dieser
generische Mechanismus ist in der zirkulären Layoutinstanz selbst verfügbar, aber auch in der Baumstrukturlayoutinstanz, die den Clustergraphen anlegt.
Beispiel für die Verarbeitung nicht verbundener Graphen
Sie können den Mechanismus im zirkulären Layout selbst aktivieren:
Rufen Sie in der zirkulären Layoutinstanz Folgendes auf:
circularLayout.setLayoutOfConnectedComponentsEnabled(true); circularLayout.setLayoutOfCOnnectedComponents(someGridLayout);
Wenn dieser Mechanismus im zirkulären Layout inaktiviert ist,
verarbeitet das Layout des Clustergraphen nicht verbundene Komponenten.
Sie können die generische Verarbeitung nicht verbundener Komponenten natürlich auch
wie folgt im Layout des Clustergraphen aktivieren (sofern dies dort unterstützt wird, was beispielsweise für das
Standardbaumstrukturlayout gilt):
circularLayout.getLayoutOfClusterGraph().setLayoutOfConnectedComponentsEnabled(true); circularLayout.getLayoutOfClusterGraph().setLayoutOfCOnnectedComponents(someGridLayout);
Dies hat jedoch genau denselben Effekt wie die direkte Angabe in der zirkulären Layoutinstanz.