Разница между ветвлением и кратчайшими вариациями пути - PullRequest
0 голосов
/ 10 марта 2019

Я должен реализовать следующие алгоритмы:

  • Отделение & Связанное
  • Филиал и связка с расширенным списком
  • Branch & Bound w / Допустимая эвристика
  • A * Алгоритм (также упоминается как алгоритм Дейкстры в более позднем руководстве MIT)

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


Предполагается, что вы пытаетесь найти кратчайший (оптимальный) путь между узлом S и узлом E .


Simple Branch & Bound :

  • Должен найти кратчайший путь к каждому узлу, прежде чем быть уверенным, что он нашел кратчайший путь к E .
  • Использует обычную очередь для отслеживания узлов, которые она должна сканировать.

Отделение и связка с расширенным списком

  • Расширенный список отслеживает уже посещенные нами узлы, поэтому мы не можем повторно посещать узлы, которые уже имеют оптимальные пути.
  • Чтобы этот метод гарантировал оптимальный путь, необходимо использовать очередь с приоритетами, чтобы при посещении узла мы могли быть уверены, что путь к этому узлу является оптимальным (это явно не указано в руководстве )
  • Этот алгоритм может быть остановлен, как только мы достигнем конечного узла
  • Это лучше, чем обычный B & B, но у него нет смещения в сторону конечного узла E , и, следовательно, может быть быстрее

A * алгоритм

A* = B&B + dynamic programming + admissible heuristic (из руководства)

  • Допустимая эвристика h (N) , в данном случае это длина наиболее известного в настоящее время пути до N + евклидова расстояния от N до E.
    • Это позволяет алгоритму смещать конечный узел вместо сканирования всего.
  • Очередь приоритетов используется для выбора следующего лучшего узла (динамическое программирование) (аналогично реализации расширенного списка)

Branch & Bound с допустимой эвристикой

Теперь вот с чем у меня проблемы, так как кажется, что добавление эвристики без очереди приоритетов не даст никакого преимущества перед простым алгоритмом B & B, потому что мы не назначаем приоритеты узлам с очередью приоритетов (потому что, если мы это сделали , это был бы просто алгоритм A *.

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


Было бы здорово увидеть объяснение того, почему мы бы хотели добавить эвристику в алгоритм B & B без добавления очереди с приоритетами.

...