Paramètres experts pour le mode AUTOMATIC

Le mode de groupement ibm_ilog.graphlayout.circular.CircularLayout.AUTOMATIC peut calculer les clusters et l'ordre des noeuds au sein des clusters afin d'éviter les intersections de liaisons. Par défaut, il place les clusters relatifs entre eux à l'aide d'un agencement arborescent (ibm_ilog.graphlayout.tree.TreeLayout) en mode radial. Vous pouvez également indiquer d'autres agencements pour gérer le placement de cluster. Les paramètres suivants fonctionnent uniquement en mode de groupement AUTOMATIC.

Optimisation du groupement

Le mode de groupement AUTOMATIC considère les clusters spécifiés en tant que clusters initiaux. Si aucun cluster n'est indiqué pour tout ou partie des noeuds, il calcule les clusters à partir de la topologie du graphe.
Ce mode tient compte de plusieurs critères de topologie :
  • Biconnectivité
  • Nombre minimal de noeuds par cluster
  • Nombre maximal de noeuds par cluster
  • Noeud de degré élevé pour former les clusters en étoile

Groupement par biconnectivité

Si un ensemble de noeuds comporte beaucoup d'interconnexions, ils doivent former un cluster. La propriété informelle "beaucoup d'interconnexions" peut être décrite mathématiquement par le terme biconnectivité comme suit : un ensemble de noeuds est biconnecté si les noeuds demeurent connectés lorsqu'un seul noeud ou lien est supprimé. Par exemple, un anneau de connexion est toujours biconnecté. Ce critère convient aux clusters. L'algorithme détecte par défaut tout d'abord les composants biconnectés du graphe et forme un cluster standard (et non pas un cluster en étoile) pour chaque composant. Si le critère ne convient pas, la détection des composants biconnectés peut aussi être désactivée.
Exemple de désactivation de la détection des composants biconnectés (algorithme CL)
Pour désactiver la détection des composants biconnectés :
Utilisez la méthode suivante :
layout.setClusterByBiconnectivity(false)
Ce paramètre n'a aucun effet si le mode de groupement est BY_CLUSTER_IDS or BY_SUBGRAPHS.

Taille de cluster minimum

Il est possible d'indiquer la taille minimale des clusters standard (et non des clusters en étoile). Si les clusters initiaux sont trop petits, ils sont fusionnés dans des clusters plus grands.
Exemple d'indication de la taille de cluster minimum (algorithme CL)
Pour indiquer la taille de cluster minimum :
Utilisez la méthode suivante :
layout.setMinimumClusterSize(10)
Ce paramètre n'a aucun effet si le mode de groupement est BY_CLUSTER_IDS or BY_SUBGRAPHS.

Taille de cluster maximum

Il est possible d'indiquer la taille maximale des clusters standard (et non des clusters en étoile). Si les clusters initiaux sont trop grands, ils sont fractionnés en clusters plus petits. Cette valeur est uniquement suggérée. Si la taille minimale de cluster et la taille maximale de cluster sont proches, il peut arriver que la taille maximale de cluster ne soit pas respectée.
Exemple d'indication de la taille de cluster maximum (algorithme CL)
Pour indiquer la taille de cluster maximum :
Utilisez la méthode suivante :
layout.setMaximumClusterSize(20)
Le fractionnement de clusters est un processus itératif. Il est possible d'indiquer le nombre maximum d'itérations pour obtenir la taille de cluster maximum. Plus le nombre d'itérations est élevé, plus la qualité est élevée et plus l'exécution de l'agencement est lente.
Exemple d'indication du nombre maximum d'itérations de cluster maximum (algorithme CL)
Pour indiquer le nombre maximum d'itérations :
Utilisez la méthode suivante :
layout.setMaximumNumberOfIterationsToReachMaxClusterSize(100)
Ces paramètres n'ont aucun effet si le mode de groupement est BY_CLUSTER_IDS or BY_SUBGRAPHS.

Taille de cluster en étoile minimum

En plus des clusters standard, l'algorithme d'agencement peut aussi détecter les clusters en étoile. Il détecte les noeuds de degré élevé qui ont de nombreux voisins non groupés et il les rassemble en clusters avec le noeud de degré élevé comme centre de l'étoile.
Exemple d'indication de la taille de cluster en étoile minimum (algorithme CL)
Pour indiquer le degré minimum permettant de regrouper un noeud et ses voisins dans un cluster en étoile :
Utilisez la méthode suivante :
layout.setHighDegreeStarClusterSize(5)
Ce paramètre n'a aucun effet si le mode de groupement est BY_CLUSTER_IDS or BY_SUBGRAPHS.

Optimisation de la réduction des intersections

Si le groupement des noeuds au sein de chaque cluster n'est pas indiqué par les index de cluster (voir Appartenance à un cluster et ordre des noeuds dans un cluster (CL)), le mode AUTOMATIC réorganise les noeuds au sein de chaque cluster pour éviter les intersections de liaisons. Il s'agit uniquement d'une opération heuristique qui ne garantit pas toujours le nombre minimal d'intersections de liaisons. Il existe deux types de liaisons : les liaisons intraclusters connectent les noeuds qui appartiennent au même cluster, et les liaisons interclusters connectent les noeuds de différents clusters. Au cours de la réduction des intersections, les liaisons intraclusters sont en concurrence avec les liaisons interclusters. Certains classements de noeud d'un cluster produisent plus d'intersections de liaisons au sein du cluster, alors que d'autres produisent davantage d'intersections de liaisons qui connectent différents clusters. Ce comportement peut être contrôlé par le biais de poids d'intersection.

Réduction des intersections de liaisons interclusters

L'étape de réduction des intersections qui concerne les liaisons interclusters est la partie la plus lente de cette opération. Elle est activée par défaut mais peut être désactivée. Lorsqu'elle est désactivée, seules les liaisons intraclusters sont prises en compte pour le calcul du classement des noeuds au sein de chaque cluster.
Exemple de désactivation de la réduction des intersections de liaisons interclusters (algorithme CL)
Pour désactiver la réduction des intersections de liaisons interclusters :
Utilisez la méthode suivante :
layout.setInterClusterCrossingReduction(false)
Ce paramètre n'a aucun effet si le mode de groupement est BY_CLUSTER_IDS or BY_SUBGRAPHS.

Pénalité des intersections de liaisons intraclusters

L'opération de réduction des intersections essaie de minimiser le nombre de pénalités des intersections. Si deux liaisons intraclusters se croisent, le nombre de pénalités intraclusters augmente. Augmentez cette pénalité si les liaisons intraclusters doivent avoir un poids plus élevé lors du calcul du classement des noeuds pour chaque cluster.
Exemple d'indication de pénalité intracluster (algorithme CL)
Pour indiquer les pénalités d'intersection de liaisons intraclusters :
Utilisez la méthode suivante :
layout.setIntraClusterLinkCrossingPenalty(2)
Ce paramètre n'a aucun effet si le mode de groupement est BY_CLUSTER_IDS or BY_SUBGRAPHS.

Pénalité des intersections de liaisons interclusters

Si deux liaisons interclusters se croisent, le nombre de pénalités interclusters augmente. Augmentez cette pénalité si les liaisons interclusters doivent avoir un poids plus élevé lors du calcul du classement des noeuds pour chaque cluster.
Exemple d'indication de pénalité intercluster (algorithme CL)
Pour indiquer les pénalités d'intersection de liaisons interclusters :
Utilisez la méthode suivante :
layout.setInterClusterLinkCrossingPenalty(3)
Ce paramètre n'a aucun effet si le mode de groupement est BY_CLUSTER_IDS or BY_SUBGRAPHS.

Pénalité des intersections de liaison de cluster mixte

Si une liaison intracluster croise une liaison intercluster, elle contribue à la somme de pénalités avec la pénalité de cluster mixte.
Exemple d'indication de pénalité de cluster mixte (algorithme CL)
Pour indiquer les pénalités d'intersection de liaison de cluster mixte :
Utilisez la méthode suivante :
layout.setMixedClusterLinkCrossingPenalty(4)
Ce paramètre n'a aucun effet si le mode de groupement est BY_CLUSTER_IDS or BY_SUBGRAPHS.

Agencement du graphe de cluster

Les noeuds de chaque cluster sont placés dans un cercle. Par conséquent, chaque cercle est placé dans le plane. L'agencement circulaire utilise par défaut un agencement arborescent en mode radial pour placer les cercles.
Exemple de traitement de l'agencement des graphes de cluster
Les paramètres d'agencement de l'agencement arborescent peuvent être modifiés en accédant à l'agencement arborescent :
Utilisez la méthode suivante :
var layoutOfClusterGraph = layout.getLayoutOfClusterGraph()
pour accéder à à l'agencement du graphe de cluster. Par défaut, il s'agit d'une instance de ibm_ilog.graphlayout.tree.TreeLayout. Vous pouvez définir tout paramètre d'agencement arborescent global sur cette instance d'agencement.
Pour pouvez également spécifier une instance d'agencement différente pour placer les clusters :
Utilisez la méthode suivante :
layout.setLayoutOfClusterGraph(otherLayout)

Traitement des graphes déconnectés

L'algorithme d'agencement peut utiliser le mécanisme générique pour agencer les composants connectés. (Pour plus d'informations sur ce mécanisme, voir Agencement des composants connectés). Ce mécanisme générique est disponible au niveau de l'instance d'agencement circulaire elle-même, ainsi qu'au niveau de l'instance d'agencement arborescent qui agence le graphe de cluster.
Exemple de traitement des graphes déconnectés
Vous pouvez l'activer sur l'agencement circulaire lui-même :
Appelez l'instance d'agencement circulaire :
circularLayout.setLayoutOfConnectedComponentsEnabled(true);
circularLayout.setLayoutOfCOnnectedComponents(someGridLayout);
Si elle est désactivée sur l'agencement circulaire, l'agencement du graphe de cluster traite les composants déconnectés. Vous pouvez bien sûr activer le traitement générique des composants déconnectés également sur l'agencement du graphe de cluster (s'il est pris en charge dans ce cas, ce qui est vrai pour l'agencement arborescent par défaut) via
circularLayout.getLayoutOfClusterGraph().setLayoutOfConnectedComponentsEnabled(true);
circularLayout.getLayoutOfClusterGraph().setLayoutOfCOnnectedComponents(someGridLayout);
mais cela revient à l'indiquer directement au niveau de l'instance d'agencement circulaire.