Примеры использования системы



В приложении 1 приводятся примеры программ и результаты работы несложных ЭС (учебных прототипов), созданных в среде GURU для оценки надежности поставщика (листинги 1, 2) и прогнозирования цен (листинг 3).

ЯЗЫК ИСКУССТВЕННОГО ИНТЕЛЛЕКТА CLIPS

Краткая история CLIPS

Название языка CLIPS – аббревиатура от C Language Integrated System. Язык был разработан в Центре космических исследований NASA (NASA's Johnson Space Center) в середине 1980-х годов и во многом сходен с языками, созданными на базе LISP и OPS5 [3, 8]. Использование С в качестве языка реализации объясняется тем, что компилятор LISP не поддерживается частью распространенных платформ, а также сложностью интеграции LISP-кода в приложения, которые используют отличный от LISP язык программирования. Хотя в то время на рынке уже появились программные средства для задач искусственного интеллекта, разработанные на языке С, специалисты из NASA решили создать такой продукт самостоятельно. Разработанная ими система в настоящее время находится в открытом доступе (ее можно «скачать» по сети INTERNET), и отметим, что по своим возможностям она не уступает многим гораздо более дорогим коммерческим продуктам.

Первая версия представляла собой, по сути, интерпретатор порождающих правил. Процедурный язык и объектно-ориентированное расширение CLIPS – Object-Oriented Language (COOL) были включены в этот программный продукт только в 1990-х годах. Существующая в настоящее время версия может эксплуатироваться на платформах UNIX, DOS, Windows и Macintosh.

Факты, правила и функции CLIPS

CLIPS включает в себя язык представления порождающих правил и язык описания процедур.

Основными компонентами языка описания правил являются база фактов (fact base) и база правил (rule base). База фактов представляет исходное описание задачи. База правил содержит операторы, которые преобразуют состояния проблемы, приводя его к решению – целевому состоянию.

Машина логического вывода CLIPS сопоставляет факты из базы фактов и правила из базы правил и выясняет, какие из правил можно активизировать. Это выполняется циклически, причем каждый цикл (так называемый продукционный цикл или цикл распознавания действия) состоит из трех основных фаз:

· сопоставление фактов и правил;

· выбор правила, подлежащего активизации;

· выполнение действий, предписанных активным («зажженным») правилом.

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

Факты

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

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

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

Для добавления факта в режиме интерпретации используется команда assert. Например:

CLIPS> (assert (today is Sunday))

<Fact-0>

CLIPS> (assert (weather is warm))

<Fact-1>

Для просмотра фактов, имеющихся в базе фактов, используется команда facts. Например:

CLIPS> (facts)

f-0 (today is Sunday)

f-1 (weather is warm)

Для удаления фактов используется команда retract. Например:

CLIPS> (retract 1)

CLIPS> (facts)

f-0 (today is Sunday)

С помощью команд assert и retract выполняется программное изменение базы фактов.

Команда clear очищает всю базу фактов.

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

Например:

(deffacts today

(today is Sunday)

(weather is warm))

Выражение deffacts имеет формат, аналогичный выражениям в языке LISP. Выражение начинается с команды deffacts, затем приводится имя списка фактов (today в нашем примере), а за ним следуют элементы списка, причем их количество не ограничивается.

Для удаления массива фактов используется команда undeffacts формата (undeffacts today).

Для загрузки фактов из файла необходимо сделать следующее:

· подготовить файл, в котором формируются факты с помощью команды deffacts;

· загрузить этот файл с помощью команды CLIPS load;

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

CLIPS> (reset)

Команда reset сначала очищает базу фактов, а затем добавляет факты из указанных ранее командами deffacts массивов. Она также добавляет в базу единственный системно-определенный факт:

f-0 (initial-fact)

Это делается по умолчанию, поскольку иногда имеет смысл включить в программу правило start rule, которое может быть сопоставлено с этим фактом и позволит выполнить какие-либо нестандартные инициализирующие операции. Однако включать такое правило в программу или нет, решает программист.

Использование шаблонов

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

Пример шаблона:

(deftemplate student

«a student record»

(slot name (type STRING))

(slot age  (type NUMBER) (default 18))

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

Если в программу включено приведенное выше определение шаблона, то выражение

(deffacts students

(student (name fred))

(student (name freda) (age 19))

приведет к тому, что в базу фактов после выполнения команды reset будет добавлена следующая информация:

(student (name fred) (age 18))

(student (name freda) (age 19))

Правила и функции

Один из первичных методов представления знаний в CLIPS – правило. Правила определяют набор действий, которые будут выполнены для данной ситуации. Разработчик ЭС определяет набор правил, которые в совокупности используются для решения проблемы. Правило состоит из предусловия и следствия.

Предусловие правила – это левая сторона (LHS) правила. Предусловие правила – набор условий (состояний или условных элементов), которые должны выполниться для того, чтобы правило можно было активизировать.

Следствие правила – это правая сторона (RHS) правила. Следствие правила – набор действий, которые будут выполнены, в случае если правило активировано. Если активировано более чем одно правило, механизм логического вывода использует стратегию разрешения противоречий.

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

Правила

В языке CLIPS правила имеют следующий формат:

(defrule <имя правила>

<необязательный комментарий>

<необязательное объявление>

<предпосылка 1>

...

<предпосылка m>

=>

<действие 1>

...

<действие n>)

Например:

(defrule chores

«Things to do on Sunday»

(salience 10)

(today is Sunday)

(weather is warm)

=>

(assert (wash car))

(assert (chop wood))

Chores — произвольно выбранное имя правила, предпосылками в условной части правила являются: (today is Sunday) и (weather is warm). Предпосылки сопоставляются интерпретатором с базой фактов и действия, перечисленные в выполняемой части правила (она начинается после пары символов =>) вставят в базу два факта (wash car) и (chop wood) в случае, если правило будет активизировано.

«Things to do on Sunday» – комментарий, который поясняет для чего это правило нужно.

(salience 10) – указывает на степень важности правила. Пусть, например, в программе имеется другое правило с параметром (salience 100), тогда при прочих равных оно имеет наибольшее предпочтение. Параметру salience может быть присвоено любое целочисленное значение в диапазоне [-10000, 10000]. Если параметр salience в определении правила опущен, ему по умолчанию присваивается значение 0.

Переопределение существующего defrule удаляет предыдущий defrule с тем же самым именем, даже если новое определение содержит ошибки.

Обычно в определении правила присутствуют и переменные. Если, например, правило:

(defrule pick-a-chore

«Allocating chores to days»

(today is ?day)

(chore is ?job)

=>

(assert (do ?job on ?day))

будет сопоставлено с фактами (today is Sunday) и (chore is carwash), то в случае активизации оно включит в базу новый факт (do carwash on Sunday).

С подробностями выполнения процесса сопоставления в интерпретаторе CLIS можно познакомиться в Руководстве пользователя, а здесь только отметим, что выражение (do carwash on Sunday) будет сопоставлено с любым из представленных ниже образцов:

(do ? ? Sunday)

(do ? on ?)

(do ? on ?when)

(do $?)

(do $? Sunday)

(do ?chore $?when)

Необходимо помнить, что префикс $? является признаком сегментной переменной, которая связана с сегментом списка. Например, в приведенном выше примере переменная $? будет связана с (on Sunday).

Если за префиксами ? и $? не следует имя переменной, они рассматриваются, как универсальные символы подстановки, которым соответственно может быть сопоставлен любой элемент или сегмент списка.

Определения функций

В языке CLIPS функции конструируются примерно так же, как в языке LISP. Существенное отличие состоит в том, что переменные должны иметь префикс, как это показано в приведенном ниже определении:

(deffunction hypotenuse (?a ?b) (sqrt ( + (* ?a ?a) (* ?b ?b))))

Формат определения функции в CLIPS следующий:

 (deffunction <имя функций (<аргумент> ... <аргумент>)

<выражение>

...

<выражение>)

Функция возвращает результат последнего выражения в списке. Иногда выполнение функции имеет побочные эффекты, как в приведенном ниже примере.

(deffunction init (?day)

(reset)

(assert (today is ?day))

)

В результате после запуска функции на выполнение командой
CLIPS> (init Sunday)

будет выполнена команда reset и, следовательно, очищена база фактов, а затем будет включен новый факт (today is Sunday).

Для запуска программы на CLIPS используется команда run.


Дата добавления: 2018-05-12; просмотров: 357; Мы поможем в написании вашей работы!

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






Мы поможем в написании ваших работ!