- •Лабораторная работа № 5 Программирование интеллектуальных систем на языке Пролог Пролог-программы как простейшие базы данных и знаний
- •Введение
- •Запросы к базе данных
- •2.1. Простые запросы
- •Составные запросы
- •Запросы с анонимными переменными
- •Статические и динамические базы данных
- •Явные и неявные базы данных. Правила логического вывода
- •Использование структур в качестве доменов отношений
- •Процедуры как элемент представления знаний
- •Целостность и непротиворечивость баз данных и знаний
- •Порядок выполнения лабораторной работы
Лабораторная работа № 5 Программирование интеллектуальных систем на языке Пролог Пролог-программы как простейшие базы данных и знаний
Введение
Система понятий для представления знаний несколько отличается от понятий для представления данных. Вместе с тем база знаний (БЗ) способна хранить данные и как простую разновидность знаний в виде базы данных (БД). Запросы, которые формирует пользователь к базе, реализуются одним из двух возможных способов:
- сообщения, являющиеся ответом на запрос, хранятся в явном виде в БД, и процесс получения ответа представляет собой выделение подмножества значений из БД, удовлетворяющих запросу;
- ответ не существует в явном виде в БД и формируется в процессе логического вывода на основании имеющихся данных.
Последний случай принципиально отличается от технологий использования БД и рассматривается в рамках представления знаний, то есть информации, необходимой в процессе вывода новых фактов. В Пролог-программах вывод новых фактов возможен на основании набора правил, включаемых в программу и представляющих собой упрощенный вариант БЗ. Представление знаний в виде набора правил имеет следующие преимущества:
простота создания и понимания отдельных правил;
простота механизма логического вывода.
К недостаткам этого способа организации БЗ относится его отличие от человеческой структуры знаний.
Запросы к базе данных
Простейшая Пролог-программа представляет собой множество фактов, которое неформально называют базой данных.
Рассмотрим пример. Пусть для хранения информации о служащих и местах их работы необходимо создать БД со структурой отношения РАБОТАЕТ (ИМЯ, ОТДЕЛ). При этом атрибут ИМЯ описывает домен данных типа строки символов, а атрибут ОТДЕЛ - домен целочисленных данных.
/* Программа 4 */
domains
name = string office = integer
predicates
work( name , office )
clauses
work( "Петров" , 101 ) work( "Павлов" , 211 ) work( "Сидоров" , 101)
Для решения поставленной задачи в Пролог-программе:
исходное отношение описывается предикатом аналогичной структуры;
в секции domains задаются области изменения каждого аргумента предиката;
каждый кортеж данного отношения представляется в секции clauses в виде факта.
Одним из примеров программы, реализующих данную задачу, может быть приведенная здесь программа 4.
После того, как данная программа введена в систему Турбо-Пролога с помощью текстового редактора или загружена с диска, а затем запушена на выполнение командой Вып главного меню системы, активизируется окно диалога (появляется сообщение Goal:) и система готова к приему запросов. Синонимом слова запрос является слово цель. В переводе с английского goal обозначает цель.
2.1. Простые запросы
Простой запрос состоит из имени предиката, за которым располагается список аргументов.Если в запрос входят только константы (т.е. атомы и числа), то такой запрос называется запросом с константами и на него система выдает только один из двух ответов - True или False. Ответ True свидетельствует о том, что система доказала истинность запроса в соответствии с множеством фактов, загруженных в нее в данный момент. Ответ False - это невозможность системы доказать истинность запроса. Приведенные в окне диалога запросы соответствуют вопросам:
- "Работает ли Павлов в 211 отделе?". Ответ на него можно трактовать так: "Да, работает Павлов в 211 отделе"
- "Работает ли Павлов в 101 отделе?". Ответ на который: "Нет, не работает Павлов в 101 отделе".
Однако применение запросов с константами весьма ограничено, поэтому наиболее часто применяются запросы, которые используют переменные - запросы с переменными.
Переменная - это вид терма, начинающийся с заглавной буквы. В запросе, содержащем переменную, неявно спрашивается о том, существует ли хотя бы одно значение переменной, при котором запрос будет истинным. Т.е. переменные в запросах квантифицированы экзистенциально. Если это иметь в виду, то приведенный в окне диалога запрос можно прочесть так: "Существует ли хотя бы один человек, который работает в 101-м отделе?". Запрос будет истинным, если такое лицо будет найдено в текущей базе.
Система пытается унифицировать (т.е. согласовать) аргументы запроса с аргументами фактов, входящих в базу данных "work". Запрос окажется успешным при его сопоставлении с первым же фактом, поскольку атом "101" в запросе унифицируется с атомом "101" первого факта, а переменная "Who" унифицируется с атомом "Петров", входящим в этот факт. В результате данного процесса переменная "Who" примет значение атома "Петров", сообщение о чем и выводится в окне диалога.
Далее происходит сопоставление запроса с другими фактами БД и о всех успешных унификациях и их количестве выдается сообщение в окне диалога. Говорят, что переменная конкретизируется, когда при выполнении запроса она унифицируется с некоторым значением.