Кафедра математического моделирования 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Кафедра математического моделирования



Кафедра математического моделирования

информационных и технологических систем

 

 

РАЗРАБОТКА ЭКСПЕРТНЫХ СИСТЕМ СРЕДСТВАМИ ЯЗЫКА ТУРБО-ПРОЛОГ

Методические указания к практическим занятиям

по курсу «Представление знаний в информационных системах»

 

 

Для студентов специальности

- «Информационные системы и технологии», обучающихся по направлению 654700 - «Информационные системы»,

дневной формы обучения

 

Воронеж 2003


УДК 51(075); 681.3.06

Разработка экспертных систем средствами языка Турбо-Пролог: Методические указания к практическим занятиям по курсу «Представление знаний в информационных системах» / Воронеж. гос. технол. акад.; Сост. И.О. Павлов, С.В. Кулакова. Воронеж, 2003. 36 с.

Задания разработаны в соответствии с требованиями ООП подготовки инженеров по направлению 654700 - «Информационные системы», специальности 071900 - «Информационные системы и технологии». Они предназначены для закрепления теоретических знаний дисциплины цикла ОПД.

Излагаются основные принципы работы с базами данных, организации баз знаний и управления стратегией вывода в экспертных системах средствами языка логического программирования Пролог. Приведены примеры составления программ и варианты заданий для самостоятельной работы.

Библиогр.: 7 назв.

Составители: доцент И.О. ПАВЛОВ,

доцент С.В. Кулакова

Научный редактор профессор Г.В. АБРАМОВ

Рецензент профессор И.Г. АМРАХОВ

Печатается по решению

редакционно-издательского совета

Воронежской государственной технологической академии

ã                                Павлов И.О.,

Кулакова С.В., 2003

Ó Воронежская государственная Технологическая академия, 2003

Оригинал-макет данного издания является собственностью Воронежской государственной технологической академии, его репродуцирование (воспроизведение) любым способом без согласия академии запрещается.


Предикаты для работы с БД в целом

 

Для записи динамической БД в файл на диск и для загрузки содержимого файла в динамическую БД применяются стандартные предикаты save и consult.

Предикат save сохраняет находящуюся в оперативной памяти базу данных в текстовом файле. Синтаксис этого предиката

save(имя_файла[,имя_БД]),

где имя_файла есть произвольное допустимое в MS DOS или PC DOS имя файла.

Пример: для того, чтобы сохранить содержимое БД tabel в файле с именем exam_03.dba, требуется предикат

save("exam_03.dba", tabel).

В результате все утверждения находящейся в оперативной памяти динамической БД tabel будут записаны в файл exam_03.dba. Cодержимое БД со стандартным именем dbasedom сохранить в файле c:\dir1\f1.db можно при помощи предиката

save("c:\\dir1\\f1.db").

Заметим, что если файл с таким именем уже существовал на диске, то этот старый файл будет затерт. Поэтому следует использовать предикат save с известной долей осторожности.

Произвольный текстовый файл, содержащий факты, совпадающие по синтаксису с предикатами описанной в программе БД, может быть считан в память (загружен) при помощи предиката consult, синтаксис которого таков:

consult(<имя_файла>[,<имя_БД>]).

Для загрузки файла exam_02.dba в БД tabel требуется выражение

consult("exam_02.dba ", tabel).

А для того, чтобы загрузить содержимое файла d:\dir2\f2.dbf в БД со стандартным именем dbasedom необходимо использовать предикат

consult("d:\\dir2\\f2.dbf").

Предикат consult неуспешен, если файл с указанным именем отсутствует на диске, или если этот файл содержит ошибки, как, например, в случае несоответствия синтаксиса предиката из файла описаниям из раздела программы database, или если содержимое файла невозможно разместить в памяти ввиду отсутствия места.

Пример работы с базой данных, располагающейся в оперативной памяти

Любая система системы управления базой данных (СУБД), ориентированная на диалог с пользователем должна содержать как минимум такие возможности, как занесение в базу новых данных; удаление данных из базы; выборка и вывод содержащихся в базе данных.

Хотелось бы реализовать достаточно логичным удобным для пользователя способом. Такие требования предполагают наличие в системе меню.

Приведем пример простейшей программы, позволяющей выполнять основные действия над динамической БД.

database

dstudent (symbol,symbol,symbol) /*Таблица с информацией о студентах */

dexam(symbol,symbol,integer) /* Таблица с информацией о сдаче экзаменов*/

predicates(char)(char)(char)(char)(char)(integer)(symbol)(symbol)(symbol,symbol,integer)(symbol,integer)(1, 10, 3, "БД ‘сессия’ ", 3, 10, 19, 60, 1, -1,

"\218\191\192\217\196\179"), menu.

clauses

/*Вывод меню на экран*/

menu:- clearwindow,("1 - создать"),nl,("2 - загрузить"),nl,

write("3 - добавить запись"),nl,

write("4 - найти запись"),nl,

write("5 - удалить запись"),nl,

write("6 - сохранить"),nl,("7 - выход"), nl, readchar(N), reaction(N).

/*Реакция программы на выбор пункта меню*/

reaction('1'):-deldb, menu.('2'):-clearwindow, write("Введите имя файла"), readln(Fname),(Fname), menu.('3'):-typerec(N), addquation3(N), dely, menu.('4'):-clearwindow, typerec(N), findquation4(N), menu.('5'):-clearwindow, typerec(N), retquation4(N), dely, menu.('6'):-write("Enter filename"), readln(Fname), save(Fname), menu.('7').(_):-write("Введите число 1-6"), dely, menu.

/*Удаление всей информации из базы*/

deldb:-retract(dstudent (_,_,_)), fail.:-retract(dexam(_,_,_)), fail..

/*Выбор типа записи (таблицы БД)*/

typerec(N):-clearwindow, write("1 - информация о студентах"), nl,

write("2 - результаты сдачи экзаменов"), nl, readchar(N).

/*Ввод и добавление новой записи*/

addquation3('1'):-clearwindow,write("Введите шифр студента"), nl, readln(Code),("Введите ФИО студента"),nl, readln(Name),("Введите факультет"),nl, readln(D),(dstudent(Code,Name,D)), write("Запись добавлена"),nl.('2'):-clearwindow, write("Введите шифр студента "),nl, readln(Code),("Enter course"), nl, readln(Course),("Enter mark"), nl, readint(Mark),(dexam(Code,Course,Mark)), write("Запись добавлена ").3(_):- write("Ошибка!").

/*Уточнение задания на поиск информации*/

findquation4('1'):-clearwindow, write("1 - искать запись по шифру"),nl,("2 - искать запись по имени"),nl, readint(N), find(N),dely.

findquation4('2'):-clearwindow, write("1 - искать запись по шифру "),nl,("2 - искать запись по наименованию дисциплины "),nl,

readint(N), N2=N+2, find(N2), dely.

/*Уточнение задания на поиск информации */

find(1):-clearwindow, write("Введите шифр "), readln(Code),(Code,Name,D), write("Студент "), write(Name), nl,("обучается на факультете "), write(D).

find(1):-write("Такой записи в базе нет").

find(2):-clearwindow, write("Введите имя студента "), readln(Name),(Name), findnameyes(Name).(2):-write("Такой записи в базе нет ").(3):-clearwindow, write("Введите шифр студента "), readln(Code),(Code,Name,D), write("Студент "), write(Name), nl,(" факультета"), write(D),nl, findexam(Code,_,_).(3):-write("Такой записи в базе нет ").

find(4):-clearwindow, write("Введите наименование дисциплины"),

readln(Course),("Введите оценку. Для поиска по всем оценкам введите 0 "),

readint(Mark), find4(Course,Mark).

/*Поиск информации о сдаче экзаменов */

find4(Course,0):-findexam(_,Course,_).(Course,Mark):-findexam(_,Course, Mark).

/*Поиск записей по имени студента*/

findname(Name):-dstudent(Code, Name, D),write("Шифр студента "),(Code),nl,("Факультет "), write(D), dely, fail.(_).

/*Результат поиска записей по имени*/

findnameyes(Name):-dstudent(_,Name,_).

/*Поиск информации о сдаче экзаменов*/

findexam(Code,Course,Mark):-dexam(Code,Course,Mark),("Шифр"), write(Code), write(" "),(Course), write(" "), write(Mark), nl, fail.(_,_,_).

/*Определение и удаление строки из БД*/

retquation4('1'):-write("Введите шифр студента"), nl, readln(Code),

write("Введите имя"), nl, readln(Name),("Введите название факультета"), nl, readln(D),

retract(dstudent(Code,Name,D)), write("Запись удалена"),nl.('2'):-write("Введите шифр студента "),nl, readln(Code),("Введите название дисциплины"), nl, readln(Course),(dexam(Code,Course,_)),("Запись удалена"),nl.4(_):-write("Такой записи в базе нет"),nl.

/*Приостановка работы программы до нажатия любой клавиши*/

dely:-nl, nl, nl, write("Нажмите любую клавишу"), nl, readchar(_).

/* Конец программы */

РАБОТА С БД НА ДИСКЕ

Описание файлового домена

 

Описание одного файлового домена с именем datafile выглядит как= datafile

Это описание отличается от привычного описания типа= symbol,

где name является именем домена, а symbol - стандартным типом доменов Турбо-Пролога.

. При описании файловых доменов, стандартный тип домена file задается по левую сторону от знака равенства, а имя домена datafile - по правую.

. datafile, хоть и описывается как домен, но используется в программе (при записи правил) как символическое имя файла, то есть идентификатор, который в программе может быть логически отождествлен с любым DOS файлом. Это символическое имя называют также логическим именем файла.

В описании file можно указывать несколько символических имен, но само описание должно быть единственным. Если в программе вводится несколько символических имен файлов, то они разделяются между собой точкой с запятой (;). Например,

file = datafile1; datafile2; datafile3

Это объявление декларирует три символических имени для последующего их отождествления с реальными DOS файлами.

Запись в файл

Перед тем, как начать писать что-либо в файл, нужно создать его. В Турбо-Прологе файлы создаются при помощи предиката openwrite. При этом, указатель файла помещается в его начало. Синтаксис:

openwrite(<символическое имя файла>, <имя_DOS_файла>).

Например

openwrite(datafile1,"file1.dat"),

где datafile1 есть введенный пользователем файловый домен, а file1.dat - физическое имя файла на диске. Предикат устанавливает связь между объектами datafile1 и file1.dat. Теперь ссылки на datafile1 будут означать обращение к file1.dat. Связь остается в силе вплоть до закрытия файла.

Заметим, что если файл с именем file1.dat к моменту вызова предиката openwrite уже присутствовал в директории, то его содержимое будет утрачено. Для того, чтобы застраховаться от этой неприятности, можно сначала проверить наличие файла при помощи предиката

existfile("file1.dat")

и принять соответствующие меры, если existfile будет успешен.

Чтобы использовать стандартные предикаты write или writef для вывода информации в файл, необходимо назначить этот файл в качестве устройства записи:

writedevice(<символическое имя файла>).

Например

writedevice(datafile1), write(“Эти три строки будут записаны в файл file1.dat”), nl, write(“Это вторая строка”), nl, write(“А это - третья ”).

Чтение из файла

Для чтения данных из файла требуется:

. Открыть файл при помощи предиката openread:

openread(<символическое имя файла>, <имя_DOS_файла>).

Пример:(datafile3,"file3.dat").

2. Назначить файл datafile3 устройством чтения:

readdevice(<символическое имя файла>).

Например,(datafile1).

. Ввести информацию из файла при помощи соответствующего предиката или правила (readint, readreal, readln и т.д.).

Закрытие файла

 

Этой цели служит предикат

closefile(<символическое имя файла>).

Например,(datafile1).

Когда файл закрыт, операции чтения или записи для него недопустимы. Закрытие файла также защищает содержимое файла от каких бы то ни было манипуляций, так как теперь возможны лишь операции с файлом в целом.

Еще одним следствием закрытия файла является перевод указателя файла в начало. Это может понадобиться при повторном открытии файла.

Переадресация ввода-вывода

 

Встроенный предикат Турбо-Пролога readdevice позволяет переадресовать логическое устройство ввода. Аналогично встроенный предикат writedevice осуществляет переадресацию устройства вывода информации.

Так предикат(myfile)

настраивает устройство ввода на файл myfile, а предикат(yourfile)

настраивает устройство вывода на файл yourfile.

Для настройки ввода и вывода на стандартные устройства в Турбо-Прологе используются стандартные имена screen, keyboard, printer. Например, правило_lines:- writedevice(screen), write(" Первая строка "),, writedevice(printer),(" Первая строка"),nl,

flush(printer), writedevice(screen).

выводит строку " Первая строка " на экран монитора, а затем эту же строку выводит на принтер. Стандартный предикат flush здесь используется для того, чтобы строка была выведена из буфера сразу на принтер.

Другие полезные предикаты

 

Предикат eof производит проверку на достижение конца файла

eof(<символическое_имя_файла>)

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

concat(<строка1>,<строка2>, <новая_строка>).

РАЗРАБОТКА ЭКПЕРТНЫХ СИСТЕМ

 

Разработка экспертных систем (ЭС) является наиболее плодотворной быстро развивающейся областью применения Пролога. Очень важно понимать, как работают экспертные системы, так как они могут использоваться, фактически, в любой области знаний.

Экспертная система - это компьютерная программа, которая в некоторой области проявляет степень познаний равнозначную степени познания человека-эксперта. Обычно эта область строго ограничена. Однако, количество приложений огромно. Сюда входят понимание речи, анализ изображений, прогноз погоды, оценка будущего урожая, медицинская диагностика, разработка интегральных схем, финансирование, управление воздушным движением, управление боем и т.д.

Структура экспертных систем

 

Чтобы проводить экспертизу, компьютерная программа должна быть способна решать задачи посредством логического вывода и получать при этом достаточно надежные результаты. Программа должна иметь доступ к системе фактов, называемой базой знаний. Программа также должна во время консультации выводить заключения из информации, имеющейся в базе знаний. Некоторые экспертные системы могут также использовать новую информацию, добавляемую во время консультации. Экспертную систему, таким образом, можно представлять состоящей из трех частей:

1. База знаний (БЗ).

2. Механизм вывода (МВ).

.   Система пользовательского интерфейса (СПИ).

База знаний - центральная часть экспертной системы. Она содержит правила, описывающие отношения или явления, методы и знания для решения задач из области применения системы. Можно представлять базу знаний состоящей из фактических знаний и знаний, которые используются для вывода других знаний. Утверждение "Джон Ф. Кеннеди был 35-м президентом Соединенных Штатов" - пример фактического знания. "Если у вас болит голова, то примите две таблетки цитрамона" - пример знания для вывода. Сама база знаний обычно располагается на диске или другом носителе.

Механизм вывода содержит принципы и правила работы. Механизм вывода "знает", как использовать базу знаний так, чтобы можно было получать разумно согласующиеся заключения (выводы) из информации, находящейся в ней.

Когда экспертной системе задается вопрос, механизм вывода выбирает способ применения правил базы знаний для решения задачи, поставленной в вопросе. Фактически, механизм вывода запускает экспертную систему в работу, определяя какие правила нужно вызвать и организуя к ним доступ в базу знаний. Механизм вывода выполняет правила, определяет, когда найдено приемлемое решение и передает результаты программе интерфейса с пользователем. Когда вопрос должен быть предварительно обработан, то доступ к базе знаний осуществляется через интерфейс с пользователем.

Интерфейс - это часть экспертной системы, которая взаимодействует с пользователем. Как правило, пользователи мало знают об организации базы знаний, поэтому интерфейс может помочь им работать с экспертной системой даже, если они не знают, как она организована. Интерфейс может также объяснить пользователю, каким образом экспертная система выводит результат.

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

ЛИСТИНГ

 

/* Программа: эксперт по породам собак */

/* Это продукционная система, базирующаяся на правилах*/

database(symbol,symbol)(symbol,symbol)_expert_job_consulting(symbol,symbol)_is(symbol)_is(symbol)(symbol,symbol)(symbol,symbol)(symbol,symbol,symbol)_facts_expert_job.

/* Систесма пользовательского интерфейса */

do_expert_job:- makewindow(1, 7, 7, "ЭКСПЕРТ ПО ПОРОДАМ СОБАК, 1, 16, 22, 58),

nl,write(" * * * * * * * * * * * * * * * * * * * * * "),

nl,write(" ДОБРО ПОЖАЛОВАТЬ! "),nl,nl,

nl,write(" Проводится идентификация породы "),nl,nl,

nl,write(" Отвечайте, пожалуйста, 'да' или 'нет' "),

nl,write(" а вопросы о собаке, породу которой "),

nl,write(" Вы хотите определить "),

nl,write(" * * * * * * * * * * * * * * * * * * * * * * "),,nl,do_consulting,write("Нажмите любую клавишу"),, readchar(_), removewindow._consulting:- dog_is(X),!, nl, write("Вероятно Ваша собака - ",X,"."),,clear_facts._consulting:- nl, write("Извините, я не смогу помочь Вам!"),

clear_facts.(X,Y):- write("?:- ",X, " ",Y, "? "), readln(Reply),(X,Y,Reply).

/* Механизм вывода */(X,Y):- xpositive(X,Y),!.(X,Y):- not(negative(X,Y)),!,ask(X,Y).(X,Y):- xnegative(X,Y),!.(X,Y,yes):- asserta(xpositive(X,Y)).(X,Y,no):- asserta(xnegative(X,Y)),fail._facts:- retract(xpositive(_,_)), fail._facts:- retract(xnegative(_,_)), fail.

/* Продукционные правила */

dog_is("Английский Бульдог"):- it_is("короткошерстная собака"),

positive("ее","высота в холке не более 57 см"),

positive("у нее","низко посаженный хвост"),

positive("у нее","дружелюбный характер"),!.

dog_is("Гончая"):- it_is("короткошерстная собака"),

positive("ее","высота в холке не более 57 см"),

positive("у нее","длинные уши"),

positive("у нее","дружелюбный характер"),!.

dog_is("Немецкий Дог"):- it_is("короткошерстная собака"),

positive("у нее","низко посаженный хвост"),

positive("у нее","дружелюбный характер"),

positive("ее","вес более 45 кг"),!.

dog_is("Американский Фоксхаунд"):- it_is("короткошерстная собака"),

positive("ее","высота в холке не более 77 см"),

positive("у нее","длинные уши"),

positive("у нее","дружелюбный характер"),!.

dog_is("Кокер Спаниель"):- it_is("длинношерстная собака"),

positive("ее","высота в холке не более 57 см"),

positive("у нее","низко посаженный хвост"),

positive("у нее","длинные уши"),

positive("у нее","дружелюбный характер"),!.

dog_is("Ирландский Сеттер"):- it_is("длинношерстная собака"),

positive("ее","высота в холке не более 77 см"),

positive("у нее","длинные уши"),!.

dog_is("Колли"):- it_is("длинношерстная собака"),

positive("ее","высота в холке не более 77 см"),

positive("у нее","низко посаженный хвост"),

positive("у нее","дружелюбный характер"),!.

dog_is("Сенбернар"):- it_is("длинношерстная собака"),

positive("у нее","низко посаженный хвост"),

positive("у нее","дружелюбный характер"),

positive("ее","вес более 45 кг"),!.

it_is("короткошерстная собака "):-

positive("это","короткошерстная собака "),!.

it_is("длинношерстная собака "):-

positive("это","длинношерстная собака "),!.

/* Конец программы */

ЛИСТИНГ

 

/* Программа: Эксперт по породам собак */

/* Пример экспертной системы, базирующейся на логике */

domains= integer *   = integer *

/* Предикаты базы данных */(integer, symbol,symbol, conditions)(integer, symbol)(integer)(integer)

predicates

/* Предикаты системы пользовательского интерфейса */

do_expert_job_consulting(symbol)

/* Предикаты механизма вывода */(history, symbol)(integer, history, conditions)(history, integer, integer, symbol)_answer(history, integer, symbol,integer, integer)_expert_job.

/* База знаний (БЗ) */(1, "Собака", "Короткошерстная собака", [1]).

rule(2,    "Собака", "Длинношерстная собака ", [2]).

rule(3,    "Короткошерстная собака","Английский бульдог",[3,5,7]).

rule(4,    "Короткошерстная собака","Гончая", [3,6,7]).

rule(5,    "Короткошерстная собака","Немецкий Дог", [5,6,7,8]).

rule(6,    "Короткошерстная собака","Американский фоксхаунд",

[4,6,7]).

rule(7,    "Длинношерстная собака ", "Кокер спаниель", [3,5,6,7]).

rule(8,    "Длинношерстная собака ", "Ирландский Сеттер", [4,6]).

rule(9, "Длинношерстная собака ", "Колли", [4,5,7]).

rule(10, "Длинношерстная собака ", "Сенбернар", [5,7,8]).

 

cond(1,"Короткошерстная").

cond(2,"Длинношерстная").

cond(3,"Высота в холке не более 57 см").

cond(4,"Высота в холке не более 77 см ").

cond(5,"Низко посаженный хвост").

cond(6,  "Длинные уши").

cond(7,  "Дружелюбный характер").

cond(8,  "Вес более 45 кг").

/* Система пользовательского интерфейса */

do_expert_job:-

makewindow(1,7,7,"ЭКСПЕРТ ПО ПОРОДАМ СОБАК", 0, 0, 25, 80),

do_consulting, nl, nl, nl, nl, write("Нажмите любую клавишу"),(_), exit._consulting:-goes(Mygoal),go([],Mygoal),!._consulting:-nl, write("Извините, я не смогу Вам помочь"),clear.

do_consulting.(Mygoal):- clear,clearwindow, nl, nl,nl,nl,("ДОБРО ПОЖАЛОВАТЬ"),nl, nl, nl,

write("Проводится идентификация породы"),nl,

write("Для того, чтобы начать процесс идентификации,"),nl,

write("введите слово 'Собака'. "), nl, nl, readln(Mygoal),!.

inpo(HISTORY,RNO,BNO,TEXT):-write("?:- ",TEXT,"? "),

makewindow(2,7,7,"Для ответа на вопрос",10,54,7,35),

write("введите 1, если Ваш ответ 'да',"),

write("введите 2, если Ваш ответ 'нет',"),

write("введите 0, для выхода из системы"),nl,

readint(RESPONSE),,shiftwindow(1),_answer(HISTORY,RNO,TEXT,BNO,RESPONSE).

/*  Механизм вывода   */(HISTORY, Mygoal):-rule(RNO,Mygoal,NY,COND),(RNO,HISTORY,COND),!,([RNO|HISTORY],NY).(_,Mygoal):-not(rule(_,Mygoal,_,_)),!,,write("Вероятно Ваша собака - ",Mygoal,"."), nl, nl, nl.(RNO,HISTORY,[BNO|REST]):-

yes(BNO),!,check(RNO,HISTORY,REST).(_,_,[BNO|_]):- no(BNO),!,fail.(RNO,HISTORY,[BNO|REST]):-cond(BNO,TEXT),(HISTORY,RNO,BNO,TEXT),(RNO,HISTORY,REST).(_,_,[])._answer(_,_,_,_,0):- exit._answer(_,_,_,BNO,1):-assert(yes(BNO)),write(yes),nl._answer(_,_,_,BNO,2):-assert(no(BNO)),write(no),nl,fail.:- retract(yes(_)),retract(no(_)),fail,!..

/*  Конец программы  */

Выбор типа ЭС

 

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

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

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

Если быстрота является главным требованием к разрабатываемой экспертной системе, то можно выбрать либо систему на фактах, полностью находящуюся в оперативной памяти, либо систему, базирующуюся на правилах. Обе будут работать хорошо. Если, однако, экспертная система должна содержать большую базу знаний, то у разработчика имеется единственный вариант - система на фактах, находящаяся на диске.


КОНТРОЛЬНЫЕ ВОПРОСЫ

 

1. Для чего служит и что содержит секция database?

2. Какое имя получает БД по умолчанию.

3. Перечислить достоинства и недостатки использования резидентных БД.

.   Перечислить достоинства и недостатки использования нерезидентных БД.

5. Для чего предназначены и как выполняются стандартные предикаты asserta, assertz, retract, save, consult, readterm, findall.

6. Опишите работу стандартного предиката dir. Приведите примеры.

.   Для каких целей используется стандартный предикат disk? Приведите примеры его использования.

8. Как в Прологе описываются файлы.

9. Привести стандартные предикаты для работы с резидентными БД.

10. Для чего предназначены и как выполняются стандартные предикаты openread, openwrite, openappend, openmodify, readdevice, writedevice, closefile.


ПРАКТИЧЕСКИЕ ЗАДАНИЯ

 

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

1. Личная библиотека. Картотека домашней библиотеки: выходные данные книги (авторы, название, издательство и так далее), раздел библиотеки (специальная литература, хобби, домашнее хозяйство, беллетристика и так далее), происхождение и наличие книги в данный момент, субъективная оценка книги. Выбор книг по произвольному запросу; инвентаризация библиотеки.

2. Касса аэрофлота. Расписание: номер рейса, маршрут, пункты промежуточной посадки, время отправления, дни полета. Количество свободных мест на каждом рейсе. Выбор ближайшего рейса до заданного пункта (при наличии свободных мест), оформление заданного числа билетов по согласованию с пассажиром (с уменьшением числа свободных мест), оформление посадочной ведомости.

3. Магазин с одним продавцом. Компьютер вместо кассового аппарата. База наличия товаров: наименование, единица измерения, цена единицы, количество, дата последнего завоза. Регистрация поступления товара (как старых, так и новых наименований). Оформление покупки: выписка чека, корректировка базы. Проблема уценки и списания. Инвентаризация остатков товара с вычислением суммарной стоимости.

4. Отдел кадров. База данных о сотрудниках фирмы: паспортные данные, образование, специальность, подразделение, должность, оклад, даты поступления в фирму и последнего назначения и т. д. Выбор по произвольному шаблону. Сокращение штатов: выбор для увольнения лиц пенсионного и предпенсионного возраста, подготовка приказа.

5. Склад, База товаров, хранящихся на складе: наименование, единица измерения, цена единицы, количество, дата последнего завоза. Регистрация поступления товара (формирование приходной накладной) и отгрузки (расходная накладная). Вывод инвентарной ведомости.

6. Администратор гостиницы. Список номеров: класс, число мест. Список гостей: паспортные данные, даты приезда и отъезда, номер. Поселение гостей: выбор подходящего номера (при наличии свободных мест), регистрация, оформление квитанции. Отъезд: выбор всех постояльцев, отъезжающих сегодня, освобождение места или оформление задержки с выпиской дополнительной квитанции. Поиск гостя по произвольному признаку.

7. Справочник меломана. База групп и исполнителей; база песен; база дисков с перечнем песен (в виде ссылок). Выбор всех песен заданной группы; всех дисков, где встречается заданная песня.

8. Ежедневник. База намечаемых мероприятий - дата, время и протяженность, место проведения. Автоматическое напоминание ближайшего дела: по текущей дате и времени; удаление вчерашних дел либо перенос на будущее. Анализ «накладок» - пересечений планируемых дел. Просмотр дел на завтра, послезавтра и так далее.

9. Терминология. База определений какой-либо науки: вводимый термин, его толкование (определение), ссылки на используемые термины. Возможность просмотра всей цепочки от заданного термина до первичных понятий.

10. Справочник лекаря. База болезней: название, симптомы, процедуры, перечень рекомендуемых лекарств с указанием требуемого количества. База медикаментов на складе: название, количество, взаимозаменяемость. Формирование рецепта после осмотра больного, проверка наличия лекарств, корректировка запасов.

11. Сбербанк. Сведения о вкладчиках банка: номер лицевого счета, категория вклада, паспортные данные, текущая сумма вклада, дата последней операции. Операции приема и выдачи любой суммы, автоматическое начисление процентов.

.   Ломбард. База хранимых товаров и недвижимости: анкетные данные клиента, наименование товара, оценочная стоимость; сумма, выданная под залог, дата сдачи, срок хранения. Операции приема товара, возврата, продажи по истечении срока хранения.


ТРЕБОВАНИЯ К ОТЧЕТУ

 

Отчет должен содержать задание, структуру таблиц БД, тексты программы на языке Турбо-Пролог, распечатку результата работы тестового примера.

 


БИБЛИОГРАФИЧЕСКИЙ СПИСОК

 

1. Братко И. Программирование на языке Пролог для искусственного интеллекта. / Пер. с англ. - М.: Мир, 1990. - 560 с.

. Стерлинг Л. Искусство программирования на языке Пролог. / Л. Стерлинг, Э. Шапиро; Пер. с англ. - М.: Мир, 1990. - 225 с.

. Ин Ц. Использование Турбо-Пролога. / Ц. Ин, Д. Соломин; Пер. с англ. - М.: Мир, 1993. - 608 с.

. Рыжков Ю. И. Информатика. Лекции и практикум. - СПб.: КОРОНА принт, 2000. - 256 с.

. Основы современных компьютерных технологий: Учеб. пособие / Б. Н. Артамонов, Г. И. Брикалов, В. Э. Гофман, Я. Е. Кадигроб, Р. И. Компаниец, А. Г. Липецких, М. Г. Мальцев, Ю. И. Рыжков, А. Д. Хоменко, В. М. Цыганов; Под ред. проф. Хомоненко А.Д. - СПб.: КОРОНА принт, 1998. - 448 с.

7. Основы программирования на языке Турбо-пролог: Методические указания к практическим занятиям по курсу «Представление знаний в информационных системах» / Воронеж. гос. технол. акад.; Сост. И.О. Павлов, С.В. Кулакова. - Воронеж, 2001. - 32 с.


Учебное издание

 

РАЗРАБОТКА ЭКСПЕРТНЫХ СИСТЕМ

СРЕДСТВАМИ ЯЗЫКА ТУРБО-ПРОЛОГ

Методические указания к практическим занятиям

по курсу «Представление знаний

в информационных системах».

Для студентов специальности 071900 -

«Информационные системы и технологии»

Составители ПАВЛОВ Игорь Олегович,

КУЛАКОВА Светлана Владимировна

Редактор Н.А. Сотникова

Корректор Н.В. Бургонова

Компьютерный набор и верстка С. В. Кулакова

Подписано в печать.2003.

Формат 60х84 1/16. Бумага офсетная. Гарнитура. Таймс. Ризография.

Усл. печ. л. 2,09. Уч.-изд. л. 2,0. Тираж 200 экз. Заказ.С-.

Воронежская государственная технологическая академия (ВГТА)

Участок оперативной полиграфии ВГТА

Адрес академии и участка оперативной полиграфии ВГТА:

Воронеж, пр. Революции, 19

Кафедра математического моделирования

информационных и технологических систем

 

 

РАЗРАБОТКА ЭКСПЕРТНЫХ СИСТЕМ СРЕДСТВАМИ ЯЗЫКА ТУРБО-ПРОЛОГ

Методические указания к практическим занятиям

по курсу «Представление знаний в информационных системах»

 

 

Для студентов специальности

- «Информационные системы и технологии», обучающихся по направлению 654700 - «Информационные системы»,

дневной формы обучения

 

Воронеж 2003


УДК 51(075); 681.3.06

Разработка экспертных систем средствами языка Турбо-Пролог: Методические указания к практическим занятиям по курсу «Представление знаний в информационных системах» / Воронеж. гос. технол. акад.; Сост. И.О. Павлов, С.В. Кулакова. Воронеж, 2003. 36 с.

Задания разработаны в соответствии с требованиями ООП подготовки инженеров по направлению 654700 - «Информационные системы», специальности 071900 - «Информационные системы и технологии». Они предназначены для закрепления теоретических знаний дисциплины цикла ОПД.

Излагаются основные принципы работы с базами данных, организации баз знаний и управления стратегией вывода в экспертных системах средствами языка логического программирования Пролог. Приведены примеры составления программ и варианты заданий для самостоятельной работы.

Библиогр.: 7 назв.

Составители: доцент И.О. ПАВЛОВ,

доцент С.В. Кулакова

Научный редактор профессор Г.В. АБРАМОВ

Рецензент профессор И.Г. АМРАХОВ

Печатается по решению

редакционно-издательского совета

Воронежской государственной технологической академии

ã                                Павлов И.О.,

Кулакова С.В., 2003

Ó Воронежская государственная Технологическая академия, 2003

Оригинал-макет данного издания является собственностью Воронежской государственной технологической академии, его репродуцирование (воспроизведение) любым способом без согласия академии запрещается.



Поделиться:


Последнее изменение этой страницы: 2020-03-14; просмотров: 113; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.191.216.163 (0.224 с.)