Программы для языка clips + видео обзор

Clips экспертная система примеры

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

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

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

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

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

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

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

Содержание

Факты [ править | править код ]

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

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

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

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

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

Правила [ править | править код ]

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

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

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

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

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

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

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

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

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

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

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

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

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

Потомками CLIPS являются следующие языки и среды:

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

Рассмотрим пример создания небольшой экспертной системы.

Сначала необходимо определить базу знаний нашей ЭС. Пусть это будет например выбор ноутбука.

Для начала необходимо определиться с габаритами ноутбука. Это может быть малогабаритный нетбук или ноутбук имеющий стандартные размеры. Если был выбран вариант «нетбук», то далее необходимо уточнить, на базе какого ЦП работает данный нетбук. После этого можно делать вывод о модели нетбука.

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

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

Если же нужен ноутбук не «стильный» то далее следует выбрать, будет ли экран иметь диагональ 17 дюймов. После этого также возможен вывод модели.

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

(goal is model.notebook)

(legalanswers are yes no)

(rule (if small is yes) (then note.size is small))

(rule (if small is no) (then note.size is normal))

(question small is «Vam nuzhen o4en malenkiy notebook?»)

(rule (if note.size is small and atom is yes) (then model.notebook is «ASUS EeePC 901»))

(rule (if note.size is small and atom is no) (then model.notebook is «ASUS EeePC 900 with CeleronM»))

(question atom is «Vam nuzhen notebook na processore ATOM?»)

(rule (if note.size is normal and gaming is yes) (then type.notebook is game))

(rule (if note.size is normal and gaming is no) (then type.notebook is other))

(question gaming is «Vam nuzhen igrovoy notebook?»)

(rule (if type.notebook is game and geforce is yes) (then model.notebook is «ASUS G2Sv»))

(rule (if type.notebook is game and geforce is no) (then model.notebook is «ASUS M50Sv»))

(question geforce is «Vam nuzhna topovaya videokarta GeForce 9650M GT?»)

(rule (if type.notebook is other and style.book is yes) (then common.stylish is stylish))

(rule (if type.notebook is other and style.book is no) (then common.stylish is common))

(question style.book is «Vam nuzhen stilniy notebook?»)

(rule (if common.stylish is stylish and leather is yes) (then model.notebook is «ASUS S6F LEATHER COLLECTION»))

(rule (if common.stylish is stylish and leather is no) (then model.notebook is «ASUS LAMBORGHINI VX3»))

(question leather is «Vam nuzhen notebook obshitiy naturalnoy kozhey?»)

(rule (if common.stylish is common and big.screen is yes) (then model.notebook is «ASUS A7U»))

(rule (if common.stylish is common and big.screen is no) (then model.notebook is «ASUS F5N»))

(question big.screen is «Vam nuzhen notebook s bolshim ekranom. 17inch?»)

(answer is «Ya dumayu 4to vam bolshe vsego podhodit notebook » model.notebook))

Программы для языка clips

Далее необходимо сконструировать правила, которые будут работать с нашей базой знаний.

Правило определяющее последовательность в которой наш эксперт будет задавать вопросы определим следующим правилом.

Таким образом, при первой активации этого правила будет добавлен факт (goal is common.stylish), правило вносит факты с конца, то есть те вопросы, с которыми необходимо определиться в последнюю очередь вносятся первыми. И так после всех активаций правила propagate-goal мы получаем факты добавленные в следующей последовательности

(goal is common.stylish)

(goal is type.notebook)

Теперь нужно правило которое будет вести диалог с пользователем и делать соответствующие изменения в базе фактов.

(declare (salience 10))

Так как мы определились с ответом и сделали соответствующий вывод то необходимо правило которое бы удалило противоположное решение.

(declare (salience 20))

Правило которое обработает ответ и найдет в базе знаний соответствующий вывод выглядит так

(declare (salience 20))

Пользователь на вопрос, будет ли маленьким ноутбук, ответил нет, ЭС делает вывод что ноутбук имеет обычные габариты. Добавляется соответствующий факт (variable note.size is normal).

Далее активируется правило remove-rule-no-match которое удаляет из БЗ все решения связанные с противоположным ответом note.size is small, таким образом, будут удалены

(rule (if note.size is small and atom is yes) (then model.notebook is «ASUS EeePC 901»))

(rule (if note.size is small and atom is no) (then model.notebook is «ASUS EeePC 900 with CeleronM»)).

Так как мы определились с габаритами, активируется еще одно правило, которое редактирует базу знаний.

(declare (salience 20))

В нашем случае будут отредактированы строки

(rule (if note.size is normal and gaming is yes) (then type.notebook is game))

(rule (if note.size is normal and gaming is no) (then type.notebook is other))

И в результате они будут выглядеть так

(rule (if gaming is yes) (then type.notebook is game))

(rule (if gaming is no) (then type.notebook is other)).

Это редактирование приведет к активации правила propagate-goal и будет определена новая цель.

Процесс повторяется, задается вопрос, пользователь отвечает. Базу фактов добавляется факт по ответу пользователя (variable gaming is yes). Активируются правила remove-rule-no-match, rule-satisfied, в результате в базе фактов (variable type.notebook game) и снова активация remove-rule-no-match, удаляя не подходящие выводы

(rule (if type.notebook is other and style.book is yes) (then common.stylish is stylish))

(rule (if type.notebook is other and style.book is no) (then common.stylish is common)).

Затем активируется правило modify-rule-match что приводит к модификации выводов

(rule (if type.notebook is game and geforce is yes) (then model.notebook is «ASUS G2Sv»))

(rule (if type.notebook is game and geforce is no) (then model.notebook is «ASUS M50Sv»))

(rule (if geforce is yes) (then model.notebook is «ASUS G2Sv»))

(rule (if geforce is no) (then model.notebook is «ASUS M50Sv»)).

Процесс повторяется, пользователь определяет какую бы он хотел видеокарту, его выбор приводит в действие сразу несколько правил которые выполняются последовательно rule-satisfied, remove-rule-no-match после чего в базе фактов добавляется (variable model.notebook is «ASUS G2Sv»). Это и есть наш конечный результат, что бы обработать его применим правило

(declare (salience 30))

В результате активации этого правило мы получим вывод ЭС

Ya dumayu 4to vam bolshe vsego podhodit notebook ASUS G2Sv.

Исходный текст программы:

;;; Asus Notebook Selector Expert System Inc. v0.5b

;;; Eta sistema vybiraet notebook iz modelnogo ryada ASUS.

Введение
Решение

Давайте формализуем процесс диагностики неисправности компьютера.
В первую очередь следует задать вопросы, что бы определить тип возможной неисправности.

А-Загружается ли у вас компьютер?
Q-Нет
A-Включено ли питание.
Q- Да.
А- Обратитесь к системному администратору.

Вот такую нехитрую систему попробуем реализовать.

Реализация

Опишем вопросы на каком либо языке программирования.
По сути можно это сделать и на ASM. Но мы же не программисты.Мы спецы в своей области (с тем же успехом можно реализовать диагностику здоровья, а врач, который кодит на асме редкость). Значит надо выбрать язык «заточенный» под экспертные системы. Где не надо думать, сколько памяти под массив выделить и т.д.
Побродив по просторам интернета останавливаемся на языке CLIPS (можно выбрать было бы и LISP, но остановимся на CLIPS).
CLIPS работаетс правилами и фактами. Различные факты могут сделать правило применимым. Применимое правило затем допускается (assert). Факты и правила создаются предварительным объявлением.

Опишем в правилах языка CLIPS правило:

После того как пользователь ответил, срабатывает assert, после чего правило «срабатывает».
Полльзователь на вопрос загружется ОС ответил «Нет». Значит проверяем включено ли питание.

Заключение

Данная статья не подлежит комментированию, поскольку её автор ещё не является полноправным участником сообщества. Вы сможете связаться с автором только после того, как он получит приглашение от кого-либо из участников сообщества. До этого момента его username будет скрыт псевдонимом.

Источник

Раздел 6. Практика применения языка CLIPS для построения экспертных систем

1 Раздел 6. Практика применения языка CLIPS для построения экспертных систем 6.1.Введение Если у вас есть проблема или задача, которую нельзя решить самостоятельно вы обращаетесь к знающим людям, или к экспертам, т.е. к тем, кто обладает знаниями. Напомним, термин «системы, основанные на знаниях» (knowledge-based systems появился в 1976 году одновременно с первыми системами, аккумулирующими опыт и знания экспертов. Это были экспертные системы MYCIN и DENDRAL для медицины и химии. Они ставили диагноз при инфекционных заболеваниях крови и расшифровывали данные масс-спектрографического анализа. Экспертные системы появились в рамках исследований по искусственному интеллекту. Этот прорыв произошел, когда на смену поискам универсального алгоритма мышления и решения задач исследователям пришла идея моделировать конкретные знания специалистов-экспертов. Так в США появились первые коммерческие системы, основанные на знаниях, или экспертные системы (ЭС. Эти системы по праву стали первыми интеллектуальными системами, и до сих пор единственным критерием интеллектуальности является наличие механизмов работы со знаниями. Так появился новый подход к решению задач искусственного интеллекта представление знаний. При изучении интеллектуальных систем традиционно возникает вопрос что же такое знания и чем они отличаются от обычных данных, десятилетиями обрабатываемых на компьютерах. Данные это информация, полученная в результате наблюдений или измерений отдельных свойств (атрибутов, характеризующих объекты, процессы и явления предметной области. Знания это связи и закономерности предметной области (принципы, модели, законы, полученные в результате практической деятельности и профессионального опыта, позволяющего специалистам ставить и решать задачи в данной области. Можно сказать, что знания это хорошо структурированные данные, или данные о данных, или метаданные. В настоящее время разработаны десятки моделей (или языков представления знаний для различных предметных областей. Большинство из них может быть сведено к следующим классам: продукционные модели; семантические сети; фреймы; формальные логические модели. Наиболее распространенной является продукционная модель. Продукционная модель или модель, основанная на правилах, позволяет представить знания в виде предложений типа «Если (условие, то (действие». Под «условием» (антецедентом понимается некоторое предложение-образец, по которому осуществляется поиск в базе знаний, а под «действием» (консеквентом действия, выполняемые при успешном исходе поиска. Они могут быть промежуточными, выступающими далее как условия, и терминальными или целевыми, завершающими работу системы. Внутри консеквента могут также генерироваться и добавляться в базу данных новые факты, которые были получены, например, результате вычислений или взаимодействия с пользователем. Чаще всего вывод на такой базе знаний бывает прямой (от данных к поиску цели или обратный (от цели для ее подтверждения к данным. Данные это исходные факты, хранящиеся в базе фактов, на основании которых запускается машина вывода или

6 Будьте внимательны со скобками. В том случае, если вы правильно ввели команду, в список фактов добавиться факт (weather is fine и появится результат выполнения: = f-0 (weather is fine означающий, что факт был добавлен в систему и получил номер 0. При успешном выполнении функция assert возвращает адрес последнего добавленного факта. Если во время добавления некоторого факта произошла ошибка, команда прекращает свою работу и возвращает значение FALSE. Проверить текущее состояние списка фактов можно либо посредством ввода в диалоговом окне команды (facts, либо вызвав пункт меню Window 1 Fact. (см. рис.6.4. Во втором случае откроется окно со списком фактов. При добавлении факта можно использовать вызовы функций, например выполнение: (assert (totalcost (* вызовет функцию умножения и ее результат запишется в качестве поля факта. При этом в память добавится факт (totalcost 130. Для очистки памяти среды используйте команду (clear Рис 6.4. Вызов окна со списком фактов Задания для самостоятельной работы: 1. Выполните самостоятельно следующий набор команд: (clear (assert (color red

7 (assert (color blue(value (+ 3 4 (assert (suggest Turn on the left 2. Выведите список фактов в диалоговое окно, убедитесь, что все факты добавлены верно. Обратите внимание на факт Value. 3. Самостоятельно придумайте и добавьте факт означающий, что лампа в коридоре включена Функция retract удаление фактов Для удаления фактов из текущего списка фактов в системе CLIPS предусмотрена функция retract. Каждым вызовом этой функции можно удалить произвольное число фактов. В случае если был включен режим просмотра изменения списка фактов, то соответствующее информационное сообщение будет отображаться в окне CLIPS при удалении каждого факта. Синтаксическую структуру вызова функции retract можно представить следующим образом: (retrасt или (retrасt * Аргумент может являться либо переменной, связанной с адресом факта (адрес факта возвращается командой assert, либо индексом факта без префикса (например, 3 для факта с индексом f-3, либо выражением, вычисляющим этот индекс (например, (+ 1 2 для факта с индексом f-3. Если в качестве аргумента функции retract использовался символ * (звездочка, то из текущего списка будут удалены все факты. Функция retract не имеет возвращаемого значения. Рассмотрим работу функции retract на примере. Перейдите в диалоговое окно CLIPS, (см. рис. 1 и введите следующие команды: (clear (assert (а (b (с (d (e (f (retract 0 (+ 0 2 ( Результатом выполнения приведенной выше последовательности команд будет: 1. Очистка списка фактов. 2. Добавление в систему шести фактов. 3. Удаление из системы фактов с номерами 0, 2 и 4. Обратите внимание, как меняется список фактов в окне Facts с каждой выполненной командой. При успешном выполнении указанных команд в списке останутся факты (b, (d и (f Конструктор deffacts Конструктор deffacts позволяет определить набор фактов, которые автоматически будет добавлять в список фактов при выполнении сброса среды CLIPS (команда reset. Синтаксическая схема конструктора deffacts: (deffacts Обратите внимание, что в памяти системы может быть несколько списков автоматически добавляемых фактов, и все они будут внесены в список. Например: (deffacts AutoFactListNumber1 ; имя первого списка фактов (code 1

8 (temp 10 (state working (deffacts InitFactList ;имя второго списка фактов (usemargin TRUE (defaultcolor black Обратите также внимание на то, что имя списка фактов может быть любым допустимым значением типа symbol и служит более в качестве информативного атрибута, нежели как идентификатор. При выполнении сброса среды (команда reset в память системы будут добавлены 5 фактов: 1. (code 1 2. (temp (state working 4. (usemargin TRUE 5. (defaultcolor black Кроме явно заданных фактов, CLIPS также автоматически добавляет предопределенный факт (initial-fact каждый раз при выполнении команды (reset. Факт (initial-fact может использоваться для определения момента запуска механизма логического вывода, а также неявно присутствует в правилах, для которых не задана предпосылка (см. ниже Неупорядоченные факты (шаблоны Как было оговорено выше, неупорядоченные факты в CLIPS похожи на структуры (struct в языке C или записи (record в языке Pascal. Шаблон факта состоит из имени факта и определения полей для хранения данных, которые называются слотами. Шаблоны полезно использовать для описания какой-либо сущности, имеющей набор атрибутов. Например, если перед нами стоит цель внести систему информацию об автомобиле, то его слотами могут в простом случае являться цвет и марка. Для определения абстрактной структуры шаблона служит специальный конструктор deftemplate. Синтаксическая схема использования конструктора в простом случае может быть представлена в следующем виде: (deftemplate [ Необязательный комментарий ] Слот может быть простым или составным. В простом слоте может быть сохранено одно значение примитивного типа CLIPS, в составном слоте может храниться список из нескольких примитивных типов. Ключевыми словами для определения назначения слота являются slot для простого слота и multilslot для составного. Итак, в простом случае состоит из: ключевого слова slot или multislot, определяющего тип слота; имени слота, которое является значением типа symbol. необязательного ограничения на тип значения, хранимого в слоте. = ( Slot / multislot Рассмотрим пример шаблона для фактов, описывающих автомобиль. Перейдите в

9 диалоговое окно CLIPS (см. рис. 1. Введите команду (clear для очистки среды. Затем введите конструктор: (deftemplate car This is template for describing a car (slot color (slot model (multislot owner В этом примере мы создали абстрактный шаблон с именем car, в котором имеется 2 простых слота для хранения цвета и модели автомобиля и один составной слот для хранения данных о владельце. В случае успешного создания шаблона, оболочка вернется в режим ожидания ввода без каких-либо сообщений. В противном случае мы получим сообщение об ошибке. В случае ошибки внимательно проверьте расстановку скобок в теле конструктора. Рис Результат создания шаблона car и окно менеджера шаблонов. Для просмотра списка шаблонов в системе на текущий момент воспользуйтесь визуальным инструментом Deftemplate Manager, который находится в меню Browse. Открыв Deftemlate Manager, убедитесь, что в списке шаблонов имеется только что определенный шаблон Car. Существует возможность вывести содержимое шаблона в диалоговое окно, нажав кнопку Pprint в окне Deftemlate Manager (рис. 5. После определения шаблона, мы можем вносить информацию об автомобилях в виде фактов. Неупорядоченный факт определяется путем указания имени его шаблона с последующим перечислением имен и значений слотов. Например, неупорядоченным фактом является следующая конструкция: (car (color red (model Ford (owner Petrov Sergey. Перейдите в диалоговое окно и введите следующий вызов функции assert (обратите внимание, что CLIPS регистрозависимый язык:

10 (assert (car (color red (model Ford (owner Petrov Sergey ;скобка закрывает факт ; скобка, закрывающая вызов функции assert (assert (car (color white (model Opel (owner Ivanov Dima ; скобка, закрывающая вызов функции assert Проверьте добавление фактов в систему. Обратите внимание, что для всех фактов мы используем одно и то же имя шаблона. Для факта не существует имени в его классическом понимании. Идентификатором факта служит его индекс или адрес. Задания для самостоятельной работы 1. Добавьте в систему еще несколько фактов об автомобилях ваших друзей. 2. Определите и внесите в систему шаблон, описывающий мобильный телефон (модель, цвет, тип корпуса. 3. Добавьте в систему несколько моделей мобильных телефонов. Совет: Сохраняйте определение разработанных шаблонов и команд в отдельном текстовом файле они понадобятся вам в дальнейшем при изучении языка Команды modify, reset, clear Команда modify изменение шаблонного факта. Для изменения шаблонного факта служит команда modify. В качестве параметра команда принимает определение факта (переменная-адрес или индекс факта, а также новые значения определенных слотов. Например, выполним последовательно команды: (clear (deftemplate weather (slot temperature (slot windspeed (assert (weather (temperature 10 (windspeed 0 (modify 0 (temperature 20 Приведенные выше команды определяют шаблон weather, добавляют в систему факт о температуре и скорости ветра, а затем командой modify производятся изменения значения слота temperature. Проследите за выполнением команды modify, включив трассировку фактов, как показано на рис. 3. По сути, команда удаляет существующий факт и добавляет новый.

11 Важно! При выполнении команды modify индекс факта изменяется! Существует множество дополнительных функций для работы с фактами. Их описание и примеры использования можно найти в on-line документации, а также в рекомендованной литературе. Команда reset. Команда (reset очищает список фактов, а затем добавляет в него факты, объявленные конструкторами deffacts, включая факт (initial-fact. Обычно используется в сочетании с командой (run для перезапуска написанной программы. Команда clear. В отличие от команды (reset, команда (clear выполняет глубокую очистку выполняемой среды. Очищаются не только факты, но также все определенные списки, правила переменные, шаблоны. Команда (clear не добавляет в память системы никаких фактов. 6.5.Правила Правила в CLIPS служат для представления эвристик или так называемых «эмпирических правил», которые определяют набор действий, выполняемых при возникновении некоторой ситуации. Правила состоят из предпосылок и действия. Предпосылки правила представляют собой набор условий (или условных элементов, которые должны удовлетвориться, для того чтобы правило выполнилось. Предпосылки правил удовлетворяются в зависимости от наличия или отсутствия некоторых заданных фактов в списке фактов (о котором было рассказано в предыдущей главе или некоторых созданных объектов, являющихся экземплярами классов, определенных пользователем (о которых будет показано ниже. Один из наиболее распространенных типов условных выражений в CLIPS образцы (patterns. Образцы состоят из набора ограничений, которые используются для определения того, удовлетворяет ли некоторый факт или объект условному элементу. Другими словами, образец задает некоторую маску для фактов или объектов. Процесс сопоставления образцов фактам или объектам называется процессом сопоставления образцов (pattern-matching. CLIPS предоставляет механизм, называемый механизмом логического вывода (inference engine, который автоматически сопоставляет образцы с текущим списком фактов и определенными объектами в поисках правил, которые применимы в данный момент Использование конструктора defrule Для объявления и добавления новых правил в базу используется конструктор defrule. Синтаксическая схема конструктора может быть представлена следующим образом: (defrule [ ] [ ] ; левая часть правила ; спец. символ ; правая часть правила Имя правила должно являться значением типа symbol и не может быть зарезервированным словом языка CLIPS. В случае повторного объявления правила с одинаковым именем, старое правило будет удалено, даже если новое правило не возможно будет добавить вследствие синтаксической ошибки или по любым другим причинам Комментарий является необязательным обычно в нем описывают назначения правила. Комментарий должен являться значением типа string, значения комментария

12 сохраняется вместе с правилом. Определение свойства правила состоит из ключевого слова declare, и последующего за ним указания свойства. У правила может быть два свойства salience и auto-focus. = (declare = (salience или (auto-focus Свойство salience позволяет пользователю назначать определенный приоритет для своих правил. Объявляемый приоритет должен быть выражением, имеющим целочисленное значение из диапазона от до Выражение, представляющее приоритет правила, может использовать глобальные переменные и функции. Однако лучше не использовать в этом выражении функций, имеющих побочное действие. В случае если приоритет правила явно не задан, ему присваивается значение по умолчанию 0. Чем больше число, определяющее приоритет, тем выше приоритет у правила. Значение приоритета может быть вычислено в одном из трех случаев: 1. при добавлении нового правила; 2. при активации правила; 3. на каждом шаге основного цикла выполнения правил. Два последних варианта называются динамическим приоритетом (dynamic salience. По умолчанию значение приоритета вычисляется только во время добавления правила. Для изменения этой установки можно использовать диалоговое окно пункта меню Execution Options. В появившемся диалоговом окне укажите необходимый режим вычисления приоритета с помощью раскрывающегося списка Salience Evaluation, как показано на рис Рис.6.6. Окно настройки параметров механизма логического вывода Свойство auto-focus используется при многомодульной архитектуре построения программ и его рассмотрение выходит за рамки данного пособия. Предпосылка или левая часть правила задается набором условных элементов, который обычно состоит из условий, примененных к некоторым образцам. Заданный набор образцов используется системой для сопоставления с имеющимися фактами и объектами. Все условия в левой части правила объединяются с помощью неявного логического оператора and. Если в левой части правила не указан ни один условный элемент, CLIPS

13 автоматически подставляет условие-образец initial-fact. Таким образом, правило активизируется всякий раз при появлении в базе знаний факта initial-fact. Следствие или правая часть правила содержит список действий, выполняемых при активизации правила механизмом логического вывода. Действия правила выполняются последовательно, но тогда и только тогда, когда все условные элементы в левой части этого правила удовлетворены. Для разделения правой и левой части правил используется символ. Совет: для рассмотрения примеров и выполнения практических заданий данного раздела удобнее пользоваться отдельным окном для написания команд (см. рис. 2 и затем передавать их в диалоговое окно посредством выделения текста и нажатия комбинации Ctrl-M. Рассмотрим пример программы: (clear (defrule HelloWorldRule «This is a comment» (initial-fact ; предпосылка (printout t crlf (printout t «HELLO WORLD!» crlf (printout t crlf Наберите вышеприведенный листинг в окне ввода, которое показано на рис. 6.2, выделите текст и нажмите Ctrl-M. (рис Выделенные команды будут выполнены в диалоговом окне. Там же будут выведены сообщения об ошибках. Если добавление правила произошло с ошибкой, внимательно проверьте синтаксис в блоке конструктора. Рис Отправка на выполнение выделенной части программы.

14 Наличие правила в системе можно проконтролировать путем вызова пункта меню Browse Defrule Manager. Рис Менеджер правил, внесенных в систему. Если добавление правила прошло удачно и в менеджере фактов отображается строка HelloWorldRule (рис. 8, можно запустить механизм логического вывода. Для этого выполните в командном диалоговом окне последовательно две команды: (reset (run Напомним, что команда (reset очищает список фактов, а затем добавляет в него факты, объявленные конструкторами deffacts, включая предопределенный факт (initial-fact. Команда (run запускает процесс логического вывода. По сути, начинается проверка условий для правил, которые были введены в оболочку CLIPS ранее. Проверка предпосылки для нашего правила HelloWorldRule будет удачной предпосылка будет удовлетворена, поскольку в системе существует факт (initial-fact, соответствующий образцу в нашем правиле. Подробнее о способе задания образцов речь пойдет ниже, сейчас же отметим, что для создания правила, активация которого произойдет при появлении в системе определенных фактов, достаточно просто перечислить эти факты в предпосылке правила. Так как предпосылка удовлетворена, будет выполнено следствие правила, т.е. выполнена последовательность команд, записанная после оператора, и мы увидим в диалоговом окне приветственное сообщение «HELLO WORLD!». Наша программа познакомилась с миром. Рассмотрим более сложный пример. Наберите в диалоговом окне, показанном на рис. 2. следующий код. (clear (defrule FinalRule ; последнее правило (All Rules Activated ;требуем наличия факта для активации (printout t «All rules has been activated. THE END» crlf

15 (defrule SecondRule ; второе правило (First Rule Activated ; требуем наличия факта для активации (printout t «II rule activated. Adding fact. » crlf (assert ; добавляем факт, означающий активацию правила 2 (Second Rule Activated (defrule ThirdRule ; третье правило (First Rule Activated (Second Rule Activated ; требуем наличия сразу двух фактов (printout t «III rule activated.» crlf (assert ; добавляем факт, означающий активацию всех правил (All Rules Activated (defrule FirstRule ; первое правило ;предпосылки нет активация при наличии inintalfact (printout t «I rule activated. Adding fact. » crlf (assert (First Rule Activated Обратите внимания на комментарии, приведенные после символа точки с запятой (;. Выделите набранный код и передайте его на выполнение среде, нажав комбинацию Ctrl-M. (для лучшего контроля за процессом создания программы рекомендуется добавлять правила по мере их написания. В менеджере правил проверьте наличие четырех правил с именами FirstRule, SecondRule, ThirdRule и FinalRule. Правила, заданные в данной программе, должны активироваться по следующей схеме: Первое правило при запуске программы, второе при активации первого, третье при успешной активации первого и второго правила, финальное при успешной активации всех трех правил. Выполните запуск программы, дав команды (reset и (run и убедитесь, что правила выполняются в требуемой последовательности. Обратите внимание, что в коде программы определение правил записано в разброс первым определено финальное правило, затем второе и т.д. Последовательность определения правил может быть важна лишь в случае наступления одинаковых условий выполнения для правил с одинаковым приоритетом. В этом случае применяется стратегия разрешения конфликтов. В нашем же случае последовательность определения правил абсолютно не важна, так как все правила имеют такие условия, которые обеспечивают отсутствие конфликтов и гарантируют желаемую последовательность выполнения. При старте логического вывода единственным правилом, условие которое удовлетворяется, является правило FirstRule, т.к. для активации других правил нет подходящих фактов. Внутри своего тела правило FirstRule добавляет в систему факт (First Rule Activated, говорящий о его активации.

16 Напомним, что этот факт упорядоченный и состоит из трех значений типа symbol. При следующей проверке, в системе обнаруживается факт (First Rule Activated, который подходит для активации правила SecondRule, которое в свою очередь добавляет в систему свой факт. Рис Результат выполнения «программы о трех правилах» Стратегия разрешения конфликтов План решения задачи это список всех правил, имеющих удовлетворенные условия при некотором, текущем состоянием списка фактов и объектов (и которые еще не были выполнены. Каждый модуль имеет свой собственный план решения задачи. Выполнение плана подобно стеку (верхнее правило плана всегда будет выполнено первым. Когда активируется новое правило, оно размещается в плане решения задачи, руководствуясь следующими факторами: 1. Только что активированное правило помещается выше всех правил с меньшим приоритетом и ниже всех правил с большим приоритетом. 2. Среди правил с одинаковым приоритетом используется текущая стратегия разрешения конфликтов для определения размещения среди других правил с одинаковым приоритетом. 3. Если правило активировано вместе с несколькими другими правилами, добавлением или исключением некоторого факта и с помощью шагов 1 и 2 нельзя определить порядок правила в плане решения задачи, то правило произвольным образом упорядочиваются вместе с другими правилами, которые были активированы. Заметьте, что в этом случае порядок, в котором правила были добавлены в систему, оказывает произвольный эффект на разрешения конфликта (который в высшей степени зависит от текущей реализации правил. Старайтесь не использовать произвольное упорядочивание правил при решении задач, в которых требуются точные результаты или объяснения полученных решений. CLIPS поддерживает семь различных стратегий разрешения конфликтов: стратегия глубины (depth strategy, стратегия ширины (breadth strategy, стратегия упрощения (simplicity strategy, стратегия усложнения (complexity strategy, LEX (LEX strategy, MEA (MEA strategy и случайная стратегия (random strategy. По умолчанию в CLIPS установлена стратегия глубины. Необходимая стратегия может быть указана в пункте

17 Options меню Execution, в появившемся диалоговом окне выберите необходимую стратегию с помощью раскрывающегося списка Strategy Использование образцов в правилах В общем случае левая часть правила (предпосылка содержит список условных элементов (conditional elements или CEs, которые должны удовлетворяться для активации правила. Существует восемь типов условных элементов, используемых в левой части правил: CEs-образцы, test CEs, and CEs, or CEs, not CEs, exists CEs, forall CEs и logical CEs. Образцы это наиболее часто используемый условный элемент. Он содержит ограничения, которые служат для определения, удовлетворяет ли какой-либо факт из списка фактов заданному образцу. Условие test используется для оценки выражения, как части процесса сопоставления образов. Условие and применяется для определения группы условий, каждое из которой должно быть удовлетворено. Условие or для определения одного условия из некоторой группы, которое должно быть удовлетворено. Условие not для определения условия, которое не должно быть удовлетворено. Условие exists для проверки наличия, по крайней мере, одного совпадения факта (или объекта с некоторым заданным образцом. Условие logical позволяет выполнить добавление фактов и создание объектов в правой части правила, связанных с фактами и объектами, совпавшими с заданным образцом в левой часта правила (поддержка достоверности фактов в базе знаний Образцы Образец состоит из списка ограничений полей, групповых символов (wildcards и переменных, которые используются для поиска множества фактов, соответствующих желаемому образцу. Таким образом, образец как бы определяет маску, которой должны соответствовать факты. Если в списке фактов найден факт, соответствующий ограничениям, то условный элемент считается удовлетворенным. Ограничения полей это набор ограничений, которые используются для проверки простых полей или слотов объектов. Ограничения полей могут состоять только из одного символьного ограничения, однако, несколько ограничений можно соединять вместе. В дополнение к символьным ограничениям, CLIPS поддерживает три других типа ограничений: объединяющие ограничения, предикатные ограничения и ограничения, возвращающие значения. Символьные ограничения это ограничения, определяющие точное соответствие между полями факта и образцом. Символьное ограничение полностью состоит из констант, таких как вещественные и целые числа, значения типа symbol, строки или имена объектов Например, в рассмотренном выше правиле: (defrule FinalRule (All Rules Activated ; образец с символьным ограничением. (printout t «All rules has been activated. THE END» crlf строка (All Rules Activated является условным элементом с символьным ограничением, накладывающим на необходимый для активации правила факт жесткие рамки

22 последовательность действий или выражений, которые будут выполнены (вычислены по порядку во время исполнения тела функции. (deffunction [ ] [ ] В качестве примера рассмотрим простую функцию, выводящую на экран свой единственный аргумент: (deffunction PrintOneArgument (?a (printout t?a crlf Здесь PrintOneArgument имя функции, (?a один принимаемый аргумент, (printout t?a crlf тело функции, состоящее из одного вызова функции printout. Вызов данной функции из тела программы может выглядеть так: (PrintOneArgument Hello world Функция может принимать также и групповой параметр набор некоторых значений. Например: (deffunction CountElementsInGroup ($?x (printout t Argument x consist of (length?x elements crlf Вызов такой функции может выглядеть так: (CountElementsInGroup (a,b,c,d Ответ системы: Argument x consist of 4 elements Функция возвращает значение, равное значению, которое вернуло последнее действие или вычисленное выражение во время выполнения функции. Если последнее действие не вернуло никакого результата, то выполняемая функция также не вернет результата (как в приведенном выше примере. Если функция не выполняет никаких действий, то возвращенное значение равно FALSE. В случае возникновения ошибки при выполнении очередного действия выполнение функции будет прервано и возвращенным значением также будет FALSE. Рассмотрим пример функции, задающей пользователю вопрос и возвращающий ответ, введенный с клавиатуры: (deffunction ask (?question (printout t?question (bind?answer (read?answer Здесь имя функции ask, принимаемый параметр?question. При вызове функции значение переменной?question выводится в качестве вопроса пользователю, затем выполняется функция bind связывающая переменную?answer с информацией введенной с клавиатуры. Запрос ввода с клавиатуры выполняется функцией (read. Пример вызова: (ask How old are you? Для более удобного анализа пользовательских ответов может потребоваться, чтобы функция разрешала пользователю вводить не произвольный ответ, а один из заранее заданных вариантов. Задачу можно решить с помощью группового символа. Рассмотрим

26 (printout t «Sorry, there is no suggest.» crlf Если задать набор вышеприведенных конструкторов в CLIPS и выполнить команды (reset и (run, можно протестировать нашу простейшую экспертную системупомощника для локализации проблем с двигателем автомобиля. Литература к разделу 6 1. А. П. Частиков Разработка экспертных систем. Среда CLIPS. / Т. А. Гаврилова Д. Л.Белов C.-П. «БХВ-Петербург» с

Источник

Видео

Clips – обзор нового приложения от Apple

Clips – обзор нового приложения от Apple

Приложение для автоматических субтитров на видео CLIPS

Приложение для автоматических субтитров на видео CLIPS

Бесплатный видеоредактор на русском языке. Монтаж видео в VideoPad

Бесплатный видеоредактор на русском языке. Монтаж видео в VideoPad

Переключение языка в программе Olive video editor и минимальная настройка рабочей области.

Переключение языка в программе Olive video editor и минимальная настройка рабочей области.

Язык LISP для студентов и инженеров. Первая программа

Язык LISP для студентов и инженеров. Первая программа

НОВАЯ программа ДЛЯ ЗАПИСИ ЭКРАНА на ANDROID | *Запись видео* | Glip screen recorder | БЕСПЛАТНО!

НОВАЯ программа ДЛЯ ЗАПИСИ ЭКРАНА на ANDROID | *Запись видео* | Glip screen recorder | БЕСПЛАТНО!

5 ЛУЧШИХ ПРИЛОЖЕНИЙ для изучения ЯЗЫКОВ 2021 года

5 ЛУЧШИХ ПРИЛОЖЕНИЙ для изучения ЯЗЫКОВ 2021 года

5 Лучших Бесплатных Программ Для Записи Экрана (2022)

5 Лучших Бесплатных Программ Для Записи Экрана (2022)

Любовь и голуби (FullHD, комедия, реж. Владимир Меньшов, 1984 г.)

Любовь и голуби (FullHD, комедия, реж. Владимир Меньшов, 1984 г.)

Автоматическая озвучка видео YouTube на русский язык

Автоматическая озвучка видео YouTube на русский язык
Поделиться или сохранить к себе:
Добавить комментарий

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