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. Поддерживает обратный вывод. Проект закрыт после поглощения 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 Beta, выпущена 7 апреля 2008.

См. также

Напишите отзыв о статье "CLIPS"

Примечания

  1. В Windows программы написанные на других языках могут использовать динамически подключаемую библиотеку CLIPSWin32.DLL.
  2. [www.siebel-essentials.com/2009/12/bye-bye-haley-hello-opa.html Siebel Essentials: Bye bye Haley, hello OPA!]
  3. [translate.yandex.net/tr-url/es-ru.ru/erabaki.ehu.es/ehsis/Caracteristicas.php Ошибка перевода]
  4. [www.opennet.ru/tips/info/2420.shtml Инструкция для подключения поддержки русских кодировок]

Ссылки

  • [clipsrules.sourceforge.net/ Страница проекта]
  • [clipsrules.sourceforge.net/WhatIsCLIPS.html Что такое CLIPS] (англ.) — описание проекта на SourceForge
  • [rd13doc.cern.ch/Atlas/Notes/108/Note108-1.html Экспертная система CLIPS — кандидат для ядра диагностической системы]
  • [groups.google.com/group/comp.lang.lisp/browse_frm/thread/53e2f7a89451bca8/de7129d28ebf932c#de7129d28ebf932c Поток в Usenet с обсуждением самой ранней истории CLIPS]
  • [www.ruleworks.co.uk RuleWorks Knowledge Based Systems] — Программирование экспертных систем при помощи правил
  • Managed C++ .NET Framework CLIPS port
  • [www.cs.us.es/software/ страница со ссылками по тематике Clips и искусственного интеллекта в целом] (содержит, в том числе, режимы Clips для Emacs)
  • [sourceforge.net/projects/clipseditor/ CLIPSEditor — редактор для CLIPS]
  • [sourceforge.net/projects/clipsshell/ CLIPSShell — GUI для CLIPS с поддержкой UTF8]
  • график в конце [haleyai.com/wordpress/2008/02/20/haley-art-syntax-lives-on-in-open-source-java-rules/ Haley / ART syntax lives on in open-source Java rules] — Схема пересечений возможностей различных продукционных систем
  • [stackoverflow.com/questions/6613/what-rule-engine-should-i-use 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.


Отрывок, характеризующий CLIPS

– Я почитатель Montesquieu, – сказал князь Андрей. – И его мысль о том, что le рrincipe des monarchies est l'honneur, me parait incontestable. Certains droits еt privileges de la noblesse me paraissent etre des moyens de soutenir ce sentiment. [основа монархий есть честь, мне кажется несомненной. Некоторые права и привилегии дворянства мне кажутся средствами для поддержания этого чувства.]
Улыбка исчезла на белом лице Сперанского и физиономия его много выиграла от этого. Вероятно мысль князя Андрея показалась ему занимательною.
– Si vous envisagez la question sous ce point de vue, [Если вы так смотрите на предмет,] – начал он, с очевидным затруднением выговаривая по французски и говоря еще медленнее, чем по русски, но совершенно спокойно. Он сказал, что честь, l'honneur, не может поддерживаться преимуществами вредными для хода службы, что честь, l'honneur, есть или: отрицательное понятие неделанья предосудительных поступков, или известный источник соревнования для получения одобрения и наград, выражающих его.
Доводы его были сжаты, просты и ясны.
Институт, поддерживающий эту честь, источник соревнования, есть институт, подобный Legion d'honneur [Ордену почетного легиона] великого императора Наполеона, не вредящий, а содействующий успеху службы, а не сословное или придворное преимущество.
– Я не спорю, но нельзя отрицать, что придворное преимущество достигло той же цели, – сказал князь Андрей: – всякий придворный считает себя обязанным достойно нести свое положение.
– Но вы им не хотели воспользоваться, князь, – сказал Сперанский, улыбкой показывая, что он, неловкий для своего собеседника спор, желает прекратить любезностью. – Ежели вы мне сделаете честь пожаловать ко мне в среду, – прибавил он, – то я, переговорив с Магницким, сообщу вам то, что может вас интересовать, и кроме того буду иметь удовольствие подробнее побеседовать с вами. – Он, закрыв глаза, поклонился, и a la francaise, [на французский манер,] не прощаясь, стараясь быть незамеченным, вышел из залы.


Первое время своего пребыванья в Петербурге, князь Андрей почувствовал весь свой склад мыслей, выработавшийся в его уединенной жизни, совершенно затемненным теми мелкими заботами, которые охватили его в Петербурге.
С вечера, возвращаясь домой, он в памятной книжке записывал 4 или 5 необходимых визитов или rendez vous [свиданий] в назначенные часы. Механизм жизни, распоряжение дня такое, чтобы везде поспеть во время, отнимали большую долю самой энергии жизни. Он ничего не делал, ни о чем даже не думал и не успевал думать, а только говорил и с успехом говорил то, что он успел прежде обдумать в деревне.
Он иногда замечал с неудовольствием, что ему случалось в один и тот же день, в разных обществах, повторять одно и то же. Но он был так занят целые дни, что не успевал подумать о том, что он ничего не думал.
Сперанский, как в первое свидание с ним у Кочубея, так и потом в середу дома, где Сперанский с глазу на глаз, приняв Болконского, долго и доверчиво говорил с ним, сделал сильное впечатление на князя Андрея.
Князь Андрей такое огромное количество людей считал презренными и ничтожными существами, так ему хотелось найти в другом живой идеал того совершенства, к которому он стремился, что он легко поверил, что в Сперанском он нашел этот идеал вполне разумного и добродетельного человека. Ежели бы Сперанский был из того же общества, из которого был князь Андрей, того же воспитания и нравственных привычек, то Болконский скоро бы нашел его слабые, человеческие, не геройские стороны, но теперь этот странный для него логический склад ума тем более внушал ему уважения, что он не вполне понимал его. Кроме того, Сперанский, потому ли что он оценил способности князя Андрея, или потому что нашел нужным приобресть его себе, Сперанский кокетничал перед князем Андреем своим беспристрастным, спокойным разумом и льстил князю Андрею той тонкой лестью, соединенной с самонадеянностью, которая состоит в молчаливом признавании своего собеседника с собою вместе единственным человеком, способным понимать всю глупость всех остальных, и разумность и глубину своих мыслей.
Во время длинного их разговора в середу вечером, Сперанский не раз говорил: «У нас смотрят на всё, что выходит из общего уровня закоренелой привычки…» или с улыбкой: «Но мы хотим, чтоб и волки были сыты и овцы целы…» или: «Они этого не могут понять…» и всё с таким выраженьем, которое говорило: «Мы: вы да я, мы понимаем, что они и кто мы ».
Этот первый, длинный разговор с Сперанским только усилил в князе Андрее то чувство, с которым он в первый раз увидал Сперанского. Он видел в нем разумного, строго мыслящего, огромного ума человека, энергией и упорством достигшего власти и употребляющего ее только для блага России. Сперанский в глазах князя Андрея был именно тот человек, разумно объясняющий все явления жизни, признающий действительным только то, что разумно, и ко всему умеющий прилагать мерило разумности, которым он сам так хотел быть. Всё представлялось так просто, ясно в изложении Сперанского, что князь Андрей невольно соглашался с ним во всем. Ежели он возражал и спорил, то только потому, что хотел нарочно быть самостоятельным и не совсем подчиняться мнениям Сперанского. Всё было так, всё было хорошо, но одно смущало князя Андрея: это был холодный, зеркальный, не пропускающий к себе в душу взгляд Сперанского, и его белая, нежная рука, на которую невольно смотрел князь Андрей, как смотрят обыкновенно на руки людей, имеющих власть. Зеркальный взгляд и нежная рука эта почему то раздражали князя Андрея. Неприятно поражало князя Андрея еще слишком большое презрение к людям, которое он замечал в Сперанском, и разнообразность приемов в доказательствах, которые он приводил в подтверждение своих мнений. Он употреблял все возможные орудия мысли, исключая сравнения, и слишком смело, как казалось князю Андрею, переходил от одного к другому. То он становился на почву практического деятеля и осуждал мечтателей, то на почву сатирика и иронически подсмеивался над противниками, то становился строго логичным, то вдруг поднимался в область метафизики. (Это последнее орудие доказательств он особенно часто употреблял.) Он переносил вопрос на метафизические высоты, переходил в определения пространства, времени, мысли и, вынося оттуда опровержения, опять спускался на почву спора.
Вообще главная черта ума Сперанского, поразившая князя Андрея, была несомненная, непоколебимая вера в силу и законность ума. Видно было, что никогда Сперанскому не могла притти в голову та обыкновенная для князя Андрея мысль, что нельзя всё таки выразить всего того, что думаешь, и никогда не приходило сомнение в том, что не вздор ли всё то, что я думаю и всё то, во что я верю? И этот то особенный склад ума Сперанского более всего привлекал к себе князя Андрея.
Первое время своего знакомства с Сперанским князь Андрей питал к нему страстное чувство восхищения, похожее на то, которое он когда то испытывал к Бонапарте. То обстоятельство, что Сперанский был сын священника, которого можно было глупым людям, как это и делали многие, пошло презирать в качестве кутейника и поповича, заставляло князя Андрея особенно бережно обходиться с своим чувством к Сперанскому, и бессознательно усиливать его в самом себе.
В тот первый вечер, который Болконский провел у него, разговорившись о комиссии составления законов, Сперанский с иронией рассказывал князю Андрею о том, что комиссия законов существует 150 лет, стоит миллионы и ничего не сделала, что Розенкампф наклеил ярлычки на все статьи сравнительного законодательства. – И вот и всё, за что государство заплатило миллионы! – сказал он.
– Мы хотим дать новую судебную власть Сенату, а у нас нет законов. Поэтому то таким людям, как вы, князь, грех не служить теперь.
Князь Андрей сказал, что для этого нужно юридическое образование, которого он не имеет.
– Да его никто не имеет, так что же вы хотите? Это circulus viciosus, [заколдованный круг,] из которого надо выйти усилием.

Через неделю князь Андрей был членом комиссии составления воинского устава, и, чего он никак не ожидал, начальником отделения комиссии составления вагонов. По просьбе Сперанского он взял первую часть составляемого гражданского уложения и, с помощью Code Napoleon и Justiniani, [Кодекса Наполеона и Юстиниана,] работал над составлением отдела: Права лиц.


Года два тому назад, в 1808 году, вернувшись в Петербург из своей поездки по имениям, Пьер невольно стал во главе петербургского масонства. Он устроивал столовые и надгробные ложи, вербовал новых членов, заботился о соединении различных лож и о приобретении подлинных актов. Он давал свои деньги на устройство храмин и пополнял, на сколько мог, сборы милостыни, на которые большинство членов были скупы и неаккуратны. Он почти один на свои средства поддерживал дом бедных, устроенный орденом в Петербурге. Жизнь его между тем шла по прежнему, с теми же увлечениями и распущенностью. Он любил хорошо пообедать и выпить, и, хотя и считал это безнравственным и унизительным, не мог воздержаться от увеселений холостых обществ, в которых он участвовал.
В чаду своих занятий и увлечений Пьер однако, по прошествии года, начал чувствовать, как та почва масонства, на которой он стоял, тем более уходила из под его ног, чем тверже он старался стать на ней. Вместе с тем он чувствовал, что чем глубже уходила под его ногами почва, на которой он стоял, тем невольнее он был связан с ней. Когда он приступил к масонству, он испытывал чувство человека, доверчиво становящего ногу на ровную поверхность болота. Поставив ногу, он провалился. Чтобы вполне увериться в твердости почвы, на которой он стоял, он поставил другую ногу и провалился еще больше, завяз и уже невольно ходил по колено в болоте.