2010-11-13 6 views
4

Я реализовал алгоритм избежания препятствий в Matlab, который присваивает каждому узлу в графике потенциал и пытается спуститься с этого потенциала (цель планового перехода находится в глобальном минимуме). Теперь могут появиться локальные минимумы, поэтому (глобальному) планированию нужен способ выйти из них. Я использовал стратегию, чтобы иметь список открытых узлов, которые доступны из уже посещенных узлов. Я посещаю открытый узел с наименьшим потенциалом.Могу ли я реализовать потенциальный метод поля/глубины в первом случае для предотвращения препятствий с использованием буфера усиления?

Я хочу реализовать это на C++, и мне интересно, есть ли у Boost Graph такие алгоритмы. Если нет - есть ли польза от использования этой библиотеки, если мне нужно написать алгоритм самостоятельно, и мне также придется создать свой собственный класс графа, потому что граф слишком велик, чтобы быть сохраненным в виде списка смежности/списка ребер в памяти.

Любые советы приветствуются!

ответ

4

boost::graph содержит list алгоритмов минимизации минимальных путей/затрат. Вас могут заинтересовать следующие артикулы: Dijkstra Shortest path, A*.
Алгоритмы можно легко настроить. Если это не соответствует вашим потребностям, взгляните на visitor concepts. Он позволяет вам настроить ваш алгоритм в некоторой предопределенной точке события.

И наконец, Distributed BGL обрабатывает огромный график (возможно, миллионы узлов). Он будет работать для вас, если ваш график не поместится в памяти.

Вы можете найти хороший обзор библиотеки Boost Graph here. И, конечно, не стесняйтесь задавать более конкретный вопрос о BGL в stackoverflow.

+0

На самом деле то, что я собираюсь сделать, похоже на A *. Тем не менее, я исследую следующий узел, у которого есть наименьший потенциал, вместо того, чтобы иметь наименьшую сумму «предыдущей стоимости + сметная стоимость цели». Является ли реализация A * настраиваемой, достаточной для ее интеграции? – Philipp

+0

Я наградил вас щедростью, еще раз спасибо за ваш ответ. Тем не менее, мне все равно хотелось бы получить ответ на мой комментарий выше. Спасибо, Филипп – Philipp

1

На мой взгляд, boost::graph действительно потрясающе подходит для реализации новых алгоритмов, поскольку он предоставляет различные держатели данных, адаптеры и обычно используемые материалы (которые, очевидно, могут использоваться как части вновь построенных алгоритмов).

Последние из них также можно настроить из-за использования посетителей и других умных моделей.

На самом деле, boost::graph может потребоваться некоторое время, чтобы привыкнуть, но, на мой взгляд, это действительно того стоит.