Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Пример. (defrule determine-conductivity-test




(defrule determine-conductivity-test ""

(working-state engine does-not-start)

(spark-state engine does-not-spark)

(charge-state battery charged)

(not (repair?))

=>

(if (yes-or-no-p "Is the conductivity test for the ignition

coil positive(yes/no)? ")

then

(assert (repair "Repair the distributor lead wire."))

else

(assert (repair "Replace the ignition coil.")))

)

 

(defrule determine-sluggishness ""

(working-state engine unsatisfactory)

(not (repair?))

=>

(if (yes-or-no-p "Is the engine sluggish (yes/no)? ")

then

(assert (repair "Clean the fuel line.")))

)

 

(defrule determine-misfiring

(working-state engine unsatisfactory)

(not (repair?))

=>

(if (yes-or-no-p "Does the engine misfire (yes/no)? ")

then

(assert (repair "Point gap adjustment."))

(assert (spark-state engine irregular-spark)))

)

 

(defrule determine-knocking ""

(working-state engine unsatisfactory)

(not (repair?))

=>

(if (yes-or-no-p "Does the engine knock (yes/no)? ")

then

(assert (repair "Timing adjustment.")))

)

 

Из рассмотренного списка правил остались не реализованными правила 2, 3 и 13. В качестве реализации правила 13 используем правило no-repairs.

 

Пример. Правило no-repairs

(defrule no-repairs ""

(declare (salience -10))

(not (repair?))

=>

(assert (repair "Take your car to a mechanic."))

)

 

Обратите внимание на использование приоритета при определении этого правила. Все правила, приведенные в предыдущем разделе, определялись с приоритетом, по умолчанию равным нулю. Использование для правила no-repairs приоритета, равного -10, гарантирует, что правило не будет выполнено, пока в плане решения задачи находится, по крайней мере, одно из диагностических правил. Если все активированные диагностические правила отработали, и ни одно из них не смогло подобрать подходящую рекомендацию по устранению неисправности, то CLIPS запустит правило no-repairs, которое просто порекомендует пользователю обратиться к более опытному механику.

Реализация правил 2 и 3 приведена ниже.

 

Пример. Правила normal-engine-state-conclusions и unsatisfactory-engine-state-conclusions

(defrule normal-engine-state-conclusions ""

(declare (salience 10))

(working-state engine normal)

=>

(assert (repair "No repair needed."))

(assert (spark-state engine normal))

(assert (charge-state battery charged))

(assert (rotation-state engine rotates))

)

 

(defrule unsatisfactory-engine-state-conclusions ""

(declare (salience 10))

(working-state engine unsatisfactory)

(assert (charge-state battery charged))

(assert (rotation-state engine rotates))

)

 

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

Экспертная система фактически готова к работе. Добавим только вывод итоговой информации и правило, сообщающее пользователю о начале работы.

 

Пример. Правила system-banner и print-repair

(defrule system-banner ""

(declare (salience 10))

=>

(printout t crlf crlf)

(printout t "****************************************" crlf)

(printout t "* The Engine Diagnosis Expert System *" crlf)

(printout t "**************************************" crlf)

(printout t crlf crlf)

)

 

(defrule print-repair ""

(declare (salience 10))

(repair?item)

=>

(printout t crlf crlf)

(printout t "Suggested Repair:")

(printout t crlf crlf)

(format t " %s%n%n%n"?item)

)




Поделиться с друзьями:


Дата добавления: 2014-12-29; Просмотров: 524; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.012 сек.