Введение

Эвристический алгоритм поиска пути

Итеративное углубление A* (IDA*) – это алгоритм обхода графа и поиска пути, который может найти кратчайший путь между заданным начальным узлом и любым элементом набора целевых узлов во взвешенном графе. Это вариант поиска в глубину с итеративным углублением, который использует идею применения эвристической функции для консервативной оценки оставшейся стоимости достижения цели, позаимствованную из алгоритма A*. Поскольку это алгоритм поиска в глубину, его использование памяти меньше, чем у A*, но, в отличие от обычного поиска в глубину с итеративным углублением, он сосредотачивается на исследовании наиболее перспективных узлов и, таким образом, не достигает одной и той же глубины во всем дереве поиска. В отличие от A*, IDA* не использует динамическое программирование и поэтому часто исследует одни и те же узлы многократно. В то время как стандартный поиск в глубину с итеративным углублением использует глубину поиска в качестве критерия отсечения для каждой итерации, IDA* использует более информативный критерий: f(n) = g(n) + h(n), где g(n) – стоимость пути от начального узла к узлу n, а h(n) – эвристическая оценка стоимости пути от n к цели, специфичная для решаемой задачи. Алгоритм был впервые описан Ричардом Корфом в 1985 году.

Описание

Итеративное углубление A* работает следующим образом: на каждой итерации выполняется поиск в глубину, при этом ветвь отсекается, когда её общая стоимость превышает заданный порог. Этот порог начинается с оценки стоимости в начальном состоянии и увеличивается с каждой итерацией алгоритма. На каждой итерации порог, используемый для следующей итерации, равен минимальной стоимости всех значений, превысивших текущий порог. IDA* полезен в задачах с ограниченной памятью. Поиск A* хранит большую очередь неисследованных узлов, которая может быстро заполнить память. В отличие от него, поскольку IDA* не запоминает никакие узлы, кроме тех, что находятся на текущем пути, ему требуется объем памяти, линейный по длине находящегося в построении решения. Его временная сложность анализируется Корфом и др. при условии, что эвристическая оценка стоимости h является согласованной, то есть

для всех узлов n и всех соседей n' узла n; они заключают, что по сравнению с полным перебором дерева поиска для задачи экспоненциального размера, IDA* достигает меньшей глубины поиска (на постоянный множитель), но не меньшего коэффициента ветвления. Рекурсивный поиск в ширину с лучшим первым выбором – это еще одна версия поиска A* с ограничением памяти, которая может быть быстрее IDA* на практике, поскольку требует меньшего восстановления узлов. Решение кубика Рубика – пример задачи планирования, которую можно эффективно решать с помощью IDA*.