textarchive.ru

Главная > Документ


Название языка CLIPS – аббревиатура от C Language Integrated

Production System. Язык был разработан в центре космических исследований

NASA {NASA’s Johnson Space Center} в середине 1980-х годов и во многом

сходен с языками , созданными на базе LIPS, в частности OPS5 и ART.

Использование C в качестве языка реализации объясняется тем, что компилятор

LISP не поддерживается частью распространенных платформ, а также сложностью

интеграции LISP-кода в приложения, которые используют отличный от LIPS язык

программирования.

CLIPS поддерживает следующие типы данных: integer, float, string, symbol, external-address, fact-address, instance-name,

instance-address.

Пример integer: 594, 23, +51, −17.

2

Пример float: 594e , 23.45, +51.0, −17.5e−5.

String – это строка символов, заключенная в двойные кавычки.

Пример string: "expert", "Phil Blake", "состояние $-0$", "quote=\".

; - начало комментария

Факты – одна из основных форм представления данных в CLIPS (существует также возможность представления данных

в виде объектов и глобальных переменных, но об этом речь пойдет позже). Каждый факт представляет собой определенный

набор данных, сохраняемый в текущем списке фактов – рабочей памяти системы. Список фактов представляет собой уни-

версальное хранилище фактов и является частью базы знаний. Объем списка фактов ограничен только памятью вашего ком-

пьютера. Список фактов хранится в оперативной памяти компьютера, но CLIPS предоставляет возможность сохранять теку-

щий список в файл и загружать список из ранее сохраненного файла.

В системе CLIPS фактом является список неделимых (или атомарных) значений примитивных типов данных. CLIPS

поддерживает два типа фактов – упорядоченные факты (ordered facts) и неупорядоченные факты или шаблоны (non-ordered

facts или template facts). Ссылаться на данные, содержащиеся в факте, можно либо используя строго заданную позицию значения в списке данных для упорядоченных фактов, либо указывая имя значения для шаблонов. Упорядоченные факты состо-

ят из поля, обязательно являющегося данным типа symbol и следующей за ним, возможно пустой, последовательности по-

лей, разделенных пробелами. Ограничением факта служат круглые скобки:

(поле_типа_symbol [поле]*)

Для создания шаблонов, которые впоследствии будут применяться для доступа к полям факта по имени, используется конструктор deftemplate. Конструктор deftemplate аналогичен определениям записей

или структур в таких языках программирования, как Pascal или С.

Конструктор deftemplate задает имя шаблона и определяет последовательность из нуля или более полей неупорядочен-

ного факта, называемых также слотами. Слот состоит из имени, заданного значением типа symbol, и следующего за ним,

возможно пустого, списка полей. Как и факт, слот с обеих сторон ограничивается круглыми скобками. В отличие от упоря-

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

заданы значения по умолчанию. Синтаксис данного конструктора следующий:

(deftemplate <имя-шаблона> [<комментарии>] [<оперделение-слота>*])

Помимо фактов, CLIPS предоставляет еще один способ представления данных – глобальные переменные (globals). В

отличие от переменных, связанных со своим значением в левой части правила, глобальная переменная доступна везде после

своего создания (а не только в правиле, в котором она получила свое значение). Глобальные переменные CLIPS подобны

глобальным переменным в процедурных языках программирования, таких как С или ADA. Однако, в отличие от переменных

большинства процедурных языков программирования, глобальные переменные в CLIPS слабо типизированы. Фактически

переменная может принимать значение любого примитивного типа CLIPS при каждом новом присваивании значения.

С помощью конструктора defglobal в среде CLIPS могут быть объявлены глобальные переменные и присвоены их на-

чальные значения.

(defglobal [<имя-модуля>] <определение-переменной>*)

<определение-переменной> ::= <имя-переменной> = <выражение>

<имя-переменной> ::= ?*<эначение-типа-symbol>*

CLIPS позволяет использовать произвольное количество конструкторов defglobal. Необязательный параметр <имя-

модуля> указывает модуль, в котором должны быть определены конструируемые переменные. Если имя модуля не задано,

то переменные будут помещены в текущий модуль.

Глобальные переменные применяются в любом месте, где могут быть использованы переменные, созданные в левой

части правил с некоторыми исключениями. Во-первых, глобальные переменные не могут использоваться как параметры в

конструкторах deffunction, defmethod или обработчиках сообщений. Во-вторых, глобальные переменные не могут использо-

ваться для получения новых значений в левой части правил.

Неверно: (defrule example (fact ?*x*) =>).

Верно: (defrule example (fact ?y & :(> ?y ?*x*)) =>)

П р и м е р 1.

(defglobal

?*x* = 3

?*y* = ?*x*

?*z* = (+ ?*x* ?*y*)

?*q* = (create$ a b c))

После выполнения данного конструктора в CLIPS появятся 4 глобальные переменные: х, у, z и q. Переменной х при-

сваивается целое значение 3. Переменной у – значение, сохраненное в глобальной переменной х (т.е. 3). Переменной z –

сумма значений х и у (т.е. 6).

Обратите внимание, что переменная у не является указателем на переменную x, просто их значения в данный момент

совпадают. Если изменить значение х, значения переменных у и z, несмотря ни на что, останутся равными 3 и 6 соответст-

венно.

Добавьте еще один конструктор defglobal, объявляющий переменные вещественного и текстового типа, а также пере-

менную со значением типа symbol.

(defglobal

?*d* = 7.8

?*e* = "string"

?*f* = symbol)

При выполнении команды reset все глобальные переменные получают начальные значения, определенные в конструкторе.

Команда ppdefglobal выводит в диалоговое окно системы определение заданной глобальной переменной.

Имя глобальной переменной должно быть задано без вопросительного знака и символов *, т.е. name для переменной

?*name*.

Команда list-defglobals предназначена для отображения в диалоговом окне списка имен всех определенных в системе гло-

бальных переменных.

(list-defglobals [<имя-модуля>])

Если необязательный параметр <имя-модуля> не указан, то данная команда выводит имена глобальных переменных,

определенных в текущем модуле. Если параметр содержит имя конкретного модуля, команда list-defglobal выводит список

переменных, определенных в заданном модуле. Допускается использование символа *. В этом случае команда выведет в

диалоговое окно имена всех глобальных переменные, определенных во всех модулях системы.

Команда show-defglobals, в отличие от команды list-defglobals, выводит в диалоговое окно CLIPS не только имена гло-

бальных переменных, но и их значения. В остальном эти две команды практически идентичны.

(show-defglobals [ <имя-модуля> ])

Команда undefglobal предназначена для удаления определенных пользователем глобальных переменных.

(undefglobal <имя-глобальной-переменной>)

В качестве параметра <имя-глобальной-переменной> допускается использование символа *. В этом случае команда по-

пытается удалить все определенные пользователем глобальные переменные. Если глобальная переменная указана, например,

в определении функции, удаление этой переменной закончится неудачей.

Существуют похожие функции для стандартных операций с конструкторами различных типов (не только для defglobal).

(bind <имя-переменной> <выражение>*)

Параметр выражения является необязательным. Если он не задан, то переменной будет установлено начальное значе-

ние, заданное в конструкторе defglobal. В случае, если выражение было задано, то его значение будет вычислено и результат

присвоен переменной. Если было задано несколько выражений, все они будут вычислены, из их результатов будет составле-

но составное поле, которое будет присвоено глобальной переменной.

Функция bind возвращает значение false в случае, если переменной по какой-то причине не было присвоено никакого

значения. В противном случае функция возвращает значение, присвоенное переменной.

Поскольку переменные в CLIPS слабо типизированы, типы значений, присваиваемые одной и той же переменной, в

разные моменты времени могут не совпадать.

CLIPS поддерживает эвристическую и процедурную парадигму представления знаний. Для представления знаний в

процедурной парадигме CLIPS предоставляет такие механизмы, как глобальные переменные, функции и родовые функции.

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

системы определяет набор правил, которые вместе работают над решением некоторой задачи. Правила состоят из предпосылок и следствия. Предпосылки называются также ЕСЛИ-частью правила, левой частью правила или LHS правила (left-hand

side of rule). Следствие называется ТО-частью правила, правой частью правила или RHS правила (right-hand side of rule).

Предпосылки правила представляют собой набор условий (или условных элементов), которые должны удовлетвориться

для того, чтобы правило выполнилось. Предпосылки правил удовлетворяются в зависимости от наличия или отсутствия некоторых заданных фактов в списке фактов или некоторых созданных объектов, являющихся экземплярами классов, определенных пользователем. Один из наиболее распространенных типов условных выражений в CLIPS – образцы (patterns). Образцы состоят из набора ограничений, которые используются для определения того, удовлетворяет ли некоторый факт или

объект условному элементу. Другими словами, образец задает некоторую маску для фактов или объектов. Процесс сопоставления образцов фактам или объектам называется процессом сопоставления образцов (pattern-matching). CLIPS предоставляет механизм, называемый механизмом логического вывода (inference engine), который автоматически сопоставляет образцы с текущим списком фактов и определенными объектами в поисках правил, которые применимы в данный момент.

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

одного правила, механизм логического вывода использует так называемую стратегию разрешения конфликтов (conflict resolution strategy), которая определяет, какое именно правило будет выполнено. После этого CLIPS выполняет действия, описанные вследствие выбранного правила (которые могут оказать влияние на список применимых правил), и приступает к вы-

бору следующего правила. Этот процесс продолжается до тех пор, пока список применимых правил не опустеет.

Чтобы лучше понять сущность правил в CLIPS, их можно представить в виде оператора IF-THEN, используемого в

процедурных языках программирования, например, таких как Ada или С. Однако условия выражения IF-THEN в процедурных языках вычисляются тогда, когда поток управления программой непосредственно попадает на данное выражение путем

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

логического вывода создает и постоянно модифицирует список правил, условия которых в данный момент удовлетворены.

Эти правила запускаются на выполнение механизмом логического вывода. С этой стороны правила похожи на обработчики

сообщений, присутствующие в таких языках программирования, как, например, Ada или SmallTalk.

Для добавления новых правил в базу знаний 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.

Каждый метод вычисления приоритета содержит в себе предыдущий (т.е. если приоритет вычисляется на каждом шаге

основного цикла выполнения правил, то он вычисляется и при активации правила, а также при его добавлении в систему).



Скачать документ

Похожие документы:

  1. Инструментальные средства конструирования экспертных систем

    Методическое пособие
    ... рассматривается современный язык искусственного интеллекта CLIPS (C LanguageIntegrated Production System ... 4.ЯЗЫК ИСКУССТВЕННОГО ИНТЕЛЛЕКТА CLIPS 4.1.Краткая история CLIPSНазваниеязыкаCLIPSаббревиатураот C LanguageIntegrated System. Язык был ...
  2. Язык и межкультурная коммуникация в современном информационном пространстве материалы i международной научно-практической конференции школьников и студентов

    Документ
    ... to the clipping of communicative ... languages. Любой язык живет в историческом времени, то есть изменяется от ... quadratic regulator, integral function, calculations ... ныне полузабытой аббревиатурой ЭВМ, компьютер ... русского языка в английский язык. В названной ...
  3. Язык и межкультурная коммуникация в современном информационном пространстве материалы i международной научно-практической конференции школьников и студентов

    Документ
    ... to the clipping of communicative ... languages. Любой язык живет в историческом времени, то есть изменяется от ... quadratic regulator, integral function, calculations ... ныне полузабытой аббревиатурой ЭВМ, компьютер ... русского языка в английский язык. В названной ...
  4. «новые возможности общения достижения лингвистики переводоведения и технологии преподавания языков»

    Документ
    ... от боль, далее от праславянской формы, от ... это наличие в текстах аббревиатур или сокращений, которые ... языка; поэтому их интересуют не названные ... publish “radio clips” and other ... bilingual CLIL (Content LanguageIntegrated Learning) track. In ...
  5. «новые возможности общения достижения лингвистики переводоведения и технологии преподавания языков»

    Документ
    ... от боль, далее от праславянской формы, от ... это наличие в текстах аббревиатур или сокращений, которые ... языка; поэтому их интересуют не названные ... publish “radio clips” and other ... bilingual CLIL (Content LanguageIntegrated Learning) track. In ...

Другие похожие документы..