Устранение симметрии из графиков

У меня есть алгоритмическая проблема, в которой я получил передаточную матрицу между множеством состояний. Следующий шаг — возвести его в степень, но он очень большой, поэтому мне нужно сделать для него некоторые сокращения. В частности, он содержит много симметрии. Ниже приведены несколько примеров того, сколько узлов можно исключить с помощью простых наблюдений.

Мой вопрос заключается в том, существует ли алгоритм для эффективного устранения симметрии в орграфах, подобно тому, как я сделал это вручную ниже.

Во всех случаях начальный вектор имеет одинаковое значение для всех узлов.


В первом примере мы видим, что b, c, d и e получают значения от a и друг от друга. Следовательно, они всегда будут содержать одинаковое значение, и мы можем их объединить.

Digraph AДиграф Б


В этом примере мы быстро замечаем, что график идентичен с точки зрения a, b, c и d. Также для соответствующих боковых узлов не имеет значения, к какому внутреннему узлу он подключен. Следовательно, мы можем свести граф только к двум состояниям.

Digraph CДиграф D


Обновление: некоторые люди были достаточно разумны, не совсем понимая, что имелось в виду под "матрицей передачи состояний". Идея здесь в том, что вы можете разделить комбинаторную задачу на несколько типов состояний для каждого n в вашем повторении. Затем матрица расскажет вам, как перейти от n-1 к n.

Обычно вас интересует только значение одного из ваших состояний, но вам нужно вычислить и другие, чтобы вы всегда могли перейти на следующий уровень. Однако в некоторых случаях несколько состояний симметричны, то есть они всегда будут иметь одно и то же значение. Очевидно, что вычислять все это пустая трата времени, поэтому мы хотим уменьшить граф до тех пор, пока все узлы не станут «уникальными».

Ниже приведен пример матрицы переноса для редуцированного графа в примере 1.

[S_a(n)]   [1  1  1] [S_a(n-1)]
[S_f(n)] = [1  0  0]*[S_f(n-1)]
[S_B(n)]   [4  0  1] [S_B(n-1)]

Любые предложения или ссылки на документы приветствуются.


person Thomas Ahle    schedule 17.02.2011    source источник
comment
+1 за хорошие примеры и красивые графики   -  person schnaader    schedule 17.02.2011
comment
Извините за мое невежество, но я не уверен, какие значения вы имеете в виду в своем первом примере (т.е. получить значения от A, содержать идентичное значение).   -  person mhum    schedule 17.02.2011
comment
Если я правильно понимаю, вы ищете специальный подграф (циклы, линии, полные подграфы, ...) с особыми характеристиками (степени узлов, связность между ними, ...). Вероятно, эти подграфы имеют какое-то значение в ваша изначальная проблема. Возможно, было бы неплохо определить интересующие подграфы и найти их с помощью соответствующих алгоритмов. Проблема может быть рекурсивной, такое же упрощение можно сделать на графике результатов.   -  person Ante    schedule 18.02.2011
comment
Анте: Я добавил уточнение. Я не совсем уверен, можете ли вы рассматривать подграфы сокращенных графов, поскольку вы не отбрасываете узлы, а скорее соединяете эквивалентные вместе.   -  person Thomas Ahle    schedule 18.02.2011


Ответы (3)


Нати Брендана Маккея ( http://cs.anu.edu.au/~bdm/nauty/) — лучший известный мне инструмент для вычисления автоморфизмов графов. Может быть слишком дорого вычислять всю группу автоморфизмов вашего графа, но вы можете повторно использовать некоторые алгоритмы, описанные в статье Маккея «Практический изоморфизм графов» (ссылка на странице nauty).

person userOVER9000    schedule 17.02.2011
comment
Большой. Я попытался использовать их инструмент dreadnaut, и он выдал в точности ожидаемые результаты. В первом примере говорится, что узел b:d образует орбиту, а во втором примере он дает a:d, e:h. , Однако это не дает увеличенных значений вершин, но их должно быть тривиально вычислить, когда известно уменьшение. - person Thomas Ahle; 18.02.2011
comment
Очень интересно! Для справки, две вершины u и v находятся на одной и той же орбите, если существует автоморфизм графа f, а именно, некоторая перестановка f всех вершин, которая сохраняет ребра (т. е. если существует ребро от u до v, то существует — это ребро из f(u) в f(v)) — которое отображает u в v (т. е.: f(u) = v). - person mhum; 19.02.2011
comment
Действительно интересно. Однако я должен признать, что для моей реальной цели я остановился на простом вероятностном подходе. Вместо того, чтобы пытаться вычислить орбиты, я просто последовательно проверял группы узлов с общими значениями. Я думаю, это сработало хорошо, потому что мои цифры растут очень быстро. - person Thomas Ahle; 19.02.2011

Я просто добавлю дополнительный ответ, основанный на том, что предложил userOVER9000, если кому-то еще интересно. Ниже приведен пример использования nauty в примере 2 с помощью инструмента dreadnaut.

$ ./dreadnaut 
Dreadnaut version 2.4 (64 bits).
> n=8 d g                                     -- Starting a new 8-node digraph
 0 : 1 3 4;                                   -- Entering edge data
 1 : 0 2 5;
 2 : 3 1 6;
 3 : 0 2 7;
 4 : 0;
 5 : 1;
 6 : 2;
 7 : 3;
> cx                                          -- Calling nauty
(1 3)(5 7)
level 2:  6 orbits; 5 fixed; index 2
(0 1)(2 3)(4 5)(6 7)
level 1:  2 orbits; 4 fixed; index 4
2 orbits; grpsize=8; 2 gens; 6 nodes; maxlev=3
tctotal=8; canupdates=1; cpu time = 0.00 seconds
> o                                           -- Output "orbits"
 0:3; 4:7;

Обратите внимание, что он предлагает соединить узлы 0:3, которые a:d в примере 2, и 4:7, которые e:h.

Алгоритм nauty плохо документирован, но авторы описывают его как экспоненциальный худший случай, n^2 среднее.

person Thomas Ahle    schedule 18.02.2011

Вычисление симметрии кажется проблемой второго порядка. Взяв только a, b, c и d на вашем втором графике, симметрия должна быть выражена

a(b,c,d) = b(a,d,c)

и все его перестановки или что-то в этом роде. Рассмотрим второй подграф a', b', c', d', добавленный к нему. Опять же, у нас есть симметрии, но параметризованные по-разному.

Можем ли мы для вычислительных специалистов (а не математиков) сформулировать задачу так?

Каждый узел графа содержит набор букв. На каждой итерации все буквы в каждом узле копируются к его соседям по стрелкам (некоторые стрелки требуют более одной итерации и могут рассматриваться как конвейер анонимных узлов).

Мы пытаемся найти эффективные способы определения таких вещей, как * какие буквы содержит каждый набор/узел после N итераций. * для каждого узла N, после которого его набор уже не меняется. * какие наборы узлов содержат одинаковые наборы букв (класс эквивалентности)

?

person PaulMurrayCbr    schedule 20.05.2012
comment
Да, мы могли бы выразить это так. По крайней мере, если мы позволим более чем одному узлу начинаться с одной и той же буквы. - person Thomas Ahle; 20.05.2012