Лабораторная работа №3 Рекурсия и поиск, составные объекты («ход конём» запоминая в БД)
Учебные материалы Адаменко А.Н., Кучуков А.М. Логическое программирование и Visual Prolog. – СПб.: БХВ-Петербург, 2003. – 992с.
Глава 12. Простые и составные объекты
Глава 13. Повтор и рекурсия
Глава 14. Списки и рекурсия
Люгер Дж.Ф. Искусственный интеллект: стратегии и методы решения сложных проблем, 4-е издание.: Пер. с англ. – М.: Издательский дом «Вильямс», 2003. – 864с.
5.2.1. Пример рекурсивного поиска: вариант задачи хода конём
Задачи Вычисление факториала. Вычислить факториал числа, заданного в цели.
Указание:
Использовать двухместный предикат factorial(заданное_число, значение_факториала_от_заданного_числа), который истинен только при тех парах аргументов, у которых второй является факториалом от первого.
Записать рекурсивное правило для предиката factorial, которое выражает истинность заголовка правила при аргументах N и F, если в теле будет истинен предикат factorial(X,Y) у которого X на единицу меньше, чем N, а Y=X!
Условие окончания рекурсии выражает известный факт, что 1!=1
Изменять значение переменной в теле правила можно предикатом сравнения, например, X=N-1, F=N*Y
| Решить задачу «ход конём» на поле размером 3 на 3 клетки, не запоминая, посещённые конём ранее клетки. Использовать простую нумерацию клеток поля.
Описание задачи «ход конём»:
В одной из клеток шахматного поля находится шахматный конь. Найти, может ли конь из начальной клетки попасть в заданную клетку, и если да, то вывести путь (т.е. последовательность посещённых клеток), по которому конь может перейти из начальной клетки в заданную клетку.
Для описания положения коня на поле можно использовать простую нумерацию (все клетки пронумерованы, т.е. каждой клетке соответствует целое число), или стандартную шахматную (каждая клетка имеет буквенно-циферную координату, например, е2, е4 и т.д.)
| Указания:
Задача описывается в терминах «пространства состояний». Состояние – есть положение коня на поле, и выражается одним числом.
Допустимые переходы между состояниями за один ход (т.е. правила «как ходит конь») описываются двухместным предикатом move(предыдущее_состояние, последующее_состояние), например, факт move(1,6) означает, что конь за один ход может перейти из клетки с номером 1 в клетку с номером 6.
Возможность коня перейти за несколько ходов (возможно за 0 ходов) из одной клетки в другую описывается двухместным предикатом path(начальное_состояние, конечное_состояние). Например, если значение path(1,4) истинно, то конь может перейти из клетки с номером 1 в клетку с номером 4, а если ложно – то нет.
Процедура, описывающая предикат path, должна состоять из рекурсивного правила: можно перейти из состояния X в состояние Y за несколько шагов (возможно за 0), если можно перейти из X за один шаг в некое такое промежуточное состояние Z, что из него можно за несколько шагов (возможно за 0) перейти в состояние Y. Условие окончания рекурсии – истинность path для случая 0 шагов.
Вопрос о том, может ли конь перейти из клетки с номером 1 в клетку с номером 4 формулируется как цель: path(1,4).
| Поместить в базе данных 16 фактов на основе предиката move
Поместить в базе данных 8 фактов на основе предиката move, и правило move(X,Y):-move(Y,X)
Решить задачу «ход конём» на поле размером 3 на 3 клетки, запоминая, посещённые конём ранее клетки. Запоминать, добавляя в базу данных факта о том, что эта клетка уже посещена. Использовать простую нумерацию клеток поля.
Указания:
Информация о том, что конь уже побывал в некоторой клетке, выражается наличием в базе данных некоторого факта. Если конь побывал в клетке с номером 6, то базу данных надо добавить факт, например, been(6).
Динамическое добавление факта производится встроенным предикатом assert(предикат_который_добавляется).
Новое промежуточное состояние Z не должно быть одним из уже посещённых конём состояний. Т.е. для нового значения Z соответствующего факта been(Z) не должно быть в базе данных – обращение в теле правила к предикату been(Z) должно возвращать «ложь»
|
Решить задачу «ход конём» на поле размером 3 на 3 клетки, запоминая, посещённые конём ранее клетки. Запоминать, добавляя в базу данных факты о том, что эта клетка уже посещена. Использовать шахматную нумерацию клеток поля.
Указания:
Задача описывается в терминах «пространства состояний». Состояние – есть положение коня на поле, и выражается парой значений: буква и цифра. Для обозначения состояния использовать составные объекты. Например, объявить составной домен с функтором state(char буква, byte цифра), тогда состояние, когда конь находится в клетке b3, будет выражено как state(b, 3).
Допустимые переходы между состояниями за один ход (т.е. правила «как ходит конь») описываются двухместным предикатом move(предыдущее_состояние, последующее_состояние), например, факт move(state(b,3),state(a,1)) означает, что конь за один ход может перейти из клетки b3 в клетку a1.
Информация о том, что конь уже побывал в некоторой клетке, выражается наличием в базе данных некоторого факта. Если конь побывал в клетке b3, то базу данных надо добавить факт, например, been(state(b,3)).
Вопрос о том, может ли конь перейти из клетки b3 в клетку a1 формулируется как цель: path(state(b,3),state(a,1)).
|
Лабораторная работа №4 Рекурсия и поиск, составные объекты («ход конём» запоминая в списке)
Учебные материалы Адаменко А.Н., Кучуков А.М. Логическое программирование и Visual Prolog. – СПб.: БХВ-Петербург, 2003. – 992с.
Глава 12. Простые и составные объекты
Глава 13. Повтор и рекурсия
Глава 14. Списки и рекурсия
Люгер Дж.Ф. Искусственный интеллект: стратегии и методы решения сложных проблем, 4-е издание.: Пер. с англ. – М.: Издательский дом «Вильямс», 2003. – 864с.
5.2.1. Пример рекурсивного поиска: вариант задачи хода конём
Задачи Решить задачу «ход конём» на поле размером 3 на 3 клетки, запоминая, посещённые конём ранее клетки. Запоминать, добавляя посещённое состояние в список посещённых состояний. Использовать простую нумерацию клеток поля.
Указания:
Информация о том, что конь уже побывал в некоторой клетке, выражается наличием номера этой клетки в списке посещённых состояний. Этот список должен передаваться из цели в подцель как третий аргумент предиката path.
После перехода коня в клетку Z, она должна быть добавлена к списку уже посещённых состояний L, и должна быть сформулирована новая цель (подцель): может ли конь перейти из клетки Z в конечную клетку Y, не посетив ни одного из состояний из списка [Z|L], т.е. подцель – path(Z,Y,[Z|L]). Список [Z|L] – список, состоящий из ранее посещённых состояний L и текущего состояния Z.
Новое промежуточное состояние Z не должно быть одним из уже посещённых конём состояний. Т.е. нового значения Z не должно быть в списке ранее посещённых состояний L, т.е. обращение в теле правила к предикату member(Z,L) должно возвращать значение «ложь».
| Решить задачу «ход конём» на поле размером 3 на 3 клетки, запоминая, посещённые конём ранее клетки. Запоминать, добавляя посещённое состояние в список посещённых состояний. Использовать шахматную нумерацию клеток поля.
ПРИМЕРНЫЕ ВОПРОСЫ К ЗАЧЕТУ И КЗАМЕНУ
по дисципЛине «Основы искусственного интеллекта»
Структура программы на Prolog: разделы программы, домены (стандартные), предикаты, факты, правила.
Эвристический поиск: эвристическая мера и эвристическое значение. Алгоритм эвристического поиска: приоритетная очередь и текущая граница поиска. Пример эвристического поиска для игры 8-головоломка.
Prolog: составные объекты данных (составной тип данных); списки: объявление, операция |
Использование эвристик в играх: минимакс для пространств состояний, допускающих полный перебор. Пример: игра «ним».
Выполнение программы на Prolog: связывание переменных, выполнение цели, формирование подцелей.
Использование эвристик в играх: минимакс при фиксированной глубине поиска. Пример: крестики-нолики.
Алгоритмы на Prolog: печать списка.
Продукционная система: продукционные правила (условная часть, образец, шаблон, часть действия), рабочая память, текущее состояние мира, конфликтное множество. Пример: «простая продукционная система»
Алгоритмы на Prolog: подсчёт числа элементов списка и суммирование элементов списка.
Продукционная система: цикл «распознавание-действие», конфликтное множество, допустимые продукции, разрешение конфликта. Пример: 8-головоломка. Использование эвристик: рефракция, новизна, специфичность.
Алгоритмы на Prolog: объединение списков.
Эксперимент Квиллиана и Коллинза по хранению информации у человека, модель хранения информации, предложенная ими. Формализм семантических сетей: структурные элементы, присущие всем семантическим сетям.
Алгоритмы на Prolog: определение принадлежности к списку.
Концептуальные графы: концептуальные понятия, концептуальные отношения. Типы, иерархия типов. Метка типа, маркер объекта. Операции над концептуальными графами: специализация, обобщение; копирование, ограничение, объединение, упрощение.
Алгоритмы на Prolog: динамическое изменение базы данных.
Экспертные системы. Архитектура типовой экспертной системы. Критерии оправданности применения экспертной системы.
Решение задачи о «ходе конём» на Prolog с использованием списка.
Построение экспертных систем: инженер по знаниям, эксперт, пользователь – их роли в построении экспертной системы.
Решение задачи «обезьяна и банан» на Prolog с запоминанием посещённых состояний в списке.
Искусственные нейронные сети: модель нейрона, весовые коэффициенты, уровень активации нейрона, взвешенная сумма входных сигналов, функция активации.
Решение задачи о «козе, капусте и волке» на Prolog с запоминанием посещённых состояний в списке.
Искусственные нейронные сети: топология сети, обучение сети, схема кодирования.
Решение задачи о «козе, капусте и волке» на Prolog с использованием динамического изменения базы данных.
Нейрон Мак-Каллока-Питтса. Вычисление логических функций И и ИЛИ.
Поиск в пространстве состояний: состояние, пространство состояний, начальное состояние, целевое условие, путь решения. Пример: крестики-нолики.
Персептрон. Пороговая функция. Алгоритм обучения. Ограниченность персептрона.
Граф пространства состояний: вершины, дуги, состояния, переходы; размеченный граф, ориентированный граф; путь; корневой граф, корень, дерево, листья, петли, циклы; предок, родитель, потомок, вершины-братья. Пример: 8-головоломка.
Искусственные нейронные сети: сигмоидальная функция, логистическая функция, дельта-правило. Система NETtalk.
Стратегии поиска в пространстве состояний: поиск с возвратами (последовательность рассмотрения узлов, использование списков).
Понимание естественного языка. Уровни анализа естественного языка. Синтаксический разбор, семантическая интерпретация. Стадии создания внутреннего представления предложения.
Стратегии поиска в пространстве состояний: поиск в ширину (последовательность рассмотрения узлов, использование списков). Поиск на основе данных и от цели.
Синтаксический анализ. Контекстно-свободная грамматика: правила вывода, терминалы, нетерминалы, трансформации сверху вниз и снизу вверх, дерево грамматического разбора.
Стратегии поиска в пространстве состояний: поиск в глубину (последовательность рассмотрения узлов, использование списков). Предельное значение глубины поиска, поиск в глубину с итерационным заглублением.
Синтаксический анализ: анализатор на основе сети переходов.
|