Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лекции 2013 / Lektsia_6_23_03_13

.docx
Скачиваний:
18
Добавлен:
20.06.2014
Размер:
17.59 Кб
Скачать

procedure Solve_Goal (goal)

if Value of the Goal

.

.

.

for each Rule …

call Attempt_Rule

procedure Attempt_Rule (rule)

rule: rule to be attempted to solve goal

for each in the antecendent of the rule do

call Solve_Goal_with_condition attribute

if the Value by Solve_goal is not equal to the value required by the condition then

return Fail

end if

end for

Return Successfully

end procedure

Работа процедуры Attempt_Rule начинается с проверки первого условия правила и попытки доказать его. После этого осуществляются попытки доказать остальные условия правила. Для определения того, выполнено ли условие процедура Attempt_Rule должна иметь информацию о том, какое значение имеет атрибут, проверяемый в данном условии. Для определения этого значения рекурсивно вызывается процедура Solve_Rule. Если значение, возвращенное процедурой Solve_Rule не равно знач-ю возвр при проверке условия, то процедура Attempt_Rule заверш. свою работу и возвр. знач-е, свидетельствующее о неудаче. В противном случае проверяется очередное условие правила. Если выполнены все условия правила, то процедура Attempt_Rule заканчивает свою работу, возвращая значение, свидетельствующее об успешном завершении.

(deffact MAIN::med-rules

(rule (if temp is Very-High and headache is Yes and contra-indication is No)

(then make-injection is Yes))

(rule (if temp is High)

(then give-a-pyretic is Yes))

(rule (if temp is High)

(then make-injection is No))

Машина обратного логического вывода в среде CLIPS может быть реализована с использованием двух множеств правил:

1 группа правил применяется для выработки целей при достижении которых выявляются значения атрибутов и для передачи запроса пользователю, чтобы он предоставил значения атрибутов, если эти значения невозможно определить с помощью правил;

2 группа правил осуществляет операции обновления; к числу операций обновления относятся операции модификации правил после выполнения их условия и операции удаления целей после их достижения

(defrule BC::Attempt_Rule

(goal (attribute ?g-name))

(rule (if ?a-name $?)

(then ?g-name $?))

(not (attribute (name ?a-name)))

(not (goal (attribute ?a-name)))

=>

(assert (goal (attribute ?a-name))))

(defrule BC::Ask-Attr-Value

?goal <- (goal (attribute ?g-name))

(not (attribute (name ?g-name)))

(not (rule (then ?g-name)))

=>

(retract ?goal)

(printout t “What is value of g-name?”)

(assert (attribute (name ?g-name)

(value (read)))))

(deffact MAIN::initial-goal

(goal (attribute make-injection)))

(attribute (name temp) (value Very-High))

(rule (if

  1. Goal-Satisfied

  2. Rule-Satisfied

  3. Remove-Rule-No-Match

  4. Modify-Rule-Match

(declare (salience 100))

С помощью правила Goal-Satisfied удаляются все цели, для которых было определено значение атрибута. С помощью правила Rule-Satisfied осуществляется поиск всех правил, в которых имеется единственное оставшееся условие. Если существует атрибут, который соответствует этому оставшемуся условию и имеется цель определения значения этого атрибута, то в список фактов вносится значение атрибута из консеквента данного правила. С помощью правила Remove-Rule-No-Match осуществляется поиск правил антеценденты которых могут предоставить значение атрибута для атрибута Goal и которые содержат одно или несколько таких условий, что первое из них конфликтует со значением, присвоенным атрибутом. Если обнаружится такая ситуация – соответствующее правило удаляется из списка фактов, поскольку является неприменимым. С помощью правила Modify-Rule-Match осуществляется поиск правил, антеценденты которых могут предоставить значение атрибута для атрибута Goal и которые содержат 2 или несколько таких условий, что первое из них выполняется при наличии некоторого значения присвоенного атрибута. Если обнаруживается такое правило, то первое условие удаляется из этого правила, чтобы в нём присутствовали только оставшиеся условия, подлежащие проверке.

(load

(watch activations)

(reset)

(run 1)

Соседние файлы в папке Лекции 2013