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


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



ЗНАЕТЕ ЛИ ВЫ?

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



 

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

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

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

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

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

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

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

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

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

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

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

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

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

dog_is("Great Dane"):- it_is("длинношерстная собака"),("у нее","низко посаженный хвост"),

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

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

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

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

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

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

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

ЛИСТИНГ

 

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

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

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

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



Поделиться:


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

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