
- •Искусственный интеллект. Лабораторная работа №1
- •Искусственный интеллект. Лабораторная работа № 2
- •Тип слота
- •Вопрос слота
- •Значение слота
- •Номер правила
- •Условие и заключение
- •Отношение
- •Имя слота
- •Значение слота
- •Коэффициент достоверности
- •Искусственный интеллект. Лабораторная работа №3
- •If список open пуст
- •Искусственный интеллект. Лабораторная работа №4
- •Искусственный интеллект.
- •Редактирование файла данных и создание нейронной сети.
- •Выбор алгоритма обучения, назначение требуемой точности прогноза, настройка параметров нейронной сети.
- •Обучение нейронной сети решению задачи предсказания или классификации.
- •Искусственный интеллект. Лабораторная работа №6
- •Искусственный интеллект. Лабораторная работа №7
- •Задание.
Искусственный интеллект. Лабораторная работа №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). Поиск в обратном направлении означает последовательную генерацию предков, начиная с целевого узла.
Когда все операторы обратимы, множества предков и наследников идентичны, однако для некоторых проблем генерация узлов-предков может быть очень трудной задачей.
Что делать, если имеется несколько целевых состояний?
Должен существовать эффективный способ проверки каждого нового узла, чтобы обнаружить, не появился ли он на противоположном дереве поиска.
Необходимо решить какой тип поиска применять для каждого из деревьев.
Рекурсия
В математике рекурсивное определение объекта — это его описание в терминах частей этого же определения. В информатике рекурсия используется для определения и анализа структур данных и процедур. Рекурсивная процедура состоит из следующих этапов.
Рекурсивный шаг: вызов процедуры из этой же процедуры для повторения после довательности действий.
Условие, которое обеспечивает выход из процедуры и таким образом предотвра щает зацикливание (рекурсивная версия бесконечного цикла).
Оба этих компонента необходимы и появляются во всех рекурсивных определениях и алгоритмах. Рекурсия — естественный инструмент управления массивами данных, которые имеют правильную структуру и неопределенный размер, например, списками, деревьями и графами. Рекурсия особенно удобна для поиска в пространстве состояний.
Прямое преобразование алгоритма поиска в глубину в рекур- сивную форму иллюстрирует эквивалентность рекурсии и итерационного подхода. Этот алгоритм для поддержки списка состояний использует глобальные переменные
open и closed:
function depthsearch; %переменные open и closed глобальные
begin