Разработка интеллектуальных информационных систем с использованием CLIPS. Дякин В.Н. - 7 стр.

UptoLike

Составители: 

Для добавления новых правил в базу знаний CLIPS предоставляет специальный конструктор defrule. В общем виде син-
таксис данного конструктора можно представить следующим образом:
(defrule
<имя-правила>
[<комментарии>]
[<определение-свойства-правила>]
<предпосылки> ; левая часть правила
=>
<следствие> ; правая часть правила
)
Имя правила должно быть значением типа symbol. В качестве имени правила нельзя использовать зарезервированные
слова CLIPS, которые были перечислены ранее. Определение правила может содержать объявление свойств правила, кото-
рое следует непосредственно после имени правила и комментариев.
В справочной системе и документации по CLIPS для обозначения предпосылок правила чаще всего используется тер-
мин "LHS of rule", а для обозначения следствия – "RHS of rule", поэтому в дальнейшем мы будем использовать аналогичную
терминологиюлевая и правая часть правила.
Левая часть правила задается набором условных элементов, который обычно состоит из условий, примененных к неко-
торым образцам. Заданный набор образцов используется системой для сопоставления с имеющимися фактами и объектами.
Все условия в левой части правила объединяются с помощью неявного логического оператора and. Правая часть правила
содержит список действий, выполняемых при активизации правила механизмом логического вывода. Для разделения правой
и левой части правил используется символ . Правило не имеет ограничений на количество условных элементов или дейст-
вий. Единственным ограничением является свободная память вашего компьютера. Действия правила выполняются последо-
вательно, но тогда и только тогда, когда все условные элементы в левой части этого правила удовлетворены.
Если в левой части правила не указан ни один условный элемент, CLIPS автоматически подставляет условие образец initial-
fact или initial-object.
После того как в систему добавлены все необходимые правила и приготовлены начальные списки фактов и объектов,
CLIPS готов выполнять правила. В традиционных языках программирования точка входа, точка остановки и последователь-
ность вычислений явно определяются программистом. В CLIPS поток исполнения программы совершенно не требует ясного
определения. Знания (правила) и данные (факты и объекты) разделены, и механизм логического вывода, предоставляемый
CLIPS, применяет данные к знаниям, формируя список применимых правил, после чего последовательно выполняет их. Этот
процесс называется основным циклом выполнения правил (basic cycle of rule execution). Рассмотрим последовательность
действий (шагов), выполняемых системой CLIPS в этом цикле в момент выполнения нашей программы:
1. Если был достигнут предел выполнения правил или не был установлен текущий фокус, выполнение прерывается. В
противном случае для выполнения выбирается первое правила модуля, на котором был установлен фокус. Если в текущем
плане выполнения нет удовлетворенных правил, то фокус перемещается по стеку фокусов и устанавливается на следующий
модуль в списке. Если стек фокусов пуст, выполнение прекращается. Иначе шаг 1 выполняется еще один раз.
2. Выполнение действий, описанных в правой части выбранного правила. Использование функции return может менять
положение фокуса в стеке фокусов. Число запусков данного правила увеличивается на единицу для определения предела
выполнения правила.
3. В результате выполнения шага 2 некоторые правила могут быть активированы или дезактивированы. Активирован-
ные правила (т.е. правила, условия которых удовлетворяются в данный момент) помещаются в план решения задачи модуля,
в котором они определены. Размещение в плане определяется приоритетом правила (salience) и текущей стратегией разре-
шения конфликтов (эти понятия будут описаны ниже). Дезактивированные правила удаляются из текущего плана решения
задачи. Если для правила установлен режим просмотра активаций, то пользователь получит соответствующее информацион-
ное сообщение при каждой активации или дезактивации правила (режим просмотра активаций можно установить с помощью
диалогового окна Watch options. Для этого выберите пункт Watch в меню Execution и установите флажок Activations).
4. Если установлен режим динамического приоритета (dynamic salience), то для всех правил из текущего плана реше-
ния задачи вычисляются новые значения приоритета. После этого цикл повторяется с шага 1.
Свойства правил позволяют задавать характеристики правил до описания левой части правила. Для задания свойства
правила используется ключевое слово declare. Однако правило может иметь только одно определение свойства, заданное с
помощью declare.
<определение-свойства-правила> :: = (declare <свойство-правила>)
<свойство-правила> :: = (salience <целочисленное выражение> ) | (auto-focus TRUE | FALSE)
Свойство правила salience позволяет пользователю назначать приоритет для своих правил. Объявляемый приоритет
должен быть выражением, имеющим целочисленное значение из диапазона от –10 000 до +10 000. Выражение, представ-
ляющее приоритет правила, может использовать глобальные переменные и функции. Однако старайтесь не указывать в
этом выражении функций, имеющих побочное действие. В случае, если приоритет правила явно не задан, ему присваива-
ется значение по умолчанию, т.е. 0.
Значение приоритета может быть вычислено в одном из трех случаев: при добавлении нового правила, при активации
правила и на каждом шаге основного цикла выполнения правил. Два последних варианта называются динамическим приори-
тетом (dynamic salience). По умолчанию значение приоритета вычисляется только во время добавления правила. Для измене-
ния этой установки можно использовать команду set-salience-evaluation.
Каждый метод вычисления приоритета содержит в себе предыдущий (т.е. если приоритет вычисляется на каждом шаге
основного цикла выполнения правил, то он вычисляется и при активации правила, а также при его добавлении в систему).