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.