
Результаты работы приложения
После запуска приложения программа представляется пользователю и предлагает пройти медицинскую консультацию (рис.2).
Рис. 2. Начало работы системы «Медицинская консультация»
Далее пользователь отвечает на вопросы системы, и если набор ответов, данных в течение опроса, совпадает с набором критериев одного из заболеваний, то система выводит его название (рис. 3).
Рис. 3. Вывод заболевания «Менингит»
Если же набора симптомов не существует в системе, то она выдаст ответ «Извините, в моей базе по названным симптомам заболевание не найдено» (рис. 4).
Рис. 4. Вывод информации о том, что заболевание не найдено
Системные требования
Для работы приложения необходимы:
операционная система MS Windows XP/Vista/Seven.
1 Мб оперативной памяти.
Среда разработки CLIPS/COOL 6.3.
Руководство пользователя
Для запуска настольного приложения необходимо установить и запустить файл CLIPSWin.exe. После запуска программы выбрать команду «Load» в меню «File» и выбрать файл MED.clp. После этого в командной строке программы ввести команду (reset) и (run). И можно приступать к медицинской диагностике.
Заключение
В качестве курсового проекта было разработано приложение: простейшая экспертная система, способная находить решение задачи пользователя, задавая пользователю вопросы. Различные технологии выполняют различные задачи и поэтому обладают различной производительностью.
Список литературы
A. П. Частиков “Разработка экспертных систем. Среда Clips” Санкт – Петербург 2003г.
ГОСТ 19.106 - 78 ЕСПД. Требования к программным документам, выполненным печатным способом.
ГОСТ 19.404 – 79 ЕСПД. Пояснительная записка. Требования к содержанию и оформлению.
ПРИЛОЖЕНИЕ
Файл MED.clp
(deffunction ask-question (?question $?allowed-values)
(printout t ?question)
(bind ?answer (read))
(if (lexemep ?answer)
then (bind ?answer (lowcase ?answer)))
(while (not (member ?answer ?allowed-values)) do
(printout t ?question)
(bind ?answer (read))
(if (lexemep ?answer)
then (bind ?answer (lowcase ?answer))))
?answer)
(deffunction yes-or-no-p (?question)
(bind ?response (ask-question ?question yes no y n))
(if (or (eq ?response yes) (eq ?response y))
then TRUE
else FALSE))
;***********************************************************************
(defrule determine-vi-horosho ""
(not(norm ?))
(not (repair ?) )
=>
(if (yes-or-no-p "Вы чувствуете недомогание (y/n)? ")
then
(assert (norm normal))
else
(assert (repair "У Вас нет причин к беспокойству. Вы здоровы"))))
;***********************************************************************
(defrule determine-vi-golova ""
(norm normal)
(not (gol ?))
(not (repair ?))
=>
(if (yes-or-no-p "Болит ли у Вас голова (y/n) ? ")
then
(assert (gol yes))
else
(assert (gol no))))
;***********************************************************************
(defrule determine-vi-temteratura ""
(norm normal)
(gol yes)
(not (temp ?))
(not (repair ?))
=>
(if (yes-or-no-p "У Вас есть температура (y/n) ? ")
then
(assert (temp yes))
else
(assert (temp no))))
;***********************************************************************
(defrule determine-vi-oznob ""
(norm normal)
(gol yes)
(temp yes)
(not (ozn ?))
(not (repair ?))
=>
(if (yes-or-no-p "Ощущаете ли Вы озноб (y/n) ? ")
then
(assert (ozn yes))
else
(assert (ozn no))))
;*********************************************************************** (defrule determine-vi-mishci ""
(norm normal)
(gol yes)
(temp yes)
(ozn yes)
(not (mish ?))
(not (repair ?))
=>
(if (yes-or-no-p "Есть ли у Вас боль в мышцах (y/n) ? ")
then
(assert (repair "Грипп"))
else
(assert (mish no))))
;***********************************************************************
(defrule determine-vi-kashel' ""
(norm normal)
(gol no)
(not (kash ?))
(not (repair ?))
=>
(if (yes-or-no-p "У Вас есть кашель (y/n) ? ")
then
(assert (kash yes))
else
(assert (kash no))))
;***********************************************************************
(defrule determine-vi-gorlo ""
(norm normal)
(gol no)
(kash yes)
(not (gor ?))
(not (repair ?))
=>
(if (yes-or-no-p "Ощущаете ли Вы боль или комок в горле (y/n) ? ")
then
(assert (gor yes))
else
(assert (gor no))))
;***********************************************************************
(defrule determine-vi-faringit ""
(norm normal)
(gol no)
(kash yes)
(temp no)
(gor yes)
(not (far ?))
(not (repair ?))
=>
(if (yes-or-no-p "Есть ли ощущение сухости или першения в горле (y/n) ? ")
then
(assert (repair "Фарингит"))
else
(assert (far no))))
;***********************************************************************
(defrule determine-vi-bronhit ""
(norm normal)
(gol no)
(kash yes)
(gor no)
(not (mok ?))
(not (repair ?))
=>
(if (yes-or-no-p "При кашле у Вас отходит мокрота (y/n) ? ")
then
(assert (repair "Бронхит"))
else
(assert (mok no))))
;***********************************************************************
(defrule determine-vi-prostuda ""
(norm normal)
(gol no)
(kash yes)
(gor yes)
(far no)
(not (nasm ?))
(not (repair ?))
=>
(if (yes-or-no-p "У Вас есть насморк (y/n) ? ")
then
(assert (repair "Простуда"))
else
(assert (nasm no))))
;***********************************************************************
(defrule determine-vi-glotanie ""
(norm normal)
(gol yes)
(temp yes)
(ozn yes)
(mish no)
(not (glot ?))
(not (repair ?))
=>
(if (yes-or-no-p "Есть ли у Вас боли в горле при глотании (y/n) ? ")
then
(assert (glot yes))
else
(assert (glot no))))
;***********************************************************************
(defrule determine-vi-angina ""
(norm normal)
(gol yes)
(temp yes)
(ozn yes)
(mish no)
(glot yes)
(not (lim ?))
(not (repair ?))
=>
(if (yes-or-no-p "Увеличены ли Ваши лимфатические узлы (y/n) ? ")
then
(assert (repair "Ангина"))
else
(assert (lim no))))
;***********************************************************************
(defrule determine-vi-onemenie ""
(norm normal)
(gol yes)
(temp yes)
(ozn no)
(not (onem ?))
(not (repair ?))
=>
(if (yes-or-no-p "Есть ли ощущение онемения шеи (y/n) ? ")
then
(assert (onem yes))
else
(assert (onem no))))
;***********************************************************************
(defrule determine-vi-meningit ""
(norm normal)
(gol yes)
(temp yes)
(ozn no)
(onem yes)
(not (men ?))
(not (repair ?))
=>
(if (yes-or-no-p "Наблюдается ли повышенная чувствительность к свету и звукам (y/n) ? ")
then
(assert (repair "Менингит"))
else
(assert (men no))))
;***********************************************************************
(defrule determine-vi-encefalit ""
(norm normal)
(gol yes)
(temp yes)
(ozn no)
(onem no)
(not (enc ?))
(not (repair ?))
=>
(if (yes-or-no-p "У Вас есть рвота, не приносящая облегчения (y/n) ? ")
then
(assert (repair "Энцефалит"))
else
(assert (enc no))))
;***********************************************************************
(defrule not-glotan ""
(norm normal)
(gol yes)
(temp yes)
(ozn yes)
(mish no)
(glot no)
=>
(assert (repair "Извините, в моей базе знаний по названным симптомам заболевание не найдено")))
;***********************************************************************
(defrule not-linph ""
(norm normal)
(gol yes)
(temp yes)
(ozn yes)
(mish no)
(glot yes)
(lim no)
=>
(assert (repair "Извините, в моей базе знаний по названным симптомам заболевание не найдено")))
;***********************************************************************
(defrule not-encif ""
(norm normal)
(gol yes)
(temp yes)
(ozn no)
(enc no)
=>
(assert (repair "Извините, в моей базе знаний по названным симптомам заболевание не найдено")))
;***********************************************************************
(defrule not-menin ""
(norm normal)
(gol yes)
(temp yes)
(ozn no)
(onem yes)
(men no)
=>
(assert (repair "Извините, в моей базе знаний по названным симптомам заболевание не найдено")))
;***********************************************************************
(defrule not-temper ""
(norm normal)
(gol yes)
(temp no)
=>
(assert (repair "Извините, в моей базе знаний по названным симптомам заболевание не найдено")))
;***********************************************************************
(defrule not-nasmor ""
(norm normal)
(gol no)
(kash yes)
(gor yes)
(far no)
(nasm no)
=>
(assert (repair "Извините, в моей базе знаний по названным симптомам заболевание не найдено")))
;***********************************************************************
(defrule not-mokrot ""
(norm normal)
(gol no)
(kash yes)
(gor no)
(mok no)
=>
(assert (repair "Извините, в моей базе знаний по названным симптомам заболевание не найдено")))
;***********************************************************************
(defrule not-nayde ""
(norm normal)
(gol no)
(kash no)
=>
(assert (repair "Извините, в моей базе знаний по названным симптомам заболевание не найдено")))
;***********************************************************************
(defrule system-banner ""
(declare (salience 10))
=>
(printout t crlf crlf)
(printout t "*******************************************************************")
(printout t crlf crlf)
(printout t "* Экспертная система медицинской консультации")
(printout t crlf crlf)
(printout t "Выполнил студент группы 220291 Гусева Светлана Львовна")
(printout t crlf crlf)
(printout t "*******************************************************************")
(printout t crlf crlf))
(defrule print-repair ""
(declare (salience 10))
(repair ?item)
=>
(printout t crlf crlf)
(printout t "Скорее всего у Вас:")
(printout t crlf crlf)
(format t " %s%n%n%n" ?item))