Пролог лабы / Лаб5
.docxСанкт-Петербургский государственный электротехнический университет «ЛЭТИ»
имени В. И. Ульянова(Ленина)
Открытый факультет
Кафедра Автоматизированных Систем Обработки Информации и Управления
Лабораторная работа №5
по дисциплине: «Проектирование систем искусственного интеллекта»
Выполнил: ст. гр. 0851
Карелина Л.А
Проверил:
Соничев А.В.
Санкт-Петербург
2015
Разработка экспертных систем, базирующихся на правилах
Цели работы:
-
Ознакомление с принципами построения экспертных систем.
-
Изучение структуры экспертных систем, базирующихся на правилах.
-
Построение простейшей экспертной системы, базирующейся на правилах.
Задание к лабораторной работе
-
Провести тестирование программы LAB5.PRO.
-
Изменить программу LAB5.PRO так, чтобы перед окончанием работы выводилось содержимое БД, например путем использования предиката вида
wr_bd :- dpositive(P,Q),
write("dpositive(",P,",",Q,")"),nl,
fail.
wr_bd.
-
Изменить программу LAB5.PRO так, чтобы она обеспечивала распознавание животных в соответствии с правилами, приведенными в приложении 2.
Порядок выполнения задания
-
Загрузить Турбо-Пролог.
-
Загрузить программу LAB5.PRO и убедиться в правильности ее работы.
-
Внести требуемые изменения.
Содержание отчета
Отчет должен содержать полученные тексты программ и результаты их работы.
Текст программы:
domains
database
dpositive(symbol, symbol)
dnegative(symbol, symbol)
predicates
do_expert_job
do_consulting
ask(symbol, symbol)
animal_is(symbol)
it_is(symbol)
positive(symbol, symbol)
negative(symbol, symbol)
remember(symbol, symbol, symbol)
clear_facts
output_positives
repeat
wr_bd
goal
do_expert_job.
clauses
repeat.
repeat :- repeat.
/* SISTEMA POL'ZOVATEL'SKOGO INTERFEJSA */
do_expert_job :-
makewindow(1,112,7,"ANIMAL EXPERT SYSTEM",0,0,25,80),
nl,write("*********************************************"),
nl,write(" WELCOME TO AN ANIMAL EXPERT SYSTEM "),
nl,write(" "),
nl,write(" Вас приветствует система "),
nl,write(" распознавания животных "),
nl,write(" Ответьте, пожалуйста, на ряд вопросов "),
nl,write(" Формат ответа: yes/no "),
nl,write("*********************************************"),
nl,nl,
do_consulting,
clear_facts,
write("Press SPACE."),nl,
readchar(_),
removewindow,
exit.
output_positives :-
write("Признаки этого вида:"),nl,!,
dpositive(P,Q),
write(" - ", P, " ", Q),nl,fail,!.
do_consulting :-
animal_is(X),!,nl,
write("Можно предположить, что это животное - ",X,"."),nl,
wr_bd,
clear_facts.
do_consulting :-
nl,write("Простите, ничем не можем помочь!"),
clear_facts.
ask(X,Y) :-
write(" ВОПРОС :- ",X," ", Y," ? "),
readln(Reply),
remember(X,Y,Reply).
/* МЕХАНИЗМ ВВОДА */
positive(X,Y) :-
dpositive(X,Y),!.
positive(X,Y) :-
not(negative(X,Y)),!,
ask(X,Y).
negative(X,Y) :-
dnegative(X,Y),!.
remember(X,Y,yes) :-
asserta(dpositive(X,Y)).
remember(X,Y,no) :-
asserta(dnegative(X,Y)),
fail.
clear_facts :-
retract(dpositive(_,_)),
fail.
clear_facts :-
retract(dnegative(_,_)),
fail.
wr_bd :-
dpositive(P,Q),
write(" +", P, " ", Q),nl,
fail.
wr_bd :-
dnegative(P,Q),
write(" -", P, " ", Q),nl,
fail.
wr_bd.
/* ПРОДУКЦИОННЫЕ ПРАВИЛА */
animal_is("Гепард") :-
it_is("кошачьи"),
positive("окраска", "желто-коричневого цвета"),
positive("имеет", "темные пятна"),!.
animal_is("Тигр") :-
it_is("кошачьи"),
positive("окраска", "желто-коричневого цвета"),
positive("имеет", "темные полосы"),!.
animal_is("Жираф") :-
it_is("жвачное"),
negative("", "глаза смотрят вперед"),
positive("шея", "длинная"),
positive("ноги", "длинные"),
positive("имеет", "черные пятна"),!.
animal_is("Зебра") :-
it_is("непарнокопытное"),
negative("", "глаза смотрят вперед"),
positive("имеет", "черные полосы"),!.
animal_is("Дельфин") :-
it_is("млекопитающее"),
it_is("хищник"),
negative("имеет", "волосяной покров"),
positive("имеет","плавники"),!.
animal_is("Альбатрос") :-
it_is("птица"),
positive("может", "летать"),
positive("может", "плавать"),!.
animal_is("Страус") :-
it_is("птица"),
negative("может", "летать"),
positive("окраска", "черно-белая"),
positive("шея", "длинная"),
positive("ноги", "длинные"),!.
animal_is("Пингвин") :-
it_is("птица"),
negative("может", "летать"),
positive("окраска", "черно-белая"),
not(positive("шея", "длинная")),
positive("может", "плавать"),!.
animal_is("Махаон") :-
it_is("насекомое"),
it_is("бабочка"),
positive("имеет", "желтые крылья"),
positive("имеет","черные круглые пятна"),
positive("крылья", "имеют <хвостики>"),!.
animal_is("Лимонница") :-
it_is("насекомое"),
it_is("бабочка"),
positive("имеет", "желтые крылья"),
negative("имеет","черные круглые пятна"),
positive("имеет","красные пятна"),!.
%------
it_is("млекопитающее"):-
positive("может", "давать молоко"), !.
it_is("птица"):-
not(it_is("млекопитающее")),
positive("имеет", "перья"),!.
%---
it_is("хищник"):-
positive("", "глаза смотрят вперед"),
positive("", "плотоядный"),!.
it_is("кошачьи"):-
it_is("млекопитающее"),
it_is("хищник"),
positive("имеет", "волосяной покров"),
positive("имеет", "огруглую голову"),
positive("имеет", "развитые клыки"),!.
%---
it_is("парнокопытное"):-
it_is("млекопитающее"),
not(it_is("хищник")),
positive("имеет", "копыта"),
positive("имеет", "четное число пальцев"),!.
it_is("непарнокопытное"):-
it_is("млекопитающее"),
not(it_is("хищник")),
positive("имеет", "копыта"),
negative("имеет", "четное число пальцев"),!.
it_is("жвачное"):-
it_is("парнокопытное"),
positive("жует", "жвачку"),!.
%-----
it_is("насекомое"):-
not(it_is("млекопитающее")),
not(it_is("птица")),
positive("маленький", "размер"),
positive("имеет", "фасеточные глаза"),
positive("имеет","усики"),!.
%-----
it_is("бабочка"):-
it_is("насекомое"),
positive("имеет", "чешуйки на крыльях"),
positive("имеет", "шесть ног"),!.
%------
it_is("жук"):-
it_is("насекомое"),
not(it_is("бабочка")),
positive("жесткие", "крылья"),
positive("имеет", "шесть ног").
%------
Результат работы