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

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

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

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

Как проще всего это построить? Как бы вы с этим справились?

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

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

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

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

Спасибо за все Ваши ответы!

Саша

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

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


person sascha    schedule 01.11.2010    source источник
comment
Если вы знаете координаты, просто нарисуйте график.   -  person Dialecticus    schedule 01.11.2010
comment
какие-либо рекомендации библиотеки для этого?   -  person sascha    schedule 01.11.2010
comment
Этим летом у меня был студент проекта, работавший над этим с библиотекой графиков ускорения. Если вам интересно (и это не слишком неодобрительно), я могу сделать репозиторий доступным для чтения всем и опубликовать URL-адрес.   -  person Flexo    schedule 01.11.2010
comment
Меня всегда интересует код, использующий библиотеку ускоряющих графов. Возможно, использование этой библиотеки для этой цели - это слишком много (потому что это довольно большая библиотека, и мне трудно ее изучить), но графическое представление моего решения может быть полезно на более поздних этапах. Было бы неплохо, если бы вы могли загружать код куда угодно, когда это не так уж и много. Спасибо, в любом случае.   -  person sascha    schedule 01.11.2010
comment
Видео на YouTube есть по адресу: youtube.com/watch?v=7b5lE8AZOGc и я ' м пытаюсь получить анонимный доступ к SVN завтра. Видео представляет собой тривиальный график, который визуализируется для отображения на двухпроекторном устройстве Hemispherium, которое у нас есть.   -  person Flexo    schedule 01.11.2010


Ответы (2)


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

person BЈовић    schedule 01.11.2010
comment
Я хотел добиться простого, но просматриваемого сюжета моих туров, но без особых вложений в работу (если нет каких-либо положительных побочных эффектов; например, графическое представление в библиотеке графиков ускорения). Я не специалист в области построения графиков и / или графического интерфейса и не хочу им быть (особенно графического интерфейса). Поэтому я немного предвзято отношусь к таким мощным вещам, как OpenGL, но я думаю, что на самом деле это не изучается за короткий промежуток времени. И я ожидаю, что это будет не так важно, как должно, в моей будущей работе над программированием. Но все равно спасибо за ваш пост. - person sascha; 02.11.2010

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

person hmitcs    schedule 20.05.2014