Graph-Drawing / TSP-Route-Drawing в C ++ с «известными» координатами: как? Какая библиотека / инструмент? - PullRequest
2 голосов
/ 01 ноября 2010

Я разрабатываю какую-то эвристику для вариации проблемы маршрутизации транспортных средств в C ++.

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

Было бы полезно нарисовать это в дополнительном окне в моей программе, но запись графика в графический файл тоже должна быть в порядке.

Какой простой способ построить это? Как бы вы занялись этим?

Сначала я попытался найти общие пакеты для визуализации графов (graphviz, tulip, networkx (python)), но понял, что все они специализируются на разметке графов (когда нет координат). Поправь меня, когда я ошибаюсь. Я не знаю, можно ли сказать этим пакетам, что у меня уже есть координаты, помогая алгоритмам размещения.

Следующее, что я попробовал, это библиотека CGAL с выводом geomview -> пока не повезло -> ubuntu вылетает geomview.

Еще один вопрос: лучше ли использовать некоторые некомпонованные 2d-plot-библиотеки, рискующие сюжетом, на которые не очень хорошо смотреть (есть ли что делать, кроме масштабирования?) Или использовать некоторые библиотеки, основанные на алгоритме компоновки (например, graphviz, tulip, networkx), скормить их расстояниями между вершинами и надеяться, что алгоритмы компоновки сохраняют расстояния при построении графиков в хорошем для просмотра виде?

  • Если способ сделать это не в макете, то в какую библиотеку вы порекомендуете?
  • Если способ сделать это основан на макете: как я могу использовать расстояния / координаты в этих библиотеках? А какую библиотеку вы рекомендуете?

Спасибо за ваш вклад!

Sascha

РЕДАКТИРОВАТЬ: Я выполнил реализацию прототипа с использованием библиотеки PLplot (http://plplot.sourceforge.net/). Результаты хороши и должны быть достаточными на данный момент. Я обнаружил и выбрал эту библиотеку, потому что связанный проект (VRPH Software Package / Groer) использовал этот сюжет и исходный код был распространен. Таким образом, реализация была сделана за короткий промежуток времени. API, на мой взгляд, немного неуклюжий и низкоуровневый. Может быть, есть некоторые более современные (может быть, не основанные библиотеки) библиотеки там? MathGL? Dislin? Может быть, я попробую их тоже.

Хорошая особенность рисования нескольких туров в задаче маршрутизации транспортных средств состоит в том, что "не так уж и плохо" алгоритмы, как правило, обнаруживают хорошие непересекающиеся и расходящиеся туры, которые действительно полезны для глаз; -)

Ответы [ 2 ]

2 голосов
/ 01 ноября 2010

Не совсем понятно, что вы пытаетесь архивировать, но если я правильно понимаю ваш вопрос, то вы можете сделать это с помощью OpenGL. Имея координаты вершины, это должно быть довольно просто.

0 голосов
/ 20 мая 2014

Вы можете использовать Gnuplot с входным текстовым файлом, содержащим ваше решение.Удобно рисовать точки (вершины), затем линии (пути агентов), чем связывать их.Чтобы упростить создание сценария, вы можете иметь отдельный файл для каждого транспортного средства, если известно количество транспортных средств.проверить: http://www.cleveralgorithms.com/nature-inspired/advanced/visualizing_algorithms.html

...