C Language Integrated Production System (CLIPS)
A tool for building expert systems An expert system is a program which is
specifically intended to model human expertise or knowledge
Created in 1985 at NASA’s Johnson Space Center
2
Written in C for portability and speed Has been installed on many different
operating systemsWidely used in industry, academia
and government
3
Can be integrated with languages such as C, Java, Visual Basic
Different extensions are available: FuzzyCLIPS: an extension of CLIPS
incorporating fuzzy logic PHLIPS is a PHP extension that provides
a basic interface to the CLIPS environment
CLIPSNet, a .Net wrapper for CLIPS
4
Three ways to represent knowledge in CLIPS Rules▪ For heuristic knowledge base on experience
Deffunctions and generic functions▪ For procedural knowledge
Object Oriented Programming▪ For better (i.e. Modular) representation
5
CLIPS supports developing expert systems by providing some facilities An integrated editor Debugging tool Shell ▪ Portion of CLIPS which performs inferences or
reasoning
6
The CLIPS shell provides the basic elements of an expert system: Fact-list, and instance-list: Global
memory for data Knowledge-base: Contains all the rules,
the rule-base Inference engine: Controls overall
execution of rules
7
CLIPS has a LISP-like syntax Extensive use of parentheses ▪ E.g. as delimiters
It is case-sensitive
8
assert command for adding facts to the fact-list (assert (argument) )
Some example▪ (assert (is-a-country “Iran” ))▪ (assert (is-a-city “Tehran”))▪ (assert (has-population “Tehran”
14000000))
9
facts command for listing current facts
(facts)
Each fact has an identifier of the form ▪ f-{fact-index}
Duplicate facts are not allowed by default▪ set-fact-duplication allows duplicate fact entry.
10
Removing facts from the fact-list is called retraction and is done with the retract command.
To retract a fact, you must specify the fact index as the argument of retract
(retract (facts indices)
11
Example▪ (retract 2)
It is possible to retract multiple facts simultaneously ▪ (retract 3 4 5 6)
It is possible to retract all the facts▪ (retract *)
12
reset command to clear all the facts It insert a fact (initial-fact) as f-0 This fact is often used for convenience to
initially activate rules
14
clear command for removing all facts from memory It actually does more than just removing
facts Also removes all the rules
15
A fact such as (Tuesday) or (“Bahman”) is said to consist of a single field.
A field is a placeholder (named or unnamed) that may have a value associated with it.
The (Tuesday) fact has a single, unnamed field
Multi-field fact ▪ (Country Iran)
The order of unnamed fields is significant.▪ (Country Iran) vs. (Iran Country)
16
Symbol nil, which means "nothing" may be used for an empty field as a placeholder.
▪ (basket-content nil)
The basket yet contains nothing
17
A symbol is one type of field that starts with a printable ASCII character and is followed optionally by zero or more printable characters.
19
A string must begin and end with double quotes. The double quotes are part of the field. Zero or more characters of any kind can
appear between the double quotes.
21
All numbers in CLIPS are treated as long integers or double-precision floats
(assert (x 1.5)) (assert (y -1))
22
It is good rule-based programming style to use the first field of a fact to describe the
relationship of the following fields. When used this way, the first field is called a relation.
(basket-contents apple orange banana)
23
CLIPS provides several commands to help you debug programs
One command allows you to continuously watch facts being asserted and retracted
This is more convenient than having to type in a (facts) command over and over again and trying to figure out what's changed in the fact-list.
24
To start watching facts, enter the command (watch facts)
The right double arrow, ==>, means that a fact is entering memory
The left double arrow, <==, indicates a fact is leaving memory
25
A rule is similar to an IF THEN statement in traditional programming languages
Rules are defined by defrule construct
27
General syntax of a rule (defrule rule_name "optional_comment"(pattern_1) ;Left-Hand Side (LHS)(pattern_2) ;of the rule consisting of elements
;before the "=>"(pattern_N)=>(action_1) ;Right-Hand Side (RHS)(action_2) ;of the rule consisting of elements ;after the "=>"(action_M)) ;the last ")" balances the opening
; "(" to the left of "defrule". Be; sure all your parentheses
balance; or you will get error messages
28
An action is actually a function which performs some useful action
Typically has no return value
such as an (assert) or (retract)
29
(defrule capital-rule “simple rule about capitals"
(is-a-country ?country) ;Pattern1(has-capital ?country ?capital) ;Pattern2
=>
(assert (is-a-city ?capital)) ;Action1(assert (has-city ?country ?capital)) ;Action2) ;end of defrule
30
The name of a variable, or variable identifier, is always written by a question mark followed by a symbol that is the name of the variable.
31
CLIPS attempts to match the patterns of rules against facts in the fact-list.
If all the patterns of a rule match facts, the rule is activated and put on the agenda.
The agenda is a collection of activations which are those rules which match pattern entities.
Zero or more activations may be on the agenda.
32
The last part of a rule is the list of zero or more actions that will be executed when the rule fires.
The term fires means that CLIPS has selected a certain rule for execution from the agenda
33
When multiple activations are on the agenda, CLIPS automatically determines which activation is appropriate to fire
CLIPS orders the activations on the agenda in terms of increasing priority or salience
35
CLIPS always executes the actions on the RHS of the highest priority rule on the agenda.
This rule is then removed from the agenda and the actions of the new highest salience rule is executed.
This process continues until there are no more activations or a command to stop is encountered.
36
To see a rule, use the ppdefrule command pretty print rule To see a rule, specify the rule name as
an argument to ppdefrule
To list all the current rules, use the rules command
37
Use printout function to print something in the output
(printout t “Hello World!“ crlf))
letter "t” tells CLIPS to send the output to the standard output device of your computer, i.e. the terminal
40
Besides asserting facts in the RHS of rules, you also can print out information using the printout function
(defrule good_rule(today “Friday”)=>(printout t “No Study! No Work!“ crlf))
)41
CLIPS can read the information from the keyboard using the read function
(defrule simple-rule(initial-fact)=>(printout t “Enter your name:" crlf)(assert (Person (read) )))
42
The Inference Engine sorts the activations according to their salience. This sorting process is called conflict
resolution because it eliminates the conflict of deciding which rule should fired next.
43
CLIPS offers seven different modes of conflict resolution: depth, breadth, LEX, MEA, complexity, simplicity, and random.
It's difficult to say that one is clearly better than another without considering the specific application.
Even then, it may be difficult to judge which is "best."
44
The depth strategy is the standard default strategy of CLIPS.
In this strategy, is ordered from highest to lowest salience
45
Can help in writing rules whose patterns have a well-defined structure.
Templates are defined by the deftemplate construct Analogous to a record structure in
Pascal, or Class in C++ Defines a group of related fields in a
pattern
46
A deftemplate is a list of named fields called slots
Allows access by name rather than by specifying the order of fields
Contributes to good style in expert systems programs and is a valuable tool
A slot is a named single-slot or multi-slot.
47