- •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.10 Определение структур управления
if-then-else
Введем понятие метаусловия ("мета"-соответствует приставке -над) - переменная, которая записывается не только в л.ч. правила в качестве аргумента, но и в п.ч. правила в качестве условия.
p(A,B,C) :- A,B,C.
переменные A,B,C -метаусловия
правило
Каждый раз при обращении к такому правилу, вместо переменных A,B,C должны подставляться конкретные условия.
ПРИМЕР :
if(Если,То,Иначе) :-
Если, !, То; используем для того, чтобы м.б.
Иначе. оценить -X
abs(X,Y) :-if( X>=0, Y=X, Y is -X )
min(X,Y,Z):-if( X<=Y, Z=X, Z=Y )
Метаусловиями удобно воспользоваться при определении предиката отрицания :
not(Условие):-
Условие, !,fail;
succeed.
не_явл_элем(X,L):-
not(элемент(X,L)).
вып_один_раз(Условие) :-
Условие, !.
Если выполнится Условие хотя-бы один раз, то
отсечь все оставшиеся т. выбора.
5.11 Организация циклов в языке пролог
Ниже рассматриваются способы организации циклов без использования рекурсии.
Цикл с возвратом
родители(Отец,Ребенок).
родители(сидоров,дмитрий).
родители(иванов,ира).
родители(петров,андрей).
Требуется написать предикат, который просмотрел бы всю БД и выдал бы на экран/печать всех детей какого-либо родителя.
Как только ПРОЛОГ-Система достигает fail она начинает искать дополнительные т. выбора. Т.о., необходимо создавать искусственную неудачу, направляя процесс решения в обратную сторону.
все_дети(Отец) :-
родитель(Отец,Жеребенок),
print(Жеребенок),
fail;
succeed.
?- все_дети(сидоров).
родитель(сидоров,Жеребенок),print(Жеребенок),fail
. . . succeed
f(БД) - зависит от БД
Жеребенок=дмитрий
print(Жеребенок),fail
fail - Заставит ПРОЛОГ-С искать новую т. выбора
Такие структуры, в которых путем создания искусственной неудачи мы принуждаем систему к повторному выполнению операций называются циклом с возвратом.
Вышеизложенный предикат все_дети() м. обобщить и определить предикат все_решения().
все_решения(Условия,Перем):-
Условие, print(Перем), fail;
succeed.
все_решения(родитель(Отец,Ребенок),Ребенок).
Вложенные циклы
Пусть даны {L1}, {L2} и требуется вывести на экран общие элементы обоих списков. Предполагается, что списки м. содержать повторяющиеся элементы.
общие_элементы(L1,L2):-
элемент(X,L1), элемент(X,L2), print(X), fail;
succeed.
. . .
L11 L12 L1i L1N
... ...
L21 L22 L2M L21 L22 L2M
Здесь Пролог проверяет оба пути, т.е. происходит как бы двойной цикл.
Для решения задачи: "Если выполняется 1-ое условие, то необходимо выполнить решение для 2-го условия " рассмотрим пример.
Пусть имеется БД, которая хранит сведения о сотрудниках организации:
работник(Имя,Отдел,Языки). - пусть мы имеем много подобных
фактов.
Факт "некоторый сотрудник работает в отделе ПРОЛОГ" имеет вид:
нек_сотр_раб_в_отд_пролог(X):-
работник(X,пролог,_).
знает_англ_яз(X):-
работник(X,_,Языки),элемент(англ,Языки).
Выясним следующее обстоятельство: "Знают ли все сотрудники отдела ПРОЛОГ английский язык ?". Сначала определим этот предикат не для Arity Prolog:
все_сотр_знают_англ_яз :-
работник(X,Пролог),
(знают_англ_яз(X), /, fail;
!, fail);
succeed.
Зарисуем этот предикат в виде схемы
запрос нового решения
решение м.б.
полученно ?
Запрет вариантов
Условия 2
succeed fail
Фактически нами определен предикат :"Для каждой реализации Условия 1 реализуется ли решение Условия 2 ? "
Для Arity Prolog :
Заменим предикат "/" , которого нет в Arity Prolog. Можно заметить, что предикат "/" есть не что иное, как "Предикат Условия 2 выполнить 1 раз для тех значений переменных, для которых выполнилось Условие 1 ".
следует( Условие1, Условие2) :-
Условие1, ( вып_один_раз( Условие2 ), fail ;
not(вып_один_раз( Условие2 )),
, !, fail ) ;
succeed.
"Для всех ли решений Условия 1 выполняется Условие 2 ?"
Т.о., Пролог проверяет выполнение первого условия и для каждого полученного решения проверяет второе условие.