- •1 Общая характеристика дисциплины
- •1.1 Значение дисциплины ии
- •1.2 Понятие "искусственный интеллект"
- •1.3 Краткая история развития ии
- •1.4 Классификация систем ии
- •Представления знаний - центральная проблема ии.
- •Компьютерной лингвистики, решение которой обеспечивает процесс естественно- языкового общения с эвм и процесс автомтического перевода с иностранных языков.
- •Компьютерной логики, имеющей особо важное значение для развития экспертных систем, поскольку ее цель – моделирование человеческих рассуждений.
- •1.5 Основные направления развития ии
- •2Языки систем искусственного интеллекта
- •2.1 Общие сведения о языках сии
- •2.2 Язык лисп
- •2.2.1 Алфавит
- •2.2.2 Атомы и точечные пары
- •2.2.3 Списки
- •2.2.4 Арифметические функции языка лисп
- •2.2.5 Функции setq и quote
- •2.2.6 Функции car и cdr
- •2.2.7 Композиция функций саr и cdr.
- •2.2.8 Пустой список
- •2.2.9 Функция cons
- •2.2.10 Логические значения и предикаты
- •2.2.11 Предикаты атом и eq
- •2.2.12 Предикат null
- •2.2.13 Предикаты, классифицирующие атомы
- •2.2.14 Арифметические предикаты сравнения
- •2.2.15 Операции над строками битов
- •2.2.16 Функция cond
- •2.2.17 Определяющее выражение функции
- •2.2.18 Определяемые функции
- •2.2.19 Рекурсивные функции
- •2.2.20 Prog- механизм.
- •2.3 Обращение (инверсия) списков
- •2.4 Вычисление факториала числа
- •2.5 Вычисление длины списка
- •2.6 Вычисление длины списка и его подсписков
- •2.7 Соединение списков
- •2.8 Удаление элемента из списка
- •2.9 Функция, вычисляющая список общих элементов двух списков
- •2.10 Функция, объединяющая два списка и не включающая повторяющиеся элементы
- •2.11 Ассоциативные списки
- •2.12 Функции, изменяющие значения указателей
- •2.13 Функции read и print
- •2.14 Функция eval
- •3 Представление задач и поиск решений
- •3.1 Представление задач в пространстве состояний
- •3.2 Сведение задачи к подзадачам
- •3.3Представление задач в виде доказательства теорем
- •3.4 Поиск решения в пространстве состояний
- •3.5 Алгоритм поиска в ширину
- •3.6 Алгоритм поиска в глубину
- •3.7Алгоритм равных цен
- •3.8 Алгоритмы эвристического (упорядочного) поиска
- •3.9 Поиск решения задачи, при сведении задачи к подзадачам
- •3.10 Представление знаний
- •3.10.1 Продукционные системы
- •3.10.2Семантические сети
- •3.10.3 Представление знаний фреймами
- •3.11 Сопоставление с образцом
- •3.11.1 Функции Mapcad, Apply и Funcall
- •3.11.2 Свойства Атомов
- •3.11.3 Функция сопоставления с образцом
- •3.11.4 Присваивание значений при сопоставлении с образцом
- •3.11.5 Функции Explope, Compress, AtomCar, AtomCdr
- •3.11.6 Задание ограничений при сопоставлении с образцом
- •3.12 Программная реализация лисп - машин
- •3.12.1 Структура памяти лисп - машины
- •3.12.2 Диалекты языка лисп
- •3.12.3 Аппаратная реализация языка лисп
- •4 Математические основы логического вывода
- •4.1 Решение задач с помощью доказательства теорем
- •4.2 Тождественные преобразования при доказательстве теорем
- •4.3 Принцип резолюции
- •4.4Примеры применения принципа резолюции
- •4.5 Система управления роботом strips.
- •5Решение задач искусственного интеллекта на языке пролог
- •5.1 Применение метода доказательства теорем в системе пролог
- •5.2 Особенности программирования на пролоГе
- •5.4 Арифметические предикаты
- •5.5 Предикаты управления возвратом
- •5.6 Программа вычисления квадратного корня
- •5.7 Вычисление n!
- •5.8 Область действия предиката отсечения
- •5.9 Отрицание на пролоГе
- •5.10 Определение структур управления
- •5.11 Организация циклов в языке пролог
- •5.11.1 Цикл repeat-fail
- •5.11.2 Сопоставление цикла с возвратом и рекурсии
- •5.12 Операторная запись.
- •5.13 Ввод-вывод в системе пролог
- •5.13.1 Предикаты ввода-вывода символов
- •5.13.2 Предикаты ввода-вывода термов
- •5.13.3 Примеры применения предикатов ввода-вывода
- •5.14 Предикат name
- •5.15 Предикаты проверки типов термов
- •5.16 Создание и декомпозиция термов
- •5.17 Предикаты работы с базой данных .
- •5.18 Бинарные деревья
- •5.18.1 Построение бинарного дерева
- •5.18.2 Преобразование списка в упорядоченное дерево
- •5.18.3 Преобразование дерева в список
- •5.18.4 Удаление элемента из дерева
- •5.18.5 Поиск в глубину
- •5.18.6 Поиск в ширину
- •5.19 Поиск решений в игровых программах.
- •5.20 Обратное усечение дерева.
5.17 Предикаты работы с базой данных .
Пролог-программу можно рассматривать как реляционную базу данных: описание отношений частично присутствует в ней в явном виде (факты), и частично в неявном (правила). Имеются встроенные предикаты, которые позволяют корректировать эту базу в процессе выполнения программы. это делается добавлением к программе новых предложений (предикат assert) или вычеркиванием существующих (предикат retract).
Цель assert(X) . - всегда успешна и побочным действием пре диката assert(X) является добаление предложения X в БД.
Цель retract(X) . - приводит к противоположному результату.
?- assert(добавить). ?- retract(добавить).
yes. yes.
?- добавить. ?- добавить.
yes. no.
Пусть существует следующая программа, которую м. рассматривать как БД:
хорошая :- солнечно, not дождь.
необычная :- солнечно, дождь.
дождь.
туман.
?- хорошая. ?- плохая.
no. yes.
?- retract(туман).
yes.
?- assert(солнечно). - позволяет добавлять не только
yes. такие простые факты, но и термы
?- необычная.
yes.
Пусть дана некоторая БД : хорошо(иванов).
удовл(сидоров).
хорошо(смолянинова).
?- assert(лучше(X,Y) :- хорошо(X), удовл(Y).).
?- лучше(смолянинова,иванов).
no.
?- лучше(X,сидоров).
X = иванов;
X = смолянинова;
yes.
retract - кроме того, о чем уже было сказано ранее поз-
воляет удалить несколько фактов, если в ка-
честве предиката задана переменная. С помощью
возвратов можно удалить целое множество пред-
ложений.
?- retract( хорошо(X) ).
yes.
abolish(P,A). - удаление всех утверждений для процедуры_P
с арностью_A .
asserta(X). - добавление утв. X в начало БД.
assertz(X). - -- // -- в конец БД.
?- assert(p(a)), p(a) - в середине
assertz(p(b)), p(b) - в конце
asserta(p(c)). p(c) - в начале
?- p(X).
X = c ;
X = a ;
X = b ;
yes.
Предикат assert позволяет накапливать в БД вычисленные решения. Пусть есть
решение( Задача, Решение ).
?- решение( Задача1, Решение ),
assert( решение( Задача, Решение ) ).
Преимущество такого "запоминания" состоит в том, что следующие ответы на данный вопрос будут получаться быстрее.
ПРИМЕР : Создание таблицы умножения
таблицы :-
L = [ 0,1,2,3,4,5,6,7,8,9 ],
элемент(X,L), элемент(Y,L),
Z is X*Y,
assert(произведение(X,Y,Z)), fail;
succeed.
?- таблица. - такой запрос потерпит неудачу, но будет
создана таблица, к которой затем можно
обращаться:
?- произведение(3,5,Z). ?- произведение(X,Y,8).
Z = 15 ; X = 1 ; Y = 8 ;
X = 2 ; Y = 4 ;
Все множители дающие X = 4 ; Y = 2 ;
произведение = 8 . . .
X = 8 ; Y = 1 ;
Если нужно считывать утверждение из файла, то используют
предикаты consult и reconsult.
consult(<имя_файла>). - вызывает считывание утверждений из
файла, пока не встретится ко-
нец_файла. Считанные утверждения
будут добавленны в конец БД.
reconsult(<имя_файла>).-добавляет те утверждения, кото-
рые изменились по отношению к
текущему состоянию. Т.е. утверж-
дения, считываемые в БД, замеща-
ют ранее записанные утверждения
с тем же функтором и арностью.
save(<имя файла>). - сохранение созданной или измененной
БД в файле.
consult(user) - вводим программу в БД прямо с клавиатуры.
Следует отметить, что после удаления БД необходимо запустить механизм сборки мусора для восстановления памяти.