2012-01-09 5 views
3

В принципе у меня есть множество узлов, содержащих gps-координаты. Как реализовать поиск A * таким образом, чтобы я мог использовать эти геодезические, чтобы сравнивать их друг с другом и найдите кратчайший путь, задав расстояние от одной точки до другой.Алгоритм поиска A * (star) для кратчайшего пути

Обновление: 01/11/12

Я пытаюсь сделать кратчайший маршрут пути, достигая этого путем обхода каждого узла по указанному алгоритму и сравнить расстояние от узлов проходится, чтобы найти кратчайший путь. Другая проблема заключается в том, что я не могу найти правильную реализацию поиска A * в Android/Java. Моя проблема прямо сейчас:

  1. С спасу GeoPoint (узлы) каждое пересечение дорог, как я должен хранить его на массив или ссылки список?

  2. Прямо сейчас мы смогли рассчитать расстояние каждого узла, но не динамически. Что делать, чтобы использовать это при вычислении для кратчайшего маршрута с использованием поиска A *.

ответ

2

евклидово расстояние (т.е. расстояние по прямой линии) между двумя точками может быть хорошей эвристической функции.

Подробнее ... A * поиск по Wikipedia.

A * поиск на самом деле является модификацией Алгоритм Дейкстры для нахождения кратчайшего пути одного источника. Единственное различие заключается в том, что поиск A * использует эвристическую функцию, которую направляет поиск, обрезка ненужных ветвей дерева поиска. Хорошая эвристическая функция должна быть сконструирована таким образом, чтобы ее значение становилось монотонным по любому пути поиска. Он не должен завышать фактическое расстояние между двумя состояниями. Поскольку эвклидовое расстояние является наименьшим возможным расстоянием между двумя точками, нет возможности переоценки на расстоянии между двумя точками.

Подробнее об эвклидовом расстоянии см. here. Для применения к геокоординатам см. here.

+0

Можете ли вы изложить немного своей идеи сэр, чтобы дать мне еще несколько советов. Спасибо. – rahstame

+0

Я очень ценю ваше объяснение, сэр. Тем не менее я не знаю, как я могу подключить его к геоданным. – rahstame

+0

A * предполагает пространство на основе плитки. Если вы хотите использовать GPS-точки, вам придется наложить их на некоторую форму сетки, иначе эффективность A * исчезнет, ​​потому что не кратчайшие маршруты не будут обрезаны. И, конечно, координаты GPS не находятся на реальной прямоугольной сетке из-за сходимости полюсов. Вместо этого попробуйте найти поиск пути, основанный на нелинии. –

0

Что именно вы пытаетесь достичь? A * - эвристический алгоритм поиска, например. используется в игре, чтобы найти следующий «лучший» ход. Вы пытаетесь найти самый короткий путь, соединяющий все эти узлы? В этом случае look/google для «проблемы коммивояжера».

0

Here - это эффективная, хорошо протестированная память с открытым исходным кодом, реализация в реальном времени A *, которая также может использоваться на Android. Расчет расстояний может быть легко заменен (по умолчанию это реализация быстрого haversine)

+0

ссылка мертва? –

+0

обновил ссылки – Karussell

Смежные вопросы