ВУЗ:
Составители:
Рубрика:
(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 будет следующая.
(defrule no-repairs ""
(declare (salience –10))
(not (repair ?))
=>
(assert (repair "Take your car to a mechanic.")))
Обратите внимание на использование приоритета при определении этого правила. Все правила, приведенные в преды-
дущем разделе, определялись с приоритетом, по умолчанию равным нулю. Использование для правила no-repairs приорите-
та, равного –10, гарантирует, что правило не будет выполнено, пока в плане решения задачи находится, по крайней мере,
одно из диагностических правил. Если все активированные диагностические правила опрошены и ни одно из них не смогло
подобрать подходящую рекомендацию по устранению неисправности, то система запустит данное правило, рекомендующее
пользователю обратиться к механику.
Реализация правил 2 и 3 приведена ниже.
(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)))
В этих правилах, наоборот, используется более высокий приоритет, что гарантирует их выполнение до запуска любого
диагностирующего правила (в случае выполнения соответствующих условий). Это избавит нашу систему от лишних прове-
рок, а пользователя от лишних вопросов.