Листинг экспертной системы, базирующейся на фактах
/* Программа: Эксперт по породам собак */
/* Пример экспертной системы, базирующейся на логике */
Domains
conditions = integer *
history = integer *
Database
/* Предикаты базы данных */
rule(integer, symbol,symbol, conditions)
cond(integer, symbol)
yes(integer)
no(integer)
Predicates
/* Предикаты системы пользовательского интерфейса */
do_expert_job
do_consulting
goes(symbol)
clear
/* Предикаты механизма вывода */
go(history, symbol)
check(integer, history, conditions)
Inpo(history, integer, integer, symbol)
do_answer(history, integer, symbol,integer, integer)
Goal
do_expert_job.
Clauses
/* База знаний (БЗ) */
rule(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("Нажмите любую клавишу"),
readchar(_), exit.
do_consulting :–goes(Mygoal),go([],Mygoal),!.
do_consulting :–nl, write("Извините, я не смогу Вам помочь") ,clear.
do_consulting.
goes(Mygoal) :– clear,clearwindow, nl, nl,nl,nl,
write("ДОБРО ПОЖАЛОВАТЬ"),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),
|
|
clearwindow,shiftwindow(1),
do_answer(HISTORY,RNO,TEXT,BNO,RESPONSE).
/* Механизм вывода */
go(HISTORY, Mygoal) :–rule(RNO,Mygoal,NY,COND),
check(RNO,HISTORY,COND),!,
go([RNO|HISTORY],NY).
go(_,Mygoal) :–not(rule(_,Mygoal,_,_)),!,
nl,write("Вероятно Ваша собака – ",Mygoal,"."), nl, nl, nl.
check(RNO,HISTORY,[BNO|REST]) :–
yes(BNO),!,check(RNO,HISTORY,REST).
check(_,_,[BNO|_]) :– no(BNO),!,fail.
check(RNO,HISTORY,[BNO|REST]) :–cond(BNO,TEXT),
inpo(HISTORY,RNO,BNO,TEXT),
check(RNO,HISTORY,REST).
check(_,_,[]).
do_answer(_,_,_,_,0):– exit.
do_answer(_,_,_,BNO,1) :–assert(yes(BNO)),write(yes),nl.
do_answer(_,_,_,BNO,2) :–assert(no(BNO)),write(no),nl,fail.
clear :– retract(yes(_)),retract(no(_)),fail,!.
clear.
/* Конец программы */
Выбор типа ЭС
Программы для выбора породы собаки, приведенные выше, используются для иллюстрации методов построения системы, базирующейся на правилах, и системы, базирующейся на фактах. Таким образом, есть возможность сравнить два различных подхода при работе с одними и теми же данными и сделать некоторые важные выводы.
Итак, если экспертная система, которую Вы хотите сделать, в конечном счете может содержать сотни продукционных правил, то трудно определить эффект от добавления дополнительных правил. В Турбо-Прологе продукционные правила помещаются в программу, и, следовательно, размеры программы увеличиваются по мере добавления правил. Размеры памяти, в конце концов, ограничивают число правил. В этом случае использование системы на правилах становится проблематичным. В то же время, в системе, базирующейся на логике, где база знаний может находиться в файле на диске, ограничения на размеры базы знаний не накладываются. Поэтому система, основанная на логике, в этом случае предпочтительнее.
|
|
Если же Ваша экспертная система будет содержать не более нескольких сотен правил, использование системы, базирующейся на правилах более предпочтительно. В силу того, что продукционные правила почти не зависят друг от друга, создание и тестирование такой экспертной системы проще. Просто осуществляется и изменение правил с целью изучить эффект, вызванный таким изменением. В системах же, базирующихся на фактах, изменение параметров внутри базы знаний должно производится с большей осторожностью, так как изменения менее заметны, а результат может быть разрушительным и восстановление затруднительным.
|
|
Если быстрота является главным требованием к разрабатываемой экспертной системе, то можно выбрать либо систему на фактах, полностью находящуюся в оперативной памяти, либо систему, базирующуюся на правилах. Обе будут работать хорошо. Если, однако, экспертная система должна содержать большую базу знаний, то у разработчика имеется единственный вариант – система на фактах, находящаяся на диске.
Дата добавления: 2018-11-24; просмотров: 676; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!