Экспертные системы, базирующиеся на фактах



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

 

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

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

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

 

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

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

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

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

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

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

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

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

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

 

Экспертная система на правилах

 

Во всех экспертных системах существует зависимость между входным потоком данных и данными в базе знаний. Во время кон­сультации входные данные сопоставляются с данными в базе зна­ний. Результатом сопоставления является отрицательный или ут­вердительный ответ.

В системе, базирующейся на правилах, утвер­дительный результат является действием одного из продукционных правил. Эти продукционные правила определяются входными данны­ми.

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

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

Рассмотрим в качестве примера экспертной системы на правилах систему для идентификации пород собак. Она помогает потен­циальному хозяину выбрать породу собаки в соответствии с опре­деленными критериями.

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

Рассмотрим две породы собак, информация о кото­рых содержится в базе знаний. Гончая имеет короткую шерсть, высоту в холке меньше 57 см длинные уши и хороший характер. Датский дог имеет короткую шерсть, низко посаженный хвост, длинные уши, хоро­ший характер и вес более 45 кг.

Из этого описания видно, что обе породы имеют корот­кую шерсть, длинные уши и хороший характер. Рост гончей меньше 57 см в то время, как ничего не сказано о росте дога. Дог имеет низко посаженный хвост и вес более 45 кг – характеристики отсутствующие для гончей. Описание двух собак в терминах ука­занных характеристик достаточно, чтобы различить эти две поро­ды, и даже отличить их от любой другой породы в базе знаний.

Следующие продукционные правила могут быть составлены по указанным характеристикам:

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

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

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

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

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

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

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

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

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

Заметим, что в правилах длина шерсти может быть представлена с помощью предиката positive в виде:

positive("у нее","короткая шерсть").

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

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

 

Листинг программы экспертной системы на правилах

 

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

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

Database

xpositive(symbol,symbol)

xnegative(symbol,symbol)

Predicates

do_expert_job

do_consulting

ask(symbol,symbol)

dog_is(symbol)

it_is(symbol)

positive(symbol,symbol)

negative(symbol,symbol)

remember(symbol,symbol,symbol)

clear_facts

Goal

do_expert_job .

Clauses

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

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,nl,do_consulting,write("Нажмите любую клавишу"),

    nl, readchar(_), removewindow.

do_consulting :– dog_is(X), !, nl, write("Вероятно Ваша собака – ",X,"."),

                         nl,clear_facts.

do_consulting :­– nl, write("Извините, я не смогу помочь Вам!"),

                         clear_facts.

ask(X,Y) :– write(" ?:– ",X, " ",Y, " ? "), readln(Reply),

                remember(X,Y,Reply).

/* Механизм вывода */

positive(X,Y) :– xpositive(X,Y),!.

positive(X,Y) :– not(negative(X,Y)),!,ask(X,Y).

negative(X,Y) :– xnegative(X,Y),!.

remember(X,Y,yes) :– asserta(xpositive(X,Y)).

remember(X,Y,no) :– asserta(xnegative(X,Y)),fail.

 

clear_facts :– retract(xpositive(_,_)), fail.

clear_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("это","длинношерстная собака "),!.

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

 

Экспертные системы, базирующиеся на фактах

 

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

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

Интерпретатор выполняет различные функции внутри системы на основе следующей схемы:

1. Система имеет предложения в базе знаний, которые уп­равляют поиском и сопоставлением. Интерпретатор сопоставляет эти предложения с элементами данных в базе данных.

2. Если может быть вызвано более одного правила, то сис­тема использует возможности Турбо-Пролога для разрешения конфликта. Следовательно, пользователю/программисту не нужно рассматривать потенциально возможные конфликты.

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

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

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

rule(1,"Собака","Гончая",[1,2,3,4]).

rule(2,"Собака","Немецкий Дог",[1,5,3,4,6]).

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

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

cond(3,"длинные уши").

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

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

cond(6,"вес более 45 кг").

Заметьте, что в каждом предложении типа rule первый аргу­мент ­– номер правила, второй аргумент – тип объекта ("собака") и третий аргумент – порода собаки. В нашем случае это гончая или дог. Список целых чисел задает номера условий из предложений типа cond (условие). Предложения типа cond содержат все характеристики для любой породы, представленной в базе знаний.

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

Добавление и обновление предложений базы знаний являются простыми операциями (предикаты retract и assert). Экс­пертные системы, базирующиеся на фактах, легко проектировать, развивать и поддерживать в Турбо-Прологе, так как по мере рас­ширения базы знаний программа не требует модификации. Расширение, прежде всего, заключается в постепенном добавлении новых ут­верждений.


Дата добавления: 2018-11-24; просмотров: 216; Мы поможем в написании вашей работы!

Поделиться с друзьями:






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