Задание: Представить произвольную предметную область с помощью продукционной модели. Снабдить интерфейсом. Предусмотреть возможность добавления, редактирования и удаления объектов БД.
Теоретический материал.
Продукционные модели и модули, управляющие образцами.
Если ветвление является исключением, а не нормой, тогда - методы традиционного программирования. Иначе - программу лучше рассматривать как совокупность независящих модулей, управляемых образцами. На каждом шаге работы такая программа анализирует текущую ситуацию и определяет, какой модуль подходит для обработки этой ситуации.
С точки зрения представления знаний, подход, использующий УО, можно охарактеризовать следующими особенностями:
Системы, УО, классифицируются в соответствии с ограничениями, накладываемыми на модули.
Частные случаи - системы, основанные на (а)правилах и (б)логике.
а) Основанные на правилах.
ЭС содержит множество правил, которые вызываются посредством входных данных в момент сопоставления и МВ включается интерпретатор, который выбирает и активизирует различные модули системы. Количество продукционных правил определяет размер БЗ. Более важным, чем размер является структура самих продукционных правил. Существует несколько рекомендаций по написанию:
1. Использовать минимально достаточное множество условий при определении продукционного правила.
2. Избегать противоречивых продукционных правил.
3. Конструировать правила, опираясь на структуру, присущую предметной области.
Страна Столица США Вашингтон Англия Лондон Испания Мадрид
Пример:
capital_is (“Washington”) :- country (is, “USA”),!.
capital_is (“London”) :- country (is, “England”),!.
capital_is (“Madrid”) :- country (is, “Spain”),!.
б) Основанные на логике.
ЭС, базирующиеся на логике имеют множество правил, которые вызываются с помощью данного входного потока. Система включает интерпретатор, который выбирает и активизирует модули, включаемые в работу системы.
Наиболее важный аспект - проектирование БЗ, утверждений и их структуры. БЗ должны иметь не противоречащую логическую организацию и содержать минимум избыточной информации.
capital (“Washington”, “USA”). capital (“London”, “England”). capital (“Madrid”, “Spain”).
При проектировании:
Если размер памяти - важнее, то ЭС, основанная на логике, т.к. БЗ - на диске и размером памяти не ограничивается. Если не более 100 правил - то ЭС, основанная на правилах, т.к. продукционные правила почти не зависят друг от друга, и, следовательно, создание и тестирование такой ЭС проще. Если эффективность - важнее, то (а) и (б) равнозначно.
Пример:
rull (1, "dog", "Beagle", [1,2,3,4]). rull (2, "dog", "Great Dane", [1,5,3,4,6]).
cond (1, "short_haired"). cond (2, "height under 22 inches"). cond (3, "longer ears"). cond (4, "good natures personality"). cond (5, "low set tail"). cond (6, "weight over 100 lb.").
Описание предикатов.
DATABASE - qdb
ques(STRING,STRING) – содержит животное и его свойство.
STRING – животное,
STRING – свойство;
DATABASE - vspom
vsillness(STRING,STRING) - содержит животное и его свойство (вспомогательный факт)
STRING – животное,
STRING – свойство;
countdb(INTEGER) – содержит количество фактов (животное - свойство) в БД;
winh(WINDOW) – содержит дескриптор главного окна;
PREDICATES
countques(INTEGER) – определяет количество фактов в БД;
trans(STRING,STRING,STRING) – формирует строку, для добавление в список «Список животное;Свойство»;
delsims – удаляет все факты sim из БД.
Текст программы.
DATABASE - qdb
ques(STRING,STRING).
DATABASE - vspom
vsillness(STRING,STRING)
countdb(INTEGER)
sim(STRING)
winh(WINDOW)
PREDICATES
countques(INTEGER)
trans(STRING,STRING,STRING)
ask(INTEGER,STRING)
loop(INTEGER,INTEGER)
delsims
issim
CLAUSES
countques(N):retract(ques(P,P2)),
countques(N1),
assertz(ques(P,P2)),
N=N1+1.
countques(0).
trans(S,STR1,STR2):searchchar(S,';',Pos),
Pos2=Pos+1,
Pos3=Pos-1,
str_len(S,LEN),
LEN2=LEN-Pos,
substring(S,1,Pos3,STR1),
substring(S,Pos2,LEN2,STR2),
!.
issim:-ques(A,B),!,sim(B).
loop(I,N):-issim,retract(ques(A,B)),assertz(ques(A,B)),I2=I+1,!,loop(I2,N).
loop(I,N):- retract(ques(A,B)),assertz(ques(A,B)),!,
asserta(sim(B)),!,
concat("У вас ",B,STRvs),
concat(STRvs,"?",STR),
P=dlg_Ask(STR,["Да","Нет"]),
ask(P,B),!,
I2=I+1,
loop(I2,N).
ask(0,B):-winh(_Win),asserta(sim(B)),
dlg_resul_Create(_Win),!,fail.
ask(1,B).
delsims():-retract(sim(_)),fail.
%Выбор пункта меню «Пользовательский режим»
task_win_eh(_Win,e_Menu(id_user,_ShiftCtlAlt),0):- dlg_user_Create(_Win),!.
%Выбор пункта меню «Экспертный режим»
task_win_eh(_Win,e_Menu(id_expert,_ShiftCtlAlt),0):-!, dlg_expert_Create(_Win),!.
%Выбор пункта меню «О программе»
task_win_eh(_Win,e_Menu(id_context,_ShiftCtlAlt),0):-!, dlg_about_dialog_Create(_Win),!.
%Выбор пункта меню «Помощь»
task_win_eh(_Win,e_Menu(id_help,_ShiftCtlAlt),0):-!, dlg_mainhelp_Create(_Win),!.
%Выбор пункта меню «Выход»
task_win_eh(Win,e_Menu(id_exit,_ShiftCtlAlt),0):-!,
win_Destroy(Win),!.
Программа и методика испытаний
Испытуемая программа Lab3.exe предназначена для представления знаний в виде продукционной модели.
Цель испытаний
Испытание проводилось с целью выявления корректности выполнения программы; отсутствия ошибочных, либо неопределенных ситуаций, возникающих в результате выполнения программы; отсутствия сбоев систем компьютера в результате работы программы.
Во время испытаний использовались технические средства:
Программные средства, используемые во время испытаний
Во время испытаний использовалось программное обеспечение:
Порядок испытаний
Испытание программы проводились в следующем порядке:
· испытание на корректность (адекватно ли программа реагирует на ввод вывод информации);
· испытание на правильность;
· испытание на надежность (процент отказа системы).
Если итог проведения испытаний удовлетворяет заданным критериям, то проведение испытаний считается успешным.
1. Надежность. Программа испытывалась на нескольких компьютерах, в результате работы программы ошибок в работе ОС и самой программы обнаружено
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.