Lecture10_2013

advertisement
Размещение
ориентированных графов
Апанович З.В.
apanovich@iis.nsk.su
Тел:3309344
К. 217
Поуровневое размещение(продолжение)
Упорядочение
вершин
Абсолютные
координаты вершин
Геометрия ребер
Пример двух разных присваиваний
горизонтальных координат
Присваивание горизонтальных координат
• При вычислении горизонтальных координат
вершин в основном учитываются следующие
требования:
• Надо иметь как можно меньше сгибов, которые
возникают при фиктивных вершинах (то есть,
желательно иметь прямолинейные ребра);
• Не должно быть наложений вершин и ребер;
• Иногда возникает требование, чтобы ребра были
как можно более вертикальными.
• Стандартные способы решения состоят либо в
оптимизации некоторой целевой функции в
заданных ограничениях, либо в итеративном
улучшении имеющегося размещения, либо и то и
другое одновременно.
Вычисление абсолютных координат
вершин
Например, в работе K. Sugiyama, S. Tagawa, и M.Toda «Methods for visual
understanding of hierarchical system structures, 1981» была предложена
квадратичная программа для вычисления горизонтальных координат:
+
•
•
В этом подходе целевая функция является взвешенной суммой двух
термов. Первый терм штрафует за слишком большую
горизонтальную длину ребер, а второй терм пытается
сбалансировать влияние соседей сверху и соседей снизу.
Также должно удовлетворяться ограничение на минимальное
допустимое горизонтальное расстояние между вершинами, а также
требование вертикальности внутренних сегментов: x(u) = x(v) если
(u,v)E, и при этом u,v B (фиктивные вершины).
Присваивание горизонтальных координат
•
•
•
•
•
•
Еще один вариант целевой функции
предложен в книге G. Di Battista, P. Eades,
R. Tamassia, I. G. Tollis. «Graph
Drawing: Algorithms for the Visualization of
Graphs. Prentice Hall, 1999».
Проблема нахождения размещения с как
можно более прямыми ребрами может быть
сформулирована следующим образом:
Рассмотрим ориентированный путь p =
(v1,..vk), такой что v2,v3...vk-1 – это фиктивные
вершины.
Назовем эту последовательность ребропутем.
Присваивание горизонтальных координат
Если это ребро-путь прямолинейный,
то фиктивные вершины должны
удовлетворять соотношению:
i 1
x(vi )  x(v1 ) 
( x(v k )  x(v1 ))
k 1
• для всех 1 < i < k.
• Заметим, что эта формула верна только
для слоев, расположенных на равных
расстояниях, но ее легко настроить на
случай разных расстояний между слоями.
При этом предполагается, что вершины в
одном слое расположены на минимально
допустимом расстоянии
Присваивание горизонтальных координат
Для того, чтобы сформулировать
более компактную целевую функцию,
введем терм, описывающий
идеальную x-координату вершины vi:
i 1
x(vi ) :
( x(v k )  x(v1 ))  x(v1 )
k 1
• для всех 1 < i < k. Это соответствовало
бы x-координате вершины vi, если бы
она находилась на прямой линии
между x(v1) и x(vk)
Присваивание горизонтальных координат
Тогда отклонение от прямой линии
можно подсчитать
как:
k 1
dev( p )   ( x(vi )  x(vi ))
i 2
2
Присваивание горизонтальных координат
А для того, чтобы получить как
можно более прямые ребра, надо
минимизировать
 dev( p)
p _ яв ляется_ ребропутем
При ограничениях
• x(w) -x(v)  (w,v) для всех пар вершин w,
v, расположенных в одном слое, и при
этом w находится справа от v
Присваивание горизонтальных координат
• Ограничения гарантируют, что упорядочение, вычисленное на
этапе минимизации пересечений ребер, будет сохранено и при
этом между вершинами будет гарантировано минимально
допустимое горизонтальное расстояние (w,v).
• Величина (w,v) вычисляется на основе значений размеров
вершин и требуемого минимального расстояния между двумя
последовательными вершинами.
• Оптимальное решение этой проблемы оптимизации может
привести к экспоненциальной ширине изображения и, значит,
надо бы добавить еще неравенств, чтобы минимизировать
заодно и ширину.
• Основное неудобство состоит в том, что целевая функция
квадратичная и ее можно оптимизировать только для
небольших примеров.
Присваивание горизонтальных координат
Еще одна цель при вычислении абсолютных координат состоит
в том, чтобы нарисовать все ребра как можно более
вертикальными (Gansner et al, 1993).
В этом случае целевая функция может быть сформулирована
как:
 (u , v) (u , v) | x(u )  x(v) |
( u ,v )E
• При ограничениях: x(u)-x(v) (u,v) /* расстояние
между двумя соседними вершинами одного слоя*/
•  - это вес ребра, если таковой имеется,
•  - внутреннее значение, предназначенное для
выпрямления длинных ребер. Было предложено
использовать большие  для ребер, соединяющих
фиктивные вершины: (е) = 8, если оба конца
ребра являются фиктивными вершинами, (е)=2,
если один конец ребра является фиктивной
вершиной, (е)=1, если ни одного.
Присваивание горизонтальных координат,
алгоритмы итеративного улучшения
• G. Sander Graph layout for applications in compiler
construction,1999:
• Для каждой вершины v должны быть вычислены такие
абсолютные координаты, чтобы из того, что номер слоя одной
вершины меньше номера слоя второй вершины L(v) <L(u),
следовало бы соотношение для координат: Y(v) < Y(u), (1)
• а из найденных упорядочений в слоях следовало
соотношение: если (v) < (u), то X(v) < X(u). (2)
• При этом не должно возникать наложения вершин, а
размещение должно быть по возможности сбалансированным.
•
Пусть мы хотим минимизировать такую функцию:
Z 
| ( X ( w)  X (v)) |
vV ( v , w )E
( w,v )E
При ограничениях (2)
Присваивание горизонтальных
координат, эвристики
• На практике гораздо быстрее, чем
стандартные методы оптимизации,
работают эвристические методы, такие
например, как имитация резиновых
жгутов.
• Ребра тянут вершины подобно
резиновым жгутам. Вершины при этом
смещаются горизонтально в соответствии
с суммой сил, на них действующих.
• Сила определяется следующим образом:
1
Frub (v) 
( X ( w)  X (v))

deg ree(v) ( v ,w)E
( w,v )E
Пример
Frub(v) =(2+4+1+3+5)/5 = 3
Присваивание горизонтальных
координат, эвристики
• Если Frub(v)<0, мы перемещаем
вершину v влево на величину min
{|Frub(v)|, X(v)-X(ul) - d(ul,v)}.
• В противном случае вершина
перемещается вправо на величину
• min {|Frub(v)|, X(ur)-X(v) - d(v,ur)}
• ul , ur – это левый и правый соседи
вершины v в этом слое, а d(u,v) – это
минимальное допустимое расстояние,
между вершинами u и v.
• Легко убедиться, что при такой
стратегии Z уменьшается на каждом
шаге.
Присваивание горизонтальных
координат, эвристики
• Если расстояние между двумя
соседними вершинами в одном
слое становится равным
минимальному, эти вершины
называются касающимися.
• Касающиеся вершины влияют друг
на друга: если левая вершина
хочет сдвинуться вправо, а правая
– влево, ни одна из них не может
сдвинуться.
• Для того, чтобы достичь баланса в
этом случае, используются
области вершин. Касающиеся
вершины принадлежат одной
области тогда и только тогда,
когда P(v1)<...<P(vn)
• Frub(v1)…  F(vn)
P(v) = 4, P(u) = 5.
Frub(v) = (5-4)+(6-4)+(4-4)+(5-4)+(64)/5 = 1. 2
Frub(u) = (1-5)+(2-5)+(3-5)+(1-5)/4 =
-13/4 = -3.25
Присваивание горизонтальных
координат, эвристики
• Сила, действующая на область, вычисляется по
формуле:
Frub({v1,…,vn}) =
1 n
Frub (vi )

n i 1
А все вершины группы сдвигаются на величину
min{|Frub({v1,…,vn})|, доступное место}.
При таких сдвигах Z еще уменьшается
Присваивание горизонтальных
координат, эвристики
• Таким образом, эвристическая процедура
вычисления горизонтальных координат
выглядит следующим образом:
• while Z недостаточно мало do
•
for each слоя Li from i =1 to n do
•
Вычислить все области в слое Li
• Сдвинуть все вершины в соответствии с
силой Frub, действующей на соответствующую
область
• }
• }
Присваивание горизонтальных
координат, эвристики
В качестве варианта, можно осуществлять просмотр
сверху вниз или снизу вверх так, что учитываются
только позиции потомков или предков.
• Это больше напоминает систему с маятниками, где
вершины, это шары, висяшие на резиновых жгутах.
Самые верхние шары закреплены на потолке и
система раскачивается пока не стабилизируется.
Присваивание горизонтальных
координат, эвристики
Для просмотра сверху вниз определим силу,
действующую со стороны соседей сверху:
1
Fм аятник_ вниз (v ) 
( X ( w)  X (v ))

in deg(v ) ( w,v )E
Для просмотра снизу вверх определим силу,
действующую со стороны соседей снизу:
Fм аятник_ вверх(v ) 
1
( X ( w)  X (v ))

out deg(v ) ( v , w )E
Алгоритм линейной сложности
построения вертикальных внутренних
сегментов
U. Brandes, B. Kopf «Fast and Simple Horizontal
Coordinate Assignment», 2002.
Алгоритм, имеющий линейную сложность,
гарантирует:
• вертикальность внутренних сегментов,
• небольшую длину ребер,
• хороший баланс между верхними и нижними
соседями.
Алгоритм Брандеса-Копфа
• При этом длина реберного сегмента (u, v)
определяется как |x(u) − x(v)|.
• Напомним, что величина i=1 |x − xi|
минимальна, если x является медианой xi.
Поэтому в этом алгоритме везде, где это
возможно, каждая вершина выравнивается
вертикально с ее соседней медианой.
Алгоритм Брандеса-Копфа
• Алгоритм состоит из трех базовых шагов.
• 1) Вертикальное выравнивание. Осуществляется
попытка выравнивания вершины с ее либо верхней
либо нижней медианой.
• 2) Компактизация. Выровненные вершины получают
одну и ту же горизонтальную координату, и все
вершины размещаются как можно ближе к
следующей вершине в предпочтительном
горизонтальном направлении выравнивания.
• 3) Балансировка. 4 полученных размещения
комбинируются для получения максимально
сбалансированного размещения.
Этапы алгоритма Брандеса-Копфа
Выравнивание по медианным соседям
У каждой вершины надо оставить только ее соседей-медианы.
Например, вершина 12 имела 5 соседей в слое 2 , остался только один
сосед-медиана . Вершина 26 имела 4 соседа в слое 4, осталось два
соседа- медианы .
Этапы алгоритма Брандеса-Копфа
Удаление конфликтов
•Даже если остались только соседи-медианы, еще присутствуют
пересечения ребер. Два пересекающихся ребра невозможно
сделать вертикальными одновременно.
•Между пересекающимися сегментами возможны три типа
конфликтов:
Тип 2 Пересечение внутренних сегментов (оба сегмента имеют
концами фиктивные вершины),
Тип 1 внутренний и не-внутренний сегмент,
Тип 0 Пересечение не-внутренних сегментов, которые либо
пересекаются, либо имеют общую вершину.
• Конфликты типа 2. Пересечение внутренних сегментов,
• Из них хотя бы один не может быть вертикальным.
• Замечено, что вертикальность внутренних сегментов очень
важна для понимания изображения.
• Поэтому предпочтительно удаление таких конфликтов еще на
этапе минимизации пересечений ребер.
• Или же можно сделать дополнительную серию перестановок,
чтобы убрать пересечения внутренних сегментов.
• Если же для данного приложения порядок вершин важнее, чем
вертикальность внутренних сегментов, потом можно будет
вернуться к исходному упорядочению.
• Конфликты типа 1 возникают, когда не-внутренний
сегмент пересекается с внутренним сегментом.
• В этом случае осуществляется препроцессирование,
которое удаляет не-внутренние сегменты. Или более
точно, оно помечает не-внутренние сегменты, и когда
на следующем шаге будет осуществляться попытка
выравнивания, помеченные сегменты
рассматриваться не будут.
Alg. 1: Препроцессирование (метим и
удаляем конфликты типа 1)
•
•
Alg. 1: Препроцессирование (метим конфликты типа 1){
for i ← 2, . . . , h − 2 do{
– k0 ← 0; l ← 1;
– for l1 ← 1, . . . , |Li+1| do{
• if l1 = |Li+1| или vl(i 1) инцидентна внутреннему сегменту между
1
Li+1 и Li
• then{
– k1 ← |Li|;
( i 1)
– if vl1
инцидентна внутреннему сегменту между Li+1 и Li
then{
( i 1)
k1 ← pos[верхнего соседа vl
];
}
Alg. 1: Препроцессирование (метим
конфликты типа 1)
•
Alg. 1: Препроцессирование
•
•
•
while l ≤ l1 do{
(i )
( i 1)
v
foreach верхнего соседа k вершины vl
do {
1
if k < k0 или k > k1 then пометить сегмент (
}
l ← l + 1;
(i ) ( i 1)
);
k, l
v v
•
•
•
•
•
•
(метим конфликты типа 1){
}
k0 ← k1;
}
}
}
Конфликты типа 0 (между двумя не
внутренними сегментами)
Сегмент (v, u)
находится слева от
сегмента (v’,u’)
Сегмент (v, u)
находится слева от
сегмента (v,u’)
Конфликты типа ноль возникают между двумя не внутренними сегментами.
На таких сегментах вводится отношение порядка, и конфликты разрешаются
в жадной манере, в зависимости от того, по какому из медианных соседей
должно осуществляться выравнивание: в данном случае левый сегмент
остается, а правый удаляется
Этапы алгоритма Брандеса-Копфа
Вертикальное выравнивание по верхнему
левому соседу
Максимальное множество вертикально выровненных (связанных)
вершин называется блоком, а корнем блока считается самая
верхняя вершина.
На этом шаге алгоритма определяется присваивание
горизонтальных координат по отношению к вертикальному
выравниванию. То есть, всем вершинам блока присваивается
координата корня.
Alg. 2: Вертикальное выравнивание
Этапы алгоритма Брандеса-Копфа
Граф блоков
Рассмотрим граф блоков, получаемый введением ориентированных ребер
между каждой вершиной и ее потомком в ее слое и стягиванием блоков в
одну вершину.
Длина каждого ребра в этом графе равна величине минимального
допустимого расстояния между двумя соседними вершинами. Для
вычисления координаты каждой вершины ищется самый длинный путь в
графе блоков.
Этапы алгоритма Брандеса-Копфа
Компактизация
Затем граф блоков разбивается на классы. Самый первый класс определяется
множеством вершин, достижимых из самой левой верхней вершины.
Найденный класс удаляется из графа блоков, и процедура определения нового
класса повторяется до тех пор, пока каждая вершина не попадет в один из
классов.
После этого процедура компактизации пытается разместить классы как можно
ближе друг к другу. Вся процедура описывается алгоритмом 3
Этапы алгоритма Брандеса-Копфа
Компактизация
Этапы алгоритма Брандеса-Копфа,
4 размещения
Верхнее
левое
Верхнее
правое
Нижнее
левое
Нижнее
правое
Этапы алгоритма Брандеса-Копфа,
Балансировка
• Сначала, все 4 размещения выравниваются по
размещению наименьшей ширины, сдвигая два
размещения с самыми правыми (самыми левыми)
координатами так, что их минимальная (максимальная)
координата совпадает с минимальной координатой
размещения минимальной ширины. Из четырех
результирующих координат для каждой вершины по
отдельности вычисляется окончательная координата по
правилу средней медианы, которая для k значений,
таких что x1 ≤ . . . ≤ xk равна:
( x( k 1) / 2   x( k 1) / 2  ) / 2
Этапы алгоритма Брандеса-Копфа
• Лемма 1. Средняя медиана сохраняет
порядок вершин и минимальное
расстояние между вершинами.
Этапы алгоритма Брандеса-Копфа
• Alg. 4: Присваивание горизонтальных координат{
– Препроцессирование при помощи Alg. 1;
• for вертикальных направлений up, down do
•
for горизонтальных направлений left, right do
•
Вертикальное выравнивание при помощи Alg. 2;
•
Горизонтальная компактизация при помощи Alg. 3;
•
}
•
}
•
Выровнять с размещением наименьшей ширины;
•
Присвоить координаты, равные средней медиане
выровненных кандидатов;
• }
Окончательный результат после
балансировки
Алгоритм Брандеса-Копфа
• Утверждение Алгоритм 4 вычисляет
присваивание горизонтальных
координат за время O(N), где N- это
общее количество вершин и реберных
сегментов.
Присваивание вертикальных координат
Расстояние между
слоями может
зависеть от
количества
горизонтальных
наложений ребер.
Два ребра (v1,w1) и
(v2,w2) налагаются
горизонтально, если
x(v1) ≤ x(v2) ≤ x(w1)
или x(v1)≤x(w2)≤x(w1)
Изображение ребер
Рисовать ребра легко, если все вершины имеют
одинаковый размер и форму. Тогда дуга с размахом 1
просто рисуется как прямолинейный сегмент, а длинные
ребра рисуются либо как полилинейные сегменты,
промежуточными концами которых являются фиктивные
вершины, либо как сплайны, у которых имеются
контрольные точки. Если расстояние между вершинами
достаточно велико, пересечений между ребрами и
вершинами не возникнет.
Изображение ребер
• Если вершины имеют разные размеры, можно
нарисовать ребра как набор ортогональных
сегментов.
Изображение ребер
Более понятный вариант изображения получится, если
сгибать ребра в двух точках, но не ортогонально.
Проще всего установить длину вертикального
сегмента ребра равной размеру наибольшей вершины
в слое.
Тогда все невертикальные сегменты начинаются и
заканчиваются на одной и той же y-координате.
Очевидно, что ни одно ребро не будет пересекать
вершин. Недостаток в том, что слишком много сгибов.
Изображение ребер
Можно делать сгибы только там, где надо
Algorithm
While  eE которое налагается на вершину или
пересекает вертикальный сегмент другого ребра
do{
Увеличить вертикальный сегмент е.
}
Изображение ребер
Можно получить еще более симпатичное
изображение, если рисовать ребра в виде
кривых, а не полилинейных сегментов.
Наиболее популярными являются кривые
Безье, которые специфицируются своими
контрольными точками b0,..,bn. Основное
свойство этих кривых в том, что они полностью
вписаны в выпуклую оболочку контрольных
точек.
Изображение ребер
Для нахождения трех контрольных точек, надо найти
подходящие треугольники при точках сгибов ребер. Поэтому
средней контрольной точкой является сам сгиб, и надо найти
хорошие позиции для остальных двух сгибов. Сначала эти
точки ставятся на смежных линейных сегментах так, что
получается равнобедренный треугольник. Затем треугольники
уменьшаются, чтобы не пересекать вершин.
Горизонтальное и радиальное
поуровневые изображения
Пример бесполезного изображения
Граф достаточно плотный, а размещение такое узкое,
что ничего разглядеть невозможно.
Граф с 1371 вершин, 3815 ребер.
Иерархическое изображение графов
Иерархическое изображение графов
Иерархическое изображение графов
Выделение вершин одной группы при
помощи раскраски
Но если мы рисуем раскрытую
иерархию, как опознать операторы
одного блока, одной процедуры…?
Проще всего выкрасить вершины,
принадлежащие одной процедуре
одним цветом.
Второй способ – это заняться
кластеризацией, то есть разместить
связанные вершины близко друг к
другу настолько, что можно
нарисовать их общую рамку.
Выделение вершин одной группы при
помощи размещения и рамочки
Составные графы
• Sugiyama K., MusieK., Visualization of
structural Information: Automatic drawing
of Compound Graphs, (1991)
• ввели расширение класса
кластеризованных графов, составные
графы, а также предложили алгоритм
для генерации иерархического
представления составных графов.
Составные графы
• Кластеризованный граф - это граф с разбиением
вершин на кластеры. В представлении
кластеризованных графов кластерная область
рисуется как простая замкнутая область, которая
содержит отрисовки всех вершин, принадлежащих
кластеру. Отношение вложенности ограничивается
кластерными областями одного уровня вложенности,
• и нет ребер, соединяющих вершины разных уровней
вложенности.
• В составном орграфе отношение вложенности
наравне с отношением смежности определяется на
одном и том же множестве вершин.
Пример дерева вложенностей
Пример графа смежностей(следования)
Пример изображения составного графа
D-Abductor и VCG
•Sugiyama K., MusieK.,
Visualization of structural
Information: Automatic drawing of
Compound Graphs, (1991)
•Sander G. Layout of
Compound Directed
Graphs, 1996
S. Pupyrev, L. Nachmanson, and M. Kaufmann. Improving layered
graph layouts with edge
bundling. In Proc. 18th Int. Symp. on Graph Drawing, pages 465–
479, 2010.
Sergey Pupyrev, Lev Nachmanson, Sergey Bereg, and Alexander E. Holroyd
Edge Routing with Ordered Bundles. In Proceedings of 19th International
Symposium on Graph Drawing (GD'11), pp. 135-146, 2011
http://www.cs.arizona.edu/~spupyrev/
Download