Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка СИИ лаб.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
1.17 Mб
Скачать

Искусственный интеллект. Лабораторная работа №3

«Стратегии слепого поиска. Рекурсивный поиск». (4 часа).

Цель работы: Определить уровень подготовки студентов в соответствии с материалом, изученным в предыдущих курсах, являющихся базовыми для получения знаний из области искусственного интеллекта.

Теоретические сведения:

Большая часть исследований в области поиска посвящена разработке стратегий поиска.

Поиск в пространстве состояний можно вести в двух направлениях: от исходных дан­ных задачи к цели и в обратном направлении от цели к исходным данным. Поиск на основе данных начинается с условий задачи и выполняется путем применения правил или допустимых ходов для получения новых фактов, ведущих к цели. Поиск от цели начинается с обращения к цели и продолжается путем определе­ния правил, которые могут привести к цели, и построения цепочки подцелей, ведущей к исходным данным задачи.

Рассмотрим несколько основных стратегий, часто называемых стратегиями слепого поиска (blind search). Стратегии слепого поиска, в отличие от стратегий эвристического поиска, (heuristic search) не отдают предпочтение отдельным узлам. Особенностью этих стратегий явля­ется "равноправность" всех узлов по отношению к выбору, а отличие одной стратегии от другой определяется порядком выбора узлов, подвергающихся расширению.

Поиск "сначала в ширину" (breadth-first search)

При стратегии поиска "сначала в ширину" расширение начинается с корне­вого узла, затем расширяются все узлы полученные из корневого узла и т.д. Об­щее правило поиска таково: все узлы, глубиной d должны быть расширены прежде, чем будут расширяться узлы, глубиной d + 1. Алгоритм поиска "сначала в ширину" может быть реализован так:

Поиск "сначала в глубину" (depth-first search)

При стратегии поиска "сначала в глубину" всегда расширяется узел, на­ходящийся на наиболее глубоком уровне дерева поиска. В том случае, если поиск обнаруживает тупиковый узел (не целевой и не расширяемый узел), алгоритм возвращается на один уровень вверх. при работе алгоритма поиска "сначала в глубину" необходимо хранить в па­мяти только единственный путь от корня к текущему листу вместе с остав­шимися нерасширенными дочерними узлами. Для дерева поиска с фактором ветвления b и максимальной глубиной m, поиск "сначала в глубину" требует хранить в памяти только bm узлов в отличие от bm узлов, которые необходимо хранить для реализации алгоритма "сначала в ширину".

Недостаток алгоритма поиска "сначала в глубину" заключается в том, что он может потратить значительные ресурсы, двигаясь вдоль неверного пути. Большое количество проблем характеризуются очень глубоким, а иногда - бесконечным деревом поиска. Поэтому алгоритм поиска "сначала в глубину" может никогда не "вернуться" на решение на­ходящееся вблизи корня дерева.

Алгоритм поиска "сначала в глубину" может быть реализован так:

Поиск с ограниченной глубиной. (depth-limited search)

Поиск с ограниченной глубиной позволяет избежать отмеченного недостатка алгоритма поиска "сначала в глубину" путем ограничения максимальной глубины пути. Такое ограничение можно ввести при помощи дополнитель­ного оператора. Например, если при поиске пути из города A в город Z для расширения узлов используется карта, содержащая 20 городов, то ясно, что решение может быть найдено не более, чем за 19 шагов. Следовательно оператор, ограничивающий глубину поиска в этом случае может быть задан при помощи правила:

ЕСЛИ <местонахождение - город X>

И <пройден путь меньше чем 19 шагов>

ТО <сгенерировать множество новых состояний>

Ясно, что правило, ограничивающее глубину, должно быть сформулировано таким образом, чтобы задаваемая им максимальная глубина гарантированно включала решение.

Поиск с итерационным углублением. (iterative deepening search)

Трудной частью алгоритма поиска с ограниченной глубиной является удач­ный выбор максимальной глубины. В рассмотренном выше примере карта содержала всего 20 городов, поэтому максимальная глубина равна 19. Однако, ясно, что существует и минимальная глубина, (минимально не­обходимое количество шагов, достаточное для нахождения решения) назы­ваемая диаметром (diameter) пространства состояний. Для большинства за­дач диаметр пространства состояний можно определить только после полу­чения решения задачи.

Поиск с итерационным углублением представляет собой поиск с ограничен­ной глубиной, в котором максимальная глубина поиска не является фиксиро­ванной, а последовательно принимает все возможные значения: 0,1,2 и т.д.

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

Недостатком алгоритма поиска с итерационным углублением являются до­полнительные расходы ресурсов на многократное расширение одних и тех же узлов.

Двунаправленный поиск (bidirectional search)

Идея двунаправленного поиска заключается в том, что одновременно осуществляются два поисковых процесса: вперед из начального состояния и назад из целевого состояния. Оба процесса завершаются одновременно в момент "встречи".

При практической реализации двунаправленного поиска необходимо решить ряд проблем.

  • Что такое поиск в обратном направлении от целевого состояния? Предками (predecessors) узла n называются все те узлы, для которых n является наследником (successor). Поиск в обратном направлении озна­чает последовательную генерацию предков, начиная с целевого узла.

  • Когда все операторы обратимы, множества предков и наследников иден­тичны, однако для некоторых проблем генерация узлов-предков может быть очень трудной задачей.

  • Что делать, если имеется несколько целевых состояний?

  • Должен существовать эффективный способ проверки каждого нового узла, чтобы обнаружить, не появился ли он на противоположном дереве поиска.

Необходимо решить какой тип поиска применять для каждого из деревьев.

Рекурсия

В математике рекурсивное определение объекта — это его описание в терминах час­тей этого же определения. В информатике рекурсия используется для определения и ана­лиза структур данных и процедур. Рекурсивная процедура состоит из следующих этапов.

  1. Рекурсивный шаг: вызов процедуры из этой же процедуры для повторения после­ довательности действий.

  2. Условие, которое обеспечивает выход из процедуры и таким образом предотвра­ щает зацикливание (рекурсивная версия бесконечного цикла).

Оба этих компонента необходимы и появляются во всех рекурсивных определениях и алгоритмах. Рекурсия — естественный инструмент управления массивами данных, кото­рые имеют правильную структуру и неопределенный размер, например, списками, де­ревьями и графами. Рекурсия особенно удобна для поиска в пространстве состояний.

Прямое преобразование алгоритма поиска в глубину в рекур- сивную форму иллюстрирует эквивалентность рекурсии и итерационного подхода. Этот алгоритм для поддержки списка состояний использует глобальные переменные

open и closed:

function depthsearch; %переменные open и closed глобальные

begin