Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
лаб4.docx
Скачиваний:
7
Добавлен:
29.09.2024
Размер:
965.89 Кб
Скачать

МИНОБРНАУКИ РОССИИ

САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ

ЭЛЕКТРОТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ

«ЛЭТИ» ИМ. В.И. УЛЬЯНОВА (ЛЕНИНА)

Кафедра вычислительной техники

ОТЧЕТ

по лабораторной работе №4

по дисциплине «Введение в искусственный интеллект»

Тема: Методы информированного (эвристического) поиска в среде продукционного программирования CLIPS

Преподаватель

Родионов С.В.

Санкт-Петербург

2024

Цель работы

Практическое закрепление теоретических основ информированного (эвристического) поиска с использованием продукционного программирования в среде CLIPS.

Постановка задачи

Рассмотреть принципы эвристического поиска в среде продукционного программирования CLIPS на конкретном примере – головоломка 8-ка. Рассматриваем два вида эвристических функций h1 и h2 (Рассел С, Норвиг П. Искусственный интеллект: современный подход, 2-е изд., М. «Вильямс», 2006, стр. 167- 174):

– h1 – число фишек, стоящих не на своем месте;

– h2 – суммарное по всем фишкам число шагов до целевого положения (манхэттенское расстояние).

2. Реализовать в программе подсчет временной и емкостной сложности и сравнить с результатами реализации на императивном языке программирования.

Начальное состояние в соответствии с вариантом приведено на рис. 1. Целевое состояние отображено на рис. 2.

Рисунок 1 – начальное состояние

Рисунок 2 – конечное состояние

Распределение обязанностей

Описание выбранных структур данных:

Для реализации программы был реализован созданный шаблон «Node», который описывает узел дерева.

Шаблон

Слот

Описание

Node

id

Идентификатор узла дерева

cell1

Левая верхняя ячейка

cell2

Центральная верхняя ячейка

cell3

Правая верхняя ячейка

cell4

Левая средняя ячейка

cell5

Центральная средняя ячейка

cell6

Правая средняя ячейка

cell7

Левая нижняя ячейка

cell8

Центральная нижняя ячейка

cell9

Правая нижняя ячейка

parent

Идентификатор родительского узла

depth

Глубина дерева

f

Значение оценочной функции для узла дерева

status

состояние вершины: 0 - еще не раскрыта, 1 - раскрыта, 2 - является целевой

Описание алгоритма поиска a*:

Поиск А* - наиболее широко известная разновидность поиска по первому наилучшему совпадению. В нем применяется оценка узлов, объединяющая в себе эвристическую функцию (стоимость прохождения от данного узла до цели) h(n) и стоимость достижения данного узла g(n):

Поскольку функция g(n) позволяет определить стоимость пути от начального узла до узла n, а функция h(n) определяет оценку стоимости наименее дорогостоящего пути от узла n до цели, то справедливо, что f(n) - это оценка стоимости наименее дорогостоящего пути решения, проходящего через узел n.

Таким образом, при при переходе к потомкам узла, проверяется узел с наименьшим значением g(n) + h(n).

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

Алгоритм A* на языке CLIPS реализован следующим образом:

В глобальных переменных инициализируются начальные значения:

  • ?*ID* - уникальный идентификатор для узлов.

  • ?*unique_nodes* - количество созданных узлов.

  • ?*total_steps* - количество пройденных шагов.

  • Начальные и целевые состояния представляются девятью переменными для каждой ячейки (от ?*init_cell1* до ?*init_cell9* и от ?*result_cell1* до ?*result_cell9*).

  • Переменная ?*hType* определяет используемую эвристику: h1 (значение 1) или h2 (значение 2) .

  • Переменная ?*DEBUG* используется для включения режима отладки (значение 1) или его выключения (значение 0).

Далее определяется шаблон для узла, структура которого была описана ранее.

Функции для работы эвристики:

  • Функция manhattanGeom вычисляет Манхэттенское расстояние между двумя ячейками.

  • Функция h1 подсчитывает количество ячеек, которые не на своих местах по сравнению с целевым состоянием.

  • Функция h2 вычисляет сумму Манхэттенских расстояний от текущего состояния до целевого для каждой ячейки.

  • Функция getF вычисляет значение оценочной функции f, которая является суммой глубины узла и эвристического значения h (выбранного на основе глобальной переменной ?*hType*).

Правила:

  • Правило initial создаёт начальный узел с использованием начального состояния.

  • Правило result определяет достижение целевого состояния и выводит результат.

  • Правило stop_if_no_solution завершает работу, если нет узлов в статусах 0 или 2.

  • Правило stop_if_solution_found завершает работу при нахождении решения, выводя статистику.

  • Правила fix_min и find_min обновляют минимальное значение f среди необработанных узлов.

  • Правило remove_repeats удаляет дублирующиеся узлы, оставляя узел с меньшим значением f.

  • Правила create_cell1, create_cell2 и create_cell3 и так далее создают новые узлы на основе текущего узла, перемещая нулевую ячейку в возможные позиции. Каждое правило проверки соседних ячеек (например, create_cell1, create_cell2, и create_cell3) создаёт новые узлы, если перемещение ячейки возможно, обновляя состояние, глубину и оценочную функцию.

Соседние файлы в предмете Введение в искусственный интеллект