NAME
g.infer
DESCRIPTION
g.infer is a tool to create rule-based data-driven workflows
from GRASS data layers and additional data sources.
g.infer can modify existing GRASS data layers, can create new
vector layers or can start additional additional GRASS modules. This
is controlled by an inference process, which applies a knowledge
base on a set of known facts (data). g.infer provides a
Production System to set up Expert Systems from domain
knowledge and GIS data layers.
The g.infer inference environment is based on a strict
separation of knowledge (rules) and data (facts and object
instances). Data consists of GRASS-derived spatial information and
other input. The g.infer inference engine applies the
knowledge, consisting of rules (stored in the rulebase), to the
available data. For development and testing, interactive access and
logging options are available.
g.infer provides a flexible environment to start rule-based
work. For complex tasks there are also advanced capabilities to
extend the knowledge modelling whenever necessary. This approach can
be used for geodata classification, GIS workflow control and other
tasks.
The C-Language Integrated Production System (CLIPS) Expert System
Shell environment is embedded within g.infer using the
pyCLIPS Python module. In depth information is found in the
References, which contain also links to literature describing the
projects Jess and Drools which are based on CLIPS.
Their documentation contains additional clues for CLIPS-related
development.
The exchange of data between the GRASS and CLIPS environments is
handled by extensions of the pyCLIPS functionality, connecting both
GRASS and CLIPS. See the "Notes on g.infer pyCLIPS
extensions" section for details.
Input
g.infer can ingest multiple input sources as data: Spatial
information can be imported from GRASS data layers (raster, rast3d,
point-vector) and additional sources. Rule base-related constructs
(templates, facts, classes and instances) are read from external
files or built-in rule bases via the library option.
Additional data can also be imported during the inference process if
requested by the rule base. The user can further enter facts and
rulebase elements via an interactive CLIPS prompt.
Output
g.infer can manipulate the content of imported GRASS data
layers and other sources of data. These changes can be written back
to the respective GRASS layers using the export option for
persistent storage. A new vector layer can be created through the
output option. The creation of additional GRASS layers can be
invoked by the rulebase beyond the limited range of options provided
by g.infer module parameters.
Rulebase
The g.infer rulebases contains the working knowledge for
the inference process, which is seperate from the data (facts). They
are read from file by the rulebase option or selected using
the library option. Rulebases can be edited via the
interactive CLIPS prompt (-i flag) before the actual inference run.
There are three ways to represent knowledge in g.infer. They are
based on concepts from the CLIPS programming language (see CLIPS
documentation for details). All of them can be part of the rulebase:
- Rules, for heuristic knowledge based on experience. Rules
can be applied to facts and objects.
- Functional Programming, where functions defined as code
returning values based on the provided input.
- Object-oriented programming, supporting features such as
classes, message-handlers, abstraction, encapsulation, inheritance
and polymorphism.
Rules adhere to a IF THEN layout defined by the CLIPS programming
language (see below). The condition antecedent ("IF") -part is
referred to as left hand side (LHS), while the invoked
consequent ("THEN") is called the right hand side (RHS). LHS
and RHS sides of a rule statement are connected by the "=>"
characters.
Inference Engine
The inference engine is the part of the g.infer module
which evaluates what rules are to be applied, based on the currently
available data (facts).
The CLIPS inference engine used in g.infer is based on the
Rete algorithm (Forgy 1982), using a forward-chaining data-driven
approach. The order in which rules are to be executed can be
controlled in three ways: By explicitly defining salience
values for each rule, knowledge base partitioning by modules
or implicitly by setting the conflict resolution strategy
(strategy option). The section "Rulbase Development, Operation
and Debugging" holds a more detailed description.
Performance
The Rete-algorithm performs well for a change below 10 percent of
the available data (facts) during an inference run. Scenarios, in
which the complete content of a GRASS layer must be changed,
resulting in 100 percent change, will result in decreased performance.
g.infer uses the current settings of the GRASS region to
create facts from the GIS layers which are provided as input. The
resolution of the region must be set appropriately for the task, as
a very high resolution will result in a large number of facts.
Knowledge Engineering in g.infer
Knowledge engineering (modelling) in g.infer involves in
most cases the definition of rules for the rulebase. It can also
include more complex programming tasks, such as conditions, loops,
functions and object oriented programming.
For knowledge modelling and programming in g.infer, the
programming language of the CLIPS Expert System Toolkit is used,
which is closely related to the programming language LISP.
For an in depth description of the CLIPS language, refer to the
CLIPS Users's Guide and Reference Manuals (Giarratano 2007, 2008).
A useful introduction to LISP is provided by Graham, 1995.
In the following, the given examples refer to a rulebase and
are imported via a rulebase file, from a built in demo rulebase, or
are entered using the interactive CLIPS prompt. This CLIPS-based
programming can not be mixed with GRASS GIS scripting, but can
invoke GRASS modules as part of the RHS of rules.
Rulebase Notation
g.infer rulebase constructs use a fully parenthesized polish
prefix notation: Any term, or formula, must be put in braces, with
the operator preceding the operands:
(operator operand1 operand2 ... operandN)
This differs from the infix notation commonly used in GRASS GIS, like in
r.mapcalc:
Data Types
g.infer's rule engine provides eight primitive data types
for representing information. As the programming language of the
CLIPS Production System is weakly typed, variables can be declared
without explicitly setting a type. The available types are
- float, integer, symbol, string, external-address,
fact-address, instance-name and instance-address.
- Numeric information can be represented using floats and
integers.
- Symbolic information can be represented using symbols and
strings.
A number consists only of digits (0-9), a decimal point (.), a sign
(+ or -), and, optionally, an (e) for exponential notation with its
corresponding sign. A number is either stored as a float or an
integer. Any number consisting of an optional sign followed by only
digits is stored as an integer. All other numbers are stored as
floats.
Facts
Facts are the common high level form for representing information in
g.infer. Within the CLIPS Production System, facts are the
fundamental unit of data to be processed by the rulebase to infer
information by the firing of applicable rules. Each fact represents
a piece of data which has been placed in the overall fact list
of the currently known facts.
Facts may be added to the fact list (using the assert
command), removed from the fact list (using the retract
command), modified (using the modify command), or duplicated
(using the duplicate command) by either direct user
interaction or while the rule base is executed. The number of facts
in the fact list and the amount of information that can be
stored within a fact is limited only by the amount of available
memory. If a fact is to be asserted into the fact list which exactly
matches an already existing fact, the new assertion will be ignored.
This default behaviour can be changed.
Some CLIPS language commands, including retract, modify, and
duplicate, require a fact to be specified by a reference. A
fact can be specified either by fact index or fact address: Whenever
a fact is asserted (or modified) it is assigned a unique index
number called its fact index. Fact indices start at zero and
are incremented by one for each new or changed fact. Whenever a
reset or clear command is given, the fact indices restart
at zero. A fact may also be specified through the use of a
fact address. A fact address can be obtained by capturing the
return value of commands which return fact addresses (such as assert,
modify, and duplicate) or by binding a variable to the fact address
of a fact which matches a pattern on the LHS of a rule. A
fact identifier is a shorthand notation for printing a fact. It
consists of the character f, followed by a dash, followed by
the fact index of the fact.
There are two categories of facts, ordered facts and
non-ordered facts. Both types are applied in g.infer to
represent information imported from the GRASS GIS environment.
Ordered facts
Ordered facts consist of a symbol followed by a sequence of zero or
more fields separated by spaces and delimited by an opening
parenthesis on the left and a closing parenthesis on the right.
Ordered facts encode information positionally and can contain
multiple data fields. The first field of an ordered fact specifies a
relation that applied to the remaining fields in the ordered
fact.
For example,
(is-a GRASS GIS)
states that GRASS is a GIS.
See the CLIPS Introduction and User Guides in the Reference Section
for an in-depth discussion.
A simple fact can contain multiple fields for content:
(assert (trail "OtterTrail" scenic flat))
GRASS environment variables as ordered facts
Ordered facts are used to represent GRASS enironment variables into
g.infer, including g.region parameters. These ordered facts can be
manipulated within the CLIPS environment and be used when calling
GRASS modules from within CLIPS. They must be exported back into
GRASS to become permanent within the current session, which is not
done by default. The following representations of GRASS environment
variables as facts are generated by default:
REGION_ROWS, REGION_COLS, REGION_CELLS, REGION_NSRES, REGION_EWRES,
REGION_N, REGION_S, REGION_E, REGION_W,
REGION_ROWS3, REGION_COLS3, REGION_CELLS3, REGION_NSRES3, REGION_EWRES3,
REGION_TBRES, REGION_T, REGION_B, REGION_DEPTHS,
GISDBASE, LOCATION_NAME, MAPSET, GRASS_GUI
Non-ordered facts
Facts to contain structured information require a template to
define the structure:
Template based, non ordered facts allow to structure the content of
a fact by assessing data fields by name (and type). The
deftemplate construct is used to create a named template
(which can then be used to access fields by name). This approach
is used to import GRASS layers in g.infer to create the
respective facts.
The deftemplate construct allows the name of a template to be
defined along with zero or more definitions of named fields, also
called slots. Unlike ordered facts, the slots of a deftemplate fact
may be constrained by type, value, and numeric range. In addition,
default values can be specified for a slot. A slot consists of an
opening parenthesis followed by the name of the slot, zero or more
fields, and a closing parenthesis.
Deftemplate facts are easily distinguished from ordered facts by
their first field. If the symbol serving as the first field
corresponds to the name of a deftemplate, then the fact is a
deftemplate fact. Like ordered facts, deftemplate facts are enclosed
by an opening parenthesis on the left and a closing parenthesis
on the right.
In addition to being asserted and retracted, deftemplate facts
can also be modified and duplicated (using the modify and
duplicate commands). Modifying a fact changes a set of
specified slots within that fact. Duplicating a fact creates a
new fact identical to the original fact and then changes a set
of specified slots within the new fact. The benefit of using the
modify and duplicate commands is that slots which do not change,
can be left out in the statement.
Examples are provided in the built-in rule bases via the
library-option and in the CLIPS User's Guide.
Template based Facts for GRASS Layers
Whenever a GRASS layer is imported by g.infer, a template is
created according to its data structure and facts are asserted
for the layers content.While the template for vector layers will
differ depending on the attribute layers, raster data templates
adhere to the following structure:
Raster:
(geo_test "a comment" (x 599000.0) (y 4921800.0)
(value 5) (attribute "something"))
Vector: SOIL EXAMPLE (field as point layer)
Rast3d: (random_slice_00009 (x 599000.0) (y 4921800.0) (z 9.0)
(value 1.0))
"_slice_000009" has been added by g.infer for
internal reference.
Rules
The primary method of representing and modifing knowledge in
g.infer are rules. Any g.infer rulebase comprises
of a set of rules which collectively solve a classification task,
establish a workflow or do similar. Rules are used to represent heuristics,
or "rules of thumb", which specify a set of actions to be performed
for a given situation. Rules can cause actions such as the creation,
modification or deletion of facts or the call-up of GRASS modules and scripts.
A rule is composed of an antecedent and a consequent.
The antecedent of a rule is also referred to as the if portion
or the left hand side (LHS) of the rule.
The consequent of a rule is also referred to as the then portion
or the right hand side (RHS) of the rule.
The antecedent of a rule (LHS) is a set of conditions
(or conditional elements) which must be satisfied for the rule
to be applicable. The conditions of a rule are satisfied based on
the existence or non existence of specified facts in the fact list
or specified instances of user defined classes in the instance list.
One type of condition which can be specified is a pattern.
Patterns consist of a set of restrictions which are used to determine
which facts or objects satisfy the condition specified by the pattern.
The process of matching facts and objects to patterns is called
pattern matching. A mechanism, called the inference engine,
matches patterns against the current state of the fact list and
instance list and determines which rules are applicable during the
inference run.
The consequent of a rule (RHS) is the set of actions to be
executed when the rule is applicable. This is colloquially refefred
to as "the rule fires". The actions of applicable rules are executed
when the inference engine is instructed to begin execution of applicable rules.
If more than one rule is applicable, the inference engine uses a
conflict resolution strategy to determine which rule should
fire first. The actions of the selected rule are executed (which can
change the overall list of applicable rules). Afterwards the inference
engine selects another rule and executes its actions.
This process continues until no applicable rules remain.
In many ways, rules can be thought of as IF - THEN statements found
in procedural programming languages. However, the conditions of an
IF - THEN statement in a procedural language are only evaluated when
the program flow of control is directly at the IF - THEN statement.
In contrast, rules act like WHENEVER - THEN statements.
The inference engine always keeps track of rules which have their
conditions satisfied and thus rules can immediately be executed when
they are applicable.In this sense, rules are similar to exception
handlers found in other programming languages.
Comments
Rulebase content and other CLIPS code can be commented by starting
lines with a semicolon.
Variables
Variables in CLIPS are weakly typed.
They are not restricted to a predefined data type.
So when creating a variable, it is not required to provide typing
information.
The defglobal construct allows variables to be defined which
are global in scope throughout the CLIPS environment.
Such a global variable can be accessed anywhere in the CLIPS environment
and retains its value independent of other constructs.
In contrast, some constructs (such as defrule and deffunction) allow local
variables to be defined within the definition of the construct.
These local variables can be referred to within the construct, but have
no meaning outside the construct.
Functions
A function in CLIPS is a piece of executable code identified by a
specific name which returns a useful value or performs a side effect
(such as printing a message).
The defun command is used to define new functions.
The body of a deffunction is a series of expressions similar to
the RHS of a rule that are executed in order by the CLIPS inference
engine when the deffunction is called. The return value of a deffunction
is the value of the last expression evaluated within the deffunction.
Calling a deffunction is identical to calling any other function in CLIPS.
Function Definition Example:
(defun fahrenheit_celsius (celsius_value) (+ (* celsius_value 1.8) 32))
Examples are provided in the built-in rule bases (library option) and
in the CLIPS User's Guide and Basic Programming Guide.
Conditionals
Examples for conditions, comparing facts and variables with each other,
are provided in the built-in rule bases (library option) and in the
CLIPS User's Guide and Basic Programming Guide.
Rulebase Development, Operation and Debugging:
g.infer is a tool to set up and operate rule-based workflows
for information classification and data processing. The workflow will be
loaded via a 'rulebase'-file or a built in rulebase, consisting of a set
of rules, called a knowledge base.
Rule activiation is controlled by the g.infer rule engine,
based on spatial data from the GIS layers.
When a rule is activated for the first time, it is placed on the agenda,
based (in order) on the following factors:
a) Newly activated rules are placed above all rules of lower salience
and below all rules of higher salience.
b) Among rules of equal salience, the current conflict resolution strategy
is used to determine the placement among the other rules of equal salience.
c) If a rule is activated (along with several other rules) by the same
assertion or retraction of a fact, and steps a and b are unable to specify
an ordering, then the rule is arbitrarily (not randomly) ordered in relation
to the other rules with which it was activated. In this respect, the order
in which rules are defined has an arbitrary effect on conflict resolution
(which is also dependent upon the current underlying implementation of rules).
This arbitrary ordering for the proper execution of rules should not be
depended on for knowledge modelling.
Once a knowledge base (in the form of rules) has been loaded into g.infer
and the fact and instance lists are available, the inference engine
is ready to execute rules:
- a)The right hand side (RHS) actions of the selected rule
are executed. The use of the return function on the RHS of a rule may
remove the current focus from the focus stack. The number of rules fired
is incremented for use with the rule firing limit.
- b) As a result of step b, rules may be activated or deactivated.
Activated rules, whose conditions are currently satisfied,
are placed on the agenda of the module in which they are defined.
The placement on the agenda is determined by the salience of the rule and
the current conflict resolution strategy. Deactivated rules are removed
from the agenda.
- c) If dynamic salience is being used,
the salience values for all rules on the agenda are reevaluated.
Repeat the cycle beginning with step a.
- d)If a previously defined rule firing limit has been reached
or there is no current focus, then execution is halted. The top rule on
the agenda of the module which is the current focus is selected for execution.
If there are no rules on that agenda, then the current focus is removed
from the focus stack and the current focus becomes the next module on
the focus stack. If the focus stack is empty, then execution is halted,
otherwise step a is executed again.
Whenever a rule modifies a specific fact, the particular fact is retracted,
that is, removed from the fact stack and a new (altered)
fact is instantiated and added on the fact stack.
A rule base can be designed to act similar to the r.mapcalc module.
This requires a close coupled multistage design of the rule base.
It is easily possible to construct rule sets which act like an infinity-loop,
which never terminates. This is in the most part undesired,
but may be an asset for monitoring activities.
Examples are provided in the built-in rule bases (library option)
and in the CLIPS User's Guide and Basic Programming Guide.
Conflict Resolution
When more than one rule are eglible to fire, a priorization among the
candidate rules is needed. Rules can be explicitly assigned a rank/priority
called salience.
The conflict resolution strategy is an implicit mechanism for specifying
the order in which rules of equal salience should be executed.
g.infer provides seven conflict resolution strategies.
The default strategy is depth. The current strategy can be set by using the set
strategy command (which will reorder the agenda based upon the new strategy):
- Breadth Strategy (breadth): Newly activated rules are placed below
all rules of the same salience.
- Complexity Strategy (complexity):
Among rules of the same salience, newly activated rules are placed above all
activations of rules with equal or lower specificity.
- Depth (depth: default):
Newly activated rules are placed above all rules of the same salience.
- LEX Strategy (lex):
Among rules of the same salience, newly activated rules are placed using
the OPS5 strategy of the same name. First the recency of the pattern entities
that activated the rule is used to determine where to place the activation.
Every fact and instance is marked internally with a "time tag" to indicate its
relative recency with respect to every other fact and instance in the system.
The pattern entities associated with each rule activation are sorted in descending
order for determining placement. An activation with a more recent pattern
entities is placed before activations with less recent pattern entities.
- MEA Strategy (mea): Among rules of the same salience,
newly activated rules are placed using the OPS5 strategy of the same name.
First the time tag of the pattern entity associated with the first pattern
is used to determine where to place the activation.
An activation thats first pattern's time tag is greater than another activations
first pattern's time tag is placed before the other activation on the agenda.
If both activations have the same time tag associated with the first pattern,
then the LEX strategy is used to determine placement of the activation.
As with the CLIPS LEX strategy, negated patterns have pseudo time tags.
- Simplicity Strategy (simplicity):
Among rules of the same salience, newly activated rules are placed above all
activations of rules with equal or higher specificity.
- Random Strategy (random):
Each activation is assigned a random number which is used to determine its
placement among activations of equal salience.
Salience
The preferred mechanisms in g.infer for ordering the execution of rules
are explicitly assigned salience values and knowledge base grouping using
modules. Salience allows one to explicitly specify that one rule should be
executed before another rule.
Options to apply salience values:
- when-defined (default): salience evaluation at the time of rule
definition
- when-activated: salience evaluation at the time of rule definition
and upon being activated
- every-cycle: salience values will be calculated dynamically at
run-time between rule firings
Defmodules
Modules allow one to explicitly specify that all of the rules in a particular
group (module) should be executed before all of the rules in a different group.
Defmodules allow a knowledge base to be partitioned. Every construct defined
must be placed in a module. The programmer can explicitly control which
constructs in a module are visible to other modules and which constructs
from other modules are visible to a module. The visibility of facts and
instances between modules can be controlled in a similar manner.
Modules can also be used to control the flow of execution of rules.
Examples are provided in the CLIPS User's Guide and Basic Programming
Guide.
Agenda
The agenda is the list of all rules which have their conditions
satisfied (and have not yet been executed). If the knowledge base is
partitioned into multiple modules, each module has its own agenda.
The agenda acts similar to a stack (the top rule on the agenda is
the first one to be executed).
Focus
The current focus determines which agenda the run command uses during
execution. The reset and clear commands automatically set the current
focus to the MAIN module.
Logging and Debugging
Several features of g.infer support the development and debugging
of rule-bases:
Debugging: g.infer Flags for Logging, Interaction and Abort:
- x-Flag: Stop-option:
The stop-option terminates g.infer following an optional invocation
of a interactive CLIPS shell and before the automated inference run.
- i-Flag: Interactive CLIPS shell:
The launching of an CLIPS shell before the automated inference run allows to
query interactively all aspects of the current CLIPS session. Ctrl-D
exits from the interactive Shell.
- e-Flag: Traceback-Mode: CLIPS error messages are forwarded to g.infer.
- d-Flag: Dribble-Mode: All CLIPS entities which are listed via the
Trace-option are written down to file for follow-up analysis.
- save-instances: Allows to save COOL constructs, facts, instances
to an ASCII file
- bsave-instances: Allows to save COOL constructs, facts, instances
to a binary file.
- watch-Option: Prints watch messages for CLIPS constructs.
These are stored to file if the dribble-flag has been set.
Watch-Option: Logging of Knowledge Base Performance
See the section "Notes on CLIPS" for complete definition of terminology.
- activations: All rule activations and deactivations will be displayed.
- compilations: If compilations are watched, the progress of
construct definitions will be displayed.
- deffunctions: The start and finish of deffunctions will be displayed.
- facts: All fact assertions and retractions will be displayed.
- focus: Changes to the current focus will be displayed.
- genericfunctions: The start and finish of generic functions will
be displayed.
- globals: Variable assignments to globals variables will be displayed.
- instances: Creation and deletion of instances will be displayed.
- methods: The start and finish of individual methods within a
generic function will be displayed.
- messagehandlers: FOO
- messages: The start and finish of messages will be displayed.
- rules: All rule firings will be displayed.
- slots: Changes to any instance slot values will be displayed.
- statistics: Timing information along with other information
(average number of facts, average number of activations, etc.)
will be displayed after a run. Note that the number of rules fired and
timing information is not printed unless this item is being watch.
- all: If all is watched, then all other watch items will be watched.
By default, only compilations are watched.
Config-Option
config
Configuration options for CLIPS engine: auto-float-dividend,
dynamic-constraint-checking,fact-duplication,incremental-reset,
reset-globals,sequence-operator-recognition,static-constraint-checking.
- auto-float-dividend: the dividend of the division function
is automatically converted to a floating point number
- dynamic-constraint-checking: Slot values are checked for
constraint violations (FALSE by default).
- fact-duplication: A duplicate fact is asserted with a new
fact-index (FALSE by default).
- incremental-reset: Newly defined rules are updated based upon
the current state of the fact-list (TRUE by default).
- reset-globals: Global variables are reset to their original
values when the reset command is performed(TRUE by default).
- sequence-operator-recognition: Multifield variables are
expanded and passed as separate arguments in the function call
(FALSE by default).
- static-constraint-checking: Constraint violations are checked
when function calls and constructs are parsed (TRUE by default).
Classdefault-Option
classdefault
Class default of CLIPS engine: convenience(default),conservation
- convenience: (default) In convenience mode, for the purposes
of role inheritance, system defined class behave as concrete classes;
for the purpose of pattern-match inheritance, system defined classes behave
as reactive classes unless the inheriting class is abstract; and the default
setting for the create-accessor facet of the class slots is read-write.
- conservation: The role and reactivity of system-defined classes
is unchanged for the purposes of role and pattern-match inheritance and
the default setting for the create-accessor facet of the class slots is ?NONE.
Rulebase Libraries
g.infer provides several pre-configured rulebases.
The rulebases from the library can be used alone or in combination by
user-defined rulebases. They provide a basic interactive user interface
to launch specific demo applications and can also be started from the
CLIPS prompt (using the (run) command). All demo rulebases contain
extensive comments to document their functionaility for the interested user.
- reference: Multiple examples CLIPS-language related programming
including facts, rules, templates, etc..
- spearfish: Examples on the use of GRASS modules in rule based
programming. This library requries the Spearfish ("spearfish60") location.
Notes on g.infer pyCLIPS extensions
g.infer extends the pyCLIPS- amd CLIPS environments with several
commands to communicate and interact the GRASS GIS:
- ginfer_printout: Extends the CLIPS printout command for
use in g.infer:
(defrule duck_print1 (animal-is duck) =>
(ginfer_printout t "Demo: ginfer_printout T CRLF" crlf)
(ginfer_printout stdout "Demo: ginfer_printout STDOUT CRLF" crlf))
- ginfer_readline: Extends the CLIPS readline command for g.infer:
(defrule duck_ask1 (animal-is duck) =>
(ginfer_printout t "Demo: ginfer_read: Feedback, please:" crlf)
(assert (ducky1 (ginfer_read t)))(ginfer_printout t " " crlf))
- grass_message: Uses the g.message module to print messages:
(defrule verbose_python_call0 (verbose on) =>
(assert (examine sections))(python-call grass_message "GRASS_MESSAGEd: works!"))
- grass_run_command: Invokes a GRASS module from within the CLIPS shell:
(defrule grassrun_glist (verbose on) =>
(python-call grass_run_command "g.list" "f" "type=rast,vect"))
Examples of the invocation of GRASS modules as part of the RHS of rules
are provided in the built in demo rule bases.
CLIPS Object Oriented Language
The CLIPS Object Oriented Language (COOL) includes elements of
data abstraction and knowledge representation. It supports abstraction,
encapsulation, inheritance, polymorphism and dynamic binding.
An overview of COOL as a whole, incorporating the elements of both
concepts is given in the CLIPS Basic Programming Guide.
The primary difference between objects and templates (or non ordered)
facts is the notion of inheritance. Inheritance allows the properties
and behavior of a class to be described in terms of other classes.
COOL supports multiple inheritance: a class may directly inherit slots
and message-handlers from more than one class.
Since inheritance is only useful for slots and message - handlers,
it is often not meaningful to inherit from one of the primitive type classes,
such as MULTIFIELD or NUMBER. This is because these classes cannot
have slots and usually do not have message - handlers.
EXAMPLES
Examples are provided in the built in rule bases (library option).
BUGS
REFERENCES
Browne P. (2009) JBOSS Drools Business Rules. Packt Publishing. ISBN 1-847-19606-3
Forgy C., (1982) Rete: A Fast Algorithm for the Many Pattern/
Many Object Pattern Match Problem", Artificial Intelligence, 19, pp 17–37
Friedman-Hill E. (2003). Jess in Action. Manning Publications. ISBN 1-930-11089-8
Garosi F. (2008). PyCLIPS Manual Release 1.0.
URL http://sourceforge.net/projects/pyclips/files/pyclips/pyclips-1.0/pyclips-1.0.7.348.pdf/download
Giarratano J., Gary R. (2004). Expert Systems: Principles
and Programming. Course Technology. ISBN 0-534-38447-1
Giarratano, J.C. (2007). CLIPS User's Guide.
URL http://clipsrules.sourceforge.net/documentation/v630/ug.pdf
Giarratano, J.C. (2007). CLIPS Reference Manual: Basic Programming Guide.
URL http://clipsrules.sourceforge.net/documentation/v630/bpg.pdf
Giarratano, J.C. (2008). CLIPS Reference Manual: Advanced Programming Guide.
URL http://clipsrules.sourceforge.net/documentation/v630/apg.pdf
Graham P. (1995). ANSI Common Lisp. Prentice Hall, ISBN 0-133-79875-6
Löwe P. (2004). Technical Note - A Spatial Decision Support System for
Radar-Metereology in South Africa. Transactions in GIS. 8(2):235-244.
Blackwell Publishing Ltd. Oxford.
Löwe P. (2004). Methoden der Künstlichen Intelligenz in Radarmeteorologie
und Bodenerosionsforschung (Dissertation). URL http://opus.bibliothek.uni-wuerzburg.de/volltexte/2004/759/
Jackson P. (1998). Introduction to Expert Systems. Addison Wesley.
ISBN 0-201-87686-8
Puppe F. (1993) Systematic Introduction to Expert Systems. Springer.
ISBN 3-540-56255-9
Riley G., (2008). The History of CLIPS.
URL http://clipsrules.sourceforge.net/WhatIsCLIPS.html#History
Rudolph G. (2008). Some Guidelines For Deciding Whether To Use a Rule Engine.
URL http://www.jessrules.com/jess/guidelines.shtml
SEE ALSO
r.fuzzy,
r.mapcalc: Raster algebra,
r.infer,
v.in.ascii: Definition of vector columns for output vectors
AUTHOR
Peter Löwe
Main index - general index - Full index
© 2003-2016 GRASS Development Team