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

Расширение набора правил – работа с составными высказываниями

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

Т(А) v Т(В)

…или:

F(A) ^ T(B),

Но не будем использовать более сложные утверждения в форме:

F(B) ^ (T(А) v T) B))

Для решения большинства интересных головоломок вполне достаточно простых выражений.

Наибольшие сложности при модификации нашей программы связаны с обработкой дизъюнктивных выражений, поскольку вывод о наличии противоречия может быть сделан только после завершения анализа всех членов операндов дизъюнкции. Например, нет противоречия между F(A) и Т(А) v F(B). Противоречие, которое обнаружится при обработке первого операнда дизъюнкции ДЛ) в предположении F(A), будет локальным в контексте Т(А). Но если мы вернемся к исходной дизъюнкции и попробуем проанализировать контекст F(B), то никакого противоречия обнаружено не будет, и, следовательно, интерпретация найдена.

Реализовать такой анализ локальных и глобальных противоречий можно, добавив в шаблон объекта claim атрибут context:

(def template claim
(multifield content (type SYMBOL))
(multifield reason (type INTEGER)
(default 0)) (field scope (type SYMBOL))
(field context (type INTEGER) (default 0)))

Значение 0 в поле context означает, что мы имеем дело с глобальным контекстом, значение 1 – с локальным контекстом левого операнда, а значение 2 – с локальным контекстом правого операнда дизъюнкции. Пусть, например, анализируется дизъюнкция:

T(A) v F(B)

Причем Т(А) будет истинным в контексте 1, a F(B) – истинным в контексте 2. В этом случае все выражение будет истинным глобально, т.е. в контексте 0.

Структуру объекта world также нужно модифицировать – внести в нее поле context. Это позволит отслеживать ход вычислений. Пусть, например, объект world имеет вид:

(world (tag 1) (scope truth) (context 2)).

Это означает, что данный "мир" создан следующей парой предположений:

  • истинно высказывание, имеющее идентификатор (tag), равный 1, и
  • правый операнд утверждения, которое содержится в этом высказывании, имеет значение "истина".

Новый вариант шаблона объекта world приведен ниже.

Объект world представляет контекст, сформированный определенными предположениями о правдивости или лживости персонажей.

Объект имеет уникальный идентификатор в поле tag, а смысл допущения – истинность или лживость – фиксируется в поле scope.

В поле context сохраняется текущий контекст анализируемого операнда дизъюнкции.

0 означает глобальный контекст дизъюнкции,
1 означает левый операнд,
2 означает правый операнд,
(deftemplate world
(field tag (type INTEGER) (default 1))
(field scope (type SYMBOL) (default truth))
(field context (type INTEGER) (default 0)))
Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.