КАТЕГОРИИ: Архитектура-(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; Просмотров: 547; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |