- Главная
- Информатика
- Правила в CLIPS
Содержание
- 2. ОСНОВНЫЕ ПОЛОЖЕНИЯ Правила в CLIPS служат для представления эвристик или так называемых "эмпирических правил", которые определяют
- 3. СЛЕДСТВИЯ Следствие правила представляется набором некоторых действий, которые необходимо выполнить, в случае если правило применимо к
- 4. Создание правил. Конструктор defrule (defrule [ ] [ ] ; левая часть правила => ; правая
- 5. Программа "Hello-World!" (clear) (defrule Hello-World "My FirstCLIPS Rule" => (printout t crlf crlf) (printout t ********************
- 6. ПРОГРАММА «Go To Credit?!» (defrule data-input (initial-fact) => (printout t crlf "Input days for discipline credit
- 7. ПРОДОЛЖЕНИЕ (defrule R1 (days ?days) (works ?works) (test (and (= ?days 1) ( ?works 0))) =>
- 8. ПРОДОЛЖЕНИЕ (defrule R4 (days ?days) (works ?works) (test (and (= ?days 3) (> ?works 25)))( =>
- 9. ОКОНЧАНИЕ ПРОГРАММЫ «Go To Credit» (defrule R6 (days ?days) (works ?works) (prworks ?prworks) (test (and (
- 10. ВЫПОЛНЕНИЕ ПРОГРАММЫ CLIPS> (clear) CLIPS> (reset) ==> Focus MAIN ==> instance [initial-object] of INITIAL-OBJECT MSG >>
- 11. ВЫПОЛНЕНИЕ ПРОГРАММЫ CLIPS> (run) FIRE 1 data-input: f-0 Input days for discipline credit (integer): 2 ==>
- 12. ВЫПОЛНЕНИЕ ПРОГРАММЫ CLIPS> (run) FIRE 1 data-input: f-0 Input days for discipline credit (integer): 1 ==>
- 14. Скачать презентацию
ОСНОВНЫЕ ПОЛОЖЕНИЯ
Правила в CLIPS служат для представления эвристик или так называемых
ОСНОВНЫЕ ПОЛОЖЕНИЯ
Правила в CLIPS служат для представления эвристик или так называемых
правил", которые определяют набор действий, выполняемых при возникновении некоторой ситуации. Разработчик экспертной системы определяет набор правил, которые вместе работают над решением некоторой задачи. Правила состоят из предпосылок и бедствия.
Предпосылки называются также ЕСЛИ-частъю правила, левой частью правила или LHS правила (left-hand side of rule). Следствие называется ТО-частью правила, правой частью правила или RHS правила (right-hand side of rule).
Предпосылки правила представляют собой набор условий (или условных элементов), которые должны удовлетвориться, для того чтобы правило выполнилось. Предпосылки правил удовлетворяются в зависимости от наличия или отсутствия некоторых заданных фактов в списке фактов или некоторых созданных объектов, являющихся экземплярами классов, определенных пользователем.
Один из наиболее распространенных типов условных выражений в CLIPS — образцы
(patterns). Образцы состоят из набора ограничений, которые используются для определения того, удовлетворяет ли некоторый факт или объект условному элементу. Другими словами, образец задает некоторую маску для фактов или объектов. Процесс сопоставления образцов фактам или объектам называется процессом сопоставления образцов (pattern-matching). CLIPS предоставляет механизм, называемый механизмом логического вывода (inference engine), который автоматически сопоставляет образцы с текущим списком фактов и определенными объектами в поисках правил, которые применимы в данный момент.
СЛЕДСТВИЯ
Следствие правила представляется набором некоторых действий, которые необходимо выполнить, в случае
СЛЕДСТВИЯ
Следствие правила представляется набором некоторых действий, которые необходимо выполнить, в случае
В случае если в данный момент применимо более одного правила, механизм логического вывода использует так называемую стратегию разрешения конфликтов (conflict resolution strategy), которая определяет, какое именно правило будет выполнено. После этого CLIPS выполняет действия, описанные вследствие выбранного правила (которые могут оказать влияние на список применимых правил), и приступает к выбору следующего правила. Этот процесс продолжается до тех пор, пока список применимых правил не опустеет.
Чтобы лучше понять сущность правил в CLIPS, их можно представить в виде оператора IF-THEN, используемого в процедурных языках программирования, например, таких как Ada или С. Однако условия выражения IF-THEN в процедурных языках вычисляются только тогда, когда поток управления программы непосредственно попадает на данное выражение путем последовательного перебора выражений и операторов, составляющих программу. В CLIPS, в отличие от этого, механизм логического вывода создает и постоянно модифицирует список правил, условия которых в данный момент удовлетворены.
Создание правил. Конструктор defrule
(defrule
<имя-правила>
[<комментарии>]
[<определение-свойства-правила>]
<предпосылки > ; левая часть правила
=>
<следствие> ; правая
Создание правил. Конструктор defrule
(defrule
<имя-правила>
[<комментарии>]
[<определение-свойства-правила>]
<предпосылки > ; левая часть правила
=>
<следствие> ; правая
)
Имя правила должно быть значением типа symbol. В качестве имени правила нельзя использовать зарезервированные слова CLIPS, которые были перечислены ранее. Повторное определение существующего правила приводит к удалению правила с тем же именем, даже если новое определение содержит ошибки.
Комментарии являются необязательными, и, как правило, описывают назначения правила.
Комментарии необходимо заключать в кавычки. Эти комментарии сохраняются и в дальнейшем могут быть доступны при просматривании определения правила.
Определение правила может содержать объявление свойств правила, которое следует непосредственно после имени правила и комментариев.
Программа "Hello-World!"
(clear)
(defrule
Hello-World
"My FirstCLIPS Rule"
=>
(printout t crlf crlf)
(printout t ******************** crlf)
(printout t
Программа "Hello-World!"
(clear)
(defrule
Hello-World
"My FirstCLIPS Rule"
=>
(printout t crlf crlf)
(printout t ******************** crlf)
(printout t
(printout t ******************** crlf)
128
(printout t crlf crlf)
ПРОГРАММА «Go To Credit?!»
(defrule data-input
(initial-fact)
=>
(printout t crlf "Input days for discipline
ПРОГРАММА «Go To Credit?!»
(defrule data-input
(initial-fact)
=>
(printout t crlf "Input days for discipline
(bind ?days (read))
(if (numberp ?days)
then (assert (days ?days))
else (printout t "Input number" crlf))
(printout t crlf "Enter the number of labs outstanding (in %): ")
(bind ?works (read))
(assert (works ?works))
(printout t crlf "Enter the number of unfinished practical work (in %): ")
(bind ?prworks (read))
(assert (prworks ?prworks)))
ПРОДОЛЖЕНИЕ
(defrule R1
(days ?days)
(works ?works)
(test (and (= ?days 1) (<> ?works
ПРОДОЛЖЕНИЕ
(defrule R1
(days ?days)
(works ?works)
(test (and (= ?days 1) (<> ?works
=>
(printout t crlf crlf "Time is going to FINISH! ATTENTION!" crlf)
(assert (freetime "no")))
(defrule R2
(days ?days)
(works ?works)
(test (and (= ?days 2) (>= ?works 10)))
=>
(printout t crlf crlf "Time is going to FINISH! LETS GO TO FINISH!" crlf)
(assert (freetime "no")))
(defrule R3
(days ?days)
(works ?works)
(test (and (= ?days 2) (< ?works 10)))
=>
(printout t crlf crlf "Little free time!" crlf)
(assert (freetime "a-little")))
ПРОДОЛЖЕНИЕ
(defrule R4
(days ?days)
(works ?works)
(test (and (= ?days 3) (> ?works 25)))(
=>
(printout
ПРОДОЛЖЕНИЕ
(defrule R4
(days ?days)
(works ?works)
(test (and (= ?days 3) (> ?works 25)))(
=>
(printout
(assert (freetime "no")))
(defrule R5
(days ?days)
(works ?works)
(prworks ?prworks)
(test (and (= ?days 3) (> ?works 25) (> ?prworks 25)))
=>
(printout t crlf crlf "No free time!ALLES" crlf)
(assert (freetime "no")))
ОКОНЧАНИЕ ПРОГРАММЫ «Go To Credit»
(defrule R6
(days ?days)
(works ?works)
(prworks ?prworks)
(test (and (<
ОКОНЧАНИЕ ПРОГРАММЫ «Go To Credit»
(defrule R6
(days ?days)
(works ?works)
(prworks ?prworks)
(test (and (<
=>
(printout t crlf crlf "No free time!ALLES!ALLES!!" crlf)
(assert (freetime "no")))
(defrule R7
(days ?days)
(works ?works)
(prworks ?prworks)
(test (and (= ?days 1) (> ?works 50) (> ?prworks 50)))
=>
(printout t crlf crlf "ALLES CAPUT!GO TO OUT!BYE!BYE!!!" crlf)
(assert (freetime "no")))
ВЫПОЛНЕНИЕ ПРОГРАММЫ
CLIPS> (clear)
CLIPS> (reset)
<== Focus MAIN
==> Focus MAIN
==> instance [initial-object] of
ВЫПОЛНЕНИЕ ПРОГРАММЫ
CLIPS> (clear)
CLIPS> (reset)
<== Focus MAIN
==> Focus MAIN
==> instance [initial-object] of
MSG >> create ED:1 (
HND >> create primary in class USER
ED:1 (
HND << create primary in class USER
ED:1 (
MSG << create ED:1 (
MSG >> init ED:1 (
HND >> init primary in class USER
ED:1 (
HND << init primary in class USER
ED:1 (
MSG << init ED:1 (
==> f-0 (initial-fact)
CLIPS> (load "C:/CLIPS/PC/PROGRAMS/EXAMPLES/OTHER/ZACREDIT4.CLP")
Defining defrule: data-input +j
==> Activation 0 data-input: f-0
Defining defrule: R1 +j+j
Defining defrule: R2 =j+j
Defining defrule: R3 =j+j
Defining defrule: R4 =j+j
Defining defrule: R5 =j+j+j
Defining defrule: R6 =j=j+j
Defining defrule: R7 =j=j+j
TRUE
ВЫПОЛНЕНИЕ ПРОГРАММЫ
CLIPS> (run)
FIRE 1 data-input: f-0
Input days for discipline credit (integer):
ВЫПОЛНЕНИЕ ПРОГРАММЫ
CLIPS> (run)
FIRE 1 data-input: f-0
Input days for discipline credit (integer):
==> f-1 (days 2)
Enter the number of labs outstanding (in %): 7
==> f-2 (works 7)
==> Activation 0 R3: f-1,f-2
Enter the number of unfinished practical work (in %): 3
==> f-3 (prworks 3)
FIRE 2 R3: f-1,f-2
Little free time!
==> f-4 (freetime "a-little")
<== Focus MAIN
2 rules fired Run time is 41.9949999999999 seconds.
0.0476247172282416 rules per second.
3 mean number of facts (5 maximum).
1 mean number of instances (1 maximum).
ВЫПОЛНЕНИЕ ПРОГРАММЫ
CLIPS> (run)
FIRE 1 data-input: f-0
Input days for discipline credit (integer):
ВЫПОЛНЕНИЕ ПРОГРАММЫ
CLIPS> (run)
FIRE 1 data-input: f-0
Input days for discipline credit (integer):
==> f-1 (days 1)
Enter the number of labs outstanding (in %): 51
==> f-2 (works 51)
==> Activation 0 R1: f-1,f-2
Enter the number of unfinished practical work (in %): 51
==> f-3 (prworks 51)
==> Activation 0 R7: f-1,f-2,f-3
==> Activation 0 R6: f-1,f-2,f-3
FIRE 2 R6: f-1,f-2,f-3
No free time!ALLES!ALLES!!
==> f-4 (freetime "no")
FIRE 3 R7: f-1,f-2,f-3
ALLES CAPUT!GO TO OUT!BYE!BYE!!!
FIRE 4 R1: f-1,f-2
Time is going to FINISH! ATTENTION!