Нужна помощь для понимания алгоритмов поиска (A*, IDA*, DFS, BFS, IDDFS и т. д.)

У меня есть некоторые проблемы в понимании некоторых алгоритмов поиска, используемых в ИИ (Искусственный интеллект).

  • какова точная разница между A* и Ида* (итеративный Дипинг звезды)? Это просто эвристическая функция? Если это так, я все еще не могу представить, как работает IDA*.. :/
  • Is Ида* аналогично технологии BFS (поиск в ширину) (когда глубина расширения составляет всего 1 уровень, я имею в виду-перемещение только на один уровень "вниз", есть ли разница между Ида* и BFS)
  • Is IDDFS (итеративный Поиск глубины) аналогично Ида*, за исключением эвристической функции (которая эквивалентна 0 в IDDFS)
  • что именно IDDFS - двигаясь только один уровень, затем с помощью DFS (поиск по глубине)? Если это так, то таким образом многие состояния вычисляются (расширяются) намного больше, чем единицы.. Или вот так-используйте DFS С определенной глубиной, затем сохраните "листья" (последние развернутые узлы) и повторите их, чтобы использовать DFS снова (что, на самом деле,BFS?)
  • где "итерационный" происходит от? Как я вижу,IDDFS не является итеративным вообще, это все еще recursiive, просто перемешивает BFS и DFS? Или я ошибаюсь? Или вот это"итерационный" не имеет ничего общего с противоположным рекурсии?
  • что значит "итерационный " for Ида* ?

не могли бы вы привести несколько примеров? Я читал весь день про эти алгоритмы, я знаю свои достоинства и недостатки, сложности и т. д., но я просто не мог найти хороших примеров (кроме A*; я знаю BFS и DFS, другие беспокоят меня). Я нашел псевдокод для IDA* в разных местах, но все они были совершенно разными.

примеры были бы лучшим способом понять алгоритмы..но я не могу найти. Даже в TopCoder Я ничего не нашел об иде*.

Я прочитал статьи wiki, и я ищу что-то новое (:

Спасибо большое!


EDIT: вот несколько хороших статей, но они слишком теоретичны. Никаких примеров, никаких конкретных вещей. Но все равно очень полезно. Я бы рекомендовал их (=

1 ответов


давайте с итеративным углублением глубину.

идея заключается в том, что поиск глубины эффективен, но не обязательно попадет в правильный ответ в ближайшее время. Итак, сделайте DFS на глубину 1. Если вы не нашли ответа, сделайте это на глубину 2. Повторяйте до тех пор, пока не найдете ответ или не решите сдаться. Это автоматически дает вам самый короткий путь в дереве поиска, так как вы никогда не ищете путь длины N + 1, Если есть один из длины Н.

Что вам нужно сделать, чтобы реализовать, это изменить поиск глубины, чтобы он шел N узлов глубоко (т. е. не генерировать новые узлы, если вы N глубоко), и вызвать его с увеличением N. вы не храните ничего больше, чем значение N и что бы вы ни делали для DFS.

итерация поставляется с итеративным увеличением глубины поиска. Производительность может быть удивительно хорошей, учитывая коэффициент ветвления больше двух, так как в этом случае большая часть стоимости ограниченная по глубине ДФС находится на самом низком достигнутом уровне.

сначала изучите итеративное углубление DFS, затем примените это к IDA*. Я читал раннюю статью Корфа об этих поисках более пятнадцати лет назад и не помню, как IDA* работает очень хорошо, но ваша главная проблема заключается в том, что вы не понимаете итеративного углубления в первую очередь.