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

         

Онтологический анализ и представление знаний



Следующий этап — определить, с какими видами данных нам придется иметь дело при решении этого класса головоломок. Какие объекты представляют интерес в мире правдолюбцев и лжецов и какими атрибутами эти объекты характеризуются?

По-видимому, для решения задач этого класса нам придется иметь дело со следующими объектами.

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

  • Утверждение, содержащееся в реплике. Это утверждение может быть либо целиком лживым, либо абсолютно правдивым (истинным).

    Немного поразмыслив, мы придем к выводу, что существуют еще и другие объекты, которые необходимо учитывать при решении задач этого класса.

  • Существует среда (мир), которая характеризуется совокупностью наших предположений. Например, существует мир, в котором мы предположили, что А — правдолюбец, а следовательно, высказанное им утверждение (или утверждения) истинно. Это предположение влечет за собой разные следствия, которые образуют контекст данного гипотетического мира.

  • Существует еще нечто, что мы назовем причинами, или причинными связями (reasons), которые связывают высказывания в том или ином гипотетическом мире. Если А утверждает, что "В — лжец", и мы предполагаем, что А — правдолюбец, то это утверждение является причиной (основанием), по которой мы можем утверждать, что в данном гипотетическом мире В — лжец, а следовательно, все утверждения, которые содержатся в репликах, произносимых В., лживы. Отслеживая такие связи между высказываниями, можно восстановить исходное состояние проблемы, если в результате рассуждений мы придем к противоречию.

    Естественно, что эти объекты можно представлять в программе по-разному. Онтологический анализ практически никогда не приводит к единственному способу представления. Для первой версии CLIPS-программы я выбрал следующее представление описанных объектов:

    ;;Объект statement (высказывание) связан с определенным


    ;;персонажем (поле speaker).



    ;;Высказывание содержит утверждение (поле claim).

    ;;Высказывание имеет основание - причину (поле reason),

    ;; по которой ему можно доверять,

    ;;и тэг (tag) - это может быть произвольный

    ;;идентификатор, (deftemplate statement

    (field speaker (type SYMBOL))

    (multifield claim (type SYMBOL))

    (multifield reason (type INTEGER) (default 0))

    (field tag (type INTEGER) (default 1)) )

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

    (statement (speaker A) (claim F A))

    Этот шаблон можно перевести на "человеческий" язык следующим образом: "Существует высказывание, сделанное персонажем А, в котором утверждается, что А лжец и тэг этого высказывания по умолчанию получает значение 1". Обратите внимание на то, что в поле reason также будет установлено значение по умолчанию (это значение равно 0), т.е. мы можем предположить, что никаких предшествующих высказываний, которые могли бы подтвердить данное, в этой задаче не было.

    Обратите внимание, что поля claim и reason имеют квалификатор multifield, поскольку они могут содержать несколько элементов данных (более подробно об этом рассказано в Руководстве пользователя).

    Однако недостаточно только представить в программе высказывания персонажей — нам понадобится также выявить суть содержащихся в них утверждений. Далее, приняв определенное предположение о правдивости или лживости персонажа, которому принадлежит высказывание, можно построить гипотезу об истинности или лживости этого утверждения. С каждым таким утверждением свяжем уникальный числовой идентификатор.

    Утверждение, смысл которого, например, состоит в следующем, ;;Т А ... означает, что А правдолюбец; ;;F А ... означает, что А лжец. ;;Утверждение может иметь под собой ;;основание (reason) - обычно это тэг ;;высказывания (объекта statement) или тэг ;;другого утверждения (объекта claim). ;;Утверждение также характеризуется признаком scope, ;;который может принимать значение "истина" или "ложь", (deftemplate claim



    (multifield content (type SYMBOL))

    (multifield reason (type INTEGER) (default 0))

    (field scope (type SYMBOL)) )

    Например, раскрыв содержимое приведенного выше высказывания в предположении, что А говорит правду, получим следующее утверждение (объект claim):

    (claim (content F A) (reason 1) (scope truth)).

    Таким образом, объект claim наследует содержимое от объекта statement. Последний становится обоснованием (reason) данного утверждения. Поле scope объекта claim принимает значение предположения о правдивости или лживости этого высказывания.

    Еще нам потребуется представление в программе того мира (world), в котором мы в настоящее время находимся. Объекты world порождаются в момент, когда мы формируем определенные предположения. Нужно иметь возможность различать разные множества предположений- и идентифицировать их в программе в тот момент, когда процесс размышлений приводит нас к противоречию. Например, противоречие между высказываниями Т(А) и F(A) отсутствует, если они истинны в разных мирах, т.е. при разных предположениях. Если у вас есть на сей счет сомнения, вернитесь вновь к примерам в самом начале раздела А.4.

    Миры будем представлять в программе следующим образом:

    ;;Объект world представляет контекст,

    ;;сформированный определенными предположениями

    ;;о правдивости или лживости персонажей.

    ;;Объект имеет уникальный идентификатор в поле tag,

    ;;а смысл допущения - истинность или лживость -

    ;;фиксируется в поле scope,

    (deftemplate world

    (field tag (type INTEGER) (default 1))

    (field scope (type SYMBOL) (default truth)) )

    Обратите внимание на то, что при указанных в шаблоне значениях по умолчанию мы можем начинать каждый процесс вычислений с объекта world, имеющего в поле значение 1, причем этот "мир" можно заселить высказываниями персонажей, которых мы предположительно считаем правдолюбцами. Таким образом можно инициализировать базу фактов the-facts для задачи Р0 следующим образом:

    ;; Утверждение, что А лжец.

    (deffacts the-facts

    (world)

    (statement (speaker A) (claim FA)) )

    Если этот оператор deffacts будет включен в тот же файл, что и объявления шаблонов (а также правила, о которых речь пойдет ниже), то после загрузки этого файла в среду CLIPS нам понадобится для запуска программы дать только команду reset.


    Содержание раздела