ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 12.01.2024
Просмотров: 295
Скачиваний: 1
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
Например, в выражении filepos(players,100,0) параметр players — это имя логического файла, параметр File_ position имеет значение 100, что указывает на то, что будет прочитан символ, отстоящий на 100 позиций, а значение 0 для параметра Mode указывает, что отсчет будет производиться от начала файла. В другом примере — filepos (players,100,1) — отсчет будет вестись уже относительно текущей позиции указателя: если этот предикат будет успешен, то указатель сдвинется на 100 позиций вперед.
ТЕМА 2.9 СОЗДАНИЕ ДИНАМИЧЕСКИХ БАЗ ДАННЫХ В
ЯЗЫКЕ PROLOG
План лекции:
2.9.1 Базы данных на Prolog
2.9.2 Предикаты динамической базы данных в языке Prolog
2.9.1 Базы данных на Prolog
В Prolog имеются специальные средства для организации баз данных
(БД), которые рассчитаны на работу с реляционными базами данных.
Внутренние унификационные процедуры языка Prolog осуществляют автоматическую выборку фактов с нужными значениями известных параметров и присваивают значения еще не определенным. Механизм отката же позволяет находить все имеющиеся ответы на сделанный запрос.
Описание предикатов динамической базы данных выполняется следующим образом:
database
dplayer(name,team,position)
Напомним, что раздел database в Prolog предназначен для описания предикатов базы данных. Все различные утверждения этого предиката составляют динамическую базу данных Prolog. Она называется динамической, поскольку во время работы программы из нее можно удалять любые содержащиеся в ней утверждения, а также добавлять новые. В этом состоит ее отличие от «статических» баз данных, где утверждения являются частью кода программы и не могут быть изменены во время ее работы.
Другая важная особенность динамической базы данных состоит в том, что она может быть записана на диск, а позже считана с диска в оперативную память. Важным является и то, что в динамической базе данных могут содержаться только факты (но не правила).
Иногда бывает предпочтительно хранить часть информации базы данных в виде утверждений статической БД; тогда эти данные заносятся в динамическую БД сразу после активизации программы. Для этой цели используются специальные предикаты. В целом предикаты статической БД имеют другое имя, но ту же самую форму представления данных, что и предикаты динамической.
Например, предикат статической
БД, соответствующий предикату dplayer для динамической базы данных, может быть описан так:
predicates
player(name,team,position)
clauses player("Dan Marino","Miami Dolphins","QB"). player("Richard
Dent","Chicago Bears","DE"). player("Bernie Kosar","Cleveland Browns","QB"). player("Doug
Cosbie","Dallas
Cowboys","TE"). player("Mark
Malone","Pittsburgh Steelers","QB").
2.9.2 Предикаты динамической базы данных в языке Prolog
В Prolog имеются специальные встроенные предикаты для работы с динамической базой данных: asserta, assertz, retract, save, consult, readterm и findall.
Предикаты asserta, assertz и retract позволяют занести факт в заданное место динамической БД или удалить из нее уже имеющийся факт. При этом предикат asserta заносит новый факт в базу данных, располагающуюся в оперативной памяти компьютера. Новый факт помещается перед всеми уже внесенными утверждениями данного предиката.
Синтаксис:
asserta(Clause).
Например, чтобы поместить в БД утверждение player("Bernie
Kosar","Cleveland Browns","QB").
Перед уже имеющимися там утверждениями, необходимо применить следующее предикатное выражение:
asserta(dplayer("Bernie Kosar",
"Cleveland Browns","QB")).
Предикат assertz (так же, как и asserta) заносит новые утверждения в базу данных, но помещает новое утверждение после всех уже имеющихся в базе утверждений того же предиката. (Запомнить просто: последняя буква предиката — «a» или «z». Буква «a» стоит перед всеми другими буквами английского алфавита, а «z» — после всех букв; точно так же эти предикаты размещают и добавляемое утверждение.) Синтаксис: assertz(Clause).
Предикат retract удаляет утверждение из динамической БД. Его синтаксис:
retract(Existing_clause).
Например, для удаления из базы данных утверждения dplayer("Doug
Cosbie","Dallas Cowboys","TE") необходимо написать выражение:
retract(dplayer("DougCosbie","DallasCowboys","TE")).
Так же, как asserta и assertz, предикат retract применим только в отношении фактов.
Для модификации базы данных можно использовать комбинацию выражений с предикатами asserta, assertz и retract.
Предикаты save и consult применяются для записи динамической БД в файл на диск и для загрузки содержимого файла в динамическую БД соответственно. При этом предикат save сохраняет находящуюся в оперативной памяти базу данных в текстовом файле. Синтаксис:
save(File_name).
Например, можно записать: save("football.dba").
В результате все утверждения находящейся в оперативной памяти динамической БД будут записаны в файл football. dba. Если же файл с таким именем уже имелся на диске, то его прежнее содержимое будет стерто.
Файл БД может быть считан в память (загружен) при помощи предиката consult. Синтаксис:
consult(File_name).
Предикат consult неуспешен, если файл с указанным именем отсутствует на диске, если этот файл содержит ошибки
(например, при несоответствии синтаксиса предиката из файла описаниям из раздела программы database) или если содержимое файла невозможно разместить в памяти из-за отсутствия места.
Предикат readterm используется для чтения из файла объектов, относящихся к определенному в программе домену. Синтаксис:
readterm(Domain,Term).,
где Domain задает имя домена, а Term — различные наборы значений объектов этого домена.
Например, в предикатном выражении: readterm(auto_record,auto(Name,Year,Price)).
Domain замещен на auto_record, а Term — на auto (Name,Year,Price), где терм auto определяет все наборы значений этого домена. При этом описание доменов должно выглядеть так:
domains
name = string year = integer price = real auto_record = auto(name,year,price) file = auto_file
Для получения доступа к файлу сначала необходимо воспользоваться предикатами openread и readdevice, после чего можно применить readterm.
Пример:
/* Демонстрация примера работающей базы данных. База данных допускает следующие операции: добавление, удаление, выборку и просмотр данных.
Эта программа создает базу данных и содержит ее в оперативной памяти */
database
dplayer (symbol,symbol,byte,byte)
/* предикат включает в себя имя игрока, название команды, игровой номер и количество сыгранных сезонов*/
predicates
player (symbol,symbol,byte,byte) redirect /*пересылка данных в динамическую БД*/ rule menu (byte) /*организует обработку выбранного пункта меню*/
clauses player("Dan Marino","Miami Dolphins",13,4). player("Richard
Dent","Chicago Bears",95,4). player("Bernie Kosar","Cleveland Browns",19,2,). player("Doug
Cosbie","Dallas
Cowboys",84,
8). player("Mark
Malone","Pittsburgh Steelers",16,7,).
rule:-write("1.Добавление данных в БД"),nl, write("2.Удаление данных об указанном игроке"),nl,
write("3.Поиск сведений об игроках указанной команды"),nl,
write("4.Просмотр всей БД"),nl,
write("5.Выход"),nl, readint(N),
N<>5, menu(N),
rule.
rule.
menu(1):-write("Введите имя, название команды,
игровой номер и количество сыгранных сезонов."),nl,
write("Имя: "),readln(Fam), write("Название команды:"),readln(Team), write("Игровой номер:"),readint(Number), write("Количество сыгранных сезонов: "), readint(Plays),
assertz(dplayer(Fam,Team,Number,Plays)).
menu(2):-write("Укажите имя игрока для удаления сведений о нем:"),nl,
readln (Fam), retract(dplayer(Fam,_,_,_)). menu(2):- write("Такого игрока нет!"),nl,menu(2).
menu(3):- write("Укажите название команды для поиска информации об игроках:"),nl,
readln (Team),
write("Игроки этой команды:"),nl,
dplayer(X,Team,_,_), write(X),nl, fail.
menu(3).
menu(4):- dplayer(F,T,N,K), write("Имя:
",F),nl, write("Название команды: ",T), nl, write("Игровой номер: ", N), nl, write("Количество сыгранных сезонов:",
K),nl,nl, fail.
menu(4).
redirect:-player(X,Y,Z,P), assertz(dplayer(X,Y,Z,P)), fail.
redirect:-write("Пересылка данных успешно завершена.
Нажмите ENTER"),nl,readln(_).
goal redirect, rule.
menu(3):- write("Укажите название команды для поиска информации об игроках:"),nl,
readln (Team),
write("Игроки этой команды:"),nl,
dplayer(X,Team,_,_), write(X),nl, fail.
menu(3).
menu(4):- dplayer(F,T,N,K), write("Имя:
",F),nl, write("Название команды: ",T), nl, write("Игровой номер: ", N), nl, write("Количество сыгранных сезонов:",
K),nl,nl, fail.
menu(4).
redirect:-player(X,Y,Z,P), assertz(dplayer(X,Y,Z,P)), fail.
redirect:-write("Пересылка данных успешно завершена.
Нажмите ENTER"),nl,readln(_).
goal redirect, rule.
1 2 3 4 5 6 7 8 9
ТЕМА 2.10 СОЗДАНИЕ ЭКСПЕРТНЫХ СИСТЕМ
План лекции:
2.10.1 Структура экспертной системы
2.10.2 Представление знаний
2.10.3 Методы вывода
2.10.4 Система пользовательского интерфейса
2.10.5 Экспертная система, базирующаяся на правилах
2.10.1 Структура экспертной системы
Чтобы выполнять работу эксперта, компьютерная программа должна быть способна решать задачи посредством логического вывода и получать при этом достаточно надежные результаты. При этом программа должна иметь доступ к системе фактов, называемой базой знаний, а также должна во время консультации уметь выводить заключения из информации, имеющейся в базе знаний. Некоторые экспертные системы могут кроме этого использовать новую информацию, добавляемую во время консультации.
Таким образом, экспертную систему можно представить состоящей из трех частей:
1) базы знаний (БЗ);
2) механизма вывода (МВ);
3) системы пользовательского интерфейса (СПИ).
База знаний — это основная, центральная часть экспертной системы.
Она содержит правила, описывающие отношения (или явления), методы и знания для решения задач из области применения данной экспертной системы.
Механизм вывода содержит принципы и правила работы. Фактически механизм вывода запускает экспертную систему в работу, определяя, какие правила нужно вызвать, и организуя доступ к ним в базе знаний. Механизм
вывода также выполняет правила, определяет, когда найдено приемлемое решение, и передает результаты программе интерфейса с пользователем.
Интерфейс — это та часть экспертной системы, которая непосредственно взаимодействует с пользователем. Система интерфейса с пользователем принимает информацию от него. Затем система интерфейса, основываясь на виде и характере информации, введенной пользователем, передает необходимые данные механизму вывода. Когда механизм вывода возвращает знания, выведенные из базы знаний, интерфейс передает их обратно пользователю в удобной для него форме.
2.10.2 Представление знаний
Представление знаний — это множество соглашений по синтаксису и семантике, согласно которым описываются объекты. Хорошее правило при проектировании представления знаний — организация знаний в такой форме, которая позволяет легко осуществлять доступ с помощью простых и естественных механизмов.
Один из способов представления знаний — классификация и помещение фактов и чисел (фрагментов фактического знания) в правила
Prolog. Это представление подходит для использования в экспертных системах, базирующихся на правилах.
В настоящее время системы, базирующиеся на правилах, наиболее популярны. Они разработаны и используются в широком диапазоне приложений от науки и инженерной работы до бизнеса. Поэтому именно такие системы мы будем подробно рассматривать в этом разделе.
2.10.3 Методы вывода
Метод вывода — это систематический способ для доказательства того, что из множества предположений следует некоторое заключение. Этот систематический способ закодирован в правилах вывода, которые
Интерфейс — это та часть экспертной системы, которая непосредственно взаимодействует с пользователем. Система интерфейса с пользователем принимает информацию от него. Затем система интерфейса, основываясь на виде и характере информации, введенной пользователем, передает необходимые данные механизму вывода. Когда механизм вывода возвращает знания, выведенные из базы знаний, интерфейс передает их обратно пользователю в удобной для него форме.
2.10.2 Представление знаний
Представление знаний — это множество соглашений по синтаксису и семантике, согласно которым описываются объекты. Хорошее правило при проектировании представления знаний — организация знаний в такой форме, которая позволяет легко осуществлять доступ с помощью простых и естественных механизмов.
Один из способов представления знаний — классификация и помещение фактов и чисел (фрагментов фактического знания) в правила
Prolog. Это представление подходит для использования в экспертных системах, базирующихся на правилах.
В настоящее время системы, базирующиеся на правилах, наиболее популярны. Они разработаны и используются в широком диапазоне приложений от науки и инженерной работы до бизнеса. Поэтому именно такие системы мы будем подробно рассматривать в этом разделе.
2.10.3 Методы вывода
Метод вывода — это систематический способ для доказательства того, что из множества предположений следует некоторое заключение. Этот систематический способ закодирован в правилах вывода, которые
специфицируют принятую логику получения заключения. Вывод осуществляется посредством поиска и сопоставления по образцу. При этом механизм вывода инициализирует процесс сопоставления начиная с
«верхнего» правила. Обращение к правилу называется его «вызовом»; вызов соответствующих правил в процессе сопоставления продолжается до тех пор, пока не произошло сопоставление или не исчерпана вся база знаний, а сопоставление не найдено. Во втором случае трансформированные запросы являются значениями, которые сопоставляются со значениями, находящимися в базе знаний. Если механизм вывода обнаруживает, что можно вызвать более одного правила, то необходимо осуществить определенный выбор, при этом приоритет обычно отдается либо правилам, которые более специфицированы, либо правилам, которые учитывают больше текущих данных. Этот процесс называется разрешением конфликта.
2.10.4 Система пользовательского интерфейса
Система пользовательского интерфейса обеспечивает взаимодействие между экспертной системой и пользователем. Такое взаимодействие обычно включает в себя следующие функции:
1) обработку данных, полученных с клавиатуры, и отображение вводимых и выводимых данных на экране дисплея;
2) поддержку диалога между пользователем и системой;
3) распознавание ситуаций непонимания между пользователем и системой;
4) обеспечение «дружественности» системы по отношению к пользователю.
Система пользовательского интерфейса должна эффективно обрабатывать ввод и вывод. Для этого требуется обрабатывать вводимые и выводимые данные быстро, представляя их четко и в наглядной форме.
Кроме того, система интерфейса должна поддерживать соответствующий
«верхнего» правила. Обращение к правилу называется его «вызовом»; вызов соответствующих правил в процессе сопоставления продолжается до тех пор, пока не произошло сопоставление или не исчерпана вся база знаний, а сопоставление не найдено. Во втором случае трансформированные запросы являются значениями, которые сопоставляются со значениями, находящимися в базе знаний. Если механизм вывода обнаруживает, что можно вызвать более одного правила, то необходимо осуществить определенный выбор, при этом приоритет обычно отдается либо правилам, которые более специфицированы, либо правилам, которые учитывают больше текущих данных. Этот процесс называется разрешением конфликта.
2.10.4 Система пользовательского интерфейса
Система пользовательского интерфейса обеспечивает взаимодействие между экспертной системой и пользователем. Такое взаимодействие обычно включает в себя следующие функции:
1) обработку данных, полученных с клавиатуры, и отображение вводимых и выводимых данных на экране дисплея;
2) поддержку диалога между пользователем и системой;
3) распознавание ситуаций непонимания между пользователем и системой;
4) обеспечение «дружественности» системы по отношению к пользователю.
Система пользовательского интерфейса должна эффективно обрабатывать ввод и вывод. Для этого требуется обрабатывать вводимые и выводимые данные быстро, представляя их четко и в наглядной форме.
Кроме того, система интерфейса должна поддерживать соответствующий
диалог между пользователем и системой. Консультация должна завершаться четким утверждением, выдаваемым системой, и объяснением последовательности вывода, приведшей к этому утверждению.
2.10.5 Экспертная система, базирующаяся на правилах
Экспертная система, базирующаяся на правилах (на языке
Prolog) содержит множество правил, которые вызываются посредством входных данных в момент сопоставления. Такая экспертная система также содержит интерпретатор в механизме вывода, который выбирает и активизирует различные модули системы. Работу этого интерпретатора можно описать как последовательность трех шагов:
1) интерпретатор сопоставляет образец правила с элементами данных в базе знаний;
2) если можно вызвать более одного правила, то интерпретатор использует механизм разрешения конфликта для выбора правила;
3) интерпретатор применяет выбранное правило, чтобы найти ответ на заданный вопрос.
Этот процесс интерпретации является циклическим и называется циклом «распознавание—действие». В системе, базирующейся на правилах, количество продукционных правил определяет размер базы знаний.
Некоторые наиболее сложные системы имеют базы знаний из более 5000 продукционных правил.
Пример. Построим экспертную систему для идентификации породы собак, которая должна помочь потенциальному хозяину выбрать породу собаки в соответствии с определенными критериями. Предположим, что пользователь сообщил множество характеристик собаки в ответ на вопросы экспертной системы. Интерпретатор работает в цикле «распознавание–
действие». Если введенные характеристики сопоставимы с характеристиками какой-либо породы собаки, составляющими часть базы знаний, то
2.10.5 Экспертная система, базирующаяся на правилах
Экспертная система, базирующаяся на правилах (на языке
Prolog) содержит множество правил, которые вызываются посредством входных данных в момент сопоставления. Такая экспертная система также содержит интерпретатор в механизме вывода, который выбирает и активизирует различные модули системы. Работу этого интерпретатора можно описать как последовательность трех шагов:
1) интерпретатор сопоставляет образец правила с элементами данных в базе знаний;
2) если можно вызвать более одного правила, то интерпретатор использует механизм разрешения конфликта для выбора правила;
3) интерпретатор применяет выбранное правило, чтобы найти ответ на заданный вопрос.
Этот процесс интерпретации является циклическим и называется циклом «распознавание—действие». В системе, базирующейся на правилах, количество продукционных правил определяет размер базы знаний.
Некоторые наиболее сложные системы имеют базы знаний из более 5000 продукционных правил.
Пример. Построим экспертную систему для идентификации породы собак, которая должна помочь потенциальному хозяину выбрать породу собаки в соответствии с определенными критериями. Предположим, что пользователь сообщил множество характеристик собаки в ответ на вопросы экспертной системы. Интерпретатор работает в цикле «распознавание–
действие». Если введенные характеристики сопоставимы с характеристиками какой-либо породы собаки, составляющими часть базы знаний, то