Parámetros para expertos de la modalidad AUTOMATIC

La modalidad de agrupación en clúster ibm_ilog.graphlayout.circular.CircularLayout.AUTOMATIC puede calcular los clústeres y ordenar los nodos dentro de los clústeres para evitar intersecciones de enlaces. De forma predeterminada, coloca los clústeres con un diseño de árbol (ibm_ilog.graphlayout.tree.TreeLayout) en modalidad radial. También puede especificar otros diseños para manejar la ubicación de los clústeres. Los parámetros siguientes sólo funcionan en la modalidad de agrupación en clúster AUTOMATIC.

Ajuste de la agrupación en clúster

La modalidad de agrupación en clúster AUTOMATIC tiene en cuenta los clústeres especificados como clústeres iniciales. Si no se ha especificado un clúster para algunos nodos (o todos), calcula los clústeres a partir de la topología del gráfico.
Esta modalidad tiene en cuenta varios criterios topológicos:
  • Biconectividad
  • Número mínimo de nodos por clúster
  • Número máximo de nodos por clúster
  • Nodos con un grado elevado para formar clústeres en estrella

Agrupación en clúster mediante biconectividad

Si un conjunto de nodos tiene muchas conexiones entre sí, debe formar un clúster. La propiedad informal "muchas conexiones" se puede describir matemáticamente mediante el término biconectividad: un conjunto de nodos es biconexo si al eliminar sólo un nodo o sólo un enlace los nodos siguen estando conectados. Por ejemplo, un anillo de conexión siempre es biconexo. Es un criterio adecuado para formar clústeres. El algoritmo detecta de forma predeterminada primero los componentes biconexos del gráfico y forma un clúster normal (no un clúster en estrella) para cada componente. Si este procedimiento no es adecuado, la detección de componentes biconexos también se puede inhabilitar.
Ejemplo de cómo inhabilitar la detección de componentes biconexos (algoritmo DCirc)
Para inhabilitar la detección de componentes biconexos:
Utilice el método:
layout.setClusterByBiconnectivity(false)
Este parámetro no surte efecto si la modalidad de agrupación en clúster es BY_CLUSTER_IDS o BY_SUBGRAPHS.

Tamaño mínimo de clúster

Es posible especificar el tamaño mínimo de clústeres normales (no de clústeres en estrella). Si los clústeres iniciales son demasiado pequeños, se fusionan en clústeres mayores.
Ejemplo de cómo especificar el tamaño mínimo de clúster (algoritmo DCirc)
Para especificar el tamaño mínimo de un clúster:
Utilice el método:
layout.setMinimumClusterSize(10)
Este parámetro no surte efecto si la modalidad de agrupación en clúster es BY_CLUSTER_IDS o BY_SUBGRAPHS.

Tamaño máximo de clúster

Es posible especificar el tamaño máximo de clústeres normales (no de clústeres en estrella). Si los clústeres iniciales son demasiado grandes, se dividen en clústeres más pequeños. Este valor es solo una sugerencia. Si el tamaño mínimo de clúster y el tamaño máximo de clúster son parecidos, no siempre se podrá respetar el tamaño máximo de clúster.
Ejemplo de cómo especificar el tamaño máximo de clúster (algoritmo DCirc)
Para especificar el tamaño máximo de un clúster:
Utilice el método:
layout.setMaximumClusterSize(20)
La división de clústeres es un proceso iterativo. Es posible especificar el número máximo de iteraciones para obtener el tamaño máximo de clúster. Cuanto mayor sea el número de iteraciones, mejor será la calidad y más lento será el diseño.
Ejemplo de cómo especificar el número máximo de iteraciones para conocer el tamaño máximo de clúster (algoritmo DCirc)
Para especificar el número máximo de iteraciones:
Utilice el método:
layout.setMaximumNumberOfIterationsToReachMaxClusterSize(100)
Estos parámetros no surten efecto si la modalidad de agrupación en clúster es BY_CLUSTER_IDS o BY_SUBGRAPHS.

Tamaño mínimo de clúster en estrella

Además de los clústeres normales, el algoritmo de diseño también puede detectar clústeres en estrella. Detecta nodos con un grado elevado que tienen muchos vecinos que no están agrupados en clústeres y los agrupa con el nodo que tiene el grado mayor como centro de la estrella
Ejemplo de cómo especificar el tamaño mínimo de clúster en estrella (algoritmo DCirc)
Para especificar el grado mínimo necesario para que un nodo y su vecino formen un clúster en estrella:
Utilice el método:
layout.setHighDegreeStarClusterSize(5)
Este parámetro no surte efecto si la modalidad de agrupación en clúster es BY_CLUSTER_IDS o BY_SUBGRAPHS.

Ajuste de la reducción de intersecciones

Si el orden de los nodos dentro de cada clúster no se especifica mediante índices de clúster (consulte Miembros del clúster y orden de los nodos de un clúster (DCirc)), la modalidad AUTOMATIC reordena los nodos dentro de cada clúster para evitar intersecciones de enlaces. Es sólo un método heurístico y no siempre puede garantizar el número mínimo de intersecciones de enlaces. Hay dos tipos de enlaces: enlaces intraclúster que conectan nodos que pertenecen al mismo clúster, y enlaces interclústeres que conectan nodos de clústeres diferentes. Durante la reducción de intersecciones, los enlaces intraclúster compiten con los enlaces interclúster. Algunas ordenaciones de los nodos de un clúster producen más intersecciones de los enlaces del interior del clúster, mientras que otras ordenaciones de los nodos producen más intersecciones de los enlaces que conectan clústeres diferentes. El comportamiento se puede controlar mediante los pesos de las intersecciones.

Reducción de intersecciones de enlaces interclústeres

El paso de reducción de intersecciones que tiene en cuenta los enlaces interclústeres es la parte más lenta de la reducción de intersecciones. Está habilitado de forma predeterminada, pero puede inhabilitarse. Si se inhabilita, para calcular el orden de los nodos del interior de cada clúster sólo se tienen en cuenta los enlaces intraclúster.
Ejemplo de cómo inhabilitar la reducción de intersecciones de enlaces interclústeres (algoritmo DCirc)
Para inhabilitar la reducción de intersecciones de enlaces interclústeres:
Utilice el método:
layout.setInterClusterCrossingReduction(false)
Este parámetro no surte efecto si la modalidad de agrupación en clúster es BY_CLUSTER_IDS o BY_SUBGRAPHS.

Penalización de las intersecciones de enlaces intraclúster

La reducción de intersecciones intenta minimizar la suma de penalizaciones de las intersecciones. Si dos enlaces intraclúster se intersecan, ello contribuye a la suma con la penalización intraclúster. Aumente esta penalización si los enlaces interclústeres deben tener un peso mayor a la hora de calcular el orden de los nodos de cada clúster.
Ejemplo de cómo especificar la penalización intraclústeres (algoritmo DCirc)
Para especificar la penalización de las intersecciones de enlaces intraclúster:
Utilice el método:
layout.setIntraClusterLinkCrossingPenalty(2)
Este parámetro no surte efecto si la modalidad de agrupación en clúster es BY_CLUSTER_IDS o BY_SUBGRAPHS.

Penalización de intersecciones de enlaces interclústeres

Si dos enlaces interclústeres se intersecan, ello contribuye a la suma de penalizaciones con la penalización interclústeres. Aumente esta penalización si los enlaces intraclústeres deben tener un peso mayor a la hora de calcular el orden de los nodos de cada clúster.
Ejemplo de cómo especificar la penalización interclústeres (algoritmo DCirc)
Para especificar la penalización de las intersecciones de enlaces interclúster:
Utilice el método:
layout.setInterClusterLinkCrossingPenalty(3)
Este parámetro no surte efecto si la modalidad de agrupación en clúster es BY_CLUSTER_IDS o BY_SUBGRAPHS.

Penalización de las intersecciones de enlaces de clústeres mixtos

Si un enlace intraclúster se interseca con un enlace interclústeres, ello contribuye a la suma de penalizaciones con la penalización de clústeres mixtos.
Ejemplo de cómo especificar la penalización de clústeres mixtos (algoritmo DCirc)
Para especificar la penalización de las intersecciones de enlaces de clústeres mixtos:
Utilice el método:
layout.setMixedClusterLinkCrossingPenalty(4)
Este parámetro no surte efecto si la modalidad de agrupación en clúster es BY_CLUSTER_IDS o BY_SUBGRAPHS.

Diseño de un gráfico de clústeres

Los nodos de cada clúster se colocan formando un círculo. A continuación, cada círculo se coloca en el plano. El diseño circular utiliza de forma predeterminada un diseño de árbol en modalidad radial para colocar los círculos.
Ejemplo de cómo manejar el diseño de gráficos de clústeres
Los parámetros de diseño del diseño de árbol pueden modificarse accediendo al diseño de árbol:
Utilice el método:
var layoutOfClusterGraph = layout.getLayoutOfClusterGraph()
para acceder al diseño del gráfico de clústeres. De forma predeterminada, es una instancia de ibm_ilog.graphlayout.tree.TreeLayout. Puede establecer cualquier parámetro de diseño de árbol global en esta instancia de diseño.
También puede especificar una instancia de diseño diferente para colocar los clústeres:
Utilice el método:
layout.setLayoutOfClusterGraph(otherLayout)

Manejo de gráficos no conexos.

El algoritmo de diseño puede utilizar el mecanismo genérico para diseñar componentes conectados. (Para obtener más información sobre este mecanismo, consulte Diseño de componentes conectados ). Este mecanismo genérico está disponible en la instancia de diseño circular, sino también en la instancia de diseño de árbol que diseña el gráfico de clústeres.
Ejemplo de cómo manejar gráficos no conexos
Puede habilitarlo en el diseño circular:
Llame a la instancia de diseño circular:
circularLayout.setLayoutOfConnectedComponentsEnabled(true);
circularLayout.setLayoutOfCOnnectedComponents(someGridLayout);
Si está inhabilitada en el diseño circular, el diseño del gráfico de clústeres maneja los componentes desconectados. Por supuesto, también se puede habilitar el manejo genérico de componentes desconectados en el diseño del gráfico de clústeres (si se admite, lo que es cierto para el diseño de árbol predeterminado) mediante
circularLayout.getLayoutOfClusterGraph().setLayoutOfConnectedComponentsEnabled(true);
circularLayout.getLayoutOfClusterGraph().setLayoutOfCOnnectedComponents(someGridLayout);
pero esto tiene exactamente el mismo efecto que si lo especifica directamente en la instancia de diseño circular.