Основы программирования в системе CLIPS.


CLIPS (C Language Integrated Production System) начала разрабатываться в космическом центре Джонсона NASA в 1984 году. Сейчас CLIPS и документация на этот инструмент свободно распространяется через интернет (http://www.ghg.net/clips/CLIPS.html). Язык CLIPS свободен от недостатков предыдущих инструментальных средств для создания ЭС, основанных на языке LISP. Язык CLIPSполучил большое распространение в государственных организациях и учебных заведениях благодаря низкой стоимости, мощности, эффективности и переносимости с платформы на платформу. Например, даже Web-ориентированный инструментарий JESS (JavaExpert System Shell), использующий язык представления знаний CLIPS, приобрел достаточную известность в настоящее время.

Следует отметить, что несмотря на многочисленные преимущества функционального программирования, некоторые задачи лучше решать в терминах объектно-ориентированного программирования (ООП), для которого характерны три основные возможности: ИНКАПСУЛЯЦИЯ (работа с классами), ПОЛИМОРФИЗМ (работа с родовыми функциями, поддерживающими различное поведение функции в зависимости от типа аргументов), НАСЛЕДОВАНИЕ (поддержка абстрактных классов). ООП поддерживает многие языки, в том числе Smalltalk, C++, Java, Common LISP Object System (CLOS). Язык CLIPS, в свою очередь, вобрал в себя основные преимущества С++ и CLOS.

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

Отличительной особенностью CLIPS являются конструкторы для создания баз знаний (БЗ):

defrule определение правил;
deffacts определение фактов;
deftemplate определение шаблона факта;
defglobal определение глобальных переменных;
deffunction определение функций;
defmodule определение модулей (совокупности правил);
defclass определение классов;
defintances определение объектов по шаблону, заданному defclass ;
defmessagehandler определение сообщений для объектов;
defgeneric создание заголовка родовой функции;
defmethod определение метода родовой функции.

Конструкторы не возвращают никаких значений, в отличии от функций, например:

(deftemplate person

(slot name)

(slot age)

(multislot friends))

(deffacts people

(person (name Joe) (age 20))

(person (name Bob) (age 20))

(person (name Joe) (age 34))

(person (name Sue) (age 34))

(person (name Sue) (age 20)))

Пример функции:

(deffunction factorial (?a)

(if (or (not (integerp ? a)) (< ? a0)) then

(printout t "Factorial Error!" crlf)

else

(if (= ? a0) then

else

(*? a (factorial ($-$ ? a1))))))

Правила в CLIPS состоят из предпосылок и следствия. Предпосылки также называют ЕСЛИ-частью правила, левой частью правила или LHS правила (left-hand side of rule). Следствие называют ТО-частью правила, правой частью правила или RHS правила (right-handside of rule).

Пример правила представлен ниже:

(deftemplate data (slot x) (slot y))

(defrule twice

(data (x ? x) (y =(*2 ? x)))

=>)

(assert (data (x2) (y4)); f-0

(data (x3) (y9))); f-1

Здесь самая распространенная в CLIPS функция assert добавляет новые факты в список правил. В противоположность assertфункция retract удаляет факты из списка фактов, например:

(defrule vis11

?doors < — (fit ? wdfit)

(test (eq ? wdfit no))

=>

(assert (EVIDENCE OF MAJOR ACCIDENT))

(retract ? doors))

В этом правиле проверяется наличие факта doors и в случае его отсутствия факт doors удаляется из списка фактов задачи.

Функция modify является также весьма распространенной. Она позволяет в определенном факте поменять значение слота, например,

(deftemplate age (slot value))

(assert (age (value young)))

(modify 0 (value old))

Следующий пример описывает представление данных в виде фактов, объектов и глобальных переменных. Примеры фактов:

(voltage is 220 volt)

(meeting (subject "AI") (chief "Kuzin") (Room "3240"))

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

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

Пример integer: +51 -17
Пример float: 594e2 23.45 +51.0 -17.5e-5

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

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

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

If оператор ветвления;
While цикл с предусловием;
loop-for-count итеративный цикл;
prong объединение действий в одной логической команде;
prong$ выполнение набора действий над каждым элементом поля;
return прерывание функции, цикла, правила и т.д.;
break то же, что и return, но без возвращения параметров;
switch оператор множественного ветвления;
bind создание и связывание переменных.

Функции CLIPS описываются в книгах. Среди логических функций (возвращающих значения true или false ) следует выделить следующие группы:

· функции булевой логики: and, or, not

· функции сравнения чисел: =, >, <,

· предикативные функции для проверки принадлежности проверяемому типу: integerp, floatp, stringp, symbolp, pointerp(относится ли аргумент к xternal-address ), numberp (относится ли аргумент к integer или float ), lexemerp (относится ли аргумент к string или symbol ), evenp (проверка целого на четность), oddp (проверка целого на нечетность), multifildp (является ли аргумент составным полем).

· Функции сравнения по типу и по значению: eq, neq

Среди математических функций следует выделить следующие группы:

· Стандартные: +, -, *, /, max, min, div (целочисленное деление), abs (абсолютное значение), float (преобразование в тип float ), integer (преобразование в тип integer )

· Расширенные: sqrt (извлечение корня), round (округление числа), mod (вычисление остатка от деления)

· Тригонометрические: sin, sinh, cos, cosh, tan, tanh, acos, acosh, acot, acoth, acsc, acsch, asec, asech, asin, asinh, atan, atanh, cot, coth, csc, csch, sec, sech, deg-grad (преобразование из градусов в секторы), deg-rad (преобразование из градусов в радианы), grad-deg (преобразование из секторов в градусы), rad-deg(преобразование из радиан в градусы)

· Логарифмические: log, log10, exp, pi

Среди функций работы со строками следует назвать функции:

str-cat объединение строк,
sym-cat объединение строк в значение типа symbol,
sub-string выделение подстроки,
str-index поиск подстроки,
eval выполнение строки в качестве команды CLIPS,
build выполнение строки в качестве конструктора CLIPS,
upcase преобразование символов в символы верхнего регистра,
lowcase преобразование символов в символы нижнего регистра,
str-compare сравнение строк,
str-length определение длины строки,
check-syntax проверка синтаксиса строки,
string-to-field возвращение первого поля строки.

Функции работы с составными величинами являются одной из отличительных особенностей языка CLIPS. В их число входят:

create$ создание составной величины,
nth$ получение элемента составной величины,
members поиск элемента составной величины,
subset$ проверка одной величины на подмножество другой,
delete$ удаление элемента составной величины,
explode$ создание составной величины из строки,
implode$ создание строки из составной величины,
subseq$ извлечение подпоследовательности из составной величины,
replace$ замена элемента составной величины,
insert$ добавление новых элементов в составную величину,
first$ получение первого элемента составной величины,
rest$ получение остатка составной величины,
length$ определение числа элементов составной величины,
delete-member$ удаление элементов составной величины,
replace-member$ замена элементов составной величины.

Функции ввода-вывода используют следующие логические имена устройств:

stdin устройство ввода,
stdout устройство вывода,
wclips устройство, используемое как справочное,
wdialog устройство для отправки пользователю сообщений,
wdisplay устройство для отображения правил, фактов и т.,п.,
werror устройство вывода сообщений об ошибках,
wwarning устройство для вывода предупреждений,
wtrase устройство для вывода отладочной информации,

Собственно функции ввода-вывода следующие:

open открытие файла (виды доступа r, w, r+, a, wb ),
close закрытие файла,
printout вывод информации на заданное устройство,
read ввод данных с заданного устройства,
readline ввод строки с заданного устройства,
format форматированный вывод на заданное устройство,
rename переименование файла,
remove удаление файла.

Среди двух десятков команд CLIPS следует назвать основные команды при работе со средой CLIPS:

load загрузка конструкторов из текстового файла,
load+ загрузка конструкторов из текстового файла без отображения,
reset сброс рабочей памяти системы CLIPS,
clear очистка рабочей памяти системы,
run выполнение загруженных конструкторов,
save сохранение созданных конструкторов в текстовый файл,
exit  
  выход из CLIPS.

В рамках нашего краткого описания опустим список функций для работы с методами родовых функций и список функций для работы с классами, объектами, слотами, обработчиками сообщений. С этим можно ознакомиться по документации. Список сообщений об ошибках приведен в [ 7.4 ] .

В завершение следует иметь в виду, что CLIPS может не удовлетворительно работать в реальном времени, когда потребуется время реакции менее 0,1 сек.В этом случае надо исследовать на разработанном прототипе механизмы вывода для всего множества правил предметной области на различных по производительности компьютерах. Как правило, современные мощные компьютеры Intel обеспечивают работу с продукционными системами объемом 1000--2000 правил в реальном времени. Веб-ориентированные средства на базе JAVA (системы Exsys Corvid, JESS) являются более медленными, чем, например, CLIPS 6.0 или OPS-2000. Поэтому CLIPS - лучший на сегодня выбор для работы в реальном времени среди распространяемых свободно оболочек ЭС, разработанных на C++.

 



Дата добавления: 2018-05-10; просмотров: 3941;


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

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

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

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