Алгоритм D*: различия между версиями
Leer.Meer (обсуждение | вклад) (Новая страница: «Алгоритм D*(Дейкстры)-позволяет нам задавать приоритеты исследования путей. Вместо равно...») |
Leer.Meer (обсуждение | вклад) Нет описания правки |
||
Строка 5: | Строка 5: | ||
Для начала попробуем разобраться в принципе работы алгоритма: | Для начала попробуем разобраться в принципе работы алгоритма: | ||
[[Файл:Graf D*.png|слева|безрамки]] | [[Файл:Graf D*.png|слева|безрамки]] | ||
Строка 21: | Строка 24: | ||
И так, в алгоритме D* на ряду с приоритетной очередью, мы создадим словарь, чтобы следить за общей стоимостью движения с начальной вершины, а в цикле будем вынимать вершину из очереди с минимальной ценой, затем для всех смежных вершин будем рассчитывать новую цену перемещения от текущей вершины, и если новой вершины не окажется в словаре стоимости пути до нее или новая цена будет ниже, чем уже имеется, то занесем эту вершину в очередь и обновим стоимость пути до нее, и запишем, что пришли к этой вершине из текущей. | И так, в алгоритме D* на ряду с приоритетной очередью, мы создадим словарь, чтобы следить за общей стоимостью движения с начальной вершины, а в цикле будем вынимать вершину из очереди с минимальной ценой, затем для всех смежных вершин будем рассчитывать новую цену перемещения от текущей вершины, и если новой вершины не окажется в словаре стоимости пути до нее или новая цена будет ниже, чем уже имеется, то занесем эту вершину в очередь и обновим стоимость пути до нее, и запишем, что пришли к этой вершине из текущей. | ||
[[Файл:D*code.png|слева|безрамки|518x518пкс]] | [[Файл:D*code.png|слева|безрамки|518x518пкс]] | ||
Строка 34: | Строка 39: | ||
не забываем добавить восстановление пути: | не забываем добавить восстановление пути: | ||
[[Файл:D*code2.png|слева|безрамки|384x384пкс]] | [[Файл:D*code2.png|слева|безрамки|384x384пкс]] | ||
Версия от 10:37, 29 мая 2021
Алгоритм D*(Дейкстры)-позволяет нам задавать приоритеты исследования путей. Вместо равномерного исследования всех возможных путей, он отдает предпочтение путям с наиболее низкой "стоимостью".
Создавая, проекты, связанные с перемещением, программируемого объекта, мы часто сталкиваемся с проблемой поиска кратчайшего пути из одной точки в другую. В этой статье мы подробно рассмотрим Алгоритм поиска кратчайшего пути известного как Алгоритм D* так же известный, как Алгоритм Дейкстры.
Для начала попробуем разобраться в принципе работы алгоритма:
Обратим свое внимании на представленный граф. Предположим, что вершины на нем-это населенные пункты, а ребра-это дороги с указанной стоимостью проезда. Как становится понятно, нам необходимо добраться из одной точки в другую за минимальную стоимость. Т. е. найти наиболее оптимальный путь из А в В.
Здесь нам понадобится структура данных, известная как "Куча", которая будет реализовывать приоритетную очередь.
Напишем алгоритм на языке Python.
Сам граф будет состоять из списка смежностей, в которых элементы теперь являются картежами, где на первом месте указана стоимость проезда к вершине, на втором сама вершина.
И так, в алгоритме D* на ряду с приоритетной очередью, мы создадим словарь, чтобы следить за общей стоимостью движения с начальной вершины, а в цикле будем вынимать вершину из очереди с минимальной ценой, затем для всех смежных вершин будем рассчитывать новую цену перемещения от текущей вершины, и если новой вершины не окажется в словаре стоимости пути до нее или новая цена будет ниже, чем уже имеется, то занесем эту вершину в очередь и обновим стоимость пути до нее, и запишем, что пришли к этой вершине из текущей.
не забываем добавить восстановление пути:
Применив алгоритм, мы видим самый "дешевый" путь в нашем графе: