- •Содержание
- •Введение
- •Глава 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.5. Механизм отката
Если текущая попытка вычислить цель была неудачной, то для нахождения дополнительных фактов и правил, необходимых при вычислении цели, используется механизм отката.
Этот механизм похож на поиск дома, находящегося через дорогу от входа в парк на улице с перекрестками.
При сопоставлении слева направо Прологу требуется способ «запоминания точек», с которых он может продолжить альтернативные попытки найти решение. Прежде чем попробовать один из возможных путей решения подцели, Пролог помещает в программу указатель, в которой может быть выполнен откат при неудаче попытки (откат влево до ближайшего указателя).
Пример:
likes(mary, pears). – база данных
likes(mary, popcorn). – Мери любит кукурузные хлопья
likes(mary, аpples). – мери любит яблоки
likes(beth, X):– likes(mary, Х), fruit(X), Color(X, red).
Бет любит нечто – если Мери любит это нечто, если это нечто – фрукт, и если цвет этого нечто – красный
likes(beth, X):– likes(mary, Х), Х=popcorn.
Любит Бет то же что и Мэри, и если это кукурузные хлопья
fruit(pears ). – персики-фрукт
fruit(аpples). – яблоки-фрукт
color(pears, yellow). – цвет персиков желтый
color(oranges, orange). – апельсин оранжевый
color(аpples, red). – цвет яблок красный
color(аpples, yellow). – цвет яблок желтый
Цель: что любит Бет?
Likes(beth, X) Х=аpples, Х=popcorn
Совпадет, тогда проверяем следующую цель likes (mary, Х)
Х=pears (персик)
fruit(pears)
color(pears, red) – нарушение и т.д.
7.6. Операторы. Декларативный и процедурный смысл программы
Существуют 2 простых оператора.
1. write(«текст», А) – всегда работает, печатает текст, т.е. то, что находится в скобках;
2. writef(шаблон, список переменных) – форматированный вывод.
Допустим, необходимо написать программу, которая ищет синонимы слова. Введем предикат synonym(word, syn). Тогда программа будет иметь вид:
domains
word, syn=symbol
predicates
synonym (word, syn)
goal
synonym (brave, X), write (“Synonym for ‘brave’ is “), nl, write (“’”, X, ”’.”), nl.
сlauses
synonym(brave, daring).
synonym(brave, cowardless).
Внутренняя цель является составной и состоит из 5 подцелей. Synonym(brave, X) – найти утверждение, использующее предикат synonym, такое, что первый объект в нем bravo, и связать переменную Х с его вторым объектом. Второй подцелью является печать строки символов, третья подцель – встроенный предикат nl сдвигает курсор на начало новой строки. Список аргументов write может быть смешанный, как в четвертой подцели, которая печатает найденный синоним. В запросе может быть несколько переменных, например, synonym(P, Q). Ответ будет P=bravo, Q=daring и т.д.
Для реализации арифметических операций в Турбо Прологе имеются встроенные предикаты операций:
+, -, *./, mod, div (деление нацело, получение остатка),
определены все тригонометрические функции:
Cos(x), sin(x), tg(x), и ряд других функций.
Пример.
preducates
аdd(integer, integer) – сложение 2 целых чисел,
fadd(real, real) – сложение действительных числа.
Пример.
predicates
add(integer, integer)
fadd(real, real)
goal
write(“Result is”), nl, nl, add (44, 23), fadd (1.23, 3.56).
clauses
add(X, Y):– Z=X+Y, write(“Sum=”, Z), nl.
fadd(P, Q):– R=P+Q, write(“Fsum=”, R), nl.
Помимо принадлежности одному и тому же домену некоторые объекты могут иметь еще некоторое число общих атрибутов.
До сих пор мы рассматривали программу на Прологе, как систему вывода на клозах Хорна, т.е. как систему доказательств фактов на основе других фактов и правил. Действительно, в этом состоит так называемый декларативный (дескриптивный) смысл программы. В тоже время ряд предикатов, приведенных выше, более напоминают команды процедурного языка нежели логические выражения. Действительно, эти предикаты всегда истинны, но подразумевают определенные инструкции, которые компьютер должен выполнить. Таким образом, с учетом правил работы каждая программа на Прологе предполагает некоторую последовательность действий, т.е. алгоритм, который реализован в программе. В этом состоит процедурный смысл программы.