Пример 14.14. Правило compute-response-other-times


(defrule compute- response-other-times

?f <- (current-iteration ?n&~0&:(< ?n ?*max-iterations*) )

=>

(bind ?pos (change-which-bit ?n) )

(bind ?nv) (- 1 (nth ?pos ?*gray-code*) ) )

(bind ?*gray-code* (replace$ ?*gray-code* ?pos ?pos ?nv) )

(send (nth ?pos ?*sources*) put-output-1 ?nv)

(assert (result ?*gray-code* = (str-implode (LED-response) ) ) )

(retract ?f)

(assert (current-iteration =(+ ?n 1)))

)

Логика работы правила compute-response-other-times подобна работе правила compute-response-1st-time, за исключением того, что в начале с по­мощью вызова функции change-which-bit оно определяет, какой из источников схемы должен поменять входящий сигнал, и меняет его. После этого правило получает результат работы логической схемы и сохраняет его в соответствующем факте. Кроме того, правило увеличивает число итераций на единицу. Правило выполняется до тех пор, пока число итераций не достигнет предельного значения. Еще одним условием выполнения правила является то, что одна итерация уже была совершена (число итераций не равно 0).

Пример 14.15. Правило marge-responses

(defrule merge-responses

(declare (salience 10))

?fl <- (result $?b ?x $?e ?response)

?f2 <- (result $?b ~?x $?e ?response)

=>

(retract ?fl ?f2)

(assert (result ?b * ?e ?response))

)

Правило merge-responses предназначено для оптимизации вычисляемой таблицы истинности и имеет более высокий приоритет, поэтому выполняется сразу после того, как в системе появятся два факта, удовлетворяющие заданной маске.

Пример 14.16. Правило print-header

(defrule print-header

(declare (salience -10) )

=>

(do-for-all-instances ((?x SOURCE)) TRUE

(format t " %3s " (sym-cat ?x)))

(printout t " │ ")

(do-for-all-instances ((?x LED)) TRUE

(format t " %3s " (sym-cat ?x)))

(format t "%n")

(do-for-all-instances ((?x SOURCE)) TRUE

(printout t "------- ") )

(printout t "- + -")

(do-for-all-instances ((?x LED)) TRUE

(printout t "------- "))

(format t "%n")

(assert (print-results))

)

Приведенное выше правило print-header предназначено для вывода на эк­ран заголовка таблицы истинности. Затем правило добавляет в систему факт print-results, активизирующий правило print-result. Заголовок содержит список всех источников системы и список индикаторов, разделенных вертикальной чертой. Кроме того, для большего удобства восприятия правило отделяет заголовок таблицы от ее содержания дополнительной строкой. Это правило имеет более низкий приоритет, чем остальные правила экспертной системы, и не имеет явных условных элементов. Поэтому выполняется только после завершения перебора всевозможных комбинаций входных сигналов логической схемы.



Дата добавления: 2021-12-14; просмотров: 258;


Поиск по сайту:

Воспользовавшись поиском можно найти нужную информацию на сайте.

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

Считаете данную информацию полезной, тогда расскажите друзьям в соц. сетях.
Poznayka.org - Познайка.Орг - 2016-2024 год. Материал предоставляется для ознакомительных и учебных целей.
Генерация страницы за: 0.008 сек.