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

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

Выполнение отката

Каждое отдельное высказывание в задачах рассматриваемого класса формирует свой "мир". Поскольку высказывания обрабатываются последовательно, возможна ситуация, когда "мир", который программа анализирует в текущий момент, вступает в конфликт с одним из "миров", обработанных ранее. Дальнейшие действия в такой ситуации зависят от того, на каких предположениях основаны конфликтующие "миры".

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

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

Правило undirected-falsity выполняет необходимые для этого подготовительные операции. Смысл слова undirected (ненаправленный) состоит в том, что это правило реализует откат в "хронологическом" порядке создания "миров". В механизме разрешения конфликтов в CLIPS реализовано "хронологическое предпочтение", которое обеспечивает откат к последнему из ранее сформированных "миров", удовлетворяющих заданным условиям. Но при этом не предпринимается никакой попытки локализовать в процессе выбор точки, которая стала причиной конфликта, например выбрать именно тот "мир", с которым конфликтует текущий.

;; Хронологический откат к тому "миру", который был
;; покинут без выполнения анализа в предположении
;; о лживости (поле scope содержит значение truth,
;; а поле task – значение check),
(defrule undirected-falsity
(world (tag?N) (scope falsity) (task contra))
?W ← (world (tag,?M&:(<?M?N)) (scope truth) (task check))
 ›
(modify?W (task back)))

Альтернативный сценарий используется в ситуации, когда в ранее покинутом "мире" не были проанализированы все дизъюнкты составного утверждения. "Мир" был покинут, когда обнаружилось, что проанализированный дизъюнкт не противоречит предположению, поэтому прочие дизъюнкты просто не рассматривались. Теперь, когда обнаружилось противоречие с другим "миром", можно вновь вернуться к ранее незавершенному анализу и попробовать, не разрешится ли конфликт в результате исследования другого дизъюнкта.

Приведенное ниже правило undirected-disjunct выполняет подготовку к такому откату в хронологическом порядке.

;; Хронологический откат к тому "миру", который был
;; покинут без завершения анализа дизъюнктов,
(defrule undirected-disjunct
world (tag?N) (scope falsity) (task contra))
V ← (world (tag?M&:(<?M?N))
(task check) (context 1))
claim (content OR?P?X?Q?Y) (reason?M)
(scope?S)) ›
;; Дизъюнкт в ранее покинутом "мире", анализ которого
;; не был выполнен.
assert (claim (content?Q?Y) (reason?M) (scope?S)
(context 2)))
;; Зафиксировать необходимость отката в этот "мир".
modify?V (task back)))

Хронологический откат является не единственной операцией такого рода. Ниже представлены "направленные" (directed) версии соответствующих правил, в которых используется информация о том, в каком именно "мире" имеется утверждение, ставшее причиной конфликта с текущим "миром". Эта информация содержится в слоте prior текущего объекта world.

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