Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Шумихин / Шумихин / Отчёт_Лаб#7

.pdf
Скачиваний:
16
Добавлен:
20.05.2015
Размер:
422.37 Кб
Скачать

Одесский национальный университет им. И.И.Мечникова Министерство науки и образования Украины

Лабораторная работа №7

по курсу «Специализированные языки программирования»

выполнил студент III курса гр. МОКС

Свиридов Артём

Одесса 2012

Цель работы: Разработать свою экспертную систему по образцу примера 1 или примера 2 или их комбинации. Выбор темы – на усмотрение студента.

Работа должна содержать:

Формальное описание предметной области. В качестве формализма для описания предметной области использовать продукционные правила или при разработке классифицирующей экспертной системы - таблицу.

Представление предметной области на языке ПРОЛОГ;

Формулировка запросов и оформление интерфейса. Примеры работы программы.

Исходный текст программы в отдельном файле

Предметная область – жанры фантастической литературы.

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

Каждый жанр разбит на множество поджанров. В случае «социальной фантастики», она ещё делится на два вида – утопию и антиутопию.

Если произведение не подошло ни к жанрам фэнтези, ни к фантастике, оно автоматически причисляется к «спекулятивной фантастике».

Правила, задающие описание предметной области:

Правило 1.

ЕСЛИ это фантастика И события в книге происходят, полностью соответствуя физическим законам,

ТО это научная фантастика.

Правило 2.

ЕСЛИ это фантастика И события в книге происходят с помощью магии или сверхъестественных сил, ТО это фэнтези.

Правило 3.

ЕСЛИ это фантастика И автор пытается заставить читателя поверить в полную вероятность происходящего,

ТО это научная фантастика.

Правило 4.

ЕСЛИ это фантастика И автор выдумывает происходящее, не пытаясь его обосновать, ТО это фэнтези.

Правило 5.

ЕСЛИ это фантастика И все вышеуказанные вопросы не подошли в полной мере,

ТО это спекулятивная фантастика.

Правило 6.

ЕСЛИ это научная фантастика

Идействие происходит после глобальной катастрофы,

Ичеловечество находится на грани гибели,

ТО это постапокалиптика.

Правило 7.

Если это научная фантастика

Идействие происходит в нашем мире,

Иистория нашего мира развивалась как-нибудь по-другому, ТО это альтернативная история.

Правило 8.

ЕСЛИ это научная фантастика

Иобщество находится на грани упадка,

Иэто мир будущего, где используется кибернетика, ТО это киберпанк.

Правило 9.

ЕСЛИ это научная фантастика,

Иобщество находится на грани упадка,

Итехнологии находятся на уровне паровых машин, ТО это стимпанк.

Правило 10.

ЕСЛИ это научная фантастика,

Иона основана на естественнонаучной базе,

Итам полностью отсутствуют ненаучные элементы, ТО это твёрдая фантастика.

Правило 11.

ЕСЛИ это научная фантастика,

Имогут присутствовать ненаучные элементы,

Итам есть космические технологии,

Итам описана война между цивилизациями будущего, ТО это боевая фантастика.

Правило 12.

ЕСЛИ это научная фантастика,

Имогут присутствовать ненаучные элементы,

Итам есть космические технологии,

Идействие в основном происходит на экзотической планете, ТО это планетарная фантастика.

Правило 13.

ЕСЛИ это научная фантастика, И описываются взаимоотношения человека и общества, ТО это социальная фантастика.

Правило 14.

ЕСЛИ это социальная фантастика, И это идеальный мир с идеальным обществом, ТО это утопия.

Правило 15.

ЕСЛИ это социальная фантастика,

Иэто мир с тоталитарными государствами,

Ичеловечество никогда не достигнет идеального общества, ТО это антиутопия.

Правило 16.

ЕСЛИ это научная фантастика,

Итам есть космические технологии,

Идействие охватывает множество систем или всю галактику,

Имогут присутствовать ненаучные элементы,

ТО это космическая опера.

Правило 17.

ЕСЛИ это научная фантастика И все вопросы выше не подошли в полной мере,

ТО это спекулятивная фантастика.

Правило 18.

ЕСЛИ это фэнтези,

Идействие происходит в прошлом нашего мира,

Итам фигурируют известные исторические личности, ТО это историческое фэнтези.

Правило 19. ЕСЛИ это фэнтези,

Итам современный антураж,

Иосновано на городской культуре, ТО это городское фэнтези.

Правило 20. ЕСЛИ это фэнтези,

Итам присутствуют боги и мифологические существа

Идействие происходит в прошлом нашего мира,

Ионо основано на мифах античности,

ТО это мифологическое фэнтези.

Правило 21. ЕСЛИ это фэнтези,

Итам современный антураж,

Ионо происходит нашем мире, в наши дни, ТО это современное фэнтези.

Правило 22. ЕСЛИ это фэнтези,

Идействие происходит в вымышленном мире,

Иописывается борьба главных персонажей за правое дело, ТО это эпическое фэнтези.

Правило 23. ЕСЛИ это фэнтези,

Ионо написано в гнетущем стиле,

Итам содержатся элементы ужаса и готики, ТО это тёмное фэнтези.

Правило 24. ЕСЛИ это фэнтези,

Идействие происходит в вымышленном мире,

Инаравне с магией существуют научные и технические достижения, ТО это технофэнтези.

Правило 26. ЕСЛИ это фэнтези,

и оно живёт по своим, строгим выдуманным законам, ТО это твёрдое фэнтези.

Правило 27. ЕСЛИ это фэнтези,

И там присутствуют полностью лишённые логики и смысла элементы, ТО это сюрреалистическое фэнтези.

Правило 27. ЕСЛИ это фэнтези

И все вопросы выше не подошли в полной мере, ТО это спекулятивная фантастика.

Правило 28.

ЕСЛИ это спекулятивная фантастика, И она написана явно в юмористическом стиле, ТО это юмористическая фантастика.

Правило 29.

ЕСЛИ это спекулятивная фантастика,

Итам содержатся элементы ужаса и готики,

Ипоказывает беспомощность человека перед сверхсуществами, ТО это ужасы.

Правило 30.

ЕСЛИ это спекулятивная фантастика, И там изображается обычный, реалистичный мир с небольшими элементами странности, ТО это магический реализм.

Правило 31.

ЕСЛИ это спекулятивная фантастика И все вопросы выше не подошли в полной мере, ТО это научное фэнтези.

Код программы на Visual Prolog 7.3:

implement main

open core, console, string, file

constants

className = "main". classVersion = "".

clauses

classInfo(className, classVersion).

domains tutor=string. subject=string.

where=where(string Day, integer Para, integer Classroom). group=string*.

stringlist=string*.

class facts

rule: (integer,string,string,integer*). fact: (integer,string).

class predicates

ask : (integer) determ(i). recognition : (string) procedure(i). discover : (integer*) determ(i). complete : (integer) determ(i).

clauses

rule(1,"фантастика","научная фантастика",[1]). rule(2,"фантастика","фэнтези",[2]). rule(3,"фантастика","научная фантастика",[3]). rule(4,"фантастика","фэнтези",[4]). rule(5,"фантастика","спекулятивная фантастика",[]). rule(6,"научная фантастика","постапокалиптика",[6,7]). rule(7,"научная фантастика","альтернативная история",[8,9]).

rule(8,"научная фантастика","киберпанк",[11,10]). rule(9,"научная фантастика","стимпанк",[12,10]). rule(10,"научная фантастика","твёрдая фантастика",[13,14]). rule(11,"научная фантастика","боевая фантастика",[15,16,17]).

rule(12,"научная фантастика","планетарная фантастика",[16,17,18]). rule(13,"научная фантастика","социальная фантастика",[19]). rule(14,"социальная фантастика","утопия",[20]). rule(15,"социальная фантастика","антиутопия",[21,22]). rule(16,"научная фантастика","космическая опера",[16,17,23]). rule(17,"научная фантастика","спекулятивная фантастика",[]). rule(18,"фэнтези","историческое фэнтези",[24,25]). rule(19,"фэнтези","городское фэнтези",[26,27]). rule(20,"фэнтези","мифологическое фэнтези",[5,24,28]). rule(21,"фэнтези","современное фэнтези",[26,29]). rule(25,"фэнтези","твёрдое фэнтези",[35]). rule(22,"фэнтези","эпическое фэнтези",[30,31]). rule(23,"фэнтези","тёмное фэнтези",[32,33]). rule(24,"фэнтези","технофэнтези",[30,34]). rule(26,"фэнтези","сюрреалистическое фэнтези",[36]). rule(27,"фэнтези","спекулятивная фантастика",[]).

rule(28,"спекулятивная фантастика","юмористическая фантастика",[37]). rule(29,"спекулятивная фантастика","ужасы",[32,38]). rule(30,"спекулятивная фантастика","магический реализм",[39]). rule(31,"спекулятивная фантастика","научное фэнтези",[]).

ask(X):- fact(X, "да"),!. ask(X):- fact(X, "нет"),!,fail.

ask(1):- write("События в книге происходят, полностью соответствуя физическим законам?"), !, complete(1).

ask(2):- write("События в книге происходят при помощи магии или сверхъестественных сил?"), !, complete(2).

ask(3):- write("Автор пытается заставить читателя поверить в полную вероятность происходящего?"), !, complete(3).

ask(4):- write("Автор выдумывает происходящее, не пытаясь его обосновать?"), !, complete(4). ask(5):- write("Там присутствуют боги и мифологические существа?"), !, complete(5).

ask(6):- write("Действие происходит после глобальной катастрофы?"), !, complete(6). ask(7):- write("Человечество находится на грани гибели?"), !, complete(7).

ask(8):- write("Действие происходит в нашем мире?"), !, complete(8).

ask(9):- write("История нашего мира развивалась как-нибудь по-другому?"), !,complete(9). ask(10):- write("Общество находится на грани упадка?"), !, complete(10).

ask(11):- write("Это мир будущего, где используется в основном кибернетика?"), !, complete(11). ask(12):- write("Технологии находятся на уровне паровых машин?"),!,complete(12).

ask(13):- write("Она основана на естественнонаучной базе?"), !, complete(13). ask(14):- write("Там полностью отсутствуют ненаучные элементы?"), !, complete(14). ask(15):- write("Там описана война между цивилизациями будущего?"), !, complete(15). ask(16):- write("Там есть космические технологии?"), !, complete(16).

ask(17):- write("Могут присутствовать ненаучные элементы?"), !, complete(17).

ask(18):- write("И действие в основном происходит на экзотической планете?"), !, complete(18). ask(19):- write("Описываются взаимоотношения человека и общества?"), !, complete(19). ask(20):- write("Это идеальный мир с идеальным обществом?"), !, complete(20).

ask(21):- write("Это мир с тоталитарными государствами?"),!,complete(21).

ask(22):- write("Человечество никогда не достигнет идеального общества?"),!,complete(22). ask(23):- write("Действие охватывает множество систем или всю галактику?"),!,complete(23). ask(24):- write("Действие происходит в прошлом нашего мира?"),!,complete(24).

ask(25):- write("Там фигурируют известные исторические личности?"),!,complete(25). ask(26):- write("Там современный антураж?"),!,complete(26).

ask(27):- write("Оно основано на городской культуре?"),!,complete(27). ask(28):- write("Оно основано на мифах античности?"),!,complete(28). ask(29):- write("Оно происходит нашем мире, в наши дни?"),!,complete(29). ask(30):- write("Действие происходит в вымышленном мире?"),!,complete(30).

ask(31):- write("Описывается борьба главных персонажей за правое дело?"),!,complete(31). ask(32):- write("Там содержатся элементы ужаса и готики?"),!,complete(32).

ask(33):- write("Оно написано в гнетущем стиле?"),!,complete(33).

ask(34):- write("Наравне с магией существуют научные и технические достижения?"),!,complete(34). ask(35):- write("Оно живёт по своим, строгим выдуманным законам?"),!,complete(35).

ask(36):- write("Там присутствуют полностью лишённые логики и смысла элементы?"),!,complete(36). ask(37):- write("Она написано явно в юмористическом стиле?"),!,complete(37).

ask(38):- write("Показывает беспомощность человека перед сверхсуществами?"),!,complete(38). ask(39):- write("Там изображается обычный, реалистичный мир с небольшими элементами

странности?"),!,complete(39).

recognition(X):- rule(N, X, Y, Z), discover(Z), !, write(">>> ",X, " -

", Y, " по правилу ",

N),nl,nl,recognition(Y).

 

recognition(_).

 

discover([]):-!.

 

discover([X]):-ask(X),!.

 

discover([X|Y]):- ask(X), discover(Y).

 

complete(X):- nl, Y=readLine(), assert(fact(X, Y)), Y="да",!.

 

complete(_):-fail.

 

clauses

 

run():-

 

console::init(),

 

recognition("фантастика"),

 

_ = readLine().

 

end implement main

 

goal

 

mainExe::run(main::run).

 

Интерфейс

На вопросы требуется отвечать «да» и «нет».

Примеры:

Вывод

В данной лабораторной работе были получены необходимые навыки разработки экспертной системы в Visual Prolog 7.3.

Соседние файлы в папке Шумихин