Similar presentations:
Практическая 6
1. СLIPS
Практическое занятие 62. Краткие теоретические сведения
CLIPS— С Language Integrated ProductionSystem— программная среда для
разработки экспертных систем.
Разработана в 1984 г., в космическом
центре Джонсона NASA.
Основная цель прототипа CLIPS было
создание языка, способного решать
задачи, опираясь на концепцию знаний.
3. Краткие теоретические сведения
CLIPS поддерживает три основныхспособа представления знаний:
продукционные правила для
представления эвристических,
основанных на опыте знаний;
функции для представления
процедурных знаний;
объектно-ориентированное
программирование.
http://clipsrules.sourceforge.net/
4. Запуск
Для того чтобыДочернее
окнокоманды,
оболочкинаписанные
«Dialog Window»,
в окне, были
используется
переданы в для
диалоговое
выполнения
команд
окно
необходимо
CLIPS и выделить
получения
их результата.
и нажать комбинацию
Это своего
Ctrl-M
рода
или
командная
выбрать строка
оболочки,
пункт
менюгде
Buffer
можно
– Batch
выполнить
Selection.
команду CLIPS записав ее после приглашения
и нажав клавишу .
5. Назначение основных пунктов меню оконного интерфейса
ПунктFile
Подпункт
“Горячие” клавиши
New
Ctrl+N
Создание нового файла
Open
Ctrl+O
Открытие файла
Load …
Ctrl+L
Загрузка конструкций из файла.
Load Batch
Edit
Назначение команды
Cut
Исполнение пакетного файла
Ctrl+X
Вырезка фрагмента
Ctrl+C
Копирование фрагмента
Ctrl+V
Вставка строки из буфера обмена
Reset
Ctrl+U
Инициализация конструкций
Run
Ctrl+R
Запуск на выполнение
Step
Ctrl+T
Выполнение одного шага вывода
Copy
Paste
Execution
Browse
Window
Module
Defrule Manager
Deffacts Manager
Отображает модуль
Facts Window
Активизация окна списка фактов
Agenda Window
Активизация окна агенды Очищает окно с
Clear dialog window
командной строкой
Менеджер правил
Менеджер фактов
6. Основные команды при работе со средой CLIPS
load – загрузка конструкторов из текстового файла;load+ – загрузка конструкторов из текстового файла без отображения;
reset – сброс рабочей памяти системы CLIPS;
clear – очистка рабочей памяти системы;
run – выполнение загруженных конструкторов;
save – сохранение созданных конструкторов в текстовый файл;
exit – выход из CLIPS.
7. Основные конструкции в CLIPS
8. Факты
список неделимых (или атомарных) значений примитивных типов данныхВ системе CLIPS фактом является список неделимых (или атомарных)
значений примитивных типов данных, заключенный в скобки.
Например:
(life is good)
(power failed 22 minutes)
(temperature 10)
(model “OPEL Omega”)
идентификатора факта — f–<fact- index>
9. Факты
Следующие символьные обозначения зарезервированы и не могут бытьиспользованы в качестве первого поля в любых фактах: test, and, or, not,
declare, logical, object, exists и проч.
10.
ФактыДля того чтобы иметь возможность наблюдать процесс добавления удаления
или изменения фактов необходимо вызвать пункт меню Execution – Watch и
установить флажок напротив пункта «Facts.
11. Функция assert
(assert <факт> <факт> <факт>)Проверить текущее состояние списка фактов можно либо
посредством ввода в диалоговом окне команды (facts), либо
вызвав пункт меню Window – 1 Fact. Во втором случае
откроется окно со списком фактов
12. Пример assert
В режиме командной строки создать список из 3-х упорядоченных фактов вида:(vedomost <name> <gruppa> <ocenka>)
13. Функция retract
(retrасt <определение-факта> <определение-факта>...)
(retrасt *)
14. Пример retract
15. Конструктор deffacts
(deffacts <имя_списка_фактов><факт>
…
<факт>
)
;; имя первого списка фактов
(deffacts today
(today is Sunday)
(weather is warm) )
;; имя второго списка фактов
(deffacts tomorrow
(tomorrow is Monday)
(weather is warm) )
16. Конструктор deftemplate
(deftemplate <имя шаблона>[«строка комментариев»])(<Определение_слота>)
…………………..
(< Определение_слота >)
Итак <определение слота>, в простом случае состоит из:
• ключевого слова slot или multislot, определяющего тип слота;
• имени слота, которое является значением типа symbol.
• необязательного ограничения на тип значения, хранимого в слоте.
<Определение слота> =
( Slot / multislot <имя_слота>)
17. Конструктор deftemplate
18. Пример assert
19. Пример
File->Load(modify 2 (date 12-021985))
20.
(duplicate 1 (name Sidorov))21. Правила
для представления эвристик или так называемых "эмпирических правил",которые определяют набор действий, выполняемых при возникновении
некоторой ситуации
(defrule <имя_правила> [<необязательный_комментарии>]
[<необязательное_определение_свойства_правила>]
<предпосылки >
; левая часть правила
=>
; спец. символ
<следствие>
; правая часть правила
)
Определение свойства правила
<определение-свойства-правила> =
(declare <свойство-правила>)
<свойство-правила> =
(salience <целочисленное выражение>)
или
(auto-focus <логическое выражение>)
22. Правила
произвольно выбранное имя правила(defrule chores "Things to do on Sunday"
(salience 10)
предпосылки
(today is Sunday)
(weather is warm) =>
(assert (wash car))
(assert (chop wood) )
Следствие
23. Пример
24. Использование образцов в правилах
Образец состоит из списка ограничений полей, групповых символов (wildcards) ипеременных, которые используются для поиска множества фактов, соответствующих желаемому
образцу. Таким образом, образец как бы определяет маску, которой должны соответствовать
факты. Если в списке фактов найден факт, соответствующий ограничениям, то условный элемент
считается удовлетворенным.
Ограничения полей – это набор ограничений, которые используются для проверки
простых полей или слотов объектов. Ограничения полей могут состоять только из одного
символьного ограничения, однако, несколько ограничений можно соединять вместе. В дополнение
к символьным ограничениям, CLIPS поддерживает три других типа ограничений: объединяющие
ограничения, предикатные ограничения и ограничения, возвращающие значения.
Символьные ограничения – это ограничения, определяющие точное соответствие
между полями факта и образцом. Символьное ограничение полностью состоит из констант, таких
как вещественные и целые числа, значения типа symbol, строки или имена объектов
25. Групповые символы
Групповой символ для простого поля записывается с помощью знака ?,который соответствует одному любому значению, сохраненному в
заданном поле.
Групповой символ составного поля записывается с помощью знака $? и
соответствует последовательности значений, сохраненной в составном
поле.
26. Глобальные переменные
( defglobal?*имя_переменной* = <выражение>
…
[?*имя_переменной* = <выражение>]
)
Пример использования:
(defglobal
?*x* = 3
?*y* = ?*x*
?*z* = (+ ?*x* ?*y*)
?*d* = 7.8
?*e* = ”string”
?*f* = symbol
)
Для присвоения значения переменной в процессе
выполнения используется функция bind.
(bind <имя-переменной> <выражение>)
Пример использования:
(bind ?*x* symbolvalue)
(bind ?*y* (+ 6 8 1) )
(bind ?*z* “string value” )
27. Глобальные переменные
28. Пользовательские функции
(deffunction <имя-функции> [<необяз-комментарий>]<обязательные-параметры> [<групповой-параметр>]
<действия>
)
(deffunction PrintOneArgument (?a)
(printout t ?a crlf)
)
PrintOneArgument – имя функции,
(?a) – один принимаемый аргумент,
(printout t ?a crlf) – тело функции, состоящее
из одного вызова функции printout
Вызов данной функции из тела программы может выглядеть так:
(PrintOneArgument “Hello world”)
29. Пользовательские функции
30. ПРОЦЕДУРНЫЕ ФУНКЦИИ
1. (bind <имя-переменной>переменных
2.
(if
- ветвление
<выражение>
<выражение>) - создание и связывание
then
<действия1>
[else<действия2>])
3. (while <условие> do <действия>) - цикл с предусловием
4. (loop-for-count <диапазон> do <действия>) - цикл с заданным числом
повторений
5. (switch <выражение> (case<выражение> then <действие>)
[(default <действие>)] - множественный выбор
6. (break) -прерывание
7. (return [<выражение>]) - прерывает выполняющуюся функцию, цикл,
правило, обработчик сообщения и т. д.