Упражнения
1. Как вы
понимаете термин "разрешение конфликтов"?
2. Пусть А
— это алфавит {а, b} и пусть в этом алфавите существуют аксиомы ab,
bа.
Какие строки будут сформированы следующими порождающими правилами:
(Р1) $a ->$ab
(Р2)
$b -> $bа
3. Пусть А
— это алфавит {а, b} и пусть в этом алфавите существуют аксиомы аа,
bb.
Какой набор
порождающих правил может сформировать строки вида аа, bb, aabb, bbaa, aabbaa,
bbaabb, aabbaabb, bbaabbaa и т.д.
4. На языке
CLIPS напишите программу, которая будет выполнять рассуждения на основании силлогизмов.
Силлогизм — это множество правил, определяющих, какие умозаключения можно получить
из множества суждений. Ниже приведен простой силлогизм
Все Аi
являются Вi Все Вi являются Сi Все Аi являются
Сi
Все Аi
являются Еi Некоторые Аi являются С, Все Сi являются Вi
Все Аi
являются Вi
Ни один из
Сi не является Вi
Ни один из
Сi не является Аi
Эти суждения
несложно представить в виде диаграмм Венна. Смоделируйте их с помощью языка
CLIPS в виде трех правил.
Вам понадобится
единственный шаблон, в котором будет определено, что утверждение (statement)
состоит из квантификатора (quantifier), который может принимать одно из трех
значений: all (все), some (некоторые) или по (ни один) и двух множеств.
(deftemplate
statement
(field
quantifier (type SYMBOL))
(field
setl (type SYMBOL))
(field
set2 (type SYMBOL)) )
Так, выражение
"Все А1 являются В" примет вид
(statement
(quantifier all) (setl As) (set2 Bs))
Проверить,
как работает программа, можно на таких фактах:
(deffacts
the-facts
(statement
(quantifier all) (setl puppies)
(set2
dogs)) (statement (quantifier all) (setl dogs)
(set2
mammals)) (statement (quantifier all) (setl mammals)
(set2
animals)) (statement (quantifier no) (setl sea-cretures)
(set2
dogs)) (statement (quantifier some) (setl sea-cretures)
(set2
mammals)) )
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))) )