МПЗиО_11_17_CLIPS (1185830), страница 2
Текст из файла (страница 2)
атрибутами25РАБОТА С CИСТЕМОЙПрограмма на CLIPS может содержатьсяв двух текстовых файлах:● файл с начальным содержимым РП (т.е. с фактами)● файл с правилами, шаблонами, функциями …Типичные действия- выполняемые пользователем в среде CLIPS и/или- встречающиеся в правой части правил продукции:● Загрузка в систему шаблонов, фактов и правил● Перед загрузкой фактов с неупорядоченнымиименованными атрибутами должны быть загруженысоответствующие шаблоны● После загрузки РП и БЗ системой составляетсясписок применимых в данный момент правил● Запуск программы на выполнение - команда run: (run)26ЗАГРУЗКА И ОЧИСТКА РП● Изначально рабочая память пуста, в неёавтоматически добавляется факт initial-fact.● Добавление списка фактов в рабочую память (пример):(deffacts startup ″Refrigerator status″(refrigerator light on)(refrigerator door open)(refrigerator temp (+ 5 10 15)))● Факты, описанные в конструкторах deffacts,автоматически добавляются после выполнения команды(reset)● Команда (clear) – очистка РП, она становится пустой● Команда (reset) – очистка РП, после выполненияавтоматически добавляются все факты из конструкцийdeffacts и факт initial-fact27СОХРАНЕНИЕ ФАКТОВИ ЗАГРУЗКА В РП● Сохранение всех/некоторых фактов из РПв текстовый файл:(save-facts <имя файла>[<границы видимости> <список имён шаблонов>])< границы видимости >::= visible | local● Загрузка фактов из файла:(load-facts <имя файла>)Факты с именованными атрибутами могут быть загруженыиз файла только после загрузки в системусоответствующего определения шаблона● Загрузка конструкторов из файла:(load ″myfile1.CLP″)аргумент – имя текстового файла, может быть указан путьк нему, по умолчанию он ищется в текущей директории28СРЕДСТВА РАБОТЫ С ПРАВИЛАМИ● Загрузка файла с правилами и конструкторамишаблонов:(load ″имя файла″)● Просмотр определения правила:(ppdefrule <имя правила>)● Получение полного списка правил, присутствующих вCLIPS на данный момент:(list-defrules <имя модуля>)аргумент не обязателен (по умолчанию – текущий модуль,* – из всех модулей)● Удаление правил: (undefrule <имя правила>)или(undefrule *)● Сохранение в текстовый файл всех определённых всистеме в данный момент конструкторов (правил,шаблонов, функций): (save ″имя файла ″)29ОПРЕДЕЛЕНИЕ ФУНКЦИЙВ правой части правил можно применять функции:●●●определённые пользователем, внешниесистемные, внутренниеопределённые в CLIPS с помощью конструктора deffunction(их отличие от внешних – они выполняются интерпретатором)Примеры:(deffunction print-args (?x ?y $?z)(printout t ?x ″ ″ ?y ″ and ″ (length ?z)″ extras: ″ ?z crlf))(deffunction factorial (?x)(if (or (not (integerp ?x)) (< ?x 0))then (printout t ″Factorial error!″ crlf)else (if (= ?x 0)then 1else (* ?x (factorial (- ?x 1))))))30ЗАПУСК И ОТЛАДКАЗапуск программы:(run <целочисленное выражение>)● Если аргумент задан и >0, то выполняетсясоответствующее количество правил из спискаприменимых правил● Аргумент может быть опущен или <0, тогда весьсписок выполнится полностью● В процессе выполнения список применимых правилможет менятьсяВ любой момент возможно посмотреть содержимое РП:(facts) – вывод на экран текущего содержимого РПМожно посмотреть список применимых в данныймомент правил с помощью команды (agenda)31ПРАКТИЧЕСКОЕ ЗАДАНИЕ № 3●●●●●●●●(обязательно для допуска к экзамену)Разработка ЭС на базе языка CLIPS (прямой вывод)Работа индивидуально или в группах по 2-3 человекаРазделение работы обсуждается с преподавателем: анализ ПО и выявление экспертных правил программирование правил (создание БЗ) программирование вывода в ЭС отладка БЗ и тестирование ЭСВыбор ПО и типа ЭС – свободный, но оговаривается спреподавателем.
Например: диагностика неисправностейноутбука, рекомендации по покупке холодильникаОбязательная сдача отчета по заданию (1-2 стр.)Задание сдается по этапам Н.В.ГруздевойМожно использовать готовую оболочку ЭС (или некоторыесредства из нее), но это соответственно снижает оценкуКонтрольный срок сдачи – 12 мая, выбор ПО – 21 апреля32ЭТАПЫ РАЗРАБОТКИ ЭС1.
Выявление сущностей и их атрибутов2. Выявление экспертных правил3. Представление сущностей и их атрибутов в видефактов4. Определение схемы вывода решения5. Реализация экспертных правил правилами CLIPS6. Программирование вспомогательных функцийдля запроса информации у пользователя(интерфейс с пользователем)7. Программирование схемы вывода и всей ЭС8.
Тестирование и отладка БЗ33РАЗРАБОТКА ЭС: ПРИМЕРРазработка ЭС диагностики неисправности мотораавтомобиля по внешним признакамЭкспертные правила:● Двигатель обычно находится в одном из трёх состояний:●●●●работает нормально, работает неудовлетворительно, незаводится.Двигатель работает нормально, если он нормальновращается, система зажигания и аккумулятор находятся внорме, тогда никакого ремонта не требуется.Если двигатель запускается, но работает ненормально, то этоговорит, по крайней мере о том, что аккумулятор в порядке.Если двигатель не запускается, то нужно узнать, пытается лион вращаться.
Если он вращается, но не заводится, то этоможет говорить о наличии плохой искры в системе зажигания.Если двигатель даже не пытается заводиться, то это говорит отом, что искры нет в принципе.…34ПРИМЕР ЭС: СУЩНОСТИ● Состояние двигателя: нормальная работа,неудовлетворительная работа, не заводится● Состояние вращения двигателя: способен вращаться или нет● Состояние аккумулятора: заряжен или разряжен● и т.д.Каждому состоянию можно поставить в соответствие факты вида:имя сущности – атрибут – значение:; Группа фактов, описывающих состояние двигателя(working-state engine normal)(working-state engine unsatisfactory)(working-state engine does-not-start); Группа фактов: состояние вращения двигателя(rotation-state engine rotates)(rotation-state engine does-not-rotate); Состояние аккумулятора(charge-state battery charged); заряжен(charge-state battery dead); разряжен35ПРИМЕР ЭС: ПРАВИЛАПервому экспертному правилу соответствует:(defrule determine-engine-state(not (working-state engine ?))(not (repair ?)) ; в РП нет факта-рекомендации=>(if (yes-or-not-p ″Does the engine start (yes/no)? ″)then (if (yes-or-no-p ″Does the engine run normally(yes/no)? ″)then (assert (working-state engine normal))else (assert (working-state engineunsatisfactory)))else (assert (working-state engine does-not-start)))В результате выполнения правила, в зависимости от ответовпользователя в РП заносится один из трёх фактов о состояниидвигателяПравило применимо только если в РП нет фактов о состояниидвигателя и факта repair36ИНТЕРФЕЙС С ПОЛЬЗОВАТЕЛЕМ; ЭС задаёт вопрос и вводит ответ, который д.быть; одним из заданных возможных вариантов ответа(deffunction ask-question (?question $?allowed-values)(printout t ?question) (bind ?answer (read))(if (lexemep ?answer)then (bind ?answer (lowcase ?answer)))(while (not (member ?answer ?allowed-value)) do(printout t ?question) (bind ?answer (read))(if (lexemep ?answer)then (bind ?answer (lowcase ?answer))))?answer ); ЭС задаёт вопрос, на который ответ – да или нет(deffunction yes-or-no-p (?question)(bind ?response (ask-question ?question yes no y n))(if (or (eq ?response yes)(eq ?response y))then TRUEelse FALSE))37ПРИМЕР ЭС:ЗАВЕРШАЮЩЕЕ ПРАВИЛОВ случае, когда в ходе опроса не удалось выработатьрекомендацию, применяется следующее правило:(defrule no-repairs(declare (salience -10))(not (repair ?))=>(assert(repair ″Take you car to a mechanic.″))В РП заносится факт, рекомендующий пользователю показатьмашину механикуПравило применимо только в том случае, если больше нетникаких применимых правил (т.к.
у него приоритет -10,приоритет остальных правил = 0 по умолчанию),и не была выработана рекомендация пользователю38СПАСИБО ЗА ВНИМАНИЕ!39.