Пример 5.21. Использование функции save-facts
(clear)
(deftemplate template
(slot a)
(slot b))
(assert (template (a 1) (b 2)))
(assert (simple-factl) (simple-fact2))
(save-facts fl local template simple-factl)
Последовательность действий, приведенная в данном примере, сохраняет в файл f1, находящийся в текущем каталоге, все факты, видимые в текущем модуле и связанные с шаблонами template и simple-factl (как вы помните, после добавления факта simple-factl CLIPS определяет неявно созданный шаблон simple-factl). В результате будет получен текстовый файл со следующим содержанием:
Пример 5.22. Содержание файла fl
(template (а 1) (b 2) } (simple-factl)
В случае успешного выполнения, команда возвращает значение true, a в случае неудачи — соответствующее сообщение об ошибке. Если указанный файл уже существует, он будет перезаписан.
Для загрузки сохраненных ранее файлов используется функция load-facts. Функция имеет следующий формат:
Определение 5.15. Синтаксис команды load-facts
(load-facts <имя-файла>)
Здесь <имя-файла> — имя текстового файла, сохраненного ранее с помощью команды save-facts, содержащего список фактов. Файл со списком фактов можно также создать в любом текстовом редакторе, если вы хорошо разобрались с представлением фактов в CLIPS. Для загрузки сохраненного в предыдущем примере файла выполните:
Пример 5.23. Использование функции load-facts
(load-facts fl)
В случае успешного выполнения команда возвращает значение true, а в случае неудачи — false и соответствующее сообщение об ошибке. Обратите внимание, что если в файле содержатся факты, связанные с явно созданными с помощью конструктора deftemplate шаблонами, то в момент загрузки все необходимые шаблоны должны быть уже определены в системе. Если это условие не будет выполнено, то загрузка фактов закончится неудачно. К счастью, CLIPS также позволяет и загрузку конструкторов из текстового файла, но об этом мы поговорим в следующей главе, после рассмотрения конструктора defrule.
Кроме описанных выше функций и команд работы с шаблонами, фактами и предопределенными фактами, в CLIPS существует еще несколько полезных функций и команд, служащих той же цели. Полное описание этих функций и команд приведено в гл. 15 и 16. Далее, имея достаточный объем знаний о фактах в CLIPS и способах работы с ними, приступим к изучению правил.
ГЛАВА 6. Правила.
CLIPS поддерживает эвристическую и процедурную парадигму представления знаний. Для представления знаний в процедурной парадигме CLIPS предоставляет такие механизмы, как глобальные переменные, функции и родовые функции, речь о которых пойдет в гл. 7, 8 и 10 соответственно. В этой главе мы рассмотрим такой способ представления знаний, как правила. Правила в CLIPS служат для представления эвристик или так называемых "эмпирических правил", которые определяют набор действий, выполняемых при возникновении некоторой ситуации. Разработчик экспертной системы определяет набор правил, которые вместе работают над решением некоторой задачи. Правила состоят из предпосылок и бедствия. Предпосылки называются также ЕСЛИ-частъю правила, левой частью правила или LHS правила (left-hand side of rule). Следствие называется ТО-частью правила, правой частью правила или RHS правила (right-hand side of rule).
Предпосылки правила представляют собой набор условий (или условных элементов), которые должны удовлетвориться, для того чтобы правило выполнилось. Предпосылки правил удовлетворяются в зависимости от наличия или отсутствия некоторых заданных фактов в списке фактов (о котором было рассказано в предыдущей главе) или некоторых созданных объектов, являющихся экземплярами классов, определенных пользователем (о которых будет рассказано в гл. 11). Один из наиболее распространенных типов условных выражений в CLIPS — образцы (patterns). Образцы состоят из набора ограничений, которые используются для определения того, удовлетворяет ли некоторый факт или объект условному элементу. Другими словами, образец задает некоторую маску для фактов или объектов. Процесс сопоставления образцов фактам или объектам называется процессом сопоставления образцов (pattern-matching). CLIPS предоставляет механизм, называемый механизмом логического вывода (inference engine), который автоматически сопоставляет образцы с текущим списком фактов и определенными объектами в поисках правил, которые применимы в данный момент.
Следствие правила представляется набором некоторых действий, которые необходимо выполнить, в случае если правило применимо к текущей ситуации. Таким образом, действия, заданные вследствие правила, выполняются по команде механизма логического вывода, если все предпосылки правила удовлетворены. В случае если в данный момент применимо более одного правила, механизм логического вывода использует так называемую стратегию разрешения конфликтов (conflict resolution strategy), которая определяет, какое именно правило будет выполнено. После этого CLIPS выполняет действия, описанные вследствие выбранного правила (которые могут оказать влияние на список применимых правил), и приступает к выбору следующего правила. Этот процесс продолжается до тех пор, пока список применимых правил не опустеет.
Чтобы лучше понять сущность правил в CLIPS, их можно представить в виде оператора if-then, используемого в процедурных языках программирования, например, таких как Ada или С. Однако условия выражения if-then в процедурных языках вычисляются только тогда, когда поток управления программы непосредственно попадает на данное выражение путем последовательного перебора выражений и операторов, составляющих программу. В CLIPS, в отличие от этого, механизм логического вывода создает и постоянно модифицирует список правил, условия которых в данный момент удовлетворены. Эти правила запускаются на выполнение механизмом логического вывода. С этой стороны правила похожи на обработчики сообщений, присутствующие в таких языках программирования, как, например, Ada или Smalltalk.
Без правил не обойдется ни одна экспертная система, так что правила и язык их представления в экспертной системе можно смело назвать самой важной частью любой экспертной оболочки. Успех экспертной системы во многом определяется тем, насколько удачен способ представления знаний в виде правил, и насколько хорошо им владеет разработчик экспертной системы. Вся данная глава посвящена правилам, их синтаксису и способам построения, их функционированию и назначению, а также приемам их применения.
6.1. Создание правил. Конструктор defrule
Для добавления новых правил в базу знаний CLIPS предоставляет специальный конструктор defrule. В общем виде синтаксис данного конструктора можно представить следующим образом:
Дата добавления: 2021-12-14; просмотров: 356;