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

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

Восстановление контекста

При восстановлении контекста придется удалить из рабочей памяти все объекты world, созданные после того объекта, к анализу которого программа возвращается. Удаляются и все утверждения, сформированные на основании высказываний, связанных с удаляемыми объектами. Сами же высказывания (объекты statement) должны быть сохранены и при этом помечены признаком, указывающим, что их нужно в дальнейшем анализировать повторно.

Удаление объектов world.

ЕСЛИ выполняется откат к объекту М, ТО удалить все объекты world, имеющие идентификатор, больший М.

Примечание: правило может активизироваться несколько раз.

(defrule undo-world)
(declare (salience 40))
(world (tag?M) (task back))
?W ← (world (tag?N&:(>?N?M)))
?S ← (statement (tag?N) (done?X&"0)) ›
(retract?W)
(modify?S (done 0))
)
;; Удаление объектов claim.
;; ЕСЛИ выполняется откат к объекту world M,
;; ТО удалить все объекты claim,
;; связанные с удаленными объектами world.
(defrule unclaim
(declare (salience 30))
(world (tag?M) (task back))
?F ← (claim (reason?N&:(>?N?M))) ›
(retract?F)
)

Возобновление процесса вычислений начиная с точки возврата. ЕСЛИ все объекты world, созданные после объекта М, удалены, ТО повторно сформировать объект М, предположив лживость высказывания.

(defrule restart
(declare (salience 20))
?W ← (world (tag?M) (scope truth)
(task back) (context?C&~1)) ›
(retract?W)
(modify?W (scope falsity)
(task check) (context 0))

Последнее из приведенных выше правил вновь запускает процесс анализа того объекта world, к которому выполнен откат. Обратите внимание на то, что это правило имеет самый низкий приоритет. В результате правила, уничтожающие ненужные объекты, будут активизированы в первую очередь.

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

Упражнение 5

Проанализируйте следующую головоломку.

Р7. Встретились два человека, А и В, которые заявляют следующее. А: "В утверждает, что он правдолюбец". В: "А утверждает, что он лжец".

К какой категории следует отнести каждый персонаж? Как следует модифицировать нашу программу, чтобы она могла решать задачи такого вида?

Ниже будут высказаны некоторые соображения, которые подскажут вам, как модифицировать модель для таких задач.

В существующей программе мы прежде всего анализировали непротиворечивость каждого из "миров", т.е. внутреннюю непротиворечивость каждого отдельного высказывания. После этого мы анализировали непротиворечивость одного "мира" другому (или другим).

Включение в постановку задачи высказывания о высказывании (назовем его метавысказыванием) несколько усложняет положение дел. В такой постановке высказывание образует "мир", в котором другое выказывание, а не утверждение, может быть истинным или ложным. Это второе, внутреннее, высказывание должно также формировать собственный "мир".

Рассмотрим высказывание:

А: "В утверждает, что он правдолюбец".

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

А что можно сказать о "мире", в котором А лжет? Мы должны показать, что заявление В о том, что он лжец, приведет к противоречию.

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