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.