クラスター・モード
ibm_ilog.graphlayout.circular.CircularLayout.AUTOMATIC
では、リンク交差を回避するために、クラスターを計算して、クラスター内のノードを順序付けることができます。
デフォルトでは、放射モードのツリー・レイアウト (ibm_ilog.graphlayout.tree.TreeLayout
) を使用して、クラスターは互いに相対的に配置されます。
また、他のレイアウトを指定して、クラスターの配置を処理することもできます。
以下のパラメーターは、クラスター・モード AUTOMATIC
でのみ動作します。クラスタリングの微調整
クラスター・モード
AUTOMATIC
は、指定したクラスターを初期クラスターとして考慮します。
ノードの一部またはすべてに指定クラスターがない場合は、グラフのトポロジーからクラスターが計算されます。このモードは、以下の複数のトポロジー基準を考慮します。
- 2 連結性
- 1 クラスター当たりの最小ノード数
- 1 クラスター当たりの最大ノード数
- スター型クラスターを形成する高度ノード
2 連結性によるクラスタリング
一連のノードで、各ノード間に多くの接続がある場合、クラスターを形成する必要があります。「多くの接続」という一般的な特性は、次のように 2 連結性という用語で数学的に記述できます。
一連のノードは、1 つのノードのみまたは 1 つのリンクのみを削除してもそれらのノードが接続されたままである場合、2 連結されています。例えば、接続リングは常に 2 連結されています。
これは、クラスターに適切な基準です。デフォルトで、アルゴリズムは
まず、グラフの 2 連結された部分を検出して、検出した部分ごとに通常のクラスター (スター型クラスターではない) を形成します。
これが適切ではない場合は、2 連結されたコンポーネントの検出を使用不可にすることもできます。
2 連結された部分の検出を使用不可にする例 (CL アルゴリズム)
2 連結されたコンポーネントの検出を使用不可にするには、以下のようにします。
以下のメソッドを使用します。
layout.setClusterByBiconnectivity(false)
このパラメーターは、クラスター・モードが
BY_CLUSTER_IDS
または BY_SUBGRAPHS
の場合には無効です。最小クラスター・サイズ
通常のクラスター (スター型クラスターではない) の最小サイズを指定できます。
初期クラスターが小さすぎる場合は、より大きなクラスターにマージされます。
最小クラスター・サイズの指定例 (CL アルゴリズム)
最小クラスター・サイズを指定するには、以下のようにします。
以下のメソッドを使用します。
layout.setMinimumClusterSize(10)
このパラメーターは、クラスター・モードが
BY_CLUSTER_IDS
または BY_SUBGRAPHS
の場合には無効です。最大クラスター・サイズ
通常のクラスター (スター型クラスターではない) の最大サイズを指定できます。
初期クラスターが大きすぎる場合は、より小さなクラスターに分割されます。
この値は手掛かりに過ぎません。最小クラスター・サイズおよび最大クラスター・サイズの差があまりない場合、最大クラスター・サイズが必ずしも尊重されるわけではありません。
最大クラスター・サイズの指定例 (CL アルゴリズム)
最大クラスター・サイズを指定するには、以下のようにします。
以下のメソッドを使用します。
layout.setMaximumClusterSize(20)
クラスターの分割は反復プロセスです。
最大のクラスター・サイズを得るための最大反復数を指定できます。
反復数が多ければ多いほど、品質が向上しますが、レイアウトが遅くなります。
最大クラスター反復数の最大数の指定例 (CL アルゴリズム)
反復の最大数を指定するには、以下のようにします。
以下のメソッドを使用します。
layout.setMaximumNumberOfIterationsToReachMaxClusterSize(100)
これらのパラメーターは、クラスター・モードが
BY_CLUSTER_IDS
または BY_SUBGRAPHS
の場合には無効です。スター型クラスターの最小サイズ
通常のクラスターのほかに、レイアウト・アルゴリズムで、スター型クラスターを検出することもできます。
クラスター化されていない隣接ノードを多く持つ高度ノードを検出して、それらのノードをまとめて、高度ノードをスター型の中心とするクラスターを形成します。
最小スター型クラスター・サイズの指定例 (CL アルゴリズム)
ノードおよび隣接ノードをまとめてスター型クラスターを形成する際の最小の度合いを指定するには、以下のようにします。
以下のメソッドを使用します。
layout.setHighDegreeStarClusterSize(5)
このパラメーターは、クラスター・モードが
BY_CLUSTER_IDS
または BY_SUBGRAPHS
の場合には無効です。交差低減の微調整
各クラスター内のノードの順序がクラスター・インデックス (クラスター・メンバーシップおよびクラスター (CL) 内のノードの順序 を参照) によって指定されなかった場合は、
AUTOMATIC
モードでは、各クラスター内のノードが、リンク交差を回避するように再順序付けされます。これは単なるヒューリスティックな手法であり、必ずしもリンク交差の数が最小になることを保証できるわけではありません。
2 つのタイプのリンクがあります。クラスター内リンクは、同じクラスターに属するノードを接続し、クラスター間リンクは異なるクラスターのノードを接続します。
交差低減の際、クラスター内リンクはクラスター間リンクと競合します。
クラスターのノード順序のなかには、そのクラスター内のリンクの交差がより多く発生するものがある一方で、
異なるクラスター間を接続するリンクの交差をより多く発生させるものもあります。
この振る舞いは、交差ウェイトで制御できます。クラスター間リンク交差低減
クラスター間リンクを考慮する交差低減ステップは、交差低減の最も時間がかかる部分です。
これは、デフォルトでは使用可能になっていますが、使用不可にすることができます。
使用不可にすると、各クラスター内のノードの順序を計算するためにクラスター内リンクのみが考慮されます。
クラスター間リンク交差低減を使用不可にする例 (CL アルゴリズム)
クラスター間リンク交差低減を使用不可にするには、以下のようにします。
以下のメソッドを使用します。
layout.setInterClusterCrossingReduction(false)
このパラメーターは、クラスター・モードが
BY_CLUSTER_IDS
または BY_SUBGRAPHS
の場合には無効です。クラスター内リンク交差ペナルティー
交差低減は、交差のペナルティーの合計を最小化しようとします。
2 つのクラスター内リンクが交差する場合、クラスター内ペナルティーの合計にカウントされます。
各クラスターのノード順序を計算する際にクラスター内リンクのウェイトを大きくする必要がある場合は、
このペナルティーを大きくしてください。
クラスター内ペナルティーの指定例 (CL アルゴリズム)
クラスター内リンク交差ペナルティーを指定するには、以下のようにします。
以下のメソッドを使用します。
layout.setIntraClusterLinkCrossingPenalty(2)
このパラメーターは、クラスター・モードが
BY_CLUSTER_IDS
または BY_SUBGRAPHS
の場合には無効です。クラスター間リンク交差ペナルティー
2 つのクラスター間リンクが交差する場合、クラスター間ペナルティーのペナルティー合計にカウントされます。
各クラスターのノード順序を計算する際にクラスター間リンクのウェイトを大きくする必要がある場合は、
このペナルティーを大きくしてください。
クラスター間ペナルティーの指定例 (CL アルゴリズム)
クラスター間リンク交差ペナルティーを指定するには、以下のようにします。
以下のメソッドを使用します。
layout.setInterClusterLinkCrossingPenalty(3)
このパラメーターは、クラスター・モードが
BY_CLUSTER_IDS
または BY_SUBGRAPHS
の場合には無効です。混合クラスター・リンク交差ペナルティー
クラスター内リンクがクラスター間リンクと交差する場合、混合クラスター・ペナルティーのペナルティー合計にカウントされます。
混合クラスター・ペナルティーの指定例 (CL アルゴリズム)
混合クラスター・リンク交差ペナルティーを指定するには、以下のようにします。
以下のメソッドを使用します。
layout.setMixedClusterLinkCrossingPenalty(4)
このパラメーターは、クラスター・モードが
BY_CLUSTER_IDS
または BY_SUBGRAPHS
の場合には無効です。クラスター・グラフのレイアウト
各クラスターのノードが、円に配置されます。次に、それぞれの円が平面に配置されます。
環状レイアウトはデフォルトでは、放射モードのツリー・レイアウトを使用して円を配置します。
クラスター・グラフのレイアウト処理の例
ツリー・レイアウトのレイアウト・パラメーターは、以下のように、ツリー・レイアウトにアクセスすることで変更できます。
以下のメソッドを使用します。
var layoutOfClusterGraph = layout.getLayoutOfClusterGraph()
これで、クラスター・グラフのレイアウトにアクセスします。
デフォルトでは、これは
ibm_ilog.graphlayout.tree.TreeLayout
のインスタンスです。
任意のグローバル・ツリー・レイアウト・パラメーターをこのレイアウト・インスタンスに設定できます。また、以下のように、別のレイアウト・インスタンスを指定してクラスターを配置することもできます。
以下のメソッドを使用します。
layout.setLayoutOfClusterGraph(otherLayout)
非接続グラフの処理
このレイアウト・アルゴリズムは、接続コンポーネントをレイアウトするための汎用メカニズムを使用できます。(このメカニズムについて詳しくは、接続コンポーネントのレイアウト を参照してください。) この汎用メカニズムは、
環状レイアウト・インスタンス自体で使用可能ですが、クラスター・グラフをレイアウトするツリー・レイアウト・インスタンスでも使用可能です。
非接続グラフの処理例
以下のように、環状レイアウト自体で使用可能にすることができます。
以下のように、環状レイアウト・インスタンスに要求します。
circularLayout.setLayoutOfConnectedComponentsEnabled(true); circularLayout.setLayoutOfCOnnectedComponents(someGridLayout);
環状レイアウトで使用不可にしている場合、クラスター・グラフのレイアウトは非接続コンポーネントを処理します。
もちろん、以下のようにして、クラスター・グラフのレイアウトで、非接続コンポーネントの汎用処理を使用可能にすることもできます (サポートされている場合 - デフォルトのツリー・レイアウトではサポートされます)。
circularLayout.getLayoutOfClusterGraph().setLayoutOfConnectedComponentsEnabled(true); circularLayout.getLayoutOfClusterGraph().setLayoutOfCOnnectedComponents(someGridLayout);
ただし、環状レイアウト・インスタンスで直接指定した場合と効果はまったく同じです。