- •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.7 Вычисление n!
n! = (n-1)! * n; 0!=1
факториал(0,1):-!.
% Этот факт определяет, что факториал 0 равен 1 и что после
% того, как будет найден 0! прекратить вычисления ( предикат
% отсечения запретит выбор любой альтернативы).
факториал(N,X):- M is N-1, факториал(M,Y),
X is Y*N.
?- факториал(0,1)
yes M:=-1,факториал(-1,Y), ...
¦
факториал(-2,Y), ...
¦
...
Чтобы м.б. отвечать на запросы : факториал(0,2) необходимо преобразовать исходный вариант следующим образом :
факториал(0,X):- 1 is X, !.
факториал(N,X):- M is N-1, факториал(M,Y),
X is Y*N.
5.8 Область действия предиката отсечения
абс_знач_элем(X,L) - true, если L содержит в себе такой элемент, абсолютное значение которого = X. L - список.
Воспользуемся уже определенным ранее предикатом abs.
абс_знач_элем(X,L) :-
элемент(E,L),abs(E,X).
абс_знач_элем(X,L) :-
элемент(E,L), Раскрыли abs
( E >=0, !, X is E;
X is -E ).
?- абс_знач_элем(2, [1,-2])
элемент( E,[1,-2]),(E >=0, !, 2 is E;
2 is -E).
E=1 E= -2
1>=0 Область действия предиката ! - весь
/ предикат, в котором он определен -
т.е. он уничтожает все альтернативы
!,2 is 1 данного предиката
fail 2 is -1
Предикат отсечения ! не запрещает точки выбора находящиеся под ним.
Существуют и другие предикаты отсечения - "/" - например, стирает только ветвь в пределах группы. Если же этот предикат используется вне пределов группы, то его действие эквивалентно действию предиката !.
ПРЕДИКАТЫ fail и succeed
Эти предикаты указывают на неудачу (fail) или успех (succeed). fail применяют в тех случаях, когда в задаче нужно выделить несколько исключений. Например:
и_после_ц_в_слове(цыган):-!, fail.
и_после_ц_в_слове(цыц):- !,fail.
и_после_ц_в_слове(цыпленок):- !,fail.
и_после_ц_в_слове(цыпочки):- !,fail.
и_после_ц_в_слове(X).
Использование fail без ! бессмысленно, т.к. предикат может выполниться для любого объекта.
succeed :- !. - Отдельно определяется для того, чтобы ограничить область действия "!" предикатом succeed.
и_после_ц_в_слове(X):-
слово_принадлежит_исключениям(X), !, fail;
succeed.
5.9 Отрицание на пролоГе
Определим предикат : " не является элементом X,L"
не_явл_элем(X,L) :-
элем(X,L), !, fail;
succeed.
Такое определение не совпадает с понятием логического отрицания, т.к. исходит из предположения "замкнутости мира", т.е. что не истинно, то ложно. Однако это не всегда выполняется на практике.
отец(X,Y)
?- отец(X,Петр)
не_отец(X,Y):-
отец(X,Y), !, fail;
succeed.
?- элемент(X,[1,2,3]). ?- не_отец(X,Петр).
X=1; no. //ответ нет м.б. и в том
X=2; //случае, если Петр дей-
X=3. //ствительно не является
?- не_элемент(X,[1,2,3]). //отцом X, и в том случае
X=4; //если в БД нет такого
X=5; //факта.
...
Этим свойством можно воспользоваться, например, для установления сопоставимости двух выражений таким образом, чтобы сопоставление производилось без конкретизации переменных.
может_быть_сопоставлен(X,Y):- // Истина, если X и Y -
отличаются(X,Y), !, fail; // одинаковые об'екты
succeed.
отличаются(X,Y):- // " = " -знак сопоставления. Слева
X = Y, !, fail; // и справа м.б. любой объект ПРОЛОГ
succeed. // вплоть до предикатов.
?- может_быть_сопоставлен(a(1,J),a(Z,2))
отличаются(a(1,J),a(Z,2)), !, fail;
a(1,J) = a(Z,2), !,fail, succeed
!,fail
Z=1
J=2
!,fail,!,fail
,!,fail Надо искать новую т. выбора