intro to jess the java expert system shell by jason morris morris technical solutions

Post on 23-Dec-2015

218 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Intro to Jess The Java Expert System

Shell

By Jason MorrisMorris Technical Solutions

Quotable Quotes

Each problem that I solved became a rule which served afterwards to solve other problems. - Rene Descartes

Quotable Quotes

As a rule we disbelieve all the facts and theories for which we have no use. - William James

Quotable Quotes

Hell, there are no rules here -- we're trying to accomplish

something. - Thomas A. Edison

Quotable Quotes

Get your facts first, and then you can distort them as much as you please. - Mark Twain

Quotable Quotes

If the facts don't fit the

theory, change the facts. - Albert Einstein

Quotable Quotes

There are two rules for success:

1) Never tell everything you know. - Roger H. Lincoln

Quotable Quotes

Facts do not cease to exist just because they are ignored. - Aldous Huxley

Agenda

• What are expert systems?• What are rule-based expert

systems?• Introduction to Jess• The Jess Language

5 minute break

Agenda

• Scripting & The Jess API• Demo 1 : Design Pattern Expert• Demo 2 : Catalog Servlet• References and Further Study• Q & A

Expert Systems…

• Are a branch of artificial intelligence.

• Simulate human reasoning in some domain.

• “Reason” by heuristic or approximate methods.

• Explain and justify solutions in user-friendly terms.

Types Of Expert Systems

• Neural Networks • Blackboard Systems• Belief (Bayesian) Networks

• Case-Based Reasoning• Rule-Based Systems

Rule-Based Expert Systems

• Originated from AI research in the 70s and 80s.

• Problem data stored as facts.• “Reason” using IF…THEN…ELSE

rules.• Can “reason” deductively (forward-

chaining) or inductively (backward-chaining).

When to Use Rule-Based Systems

• Problem Domain = narrow, well-understood domain theory

• Knowledge Representation = facts and rules

• Output = recommendation• Explanation = rule firing trace• Learning Ability = generally no

(but…)

Inference Process

1. Rules and facts compared using pattern matcher.

2. Matched rules activated into a conflict set.

3. Conflict set resolved into agenda (process called conflict resolution).

4. Rule engine fires on agenda.5. Engine cycles until all rules are

satisfied.

The Java Expert System Shell

• Developed at Sandia National Laboratories in late 1990s.

• Created by Dr. Ernest J. Friedman-Hill.

• Inspired by the AI production rule language CLIPS.

• Fully developed Java API for creating rule-based expert systems.

Rule-Based Expert System Architecture

• Rule Base (knowledge base)• Working Memory (fact base)• Inference Engine (rule engine)

Inference (Rule) Engines

• Pattern Matcher – decides what rules to fire and when.

• Agenda – schedules the order in which activated rules will fire.

• Execution Engine – responsible for firing rules and executing other code.

Inference Process

• Match the facts against the rules.• Choose which rules to fire.• Execute the actions associated

with the rules.

How Does Jess Work?

• Jess matches facts in the fact base to rules in the rule base.

• The rules contain function calls that manipulate the fact base and/or other Java code.

• Jess uses the Rete (ree-tee) algorithm to match patterns.

• Rete network = an interconnected collection of nodes = working memory.

Jess Architecture Diagram

WORKINGMEMORY

RULE BASE

EXECUTIONENGINE

INFERENCEENGINE

PATTERNMATCHER

AGENDA

Procedural Programming

• Traditional programming (BASIC, C, FORTRAN, Pascal, etc.).

• Largely based on functions.• Programmer controls logic.• Sequential and deterministic.• Object-oriented programming is

procedural within object methods.

Declarative Programming

• New programming paradigm - rules.

• Programmer does not really control code logic.

• Rule engine finds most efficient “path” of code execution.

• Replaces hard to maintain nested IF…THEN…ELSE coding.

Wait a minute!

Well…yes and no…but don’t worry, Calvin!

What? I…I can’t control my code??

Thought Experiment…

• Imagine writing a procedural/OOP algorithm to solve a jigsaw puzzle.

• 500+ pieces, different shapes and colors.

• Polymorphism runs amok!

Yet we manage to solve the puzzle…

Intuition and Rules

• Dump the puzzle pieces on a card table in no particular order.

• Your brain instinctively begins to apply rules to solve the puzzle!

• What might this look like in code?

Intuitive Inferencing

(corner_found(piece_is_corner)=>(assert corner-found)(save_piece))

(corner_found(piece_is_corner)=>(assert corner-found)(save_piece))

(edge_found(piece_is_edge)=>(assert edge-found)(save_piece))

(edge_found(piece_is_edge)=>(assert edge-found)(save_piece))

Your brain “knows” what to do with a corner piece …

… and an edge piece.

What’s Going On…

• Your brain recalls rules or heuristics to solve the problem.

• Your brain pattern-matches, prioritizes, and applies rules according to the facts in memory.

• A particular solution algorithm emerges as rules “fire” on facts.

The Jess Language

• Architecturally inspired by CLIPS• LISP-like syntax.• Basic data structure is the list.• Can be used to script Java API.• Can be used to access JavaBeans.• Easy to learn and use.

Obligatory Tradition

(printout t “Hello PJUG-ers!” crlf)(printout t “Hello PJUG-ers!” crlf)

Your very first Jess program!

Lists in Jess

• (a b c) ; list of tokens• (1 2 3) ; list of integers• (+ 2 3) ; an expression• (“Hello world!”) ; a string• (foo ?x ?y) ; a function call

Here are some valid lists in Jess:

Jess Variables

• Named containers that hold a single value.

• Untyped. Begin with a ? mark.• Can change types during lifetime.• Assigned using bind function.

Jess Variables and Lists

EXAMPLE: Adding two numbers

(bind ?x 2) ; assign x = 2(bind ?y 3) ; assign y = 3(bind ?result (+ ?x ?y)) ; find sum

Everything is a list in Jess!

Control Flow

• foreach• if/then/else• while

• apply• build• eval• progn

Common Jess-specific

Jess Functions

(deffunction get-input()“Get user input from console.”(bind ?s (read))(return ?s))

Even functions are lists.

Jess Function Example

(deffunction area-sphere (?radius)

“Calculate the area of a sphere”

(bind ?area (* (* (pi) 2)(* ?radius ?radius)))

(return ?area))

Jess Function Example

(printout t "The surface area of a radius = 2 meter sphere is " +

(area-sphere 2) + " m^2")

How do we use this in Jess?

Working With Facts

• Facts have a head and one or more slots.

• Slots hold data (can be typed).• Multislots can hold lists. • You can modify slot values at

runtime.• Facts are constructed from

templates.

Jess Fact Types

• Ordered – head only.• Ordered – single slot.• Unordered – multiple slot, like a

database record.• Shadow – slots correspond to

properties of a JavaBean.

Deftemplate

Used to define the structure of a fact.

(deftemplate pattern “A design pattern.”(slot name)(slot type (default “creation”))(slot intent)(slot solution))

Asserting Facts

;; Asserting a new “pattern” fact.

(printout t “Enter pattern name:” crlf)

(bind ?x getInput)(assert pattern (name ?x))

Facts store the initial conditions.

All Kinds of Facts

;; An ordered fact with no slots – a placeholder that indicates state.

(assert(answer-is-valid))

;; A ordered fact of one slot

(assert(weightfactor 0.75))

Shadow Facts

• defclass – creates a deftemplate from a bean.

• definstance – adds bean to working memory.

Shadow facts are unordered facts whose slots correspond to the properties of a JavaBean.

Jess Rules…

• … are the knowledge-base of the system.

• … fire only once on a given set of facts.

• … use pattern constraints to match facts.

• … are much faster than IF-THEN statements.

Rule Syntax

• Rules have a “left-hand” side (LHS) and a “right-hand” side (RHS).

• The LHS contains facts fitting certain patterns.

• The RHS contains function calls.

Simple Rule Example

;; A not very useful error handler(defrule report-error

(error-is-present)=>(printout t “There is an error” crlf))

Checking working memory state.

A More Complex Rule

;; A more useful error handler(defrule report-err?err <- (is-error (msg ?msg))=>(printout t "Error was: " ?msg crlf)(retract ?err))

Using pattern bindings in rules.

More Pattern and Control Tools

• Literal / variable constraints

• Logical conditional tests

• Predicate functions

• Salience• Modules• Defquery• Backward-

chaining

matching control and structure

Break Time!

Let’s take a quick 5 minute pause…

Scripting Java from Jess

• You can interactively access all Java APIs from Jess.

• This makes exploring Java somewhat easier and immediate.

• No code, compile, debug cycle.

Scripting Java with Jess

(import javax.swing.*)

(import java.awt.*)

(import java.awt.event.*)

(set-reset-globals FALSE)

(defglobal ?*frame* = (new JFrame "Hello PJUG"))

(defglobal ?*button* = (new JButton "Click my PJUG"))

(?*frame* setSize 500 300)

((?*frame* getContentPane) add ?*button*)

(?*frame* setVisible TRUE)

swingDemo.bat

Demo 1: PAT (Pattern Analysis Tool)

• PAT is a simple decision-tree for choosing a Java design-pattern.

• Uses an initial interview to establish problem space.

• Recommends a GoF Java design-pattern to fit the available facts.

examples/pattern.clpexamples/pattern.clp

The Jess API

• jess - inference engine “guts”.• jess.awt – GUI wrappers.• jess.factory - Allows extensions

that “get into the guts of Jess”.

Organized into 3 packages, 64 classes (not hard to learn)

The Rete (ree-tee) Object

• The reasoning engine and the central class in the Jess library.

• Executes the built Rete network, and coordinates many other activities.

• Rete is essentially a facade for the Jess API.

Using the Jess API…

…is simple…all you really do need to do is call one or more Rete methods …

try {

Rete engine = new Rete();

engine.executeCommand(

“printout t “Hello PJUG”);

engine.run();

}

catch (JessException je {}

Demo 2: Catalog Servlet

import jess.*;import javax.servlet.*;import javax.servlet.http.*;import java.io.*;

public abstract class BaseServlet extends HttpServlet {

public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { doGet(request, response); }}...

Here is an example of a Jess application running as a Java servlet…

Here is an example of a Jess application running as a Java servlet…

Pattern References

• Shalloway, A., Design Patterns Explained, Addison-Wesley, 2002

• Gamma, E. et. al., Design Patterns: Elements of Reusable Object-Orient Software, Addison-Wesley, 1995

Expert Systems References

• Friedman-Hill, E. J., Jess In Action, Manning Press, 2003

• Jackson, P., Introduction to Expert Systems – 3rd Ed., Addison-Wesley, 1999

• Giarratano, J., Expert Systems: Principals and Programming, PSW-Kent, 1989

Links

• Download Jess at: http://herzberg.ca.sandia.gov/jess/index.shtml

• Join the Jess user community at:http://herzberg.ca.sandia.gov/jess/mailing_list.shtml

• See Dr. Friedman-Hill’s Jess in Action at:

http://www.manning.com/friedman-hill/

For Further Study

• CLIPS Expert System Shellhttp://www.ghg.net/clips/CLIPS.html• FuzzyJ Websitehttp://www.iit.nrc.ca/IR_public/fuzzy/fuzzyJToolkit2.html

Q & A

Thanks for your attention, and I hope that you try Jess!

top related