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
Потомками 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.
См. также
Примечания
- ↑ В Windows программы написанные на других языках могут использовать динамически подключаемую библиотеку CLIPSWin32.DLL.
- ↑ Siebel Essentials: Bye bye Haley, hello OPA! Архивировано 12 мая 2014 года.
- ↑ Ошибка перевода (недоступная ссылка)
- ↑ Инструкция для подключения поддержки русских кодировок . Дата обращения: 17 августа 2010. Архивировано 18 апреля 2011 года.
Ссылки
- Страница проекта
- Что такое CLIPS (англ.) — описание проекта на SourceForge
- Экспертная система CLIPS — кандидат для ядра диагностической системы
- Поток в Usenet с обсуждением самой ранней истории CLIPS
- RuleWorks Knowledge Based Systems — Программирование экспертных систем при помощи правил
- Managed C++ .NET Framework CLIPS port
- страница со ссылками по тематике Clips и искусственного интеллекта в целом (содержит, в том числе, режимы Clips для Emacs)
- CLIPSEditor — редактор для CLIPS
- график в конце Haley / ART syntax lives on in open-source Java rules — Схема пересечений возможностей различных продукционных систем
- What rule engine should I use? мнения о различных продукционных системах
Литература
- Джозеф Джарратано, Гари Райли. «Экспертные системы: принципы разработки и программирование» = Expert Systems: Principles and Programming. — М.: «Вильямс», 2007. — 1152 с. — ISBN 978-5-8459-1156-8.
- Частиков А. П., Гаврилова Т. А., Белов Д. Л. «Разработка экспертных систем. Среда CLIPS.». — СПб.: «БХВ-Петербург», 2003. — 608 с. — ISBN 5-94157-248-4.