Оглавление:
Контрольная работа №1. 2
Задание 2
Решение 2
Задача №1 2
Задача №2. 3
Задача №3. 5
Контрольная работа №2. 10
Задание. 10
Решение. 10
Контрольная работа №3. 16
Задание. 16
Решение. 16
Контрольная работа №1. Задание Необходимо выполнить контрольную работу, состоящую из трех задач. Тематика ее связана с решением конкретных производственных задач, которые, возможно, ежедневно встают перед студентом в процессе его деятельности, и заключается в изучении и создании базы знаний, а также реализации экспертной системы.
Задача № 1. Дать словесную постановку задачи. Эта задача не имеет самостоятельного значения и выполняется только для осмысления студентом той предметной области, которую он выбрал для разработки базы знаний. В дальнейшем задача № 1 используется для упрощения формального представления в задаче № 2 выбранной предметной области.
Задача № 2. Создать набор правил продукции, описывающих последовательность решения задачи № 1. Количество данных правил выбирается студентом самостоятельно. Примерно их может быть 10-20.
Задача № 3. Написать программу на Турбо-Прологе, реализующую возможность работы экспертной системы с базой знаний, состоящей из правил продукции задачи № 2.
Решение Задача №1 Данная экспертная система позволяет по морфологическим признакам определить тип (и в некоторых случаях класс) животного. В данном варианте система определяет лишь принадлежность к крупному подразделу животного мира, но она может служить основой для более углубленной и расширенной экспертной системы, позволяющей идентифицировать животное вплоть до подвида.
Классификация царства животных не является устоявшейся и существует множество вариантов. Например, иногда простейших относят к животным в качестве подцарства на основании того, что они (в большинстве) являются гетеротрофными активно передвигающимися организмами. Но с другой стороны, простейшие зачастую в неменьшей степени обладают признаками растений и занимают в некотором смысле промежуточное положение между животными и растениями.
Исходя из этого, база знаний должна быть гибкой и легко изменяемой, что вполне достижимо при реализации экспертной системы на языке Prolog.
Задача №2. Создание набора правил продукции.
Построим дерево, определяющее тип (класс), к которому принадлежит животное.
Обладает ли животное настоящей многоклеточной структурой?
| ДА
| НЕТ
| Является ли животное внешне радиально-симметричным?
| Имеются ли дифференцирован-ные ткани или обособленные органы?
| ДА
| НЕТ
| Имеется ли наружный скелет?
| ДА
| НЕТ
| Имеется ли осевой скелет?
| ДА
| НЕТ
| Имеется ли череп?
| Имеются ли иглы или шипы на теле?
| ДА
| НЕТ
| ДА
| НЕТ
| Имеет ли 4 конечности?
| ДА
| НЕТ
| Имеет ли гребные пластинки?
| Приспособлено ли к полету?
| ДА
| НЕТ
| Является ли червеобраз-ным?
| ДА
| НЕТ
| Неподвижное
животное?
| Неподвижное
животное?
| Живородящее
животное?
| ДА
| НЕТ
| Есть ли чешуя?
| ДА
| НЕТ
| ДА
| НЕТ
| ДА
| НЕТ
| ДА
| НЕТ
| ДА
| НЕТ
| тип гребневики
| тип стрекающие
| тип первичноротые
| класс птицы
| класс млекопитающие
| класс пресмыкающиеся
| класс земноводные
| надкласс рыбы
| подтип оболочники
| подтип головохордовые
| тип иглокожие
| тип перистожаберные
| тип кишечнодышащие
| тип дицемиды
| тип ортонектиды
| тип губки
| 1
| 2
| 3
| 4
| 5
| 6
| 7
| 8
| 9
| 10
| 11
| 12
| 13
| 14
| 15
| 16
| На основании вышеописанного дерева сформулируем набор правил продукции, описывающих признаки типов (классов).
Если животное обладает настоящей многоклеточной структурой, является внешне радиально-симметричным и имеет гребные пластинки, то оно относится к типу
гребневики.
Если животное обладает настоящей многоклеточной структурой, является внешне радиально-симметричным и не имеет гребных пластинок, то оно относится к типу
стрекающие.
Если животное обладает настоящей многоклеточной структурой, не является внешне радиально-симметричным и имеет наружный скелет, то оно относится к типу
первичноротые.
Если животное обладает настоящей многоклеточной структурой, не является внешне радиально-симметричным, не имеет наружного скелета, но имеет осевой скелет, череп, четыре конечности, и приспособлено к полету, то оно относится к классу
птицы.
Если животное обладает настоящей многоклеточной структурой, не является внешне радиально-симметричным, не имеет наружного скелета, но имеет осевой скелет, череп, четыре конечности, не приспособлено к полету и является живородящим, то оно относится к классу
млекопитающие.
Если животное обладает настоящей многоклеточной структурой, не является внешне радиально-симметричным, не имеет наружного скелета, но имеет осевой скелет, череп, четыре конечности, не приспособлено к полету, не является живородящим и имеет чешую, то оно относится к классу
пресмыкающиеся.
Если животное обладает настоящей многоклеточной структурой, не является внешне радиально-симметричным, не имеет наружного скелета, но имеет осевой скелет, череп, четыре конечности, не приспособлено к полету, не является живородящим и не имеет чешуи, то оно относится к классу
земноводные
Если животное обладает настоящей многоклеточной структурой, не является внешне радиально-симметричным, не имеет наружного скелета и четырех конечностей, но имеет осевой скелет и череп, то оно относится к надклассу
рыбы.
Если животное обладает настоящей многоклеточной структурой, не является внешне радиально-симметричным, не имеет наружного скелета и черепа, но имеет осевой скелет и при этом неподвижное, то оно относится к подтипу
оболочники.
Если животное обладает настоящей многоклеточной структурой, не является внешне радиально-симметричным, не имеет наружного скелета и черепа, но имеет осевой скелет и способно передвигаться, то оно относится к подтипу
головохордовые.
Если животное обладает настоящей многоклеточной структурой, не является внешне радиально-симметричным, не имеет ни наружного, ни осевого скелета, но имеет иглы или шипы на теле, то оно относится к типу
иглокожие.
Если животное обладает настоящей многоклеточной структурой, не является внешне радиально-симметричным, не имеет ни наружного, ни осевого скелета, не имеет игл или шипов на теле, и при этом неподвижное, то оно относится к типу
перистожаберные.
Если животное обладает настоящей многоклеточной структурой, не является внешне радиально-симметричным, не имеет ни наружного, ни осевого скелета, не имеет игл или шипов на теле и способно передвигаться, то оно относится к типу
кишечнодышащие.
Если животное не обладает настоящей многоклеточной структурой, но имеет дифференцированные ткани или обособленные органы, и является червеобразным, то оно относится к типу
дицемиды.
Если животное не обладает настоящей многоклеточной структурой, но имеет дифференцированные ткани или обособленные органы, и не является червеобразным, то оно относится к типу
ортонектиды.
Если животное не обладает настоящей многоклеточной структурой и не имеет дифференцированных тканей или обособленных органов, то оно относится к типу
губки.
Задача №3. Программа на языке Prolog.
/* Программа позволяет определить тип, к которому */
/* относится животное */
/* в соответствии с существующей классификацией. */ domains
database
xpositive(symbol)
xnegative(symbol)
predicates
do_expert_job
do_consulting
ask(symbol)
process(integer)
answer()
show_menu
cons
positive(symbol)
negative(symbol)
remember(symbol,symbol)
clear_facts
goal
do_expert_job.
clauses /* Система пользовательского интерфейса */
do_expert_job:-
show_menu,
readchar(_),
removewindow,
exit.
show_menu:-
makewindow(1,30,30," Меню ",3,2,16,34),
write(" Экспертная система для "),nl,
write(" определения типа животного "),nl,
write(" студентки Годунцовой А.Я. "),nl,
write(" Шифр: 14-0337, спец. 2201 "),nl,
write("--------------------------------"),nl,
write("1.Режим экспертизы животного"),nl,
write("2.Выход из экспертной системы"),nl,
write(" Выберите пункт меню: "),
readint(Choice),
process(Choice).
process(1):-
cons.
process(2):-
removewindow,
exit. cons:-
makewindow(1,30,30," Экспертная система",1,10,23,65),
nl,write("--------------------------------"),
nl,write("Данная система осуществляет определение"),
nl,write("типа, к которому относится животное."),
nl,write("Вам необходимо ответить на ряд вопросов."),
nl,write("Отвечайте y (да) или n (нет) "),
nl,write("--------------------------------"),
nl,nl,do_consulting.
do_consulting:-
answer(),!,nl,nl,
write(" Экспертиза окончена! "),
clear_facts.
do_consulting :-
clear_facts. ask(X):-
write(X,"?"),
readln(Reply),
remember(X,Reply). /* Вывод на экран */
positive(X):-
xpositive(X),!.
positive(X):-
not(negative(X)),!,ask(X).
negative(X):-
xnegative(X),!.
remember(X,"y"):-
asserta(xpositive(X)).
remember(X,"n"):-
asserta(xnegative(X)),fail. clear_facts:-
retract(xpositive(_)),fail.
clear_facts:-
retract(xnegative(_)),fail. /* 1 */
answer():-
positive("Обладает ли животное настоящей многоклеточной структурой"),
positive("Является ли животное внешне радиально-симметричным"),
positive("Имеет ли животное гребные пластинки"),
write("Животное относится к типу ГРЕБНЕВИКИ."),!.
/* 2 */
answer():-
positive("Обладает ли животное настоящей многоклеточной структурой"),
positive("Является ли животное внешне радиально-симметричным"),
negative("Имеет ли животное гребные пластинки"),
write("Животное относится к типу СТРЕКАЮЩИЕ."),!.
/* 3 */
answer():-
positive("Обладает ли животное настоящей многоклеточной структурой"),
negative("Является ли животное внешне радиально-симметричным"),
positive("Имеется ли наружный скелет"),
write("Животное относится к типу ПЕРВИЧНОРОТЫЕ."),!.
/* 4 */
answer():-
positive("Обладает ли животное настоящей многоклеточной структурой"),
negative("Является ли животное внешне радиально-симметричным"),
negative("Имеется ли наружный скелет"),
positive("Имеется ли осевой скелет"),
positive("Имеется ли череп"),
positive("Имеет ли животное четыре конечности"),
positive("Приспособлено ли животное к полету (изначально)"),
write("Животное относится к классу ПТИЦЫ."),!.
/* 5 */
answer():-
positive("Обладает ли животное настоящей многоклеточной структурой"),
negative("Является ли животное внешне радиально-симметричным"),
negative("Имеется ли наружный скелет"),
positive("Имеется ли осевой скелет"),
positive("Имеется ли череп"),
positive("Имеет ли животное четыре конечности"),
negative("Приспособлено ли животное к полету (изначально)"),
positive("Является ли животное живородящим"),
write("Животное относится к классу МЛЕКОПИТАЮЩИЕ."),!.
/* 6 */
answer():-
positive("Обладает ли животное настоящей многоклеточной структурой"),
negative("Является ли животное внешне радиально-симметричным"),
negative("Имеется ли наружный скелет"),
positive("Имеется ли осевой скелет"),
positive("Имеется ли череп"),
positive("Имеет ли животное четыре конечности"),
negative("Приспособлено ли животное к полету (изначально)"),
negative("Является ли животное живородящим"),
positive("Имеется ли чешуя"),
write("Животное относится к классу ПРЕСМЫКАЮЩИЕСЯ."),!.
/* 7 */
answer():-
positive("Обладает ли животное настоящей многоклеточной структурой"),
negative("Является ли животное внешне радиально-симметричным"),
negative("Имеется ли наружный скелет"),
positive("Имеется ли осевой скелет"),
positive("Имеется ли череп"),
positive("Имеет ли животное четыре конечности"),
negative("Приспособлено ли животное к полету (изначально)"),
negative("Является ли животное живородящим"),
negative("Имеется ли чешуя"),
write("Животное относится к классу ЗЕМНОВОДНЫЕ."),!.
/* 8 */
answer():-
positive("Обладает ли животное настоящей многоклеточной структурой"),
negative("Является ли животное внешне радиально-симметричным"),
negative("Имеется ли наружный скелет"),
positive("Имеется ли осевой скелет"),
positive("Имеется ли череп"),
negative("Имеет ли животное четыре конечности"),
write("Животное относится к надклассу РЫБЫ."),!.
/* 9 */
answer():-
positive("Обладает ли животное настоящей многоклеточной структурой"),
negative("Является ли животное внешне радиально-симметричным"),
negative("Имеется ли наружный скелет"),
positive("Имеется ли осевой скелет"),
negative("Имеется ли череп"),
positive("Животное ведет неподвижный образ жизни"),
write("Животное относится к подтипу ОБОЛОЧНИКИ."),!.
/* 10 */
answer():-
positive("Обладает ли животное настоящей многоклеточной структурой"),
negative("Является ли животное внешне радиально-симметричным"),
negative("Имеется ли наружный скелет"),
positive("Имеется ли осевой скелет"),
negative("Имеется ли череп"),
negative("Животное ведет неподвижный образ жизни"),
write("Животное относится к подтипу ГОЛОВОХОРДОВЫЕ."),!.
/* 11 */
answer():-
positive("Обладает ли животное настоящей многоклеточной структурой"),
negative("Является ли животное внешне радиально-симметричным"),
negative("Имеется ли наружный скелет"),
negative("Имеется ли осевой скелет"),
positive("Имеются ли иглы или шипы на теле"),
write("Животное относится к подтипу ИГЛОКОЖИЕ."),!.
/* 12 */
answer():-
positive("Обладает ли животное настоящей многоклеточной структурой"),
negative("Является ли животное внешне радиально-симметричным"),
negative("Имеется ли наружный скелет"),
negative("Имеется ли осевой скелет"),
negative("Имеются ли иглы или шипы на теле"),
positive("Животное ведет неподвижный образ жизни"),
write("Животное относится к типу ПЕРИСТОЖАБЕРНЫЕ."),!.
/* 13 */
answer():-
positive("Обладает ли животное настоящей многоклеточной структурой"),
negative("Является ли животное внешне радиально-симметричным"),
negative("Имеется ли наружный скелет"),
negative("Имеется ли осевой скелет"),
negative("Имеются ли иглы или шипы на теле"),
negative("Животное ведет неподвижный образ жизни"),
write("Животное относится к типу КИШЕЧНОДЫШАЩИЕ."),!.
/* 14 */
answer():-
negative("Обладает ли животное настоящей многоклеточной структурой"),
positive("Имеются ли дифференцированные ткани или обособленные органы"),
positive("Является ли животное червеобразным"),
write("Животное относится к типу ДИЦЕМИДЫ."),!.
/* 15 */
answer():-
negative("Обладает ли животное настоящей многоклеточной структурой"),
positive("Имеются ли дифференцированные ткани или обособленные органы"),
negative("Является ли животное червеобразным"),
write("Животное относится к типу ОРТОНЕКТИДЫ."),!.
/* 16 */
answer():-
negative("Обладает ли животное настоящей многоклеточной структурой"),
negative("Имеются ли дифференцированные ткани или обособленные органы"),
write("Животное относится к типу ГУБКИ."),!.
|