Определение 6.1. Синтаксис конструктора defrule


 

(defrule

<имя-правила>

[<комментарии>]

[<определение-свойства-правила>]

<предпосылки > ; левая часть правила

=>

<следствие> ; правая часть правила

)

Имя правила должно быть значением типа symbol. В качестве имени прави­ла нельзя использовать зарезервированные слова CLIPS, которые были пе­речислены ранее. Повторное определение существующего правила приводит к удалению правила с тем же именем, даже если новое определение содер­жит ошибки.

Комментарии являются необязательными, и, как правило, описывают на­значения правила. Комментарии необходимо заключать в кавычки. Эти комментарии сохраняются и в дальнейшем могут быть доступны при про­сматривании определения правила.

Определение правила может содержать объявление свойств правила, кото­рое следует непосредственно после имени правила и комментариев. Более подробно свойства правила будут рассмотрены ниже.

В справочной системе и документации по CLIPS для обозначения предпо­сылок правила чаще всего используется термин "LHS of rule", а для обозна­чения следствия "RHS of rule", поэтому в дальнейшем мы будем использо­вать аналогичную терминологию — левая и правая часть правила.

Левая часть правила задается набором условных элементов, который обычно состоит из условий, примененных к некоторым образцам. Заданный набор образцов используется системой для сопоставления с имеющимися фактами и объектами. Все условия в левой части правила объединяются с помощью неявного логического оператора and. Правая часть правила содержит список действий, выполняемых при активизации правила механизмом логического вывода. Для разделения правой и левой части правил используется сим­вол =>. Правило не имеет ограничений на количество условных элементов или действий. Единственным ограничением является свободная память ва­шего компьютера. Действия правила выполняются последовательно, но то­гда и только тогда, когда все условные элементы в левой части этого прави­ла удовлетворены.

Если в левой части правила не указан ни один условный элемент, CLIPS автоматически подставляет условие-образец initial-fact или initial-object. Таким образом, правило активизируется всякий раз при появлении в

базе знаний факта initial-fact ИЛИ Объекта initial-object. О факте ini­tial-fact было рассказано в предыдущей главе, об объекте initial-object вы узнаете в гл. 11. Если в правой части правила не определено ни одно действие, правило может быть активировано и выполнено, но при этом ни­чего не произойдет.

Более подробно синтаксис левой и правой части правил будет описан далее в этой главе, а пока, в качестве демонстрации применения правил, напи­шем простейшую CLIPS-программу, которая по традиции здоровается со всем миром, сразу после своего рождения. Вы наверно знакомы с текстом подобных программ для процедурных языков программирования, таких как, например, С. На языке CLIPS такая программа будет выглядеть следующим образом:

Пример 6.1. Программа "Hello-World!"

 

(clear)

(defrule

Hello-World

"My FirstCLIPS Rule"

=>

(printout t crlf crlf)

(printout t ******************** crlf)

(printout t "* HELLO WORLD!!! *" crlf)

(printout t ******************** crlf)

(printout t crlf crlf)

(reset)

(run)

Так как это первая наша программа на языке CLIPS, разберем подробно все ее действия и то, каким образом они выполняются.

Функция clear полностью очищает систему, т. е. удаляет все правила, фак­ты и прочие объекты базы знаний CLIPS, добавленные конструкторами, приводит систему в начальное состояние, необходимое для каждой новой программы.

Затем, с помощью конструктора defrule в систему добавляется новое пра­вило с именем Hello-World и соответствующими комментариями. Левая часть правила в данном случае отсутствует, поэтому CLIPS автоматически формирует предпосылки, состоящие из единственного условного выражения (initial-fact). Это выражение является образцом простейшего типа. При запуске программы на выполнение механизм логического вывода CLIPS будет искать в списке фактов факт (initial-fact) и если он там будет най­ден — активизирует правило. Правая часть нашего правила состоит из не­скольких вызовов функции printout. Подробно данная функция будет рас­смотрена в гл. 15. Сейчас же вам необходимо знать только то, что эта функ­ция выводит текстовое выражение в один из потоков вывода. Параметр t задает стандартный поток вывода — экран. Он аналогичен, например, стандартному потоку cout в C++. Выражение clrf служит для перехода на но­вую строку.

Функция reset, как уже упоминалось ранее, очищает список фактов и зано­сит в него факт (initial-fact), что очень важно для нормального функцио­нирования нашей программы. И, наконец, функция run запускает механизм логического вывода и приводит нашу программу в движение. Если описан­ные выше действия были выполнены правильно, то вы должны увидеть ре­зультат, аналогичный приведенному на рис. 6.1 — фразу "hello world!!!" в красивой рамочке из звездочек:

Рис. 6.1.Результат работы программы "Hello-World!"

Чтобы запустить нашу программу на выполнение еще раз, достаточно вы­звать функции reset и run. Эти функции можно вводить с клавиатуры, кро­ме того, они доступны в меню Executionи имеют "горячие" клавиши <Ctrl>+<E> и <Ctrl>+<R> соответственно.

CLIPS поддерживает ряд функций, команд и визуальных средств, необхо­димых для эффективной работы с правилами. Самые основные из них будут рассмотрены в данной главе по мере необходимости. Полный список функ­ций и команд, предназначенный для работы с правилами, будет приведен в гл. 15 и 16 соответственно. Сейчас же рассмотрим визуальный инструмент, доступный пользователям Windows-версии среды CLIPS — Defrule Manager(Менеджер правил). Для запуска менеджера правил в меню Browseвыберите пункт Defrule Manager.Внешний вид этого инструмента показан на рис. 6.2.

Рис. 6.2.Окно менеджера правил

Менеджер отображает список правил, присутствующих в системе в данный момент, и позволяет выполнять над ними ряд операций. Например, с по­мощью кнопки Removeможно удалить выбранное правило из системы, а с помощью Pprintвывести в окне CLIPS определение выделенного правила вместе с введенными комментариями. Общее количество правил отобража­ется в заголовке окна менеджера — Defrule Manager — 1 Items.Другие воз­можности менеджера правил будут рассмотрены позже, по мере необходи­мости.

Как вы уже могли убедиться, разбирая приведенный выше пример неслож­ной программы, довольно тяжело создать даже минимально полезную про­грамму на языке CLIPS, не представляя себе, что именно происходит при выполнении вашей программы. При создании экспертных систем необхо­димо точно знать, как происходит сопоставление образцов, заданных в ле­вой части правила, каким именно образом выбирается правило для выпол­нения и т. д. Именно поэтому в последующих разделах мы остановимся на внутренних алгоритмах представления и обработки правил в CLIPS, а уже затем перейдем к описанию функций и команд, связанных с правилами.

 

6.2. Основной цикл выполнения правил

После того как в систему добавлены все необходимые правила и приготов­лены начальные списки фактов и объектов, CLIPS готов выполнять прави­ла. В традиционных языках программирования точка входа, точка останов­ки и последовательность вычислений явно определяются программистом. В CLIPS поток исполнения программы совершенно не требует явного опре­деления. Знания (правила) и данные (факты и объекты) разделены, и механизм логического вывода, предоставляемый CLIPS, применяет данные к знаниям, формируя список применимых правил, после чего последовательно выполняет их. Этот процесс называется основным циклом выполнения правил (basic cycle of rule execution). Рассмотрим последовательность действий (ша­гов), выполняемых системой CLIPS в этом цикле в момент выполнения нашей программы:

1. Если был достигнут предел выполнения правил или не был установлен текущий фокус, выполнение прерывается. В противном случае, для вы­полнения выбирается первое правила модуля, на котором был установ­лен фокус. Если в текущем плане выполнения нет удовлетворенных пра­вил, то фокус перемещается по стеку фокусов и устанавливается на следующий модуль в списке. Если стек фокусов пуст, выполнение прекращается. Иначе шаг 1 выполняется еще один раз. Более подробно о модулях и фокусе будет рассказано в гл. 12.

2. Выполняются действия, описанные в правой части выбранного правила. Использование функции return может менять положение фокуса в стеке фокусов. Число запусков данного правила увеличивается на единицу, для определения предела выполнения правила.

3. В результате выполнения шага 2 некоторые правила могут быть активи­рованы или дезактивированы. Активированные правила (т. е. правила, условия которых удовлетворяются в данный момент) помещаются в план решения задачи модуля, в котором они определены. Размещение в плане определяется приоритетом правила (salience) и текущей стратегией раз решения конфликтов (эти понятия будут описаны ниже). Дезактивированные правила удаляются из текущего плана решения задачи. Если для правила установлен режим просмотра активаций, то пользователь получит соответствующее информационное сообщение при каждой активации или дезактивации правила (режим просмотра активаций можно установить с помощью диалогового окна Watch Options.Для этого выберите пункт Watchв меню Executionи установите флажок Activations).

4. Если установлен режим динамического приоритета (dynamic salience), то для всех правил из текущего плана решения задачи вычисляются новые значения приоритета. После этого цикл повторяется с шага 1.

Свойства правил

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



Дата добавления: 2021-12-14; просмотров: 347;


Поиск по сайту:

Воспользовавшись поиском можно найти нужную информацию на сайте.

Поделитесь с друзьями:

Считаете данную информацию полезной, тогда расскажите друзьям в соц. сетях.
Poznayka.org - Познайка.Орг - 2016-2024 год. Материал предоставляется для ознакомительных и учебных целей.
Генерация страницы за: 0.011 сек.