Иллюстрированный самоучитель по введению в экспертные системы

Рекомендуемая литература. Упражнения.

Упражнение 5
Проанализируйте программу диагностики болей в брюшной полости, представленную в листинге 5.5. (Предупреждаю ипохондриков: эти правила скопированы из первого попавшегося под руку справочника, поэтому не стоит пользоваться ими для самодиагноза).

В этой программе есть одно обычное для таких программ ограничение. В исходном состоянии рабочей памяти необходимо представить все симптомы, но многие пациенты говорят только о самом явном (боли) и могут даже и не упомянуть о других, например ссадине на лодыжке.

Модифицируйте программу таким образом, чтобы она запрашивала о забытых симптомах. Самый простой способ сделать это – добавить правила, которые в предпосылках имеют только одно условие – жалобы на боль. Такое условие, например, может иметь вид:

(sign (symptom pain) (organ abdomen) (site lower))

Действие правила состоит в том, чтобы добавить в рабочую память вопрос, который нужно задать. Затем понадобится правило, которое собственно и задаст вопрос и поместит в рабочую память вектор sign, сформированный в соответствии с полученным ответом. Шаблон для вектора question (вопрос) имеет такой вид:

(deftemplate question
(field symptom (type SYMBOL))
(field organ (type SYMBOL) (default NIL))
(field answer (type SYMBOL) (default NIL)))

Таким образом, и образец в левой части порождающего правила, и сопоставляемые с ним элементы в рабочей памяти должны соответствовать этим шаблонам.

В чем, по-вашему, состоит ограничение возможностей подхода, использующего свойство salience, описанное во врезке 5.5?

Листинг 5.5. Набор диагностических правил заболеваний брюшной полости на языке CLIPS.

;; Шаблоны
;; Объект 'sign' – это симптом, связанный с органом
;; или придатком,
(deftemplate sign
(field symptom (type SYMBOL))
(field organ (type SYMBOL))
(field site (type SYMBOL)))
;; Вектор 'diagnosis' классифицирует патологию
;; некоторого органа.
(deftemplate diagnosis
(field disorder (type SYMBOL))
(field organ (type SYMBOL) (default NIL))
)
;; Факты
;; Некоторые простые симптомы.
(deffacts the-facts
(sign (symptom pain) (organ abdomen) (site lower))
(sign (symptom poor-appetite))
(sign (symptom weight-loss))
)
;; ПРАВИЛА
;; Признаки: боль в нижней части брюшной полости И
;; плохой аппетит, И потеря веса.
(defrule stomach-tumor
(sign (symptom pain) (organ abdomen) (site lower))
(sign (symptom poor-appetite))
(sign (symptom weight-loss)) ›
(assert (diagnosis (disorder tumor) (organ stomach)))
;; Признаки: боль (pain) – в нижней части (lower)
;; брюшной полости (abdomen),
;; И понос (diarrhea), И рвота (nausea),
;; но высокой температуры нет.
(defrule inflammationl
(sign (symptom pain) (organ abdomen) (site lower))
(sign (symptom diarrhea))
(sign (symptom nausea)) ›
(assert (diagnosis (disorder inflammation)
(organ large-intestine)))
)
;; Признаки: боль (pain) в нижней части (lower)
;; брюшной полости (abdomen),
;; И понос (diarrhea),
;; И высокая температура (fever).
(defrule inflamation2
(sign (symptom pain) (organ abdomen) (site lower))
(sign (symptom diarrhea))
(sign (symptom fever)) ›
(assert (diagnosis (disorder inflammation)
(organ large-intestine)))
)
;; Признаки: боль в верхней правой части брюшной полости
;; И отсутствие высокой температуры.
(defrule gallstones
(sign (symptom pain) (organ abdomen)
(site upper-right)) ›
(assert (diagnosis (disorder gallstones)
(organ gallbladder)))
)
;; Признаки: боль в верхней правой части брюшной полости,
;; И рвота, И высокая температура.
(defrule gallbladder
(sign (symptom pain) (organ abdomen)
(site upper-right)) (sign (symptom vomiting))
(sign (symptom fever)) ›
(assert (diagnosis (disorder inflammation)
(organ gallbladder))))
Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.