CLIPS

CLIPS, (от англ. C Language Integrated Production System) — программная среда для разработки экспертных систем. Синтаксис и название предложены Чарльзом Форги (Charles Forgy) в OPS (Official Production System). Первые версии CLIPS разрабатывались с 1984 года в Космическом центре Джонсона 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 являются следующие языки и среды:

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

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

Последняя версия — CLIPS 6.3, выпущена 17 марта 2015.

Примечания

[править | править код]
  1. В Windows программы написанные на других языках могут использовать динамически подключаемую библиотеку CLIPSWin32.DLL.
  2. Siebel Essentials: Bye bye Haley, hello OPA! Архивировано 12 мая 2014 года.
  3. Ошибка перевода (недоступная ссылка)
  4. Инструкция для подключения поддержки русских кодировок. Дата обращения: 17 августа 2010. Архивировано 18 апреля 2011 года.

Литература

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