1 / 31

Preliminary Introduction to JESS

Preliminary Introduction to JESS. Mostly adopted from Jason Morris notes (Morris Technical Solutions). 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 .

talisa
Download Presentation

Preliminary Introduction to JESS

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. Preliminary Introduction to JESS Mostly adopted from Jason Morris notes (Morris Technical Solutions)

  2. 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.

  3. Rule-Based Expert System Architecture • Rule Base (knowledge base) • Working Memory (fact base) • Inference Engine (rule engine)

  4. 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.

  5. Inference Process • Match the facts against the rules. • Choose which rules to fire. • Execute the actions associated with the rules.

  6. 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 Retealgorithm to match patterns. • Rete network = an interconnected collection of nodes = working memory.

  7. Jess Architecture Diagram WORKING MEMORY INFERENCE ENGINE EXECUTION ENGINE PATTERN MATCHER RULE BASE AGENDA

  8. 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.

  9. Obligatory Tradition (printout t “Hello Class!” crlf) Your very first Jess program!

  10. 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:

  11. Jess Variables • Named containers that hold a single value • Untyped • Begin with a ? mark • Can change types during lifetime • Assigned using bind function

  12. Jess Variables and Lists Everything is a list in Jess! EXAMPLE: Adding two numbers (bind ?x 2) ; assign x = 2 (bind ?y 3) ; assign y = 3 (bind ?result (+ ?x ?y)) ; find sum

  13. Jess Functions Even functions are lists. (deffunction get-input() “Get user input from console.” (bind ?s (read)) (return ?s))

  14. Jess Function Example (deffunction area-sphere (?radius) “Calculate the area of a sphere” (bind ?area (* (* (pi) 2)(* ?radius ?radius))) (return ?area))

  15. Jess Function Example How do we use this in Jess? (printout t "The surface area of a radius = 2 meter sphere is " + (area-sphere 2) + " m^2")

  16. 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.

  17. Jess Fact Types • Ordered – head only. • Ordered – single slot. • Unordered – multiple slot, like a database record. • Shadow – slots correspond to properties of a JavaBean.

  18. Deftemplate Used to define the structure of a fact. • (deftemplate • pattern “A design pattern.” • (slot name) • (slot type (default “creation”)) • (slot intent) • (slot solution))

  19. 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.

  20. 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))

  21. 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.

  22. 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.

  23. 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.

  24. Simple Rule Example Checking working memory state. ;; A not very useful error handler (defrule report-error (error-is-present) => (printout t “There is an error” crlf))

  25. A More Complex Rule Using pattern bindings in rules. ;; A more useful error handler (defrule report-err ?err <- (is-error (msg ?msg)) => (printout t "Error was: " ?msg crlf) (retract ?err))

  26. Scripting Java from Jess • You can interactively access all Java APIs from Jess. • This makes exploring Java somewhat easier and immediate.

  27. 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)

  28. 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)

  29. The ReteObject • 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.

  30. Using the Jess API… try { Rete engine = new Rete(); engine.executeCommand(“printout t “Hello CS437”); engine.run(); } catch (JessException je {} It is simple. All you really need to do is to make an instance of Rete and call one or more Rete methods.

  31. 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/ • CLIPS Expert System Shell http://www.ghg.net/clips/CLIPS.html • FuzzyJ Website http://www.iit.nrc.ca/IR_public/fuzzy/fuzzyJToolkit2.html

More Related