Expertenparameter für den Modus AUTOMATIC

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.