- •Содержание
- •Введение
- •Глава 1. Основные понятия
- •1.1. Понятие об искусственном интеллекте
- •1.1.1. Точка зрения Петрунина.
- •1.1.2. Интеллектуальные алгоритмы.
- •1.2. Основные направления исследования в области ии
- •1.3. Данные и знания. Основные модели представления знаний
- •Глава 2. Логические модели представления знаний
- •2.1. Логика высказываний
- •2.1.1. Булева алгебра.
- •2.1.2. Понятие о логическом следствии.
- •2.1.3. Метод резолюции в лв.
- •Имеет место теорема о полноте резолютивного вывода. Множество клозов противоречиво тогда и только тогда, когда из него методом резолюции можно вывести пустой клоз.
- •2.2. Логика предикатов первого порядка
- •2.2.1. Основные определения.
- •2.2.2. Метод резолюции в лппп.
- •2.2.3. Стратегии проведения резолюции.
- •2.2.4. Упорядоченный линейный вывод в лппп.
- •2.2.5.Применение поиска в пространстве состояний при реализации автоматизированного логического вывода.
- •2.2.6. Логический вывод на хорновских дизъюнктах.
- •Понятие экспертной системы и применение логического вывода при построении экспертных систем.
- •2.2.9. Запросы класса b.
- •2.2.10. Запросы класса c.
- •2.3. Понятие о нечетком выводе
- •2.4. Неклассические логики
- •2.4.1. Логики высших порядков.
- •2.4.2. Модальные логики.
- •2.4.3. Многозначные логики.
- •Глава 3. Продукционные модели представления знаний
- •3.1. Основные понятия
- •3.2. Стратегии управления
- •3.2.1. Поиск с возвратом.
- •3.2.2. Поиск в пространстве состояний.
- •3.3. Понятие о коммутативных системах продукций
- •3.4. Понятие о нечетком выводе на продукциях
- •3.5. Сравнение продукционных и логических моделей
- •Глава 4. Реляционные языки представления знаний
- •4.1. Основные элементы естественных языков
- •4.2. Дескрипторные модели
- •4.2.1. Понятие об ипс.
- •4.2.2. Линейная модель работы ипс.
- •4.2.3. Понятие о многоуровневом поиске.
- •4.2.4. Основные характеристики ипс.
- •4.4. Синтагматические цепи
- •4.4.1. Понятие синтагматических цепей.
- •4.4.2. Фреймы.
- •4.5. Сетевые модели представления знаний
- •4.5.1. Понятие семантической сети.
- •4.5.2. Структура интеллектуальной системы доступа к данным на основе семантической сети.
- •4.5.3. Задача поиска кратчайшего обхода образца в семантической сети.
- •4.5.4. Понятие о логическом выводе на семантических сетях.
- •Глава 5. Нейронные сети
- •5.1. Параллели из биологии
- •5.2. Базовая искусственная модель
- •5.3. Применение нейронных сетей
- •5.4. Обучение сети
- •Глава 6. Организация диалога с эвм на естественном языке
- •6.1. Элементы теории формальных языков
- •6.2. Обратная польская запись
- •6.3. Недостатки применения аппарата формальных грамматик
- •6.4. Элементы семиотики
- •6.5. Модель непосредственных составляющих
- •6.6. Многозначность в естественных языках
- •6.7. Расширенные сети переходов
- •6.8. Глубинные (семантические) падежи
- •Глава 7. Логическое программирование на языке пролог
- •7.1. Основные понятия в языке Пролог
- •7.2. Пакет Turbo Prolog
- •7.3. Структура программы
- •7.4. Поиск решений
- •7.5. Механизм отката
- •7.6. Операторы. Декларативный и процедурный смысл программы
- •7.7. Повторение и рекурсия
- •7.8. Повторение и откат
- •7.8.1. Метод отката после неудачи (опн).
- •7.8.2. Метод отсечения и отката (оо).
- •7.8.3. Метод повтора, определенный пользователем.
- •7.9. Методы организации рекурсии
- •7.10. Отладка программы и обнаружение ошибок
- •7.11. Графика в Turbo Prolog’е
- •7.11.1 Создание меню.
- •7.11.2. Создание графического режима.
- •7.11.3. Черепашья графика
- •7.12. Списки и их использование
- •7.12.1. Использование списка.
- •7.12.2. Поиск элементов в списке.
- •7.12.3. Создание нового списка путем слияния двух списков
- •7.12.3. Разделение на два списка.
- •7.13. Сортировки
- •7.13.1. Наивная сортировка.
- •7.13.2. Сортировка включением.
- •7.13.3. Метод «пузырька».
- •7.13.4. Быстрая сортировка.
- •7.14. Компоновка данных из базы в список
- •7.15. Работа с символами и строками
- •7.16. Специальные строки
- •7.17. Работа с файлами
- •7.18. Создание динамических баз данных
- •7.19. Библиотеки Turbo Prolog’а
- •7.19. Модульное программирование
- •7.20. Решение задачи о волке, козе и капусте
- •Глава 8. Введение в язык лисп
- •8.1. Основные особенности языка Лисп
- •8.2. Понятия языка Лисп
- •8.2.1 Атомы и списки.
- •8.2.2 . Внутреннее представление списка.
- •8.2.3 .Написание программы на Лиспе.
- •8.2.4. Определение функций.
- •8.2.5. Рекурсия и итерация.
- •В) maplist. Эта функция действует подобно mapcar, но действия осуществляет не над элементами списка, а над последовательными cdr этого списка.
- •8.2.6 . Функции интерпретации выражения.
- •8.2.7. Макросредства.
- •8.2.8. Функции ввода-вывода.
- •Список используемых источников
- •Перечень используемых сокращений
7.7. Повторение и рекурсия
При программировании могут быть встречаются правила, которые требуют, чтобы поиск элементов совершался несколько раз. Существуют два способа реализации правила, выполняющие одну и туже задачу многократно.
A) Повторение (итерация).
B) Рекурсия.
Правило, выполняющие повторение, использует откат, а правило, выполняющее рекурсию, использует самовызов.
Правило повторения:
repetitive_rule:– (предикаты и правила), fail.
Предикат fail искусственно вызывает откат, поэтому все, что стоит перед fail, повторяется много раз.
Вид правила, выполняющего рекурсию:
recursive_rule:– (предикаты и правила), recursive_rule.
Рекурсия требует много ресурсов памяти, так как новые копии используемых значений помещаются в СТЕК, который используется для передачи значений между правилами. Значения сохраняются до тех пор, пока правило не завершится успешно, либо неуспешно.
7.8. Повторение и откат
При поиске решений процедуры унификации используют откат как автоматический процесс, который используется, если не применяются специальные средства управления им. Как, например, для внутренней цели найти все решения? Для управления откатом используется два встроенных предиката:
-
fail – неудача,
-
cut – отсечение.
7.8.1. Метод отката после неудачи (опн).
Рассмотрим программу печати городов России. Поскольку все цели удовлетворяют условиям, то будет напечатан только первый город, а остальные не напечатаются. Чтобы заставить вывести программу все города, используют искусственное неуспешное завершение правила fail, при этом выполняется откат:
domain
name=symbol
preducates
cities(name)
showcities
goal
write(“There are the cities“), nl, showcities
clauses
cities(москва)
cities(томск)
cities(омск)
showcities:– cities (C),
write(“ “, C), nl, fail.
Если последнее правило будет иметь вид: write(“ “, C), nl, то будет напечатано название только одного города. Метод ОПН удобен для обработки служебных данных: создания платежной ведомости, начисления зарплаты, генерации отчета и т.д.
При добавлении дополнительных ограничений на значения объектов для одной или более переменных предиката можно извлекать данные только из определенных утверждений.
Например: cities(С), С=москва, выдаст только город Москву.
7.8.2. Метод отсечения и отката (оо).
Иногда необходимо иметь доступ только к определенной части данных. В этом случае используется метод ОО для фильтрации данных, извлеченных из базы. Отсечение применяется для устранения бесконечных циклов, при программировании взаимоисключающих утверждений и при необходимости неудачного завершения доказательства цели. Средство управления откатом – предикат cut (отсечение, !)
Этот предикат всегда вычисляется успешно и заставляет забыть все указатели отката, установленные во время попыток вычислить текущую подцель, т.е. устанавливается барьер, запрещающий выполнить откат по всем альтернативным решениям текущей цели.
Но последующие подцели могут создать новые указатели отката и тем самым создать условия поиска новых решений. Но если все более поздние цели окажутся неуспешными, то барьер cut заставит механизм отката отсечь все решения в области действия cut путем немедленного отката к другим возможным решениям вне области действия cut. Метод ОО использует fail для имитации неуспешного вычисления и выполнения последующего отката до тех пор, пока не будет обнаружено определенное условие. Предикат cut служит для устранения всех последующих откатов.
Пример. Напечатать список детей до Петра включительно
domain
person=symbol – дети
preducates
child(person) – список
show – показывает список
make_cut – отсекает на Петре
gool
write(“Дети”), nl, show.
clauses
child(“Маша”)
child(“Мила”)
child(“Миша”)
child(“Петр”)
child(“Катя”)
show:– child (Name), write (“имя”, Name), nl, make_cut (Name), !.
make_cut(Name):– Name=”Петр”.