制約の優先度 (HL)

一連の制約を使用すると競合が生じる可能性があります。 すなわち、すべての制約を同時に満たすことができない場合があります。 例えば、ibm_ilog.graphlayout.hierarchical.HierarchicalSameLevelConstraint によって 2 つのノードを同じレベルにすることと、 ibm_ilog.graphlayout.hierarchical.HierarchicalRelativeLevelConstraint によって 2 つのノードのうちの一方をもう一方よりも高いレベルにすることを、同時に強制することはできません。 この場合、2 つの制約のうちの 1 つをレイアウト時に無視する必要があります。
一般的に、制約の競合は、優先度が最低の制約を無視して優先度が最高の制約を満たすことで解決されます。 以下のルールで、制約の優先度を詳細に説明します。
  • ノードが配置されるレベルに影響する制約は、レベル内のノードの位置に影響する制約の前に適用されます。
  • ibm_ilog.graphlayout.hierarchical.HierarchicalLayout.HierarchicalExtremityConstraint は、優先度の高い一連の制約に変換されます。
    例えば、南側の末端制約は、複数の同一レベル制約および複数の相対レベル制約に変換されます。
  • これらは互いに競合することはありません。これらはその他のすべての制約 (指定レベル・インデックスを含む) より優先されます。
  • ibm_ilog.graphlayout.hierarchical.HierarchicalLayout.HierarchicalLevelRangeConstraint (および直接のレベル・インデックスの指定) は 2 番目に高い優先度を持ちます。
    2 つのノードが同じレベルになるように強制されるが、指定されたレベル範囲が交わらない場合は、レベル範囲は無視されます。 以下に例を挙げます。
    layout.addConstraint(new ibm_ilog.graphlayout.hierarchical.HierarchicalSameLevelConstraint(node1,node2));
    layout.setSpecNodeLevelIndex(node1, 5);
    layout.setSpecNodeLevelIndex(node2, 10);
    
    node1node2 はともにレベル 5 に配置されます。 競合する指定の layout.setSpecNodeLevelIndex(node2, 10) は無視されます。
  • 同一レベル制約、レベル範囲制約、およびレベル・インデックスの直接指定は、ibm_ilog.graphlayout.hierarchical.HierarchicalLayout.HierarchicalRelativeLevelConstraint より優先されます。
    複数の相対レベル制約が互いに競合する場合は、指定優先度が最高の制約が優先されます。 ただし、すべてのリンクも、相対レベル制約と暗黙的に見なされます。 優先度の高いリンクがノードを特定のレベルになるように強制する場合、優先度がそれよりも低い相対レベル制約は無視されます。
  • インクリメンタル・モードが使用可能になっている場合でも、ibm_ilog.graphlayout.hierarchical.HierarchicalLayout.HierarchicalSwimLaneConstraint は常に評価されます。
    この制約の優先度は相対位置制約および横並び制約よりも高くなっています。 同じスイムレーンに属するノードのグループに対して横並び制約を指定できますが、異なるスイムレーンに属するノードの横並び制約は無視されます。 同じスイムレーンのノード間の相対位置制約を指定できます。 また、あるスイムレーン・グループ全体と別のスイムレーン・グループ間の相対位置制約を指定して、スイムレーンを効果的に順序付けることができます。 ただし、スイムレーンを分離する必要が生じる場合は、相対位置制約は無視されます。 スイムレーン制約は、指定された位置インデックスおよび末端制約よりも優先されます。 すなわち、スイムレーン制約を使用した場合、どのノードに対しても位置インデックスおよび東/西の末端制約を指定することはできません。
  • ibm_ilog.graphlayout.hierarchical.HierarchicalLayout.HierarchicalSideBySideConstraint は、対応するノードが同じレベルに属している場合にのみ評価されます。
    通常、同一レベル制約を使用してノードが同じレベルになるように強制してから、 横並び制約を使用してノードが特定の順序になるように強制します。横並び制約は、相対位置制約よりも優先されます。 複数の横並び制約が競合する場合は、指定優先度が最も高い制約が他の制約より優先されます。
  • ibm_ilog.graphlayout.hierarchical.HierarchicalLayout.HierarchicalRelativePositionConstraint も、 対応するノードが同じレベルに属している場合にのみ評価されます。
    横並び制約がこれよりも優先されますが、横並び制約と競合することはまれです。 複数の相対位置制約が競合する場合は、指定優先度が最も高い制約が他の制約より優先されます。