Иллюстрированный самоучитель по введению в экспертные системы

Обратное прослеживание и множество контекстов

Подготовка рабочей памяти к выполнению отката

При подготовке к откату нужно выполнить одну из двух возможных операций с рабочей памятью:

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

В любом случае из рабочей памяти нужно удалить объекты claim. Поскольку откат никогда не выполняется в противоречивом контексте, такое удаление не повлияет на полноту представления информации о задаче. Если потребуется вновь сформировать удаленный контекст при других предположениях, это можно будет выполнить, повторив вычисления с "чистого листа".

;; ЕСЛИ обнаружено противоречие с одним из
;; дизъюнктивных контекстов "мира",
;; ТО удалить все утверждения (объекты claim)
;; этого контекста.
;; ПРИМЕЧАНИЕ: правило будет активизироваться повторно,
;; пока не будут удалены все ненужные объекты,
(defrule clean-context
(declare (salience SO))
(world (tag?N) (task contra) (prior 0)
(context?S&~0))
?F ← (claim (reason?N) (context?S)) ›
(retract?F))
;; ЕСЛИ противоречие обнаружено в текущем "мире" в
;; предположении о правдивости,
;; ТО повторить анализ, предположив лживость персонажа.
(defrule switch-context
(declare (salience 40))
;; Если больше нет правых дизъюнктов,
?W ← (world (tag?N)(scope truth) (task contra)
(prior 0) (context?S&"1)) ›
;; изменить предположение и сформировать новый контекст.
(modify?W (scope falsity) (task check) (context 0))
)
;; Удалить все утверждения (объекты claim),
;; сформированные на основании предположения о
;; правдивости.
;; ПРИМЕЧАНИЕ: правило будет активизироваться повторно,
;; пока не будут удалены все ненужные объекты,
(defrule sweep-truth
(declare (salience 100))
(world (tag?N) (scope falsity))
?F ← (claim (reason?N) (scope truth))- ›
(retract?F))

Последнее правило демонстрирует, как с помощью полей reason и scope можно отслеживать объекты claim. В данной программе используется тот же прием, что и в системах обработки правдоподобия, которые были рассмотрены в главе 19.

Теперь можно приступить к разработке правил, выполняющих откат.

Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.