Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
IIS / Лекции / ЛР 2 3 - Prolog задание 2.doc
Скачиваний:
42
Добавлен:
31.03.2015
Размер:
92.16 Кб
Скачать

Лабораторная работа № 5 Программирование интеллектуальных систем на языке Пролог Пролог-программы как простейшие базы данных и знаний

  1. Введение

Система понятий для представления знаний несколько отличается от понятий для представления данных. Вместе с тем база знаний (БЗ) способна хранить данные и как простую разновидность знаний в виде базы данных (БД). Запросы, которые формирует пользователь к базе, реализуются одним из двух возможных способов:

- сообщения, являющиеся ответом на запрос, хранятся в явном виде в БД, и процесс получения ответа представляет собой выделение подмножества значений из БД, удовлетворяющих запросу;

- ответ не существует в явном виде в БД и формируется в процессе логического вывода на основании имеющихся данных.

Последний случай принципиально отличается от технологий использования БД и рассматривается в рамках представления знаний, то есть информации, необходимой в процессе вывода новых фактов. В Пролог-программах вывод новых фактов возможен на основании набора правил, включаемых в программу и представляющих собой упрощенный вариант БЗ. Представление знаний в виде набора правил имеет следующие преимущества:

простота создания и понимания отдельных правил;

простота механизма логического вывода.

К недостаткам этого способа организации БЗ относится его отличие от человеческой структуры знаний.

  1. Запросы к базе данных

Простейшая Пролог-программа представляет собой множество фактов, которое неформально называют базой данных.

Рассмотрим пример. Пусть для хранения информации о служащих и местах их работы необходимо создать БД со структурой отношения РАБОТАЕТ (ИМЯ, ОТДЕЛ). При этом атрибут ИМЯ описывает домен данных типа строки символов, а атрибут ОТДЕЛ - домен целочисленных данных.

/* Программа 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" примет значение атома "Петров", сообщение о чем и выводится в окне диалога.

Далее происходит сопоставление запроса с другими фактами БД и о всех успешных унификациях и их количестве выдается сообщение в окне диалога. Говорят, что переменная конкретизируется, когда при выполнении запроса она унифицируется с некоторым значением.