Eclipse (среда разработки)
- 1 year ago
- 0
- 0
CLIPS , (от англ. C Language Integrated Production System ) — программная среда для разработки экспертных систем . Синтаксис и название предложены (Charles Forgy) в ( Official Production System ). Первые версии CLIPS разрабатывались с 1984 года в Космическом центре Джонсона NASA , как альтернатива существовавшей тогда системе , пока в начале 1990-х не было приостановлено финансирование, и NASA вынудили купить продукты.
CLIPS является продукционной системой . Реализация вывода использует алгоритм Rete .
Основная идея состоит в представлении знаний в виде такой формы:
Правило1: ЕСЛИ (выполняются условия1) ТОГДА (выполнить действия1) Правило2: ЕСЛИ (выполняются условия2) ТОГДА (выполнить действия2) ...
Такое представление близко к человеческому мышлению и отличается от программ, написанных на традиционных алгоритмических языках, где действия упорядочены и выполняются строго придерживаясь алгоритма.
CLIPS является одной из наиболее широко используемых инструментальных сред для разработки экспертных систем благодаря своей скорости, эффективности и бесплатности. Являясь общественным достоянием , она до сих пор обновляется и поддерживается своим изначальным автором, Гэри Райли (Gary Riley).
CLIPS включает полноценный объектно-ориентированный язык COOL для написания экспертных систем. Хотя она написана на языке Си , её интерфейс намного ближе к языку программирования LISP . Расширения можно создавать на языке Си, кроме того, можно интегрировать CLIPS в программы на языке Си .
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 для Windows (clipswin.exe) не поддерживают кириллицу (консольная версия CLIPS clipsdos.exe поддерживает только кириллицу в формате UTF-8). Именно отсутствие полноценной поддержки кириллицы и является основной причиной слабого распространения CLIPS в России. В то же время открытость исходных кодов CLIPS позволяет исправить эту ситуацию. В частности, при компиляции из исходников возможно пропатчить их, добавив поддержку koi8-r или ansi1251 .
Последняя версия — CLIPS 6.3, выпущена 17 марта 2015.