• Авторизация


Трещина в голове 18-04-2007 16:57 к комментариям - к полной версии - понравилось!


Будни работы.

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

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

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

Обожаю свою работу.
вверх^ к полной версии понравилось! в evernote
Комментарии (8):
psv 18-04-2007-17:12 удалить
Ха=) Ну так мы этим же почти баяном занимались, когда крыши писали=) Сначала определяешь наверняка является ли граф планарным. Это делается по количеству узлов и рёбер. Потом можно даже двумя путями идти. Например можно отбросить все вершины с одним ребром. А потом начинаем воевать с покрывающими деревьями. Либо по-другому. Взять любой граф, двойственный данному и узлы этого графа будут как раз фрагментами плоскости. их мне ажется размещать будет легче.
teal 18-04-2007-17:25 удалить
Да, с планарным-то просто довольно-таки. Хотя, дуги графически нужно располагать в соответствии с инженерными традициями: не просто так под любым углом, а используя точки перегиба, разрывы и т.д. Есть классный алгоритм Сугиямы, он как раз бы тут подходил, если б не циклы. Тут еще нужно учитывать, что все вершины графа взвешены. Задача -- рисование энергосети. Так что придется помедитировать =)
psv 18-04-2007-17:44 удалить
Тогда вот тебе идея одна. Попробуй разместить вершины как угодно с минимальным возможным кол-вом пересечений рёбер (для планарного графа = 0). А потом запусти итеративнй процесс в ходе которого узлы будут отталкиваться друг от друга с одинаковой силой, зависящей от расстояния, грани будут стремиться удержать максимальные углы, а рёбра среднюю длину. После порогового кол-ва итераций ты получишь преемлемый результат. Кстати, можно визуализировать этот процесс, тогда будет очень симпатично выглядеть устаканивание графа=). Нужно только поварьировать коэффициенты и силы.
teal 18-04-2007-17:54 удалить
Ну прямо прописные истины говоришь. =) Этого не хватает. Даже "пружинный" алгоритм не справляется за приемлимое время. Каждое ребро представляется в виде пружинки, которая растягивается и стягивается, ну а вершины -- это типа атомов что-то, постоянно отталкиваются. Работает довольно быстро и результат дает неплохой, но для это задачи тоже не приемлимо. У нас есть решение, просто нужно найти время его запрограммировать.
teal 18-04-2007-18:12 удалить
Визуально, кстати, действительно прикольно смотрится выравнивание =) Но на графе из десятков, а не сотен вершин... К тому же этого тоже не достаточно, ибо тут куча всяких дополнительных ограничителей -- энергосети состоят из очень разнообразных элементов и у каждого из них своя "традиция" подключения =)
psv 18-04-2007-18:43 удалить
Как сказал сегодня один мудрый человек, любая задача либо неверно поставлена, либо тривиальна, либо состоит из подзадач. Любая подзадача -- это тоже задача. Однако никто не гарантирует, что общее количество таких задач будет меньше количества атомов в программисте.
teal 19-04-2007-12:34 удалить
psv.
Великолепно! Мои два ограничителя в таких задачках, как в термо-реле: "Бритва Оккама" и закон "Разделяй и влавствуй". Исходя из них, в принципе, и строится теория изобретений и решений любого рода задач.

ferante.
Тоже голова треснула? =)


Комментарии (8): вверх^

Вы сейчас не можете прокомментировать это сообщение.

Дневник Трещина в голове | teal - Теалятина | Лента друзей teal / Полная версия Добавить в друзья Страницы: раньше»