Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Еремеев А.П., Чибизова Н.В. Методическое пособие по курсу «Экспертные системы».doc
Скачиваний:
118
Добавлен:
02.05.2014
Размер:
1.32 Mб
Скачать
    1. Примеры использования системы

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

  1. Язык искусственного интеллекта clips

    1. Краткая история 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.

    1. Факты, правила и функции clips

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

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

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

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

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

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

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

      1. Факты

Факты – одна из основных форм высокого уровня для представления информации в системе 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))