Системы порождающих правил для решения проблем. Синтаксис представления правил.
Предпосылки часто называются условиями, а действия – заключениями, поскольку один из видов действий – сделать заключение, если встретилось такое сочетание условий, которое делает истинным или вероятным определенное порождающее правило, как это было показано в главе 3. Иногда используется и другая терминология, согласно которой предпосылки называются левой частью правила, а действия – правой.
Предпосылки обычно бывают представлены в форме вектора объект-атрибут – значение, как, например:
(organism-1 (morphology rod) (aerobicity aerobic)).
В данном случае предпосылка состоит в том, что определенный микроорганизм имеет форму палочки и размножается в воздушной среде.
Правило, которое включает такую предпосылку, на языке CLIPS имеет вид, показанный в листинге 5.1.
Листинг 5.1. Оргправило системы MYCIN, записанное на языке CLIPS.
(defrule diagnosis (patient (name Jones) (organism organism-1)) (organism (name organism-1) (morphology rod) (aerobicity aerobic)) › (assert (organism (name organism-1) (identify enterobacteriaceae) (confidence 0.8)))
На языке CLIPS представление правила имеет следующий формат:
(defrule <наименование правила> <предпосылка1> <предпосылка m > › <действие 1> <действие n>
Перечень предпосылок в таком правиле представляет собой образец вектора, которому должно соответствовать состояние рабочей памяти. Действия, такие как (assert…) в приведенном выше примере, задают изменения, которые должны быть внесены в состояние рабочей памяти. Например, специфицированное в приведенном выше правиле действие добавит в рабочую память новый вектор:
(organism (name organism-1) (identify enterobacteriaceae) (confidence 0.8)).
Таким образом, правило diagnosis означает следующее: если у определенного пациента обнаружена связь с определенным микроорганизмом, который имеет перечисленные в правиле свойства, то мы можем с определенным шансом на успех предполагать, что этот микроорганизм принадлежит такому-то классу. Это правило не является общим, поскольку применимо только к конкретному пациенту (Jones) и конкретному микроорганизму (organism-1). Гораздо чаще нам придется применять правила, которые пригодны для любого пациента и любого микроорганизма. В такие правила поле имени пациента вовсе не включается.
Желание сформировать общие правила требует включения в него переменных, которые играют роль местодержателя. В правиле, представленном в листинге 5.2, такие переменные отличаются от прочих членов наличием префикса? перед именем. Обратите внимание на то, что переменная?pat не появляется в заключительной части правила, а значит, использование поля имени пациента в предпосылках правила действительно является избыточным.
Листинг 5.2. Правило, в котором используются переменные.
(defrule diagnosis (patient (name?pat) (organism?org)) (organism (name?org) (morphology rod) (aerobicity aerobic)) › (assert (organism (name?org) (identify enterobacteriaceae) (confidence 0.8)))
При использовании правила интерпретатором вместо всех одноименных переменных подставляется одно и то же значение.