CLIPS

Материал из Википедии — свободной энциклопедии
Перейти к: навигация, поиск

CLIPS, (от англ. C Language Integrated Production System) — программная среда для разработки экспертных систем. Синтаксис и название предложены Чарльзом Форги (Charles Forgy) в OPS (Official Production System). Первые версии CLIPS разрабатывались с 1984 года в Космическом центре Джонсона (Johnson Space Center), NASA (как альтернатива существовавшей тогда системе ART*Inference), пока в начале 1990-х не было приостановлено финансирование, и NASA вынудили купить коммерческие продукты.

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

Основная идея состоит в представлении знаний в виде такой формы:

 Правило1:
   ЕСЛИ 
     (выполняются условия1)
   ТОГДА
     (выполнить действия1)
 Правило2:
   ЕСЛИ 
     (выполняются условия2)
   ТОГДА
     (выполнить действия2)
 ...

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

CLIPS является одной из наиболее широко используемых инструментальных сред для разработки экспертных систем благодаря своей скорости, эффективности и бесплатности. Являясь общественным достоянием, она до сих пор обновляется и поддерживается своим изначальным автором, Гэри Райли (Gary Riley).

CLIPS включает полноценный объектно-ориентированный язык COOL для написания экспертных систем. Хотя она написана на языке Си, её интерфейс намного ближе к языку программирования LISP. Расширения можно создавать на языке Си, кроме того, можно интегрировать CLIPS в программы на языке Си[1].

CLIPS разработан для применения в качестве языка прямого логического вывода (forward chaining) и в своей оригинальной версии не поддерживает обратного вывода (backward chaining).

Как и другие экспертные системы, CLIPS имеет дело с правилами и фактами.

Факты[править | править вики-текст]

Информация, на основании которой экспертная система делает логический вывод называется фактами. В CLIPS есть 2 вида фактов: упорядоченные и шаблонные. Шаблонные факты имеют шаблон, задаваемый конструкцией deftemplate. Упорядоченные не имеют явной конструкции deftemplate, однако она подразумевается. Шаблонный факт напоминает структуру в языке C или запись в языке Pascal, поля называются слотами и объявляются конструкцией slot. Например, следующий шаблон объявляет шаблон с именем cars и полями: model, color и number.

 (deftemplate cars
   (slot model)
   (slot color)
   (slot number)
 )

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

 (assert (cars))

добавит в рабочую память упорядоченный факт cars.

Следующая команда поместит шаблонный факт с тремя атрибутами.

  (assert 
    (cars 
      (model "Audi") 
      (color "Black") 
      (number "WY 2576")
    )
  )

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

Правила[править | править вики-текст]

Знания предметной области представляются в CLIPS в виде правил, которые имеют следующую структуру:

 (условия)           {синонимы: антецеденты в логике, 
                      левая часть - LHS в терминах CLIPS}
 =>
 (действия)          {синонимы: консеквенты в логике,
                      правая часть - RHS в терминах CLIPS}

Левая часть правила — это условие его срабатывания, а правая часть — это те действия, которые должны выполниться в случае выполнения условий. Знак => специальный символ, разделяющий LHS и RHS.

Правила объявляются с помощью команды defrule. Пример правила:

 (defrule search-black-audi
   (cars (model "Audi") (color Black))
   =>
   (printout t "Есть черный Audi!" crlf)
  )

Данное правило активируется тогда, когда в рабочей памяти появится факт с атрибутами (model «Audi») и (color Black).

Активация правила не означает его выполнение. Активация правила — это помещение правила в рабочий список правил или agenda в CLIPS.

Чтобы активированные правила выполнились нужно выполнить команду (run).

Машина логического вывода[править | править вики-текст]

Процессом помещения правил в рабочий список и их выполнением управляет машина логического вывода(МЛВ). МЛВ реагирует на определенные события:

Событие Действие
ПОМЕЩЕНИЕ ФАКТОВ В РАБОЧУЮ ПАМЯТЬ 1) Сопоставление фактов с правилами из базы знаний
2) Сопоставление фактов с правилами из рабочего списка правил
УДАЛЕНИЕ ФАКТОВ ИЗ РАБОЧЕЙ ПАМЯТИ 1) Сопоставление фактов с правилами из базы знаний
2) Сопоставление фактов с правилами из рабочего списка правил
ПРИ СОПОСТАВЛЕНИИ НАЙДЕНЫ ПРАВИЛА СООТВЕТСТВУЮЩИЕ ФАКТАМ ИЗ РАБОЧЕЙ ПАМЯТИ Помещение найденных правил в рабочий список правил
В РАБОЧИЙ СПИСОК ПРАВИЛ ДОБАВЛЕНЫ НОВЫЕ ПРАВИЛА рабочий список правил сортируется согласно выбранной стратегии разрешения конфликтов
ПРИ СОПОСТАВЛЕНИИ ФАКТОВ С РАБОЧИМ СПИСКОМ ПРАВИЛ ОБНАРУЖЕНЫ НЕАКТУАЛЬНЫЕ ПРАВИЛА Неактуальные правила (условия не удовлетворяют фактам) удаляются из рабочего списка
ВЫПОЛНЯЕТСЯ КОМАНДА (RUN) Выполняются действия (правая часть) первого в рабочем списке правила.
РАБОЧИЙ СПИСОК ПРАВИЛ СТАЛ ПУСТ Останавливается выполнение правил из рабочего списка

Стратегии разрешения конфликтов[править | править вики-текст]

Человек не всегда может задать полные условия, которые бы удовлетворяли действительности. Существует легенда, согласно которой Диоген Синопский на определение Платона «Человек есть животное о двух ногах, лишённое перьев», общипал курицу и принес к нему в школу, объявив: «Вот платоновский человек!» На что Платон к своему определению вынужден был добавить «…и с широкими ногтями». Когда в базе знаний появляются правила, которые удовлетворяют фактам, но выполняют противоположные действия, то возникает конфликт правил. Например, есть два правила:
1. (Если человек толкнул другого человека — наказать человека за хулиганство)
2. (Если человек толкнул другого человека, на которого ехал грузовик — наградить человека за спасение жизни)
Это два правила будут между собой конфликтовать. Первое правила более общее и оно всегда активируется, если активируется второе. Но первым выполниться должно второе правило. В CLIPS есть несколько стратегий для разрешения таких конфликтов. Но даже если нет возможности выбрать подходящую стратегию для всех случаев, то можно указать приоритеты правилам. Правила с большим приоритетом будут выполняться первыми.

Различные факты могут сделать правило применимым. Применимое правило затем допускается (assert). Факты и правила создаются предварительным объявлением, как показано в примере:

(deffacts trouble_shooting
    (car_problem (name ignition_key) (status on))
    (car_problem (name engine) (status wont_start))
    (car_problem (name headlights) (status work))
 )
(defrule rule1
    (car_problem (name ignition_key) (status on))
    (car_problem (name engine) (status wont_start))
     =>
    (assert (car_problem (name starter) (status faulty))
 )

Версии CLIPS[править | править вики-текст]

Потомками CLIPS являются языки программирования

  • Jess — коммерческий последователь CLIPS, доступен бесплатно для академического использования, переписан на Java, позже развился в других направлениях. Поддерживает обратный вывод.
  • HaleyRules Eclipse — язык правил системы HaleyRules компании Haley Systems Inc. Поддерживает обратный вывод. Проект прикрыт после приобретения фирмой Oracle в декабре 2009 в пользу Oracle Policy Automation[2].
  • FuzzyCLIPS — CLIPS с добавлением концепции значимости (relevancy) в язык. Не поддерживает обратного вывода.
  • EHSIS испанский CLIPS, разработан в Группе Erabaki Факультета Информатики Университета Страны Басков. Поддерживает нечеткую логику как FuzzyCLIPS[3].
  • CLIPS/R2 — новая версия от компании Production Systems Technologies, Inc. обратно совместимая со стандартным CLIPS версий 6.x, но с добавлением алгоритма Rete II, поддержкой обратного вывода и прозрачной поддержкой структур языка C и классов C++.

и другие.

Существующие версии CLIPS для Windows (clipswin.exe) не поддерживают кириллицу (консольная версия CLIPS clipsdos.exe поддерживает только кириллицу в формате UTF-8). Именно отсутствие полноценной поддержки кириллицы и является основной причиной слабого распространения CLIPS в России. В то же время открытость исходных кодов CLIPS позволяет исправить эту ситуацию. В частности, при компиляции из исходников возможно пропатчить их, добавив поддержку koi8-r или ansi1251[4].

Последняя версия — CLIPS 6.3 Beta, выпущена 7 апреля 2008.

См. также[править | править вики-текст]

Примечания[править | править вики-текст]

  1. В Windows программы написанные на других языках могут использовать динамически подключаемую библиотеку CLIPSWin32.DLL.
  2. Siebel Essentials: Bye bye Haley, hello OPA!
  3. Ошибка перевода
  4. Инструкция для подключения поддержки русских кодировок

Ссылки[править | править вики-текст]

Литература[править | править вики-текст]

  • Джозеф Джарратано, Гари Райли «Экспертные системы: принципы разработки и программирование» = Expert Systems: Principles and Programming. — М.: «Вильямс», 2007. — 1152 с. — ISBN 978-5-8459-1156-8
  • Частиков А. П., Гаврилова Т. А., Белов Д. Л. «Разработка экспертных систем. Среда CLIPS.». — СПб.: «БХВ-Петербург», 2003. — 608 с. — ISBN 5-94157-248-4