1 / 31

COMP 4200: Expert Systems

COMP 4200: Expert Systems. Dr. Christel Kemke Department of Computer Science University of Manitoba. CLIPS Introduction 2. Review and Introduction 2 CLIPS Programming System Basic CLIPS Constructs and Syntax Fields and Templates Complex Condition Patterns Input and Output Salience.

umay
Download Presentation

COMP 4200: Expert Systems

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. COMP 4200: Expert Systems Dr. Christel Kemke Department of Computer Science University of Manitoba

  2. CLIPS Introduction 2 Review and Introduction 2 • CLIPS Programming System • Basic CLIPS Constructs and Syntax • Fields and Templates • Complex Condition Patterns • Input and Output • Salience

  3. CLIPS – Programming Systems CLIPS Interpreter • enter commands,direct modification of fact base ... CLIPS File-Menu • load, saveand edit CLIPS program files CLIPS Edit-Menu • Balance (ctrl B), Comment CLIPS Execution-Menu • setexecution parameters(e.g. reset, run, clear, watch, constraint checking, halt) CLIPS Browse-Menu • manage and info about constructs CLIPS Window-Menu • current status info, e.g. Facts, Activations, …

  4. Working with Facts Changing fact base • Adding facts (assert <facts>) • Deleting facts (retract <fact-identifier>) • Modifying facts (modify <fact-identifier> (deftemplate facts) (<slot-name> <slot-value>)) • Duplicating facts (duplicate <fact-identifier> (deftemplate facts) (<slot-name> <slot-value>)) Monitoring program execution • Print all facts (facts) • Displays changes (watch facts), also for rules ... • Dribble record trace into file

  5. CLIPS – Basic Constructs Basic Language Elements: • Fields (basic Data Types; slot fillers) • Facts (used in condition patterns) • Rules (condition-action rules) • Templates (like records; define facts) • Classes (like objects; define facts) • Messagehandlers (like methods defined for classes; used in condition patterns and actions)

  6. Fields - Examples Fields (data types) • float 4.00, 2.0e+2, 2e-2 • integer 4, 2, 22 • symbol Alpha24*, !?@*$ • string “Johnny B. Good” • instance name [titanic], [PPK] Variables ?var, ?x, ?day variables for single field value $?names variable for multi-field value

  7. Template and Fact with Single Field Single value in a slot: (person (name "Johnny B. Good") (age 42)) Defined based on: (deftemplate person (slot name) (slot age)) A single field slot stores one single field value, e.g. the string "Johnny B. Good" or the integer / number 42 in the example above.

  8. Multislots and Multifields More than one value in a slot: (person (name Johnny B. Good) (age 42)) Defined based on: (deftemplate person (multislot name) (slot age)) A multi-slot allows several field values to be stored in one slot, e.g. the 3 field valuesJohnny,B.and Good in the example above.

  9. Slot Restrictions Defined Template with Slot-Restrictions (Constraint-Attributes): (deftemplate person (slot name (typeSTRING)) (slot age (typeINTEGER)) (slot gender(allowed-symbolsmale female)) )

  10. Slot Constraint-Attributes <constraint-attribute> ::= <type-attribute> | <allowed-constant-attribute> | <range-attribute> | <cardinality-attribute> <default-attribute> <type-attribute> ::= (type <type-specification>) <type-specification> ::= <allowed-type>+ | ?VARIABLE <allowed-type> ::= SYMBOL | STRING | LEXEME | INTEGER | FLOAT | NUMBER | INSTANCE-NAME | INSTANCE-ADDRESS | INSTANCE | FACT-ADDRESS | EXTERNAL-ADDRESS

  11. Slot Constraint-Attributes Type + Allowed Values (Enumeration, Collection) <allowed-constant-attribute> ::= (allowedsymbols <symbol-list>) | (allowedstrings <string-list>) | (allowed-lexemes <lexeme-list>) | (allowedintegers <integer-list>) | (allowedfloats <float-list>) | (allowednumbers <number-list>) | (allowed-instance-names <instance-list>) | (allowedvalues <value-list>)

  12. Slot Constraint-Attributes Range of Values (min and max value) <range-attribute> ::= (range <range-specification> <range-specification>) <range-specification> ::= <number> | ?VARIABLE Number of Fillers (min and max) <cardinality-attribute> ::= (cardinality <cardinality-specification> <cardinality-specification>) <cardinality-specification> ::= <integer> | ?VARIABLE

  13. Variables and Wildcards single-field variable binds single value ?<symbol> e.g. ?age, ?x, ?address ?fact-variable multi-field variable accepts multiple values; $?<symbol> can bind multi-field value single-field wildcard matches any single-field value ? multi-field wildcard matches any multi-field value $?

  14. All Kinds of Variables (defrule birthday “A person’s birthday” ?f1 <- (person (name $?name) (age ?age)) ?f2 <- (has-birthday $?name) => (printout t “Happy Birthday,” $?name) (retract ?f1) (retract?f2) (assert (person (name $?name) (age (+ ?age 1))))) Q: With which patterns does the Condition match? A: e.g. (person (name Johnny B. Good) (age 42))

  15. All Kinds of Variables 2 (defrule birthday“A person’s birthday” ?f1<- (person (name ?name$?) (age ?age)) ?f2<- (has-birthday ?name) => (printout t “Happy Birthday,” ?name) (retract?f2) (modify ?f1(age (+ ?age 1)))) Q1: What is $? matching with? Q2: What is the rule doing?

  16. Complex Condition Elements • logical connectives and, or, notto combine patterns • foralland exists– consider all matches/ only one match in further evaluation • logical– connects condition element and asserted fact in action (Truth Maintenance) • use test-condition (test <predicate-expression>) • field-constraints&, |,and &:attached to slot of (deftemplate) condition pattern

  17. Field Constraints (Connected Pattern Constraints) not ~ not this value (name ~Simpson) (age ~40) or |could be one of these values (name Simpson|Oswald) (age 30|40|50) and &attaches constraint to variable (name ?name&~Simpson) (name ?name&Harvey) expr.: adds expression as constraint (age ?age&:(> ?age 20)) (name ?name&:(eq (sub-string 1 1 ?name) "S") checks whether the age is above 20 checks whether the sub-string from 1 to 1 (first letter) of the name is "S"

  18. Field Constraint (defrule you-wish“something with people and age” (person (name ?name) (age ?age&:(>?age 20)) => (printout t ?name“is over twenty.” crlf) (printout t ?name“is “?age“years old.” crlf)) Q1: Which patterns match this Condition? Q2: What is the rule doing?

  19. Condition Patterns with Logical Connectives Complex Conditions with logical connectives: (or (pattern1) (pattern2)) Rule becomes active if one of the patterns matches. example: (or (birthday) (anniversary)) matches fact base with facts (birthday) or (anniversary) Equivalent for: and(is default) not existsto be fulfilled for onematching fact forall to be fulfilled for all facts which match based on first fact and variable binding

  20. (defrulereport-emergency (or(emergency (emergency-type fire) (location ?building)) (emergency (emergency-type bomb) (location ?building)) ) => (printout t “evacuate “ ?building) ) Complex Condition Elements - or reports a building if there is a fire or bomb emergency in this building

  21. (defruleemergency-report (exists (or (emergency (emergency-type fire)) (emergency (emergency-type bomb))) ) => (printout t “There is an emergency.“ crlf ) ) Complex Condition Elements – exists prints one emergency-message if there is a fire or bomb emergency. (no further matching, firing, or printout)

  22. (defruleevacuated-all-buildings (forall (emergency (emergency-type fire | bomb) (location ?building) ) (evacuated (building ?building))) => (printout t “All buildings with emergency are evacuated “ crlf)) Complex Condition Elements – forall prints evacuated-message if for all buildings, which have a fire or bomb emergency, the building is evacuated.

  23. Exercise (defrulespecial-age “18, 21, 100” (or (person (name ?name) (age 18)) (person (name ?name) (age 21)) (person (name ?name) (age 100))) => (printout t ?name “ has a special age.”)) Task: Modify the condition pattern so that you use a variable for age, and field constraints for the values, and printout the name and age of any matching person.

  24. (deftemplate person (slot age (type INTEGER)) (multislot name (type STRING)) (slot gender (allowed-values f m)) ) (deffacts people (person (age 20) (name "Mike" "M." "Moore") (gender m)) (person (age 40) (name "James" "J." "James" ) (gender m)) (person (age 42) (name "Susan" "D." "More") (gender f)) (person (age 28) (name "John" "J." "Jones") (gender m)) ) (defrule what-am-I-doing (or (person (name ?first ?middle ?last&:(eq ?last "Moore"))) (person (name ?first ?middle ?last&:(eq ?last "More"))) ) => (printout t "Found " ?first " " ?last crlf) ) Q1: What is the rule doing? Q2: Can you simplify the Condition Element? Do it!

  25. bind-function bind-function – explicitly binds value to variable (bind?age (read)) stores value of single field which is read into single-field variable ?age (bind?name (readline)) stores line which is read as STRING into single-field STRING-variable ?address (bind?address (explode$ (readline))) explode$ splits line which is read as STRING into multifield-value which is stored in multislot-variable ?address

  26. Open, Close File Open file for read/write: (open “<file-name>” <logical-name> “r”) • <file-name> is physical file-name (path) • <logical-name> is name used in program • “r” indicates read-access (“w”, “r+”) example: (open “example.dat” my-file “r”) (readmy-file) Close file: (close <logical-name>)

  27. Input – read, readline read– input of single field readline – input of complete (line as string) general: (read <logical name>) <logical name> refers to file-name in program (read) keyboard is default read with bind-function to bind input to variable: (bind ?input (read)) (bind $?input (readline))

  28. Input – read, readline (read / readline <logical name>) • default is keyboard/terminal • file has to be opened using (open “<file-name>” <logical-name> “r”) • <file-name> is physical file-name (can include path) • <logical-name> is name used in read command • “r” indicates read-access example:(open “example.dat” example “r”) (read example) use with bind-function to bind input to variable

  29. Output - printout (printout <logical-name> ... ) • tterminal is standard • otherwise <logical-name> refers to a file-name file has to be opened using (open “<file-name>” <logical-name> “w” ) • <file-name> is physical file-name (can include path) • <logical-name> is name used in printout command • “w” indicates write-access example:(open “example.dat” my-output “w” ) (printout my-output ?name crlf)

  30. Rules - Runtime Effects refraction • each rule fires only once on the same data agenda • rules are activated in sequence and put on agenda; agenda is like a stack: the last rule fires first salience • sequence of rule firings - in case of a conflicts – is determined by their set salience factor: the higher the salience, the higher the rule priority

  31. Rules - Salience Rules defined with saliencefactor: (defrule say-hello (declare(salience 10)) (person (name ?name)) => (printout t “Hello,” ?name)) (defrulesay-happy-birthday (declare(salience100)) (person (name ?name)) => (printout t “Happy Birthday,” ?name)) The higher the salience, the higher the rulepriority in conflict situations.

More Related