
- •1.Введение в функциональное и логическое программирование
- •1.1. Основные классы вычислительных моделей
- •1.1.1 Процедурная вычислительная модель
- •1.1.2 Функциональная вычислительная модель
- •1.1.3. Логическая вычислительная модель
- •1.1.4. Объектно-ориентированная вычислительная модель (ооп)
- •1.2.Метод оценки (способ получения результатов)
- •1.3. Обмен информацией в процессе оценки
- •1.4.Понятие искусственного интеллекта
- •1.5.Символьные языки программирования
- •1.6. Основные направления в искусственном интеллекте
- •Для работы в сфере ии надо иметь:
- •1) Языки ии, обеспечивающие простоту модификации
- •3) Важна и структура самой машины, позволяющая с
- •2.Основы логического программирования и язык Пролог.
- •2.1.Основные понятия
- •2.2.Определение отношений на основе фактов и правил
- •2.3 Пример программы на языке Пролог
- •2.4.Использование рекурсии
- •2.5.Декларативная и процедурная трактовка программы
- •2.6. Cтруктура программы
- •2.7.Особенности лп:
- •2.8 Использование предиката not и
- •3.Синтаксис Пролога
- •3.1. Объекты данных
- •3.2. Составные объекты и альтернативные домены. В утверждениях объекты представляют собой данные.
- •3.2.1. Составная структура
- •Листинг3.1. Использование доменной структуры с именем personal_library
- •3.2.2.Доменная структурная диаграмма программы “Библиотека” (дсд)
- •3.2.3.Предикатная структурная диаграмма программы “Библиотека” (псд)
- •3.2.4. Альтернативные домены
- •Выводы:
- •Рассмотрение работы с составными объектами и альтернативными доменами закончено. Посмотрим, как именно строится логический вывод, реализованный на эвм?
- •3.3. Сопоставление структур(matching)
- •3.4.Унификация и подстановки (Unify).
- •3.5.Основные правила поиска с возвратом:
- •Листинг 3.4.Унификация и поиск с возвратом
- •4.Принцип резолюции
- •Метод резолюции в исчислении предикатов – это пра-
- •4.1.Логическое следствие
- •4.2. Логический вывод
- •4.3 Преимущества и недостатки метода резолюции
- •4.4. Пример применения метода резолюций.
- •5. Управление поиском решений
- •5.1.Метод отката после неудачи – опн
- •5.2 Метод отсечения и отката – оо
- •5.2.1.Влияние предиката cut на составную цель
- •5.2.3. Использование зеленых и красных отсечений
- •5.2.4.Использование предиката not как средства управления
- •5.3.Метод повтора, определяемый пользователем (мп)
- •5.4.Методы организации рекурсии
- •Листинг 5.9. Бесконечная рекурсия (хвостовая рекурсия)
- •Пример программы, которая циклически считывает символ, введенный пользователем. Если символ не равен #, то он выводится на экран, иначе процесс заканчивается.
- •Листинг 5.14. Пример рекурсии для генерации ряда чисел в порядке возрастания
- •Определение
- •Список помогает сделать программу компактной, эффектив-
- •Список – это рекурсивный составной объект, поэтому
- •6.1.Операции над структурами данных типа список.
- •6.2.Предикат findall
- •6.3. Операции со структурами данных.
5.2.3. Использование зеленых и красных отсечений
Отсечения бывают зеленые и красные.
Листинг 5.5. Использования зеленого отсечения в
задаче нахождения минимума двух чисел
predicates
minimum(real,real,real)
clauses
minimum(X,Y,X):-
X<=Y, !.
minimum(X,Y,Y):-
X >Y,!.
goal: minimum(3,5,Min)
Min=3
goal: minimum(6,5,Min)
Min=5
-При выполнении одной арифметической проверки оказывается невозможным выполнение другой проверки. Отсечение, содержащееся в этой программе, отображает детерминированный характер ее. Это значит, что для каждой доказуемой цели к ее доказательству ведет применение лишь одного правила программы. Отсечение фиксирует выбор такого правила.
-Отбрасывает часть пространства поиска. Сведения, зафиксированные при отсечении, используются для сокращения дерева поиска, что уменьшает выполняемый путь обхода дерева и экономит время выполнения программы а также уменьшает объем используемой памяти.
Здесь имели место зеленые отсечения, то есть такие, добавление которых в программу не влияло на декларативный ее характер (Можно найти все решения, убирая заведомо лишние части дерева, которые все равно бы не привели к новым решениям. Удаление зеленого отсечения также не влияет на решения программы)
Замечание: программы с отсечением менее гибкие, чем без отсечения. Но если предполагается использовать программу только одним способом, то это не существенно.
Листинг 5.6. Использования красного отсечения
predicates
minimum(real,real,real)
clauses
minimum(X,Y,X):- X<=Y,!.
minimum(X,Y,Y).
Если X<=Y, то минимум X. В противном случае минимум равен Y.Вроде бы сравнения X и Y – излишни. Однако в приведенной ранее программе такое сравнение выполняется, и это – правильно. Здесь мы это сравнение из программы убрали. Поставим цель minimum(3,7,7) Ответ:yes, что неверно. То есть программа получилась логически ложной. Можно попытаться избавиться от ложных целей, сделав неявную унификацию явной:
minimum(X,Y,Z):- X<=Y,!,Z=X.
Но снова получаем логическую программу, которая может быть неверной как раз с точки зрения логики. Если аргументам X и Y –сопоставили значения, а Z-осталась свободной, то программа будет работать правильно. Если Z – связана, то может быть ошибка. Например, goal: minimum(8,9,7) –no.
Если применяем зеленые отсечения, то отбрасываем заведомо бесполезные ветви в дереве поиска.
Красные отсечения используются для устранения явных условий (заведомо выполнимых). Это иногда
полезно, но опасно. Использование красных отсечений для устранения явных условий позволяет задавать отрицания неявно. Требуют от программиста максимального внимания.
Отсечение cut –мощный, но опасный оператор Пролога. Он многое позволяет, но за это приходится платить - программа становится трудной для понимания и легко сделать ошибку.
Выводы
Определение: После унификации порождающей цели с заголовком предложения, содержащего отсечение, цель выполняется и фиксируется для всех выборов предложений.
Следствия: -
- отсечение отбрасывает все расположенные после него предложения. Если цель Р унифицирована с предложением, содержащим отсечение, и отсечение выполнено, то эта цель не может быть использована для построения решений с помощью предложений, расположенных ниже данного;
- отсечение отбрасывает все альтернативные решения конъюнкции целей, расположенных в предложении левее отсечений, то есть конъюнкция целей, стоящих перед отсечением, приводит не более чем к одному решению;
- отсечение не влияет на цели ,расположенные правее его. В случае возврата они могут порождать более одного решения. Однако если эта конъюнкция не выполнится, то поиск переходит к последнему выбору, сделанному перед выбором предложения, содержащего отсечение.