- •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.11.1 Цикл repeat-fail
Цикл с возвратом используется в тех случаях, когда нужно перебрать альтернативные варианты ( решения ) некоторых предикатов. Но существуют предикаты, не имеющие альтернатив. Т.е. можно заставить Пролог возвращаться к точкам выбора, используя предикат fail, но такие точки не всегда имеются.
Например:
передает управление на альт. т. выбора
Выполняется ввод_строки(S), обработка(S), fail.
предикаты не имеющие альтернатив
Предикат, создающий т. выбора
Соответствует _ repeat
Дадим определение предиката, имеющего бесконечное число решений и бесконечное число раз завершающегося успешно.
repeat :- ?- repeat
succeed;
repeat.
succeed repeat
succeed repeat
... ...
Бесконечный цикл :- repeat, тело_цикла, fail.
Конечный_цикл :- repeat, ввод_строки(S),
(последняя_строка(S), !;
обработка_строки(S), fail).
Цикл For - цикл с заранее известным количеством повторений (цикл со счетчиком).
repeat(1) :- !.
repeat(N) :- succeed; M is N-1, repeat(M).
?- repeat(3)
/ \
succeed M is 3-1,repeat(M)
¦ M:=2
repeat(2)
/ \
succeed M is 2-1,repeat(M)
¦ M:=1
repeat(1)
¦
успех
Цикл_со_счетчиком:- repeat(4),тело_цикла, fail.
5.11.2 Сопоставление цикла с возвратом и рекурсии
В тех случаях, когда мы ищем альтернативные решения цикл с возвратом - естественный способ приближения. Во многих случаях задачу можно сформулировать и рекурсивно. Например предикат "общие_элементы" (см. предыдущий параграф). Эту же задачу мы опишем рекурсивно.
ПРИМЕР 1:
общие_элементы([],_).
% Такая запись говорит о том, что каждый объект имеет общим элементом пустой список [].
общие_элементы([A|L1],L2) :-
вывести_на_экран(A,L2), % Если A входит в L2
общие_элементы(L1,L2).
вывести_на_экран(A,L2) :-
элемент(A,L2),вывод(A);
succeed.
ПРИМЕР 2:
цикл :- ввод_строки(S),
(последняя_строка(S), !;
обработка_строки(S), цикл).
Здесь под последней строкой понимается признак конца текста, например "END".
Цикл с возвратом имеет ограниченное применение и используется в тех случаях, когда в определении цикла применяют некоторое побочное действие (например, вывод на экран).
ПРИМЕР 3:
% Вывод промежуточных результатов на экран
%
цикл :- repeat, ввод_строки(S),
(последняя_строка(S), !;
обработка_строки(S), fail).
Особенность такой организации цикла заключается в том, что между двумя последовательными выполнениями ядра цикла нельзя передавать промежуточные результаты (они теряются, т.к. при возвратах теряются конкретизации переменных). Однако, такой же эффект возможен и в цикле с рекурсией. Т.е. необходимы "нелогические" средства.
Построим дерево выполнения для обоих случаев:
цикл :- repeat, ввод_стр(S), цикл :- ввод_строки(S),
(последняя_строка(S), !; ( последняя_строка(S), !;
обработка_строки(S), fail). обработка_строки(S), цикл).
?- цикл ?-цикл
repeat, ввод_стр(S), ввод_строки(S),
(последняя_строка(S), !; ( последняя_строка(S), !;
обработка_строки(S), fail). обработка_строки(S), цикл).
succeed repeat,... посл_стр(S),! обр_стр(S),цикл
ввод_стр(S), S:= ...
(посл_стр(S), fail
!;обр_стр(S), -- ввод_стр(S),
fail). (посл_стр(S),
!;обр_стр(S),
succeed repeat... цикл).
S:= ...
... N .
fail раз .
S:=... .
fail
Это дерево растёт в ширину Это дерево растет в глу-
одна ветка выросла- её "спи- бину. Одна ветка наращивает-
лили",выросла другая и т.д. ся до огромных размеров.
Достоинства - экономное Достоинство - может переда-
расходование памяти, НО в вать значения от итерации к
памяти хранятся только пере- итерации ; все переменные
менные. хранятся в памяти, НО неэко-
номично используется память.
Очевидно, что Пролог-система может работать с путями дерева не длиннее лишь определенного предела (зависящего от памяти ЭВМ). Это означает, что применение цикла repeat-fail обычно предпочтительнее рекурсии.