Студопедия

КАТЕГОРИИ:


Архитектура-(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)

Диагностические правила




Для упрощения реализации разрабатываемой ЭС введем следующее ограничение: за один запуск система может предоставить пользователю только одну рекомендацию по исправлению неисправности. В случае если в машине несколько неисправностей, то систему нужно будет последовательно вызывать несколько раз, удаляя обнаруженную на каждом новом шаге неисправность. Таким образом, одним из образцов всех диагностических правил будет (not (repair?)), гарантирующий, что диагноз еще не поставлен.

Первым реализуем правило, определяющее ТС двигателя в целом (см. правило 1).

 

Пример. Правило determine-engine-state

(defrule determine-engine-state ""

(not (working-state engine?))

(not (repair?))

=>

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

then

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

then

(assert (working-state engine normal))

else

(assert (working-state engine unsatisfactory)))

else

(assert (working-state engine does-not-start)))

)

 

Условный элемент (not (working-state engine?)) гарантирует, что ТС двигателя в целом еще не определено. Если это так, то пользователю задаются соответствующие вопросы и в систему добавляется факт, описывающий текущее ТС двигателя.

Реализуем правило, определяющее, вращается ли вал двигателя, в случае если он не заводится при попытке запуска.

 

Пример. Правило determine-rotation-state

(defrule determine-rotation-state ""

(working-state engine does-not-start)

(not (rotation-state engine?))

(not (repair?))

=>

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

then

(assert (rotation-state engine rotates))

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

else

(assert (rotation-state engine does-not-rotate))

(assert (spark-state engine does-not-spark)))

)

 

Это правило выполняется, в случае если ТС двигателя в целом определено и известно, что он не заводится. Кроме того, условный элемент (not (rotation-state engine?)) гарантирует, что это правило еще не вызывалось. В зависимости от ответа пользователя правило добавляет соответствующий набор фактов (см. правило 4).

Реализуем правила 5 и 6, выполняемые действия которых понятны без дополнительных комментариев.

 

Пример. Правила determine-gas-level и determine-battery-state

(defrule determine-gas-level ""

(working-state engine does-not-start)

(rotation-state engine rotates)

(not (repair?))

=>

(if (not (yes-or-no-p "Does the tank have any gas in it (yes/no)? "))

then

(assert (repair "Add gas.")))

)

 

(defrule determine-battery-state ""

(rotation-state engine does-not-rotate)

(not (charge-state battery?))

(not (repair?))

=>

(if (yes-or-no-p "Is the battery charged (yes/no)? ")

then

(assert (charge-state battery charged))

else

(assert (repair "Charge the battery."))

(assert (charge-state battery dead)))

)

 

Следует отметить, что правило determine-battery-state, помимо определения возможной неисправности, также применяется для добавления в систему факта, описывающего текущее состояние аккумулятора, который может быть использован другими правилами.

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

 

Пример. Правила determine-low-output и determine-point-surface-state

(defrule determine-low-output ""

(working-state engine unsatisfactory)

(not (symptom engine low-output I not-low-output))

(not (repair?))

=>

(if (yes-or-no-p "Is the output of the engine low (yes/no)?")

then

(assert (symptom engine low-output))

else

(assert (symptom engine not-low-output)))

)

 

(defrule determine-point-surface-state ""

(or (and (working-state engine does-not-start)

(spark-state engine irregular-spark))

(symptom engine low-output))

(not (repair?))

=>

(bind?response (ask-question "What is the surface state of

the points (normal /burned /contaminated)?"

normal burned contaminated))

(if (eq?response burned)

then

(assert (repair "Replace the points."))

else

(if (eq?response contaminated)

then

(assert (repair "Clean the points."))))

)

 

Правило determine-low-output определяет, имеет ли место низкая мощность двигателя или нет. Правило determine-point-surface-state адекватно реагирует на условия, заданные в правилах 7 и 12. Обратите внимание на использование условных элементов or и and, которые обеспечивают одинаковое поведение правила в двух абсолютно разных ситуациях. Кроме того, правило determine-point-surface-state отличается от приведенных ранее тем, что непосредственно использует функцию ask-question, вместо yes-or-no-p, т.к. в данный момент пользователю задается вопрос, подразумевающий три варианта ответа. Выполним реализацию оставшихся правил 8−11.

 




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


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


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



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




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