JESS Eine Kurzeinführung JESS ist ein Expertensystem (regelbasiert) Implementiert in Java Entwickelt seit 1995 an den Sandia National Laboratories Ist CLIPS-kompatibel, insbesondere CLIPS-Syntax System, Manuals und Tutorial unter http://herzberg.ca.sandia.gov/jess/ Interface zur Verwendung von JESS durch Java-Programme Einf. in die KI Kurzeinführung JESS 1-1
Technisches: Aufruf JESS erhält man üblicherweise in gepackter Form zusammen mit der Dokumentation und einigen Beispielen. Nach dem Entpacken gibt die Verzeichnisse docs/ jess/ examples/ JESS Dokumentation evtl. Quellcode des JESS-System und einige Beispiele Beispiele JESS 6.0 (als.jar-datei) starten mit java -classpath jess.jar jess.main JESS verlassen mit Jess> (exit) Einf. in die KI Kurzeinführung JESS 1-2
Technisches 1 Ein wichtiger Befehl ist Jess> (batch examples/fullmab.clp) führt die Anweisungen in der Datei fullmab.clp im Unterverzeichnis examples aus (relativ zum Verzeichnis Jess60). JESS hat eine sehr LISP-ähnliche Syntax, insbesondere sieht JESS-Code wie LISP- Fuktionsaufrufe aus. Funktionen entsprechend in Präfix-Notation: Jess> (* 3 (- 7 5)) 6 Einf. in die KI Kurzeinführung JESS 1-3
Technisches 2 Atome: Sind ähnlich Bezeichnern in anderen Sprachen. Zeichenfolge aus Buchstaben, Zahlen und $*=+/<>?#., keine Zahl am Anfang. Groß-/Kleinschreibung: atom Atom Strings: Werden durch dopplete Hochkommata gekennzeichnet: "Hallo" "Dies ist ein Test" Zeilenumbruch auch bei der Ausgabe Einf. in die KI Kurzeinführung JESS 1-4
Technisches 3 Zahlen: Entsprechend der Java-Klassen Integer und Double, z.b. 5 oder 3.4 Listen: Geklammerte Folge von Atomen, Zahlen, Strings oder Listen: (a "Test" (test b c) 7) Kommentare: Beginnen mit Strichpunkt, gehen bis Zeilenende ; Ein Kommentar (a "Test") ; geht hier weiter Einf. in die KI Kurzeinführung JESS 1-5
Variablen Variablen sind Atome, die mit einem Fragezeichen beginnen. Wertzuweisung durch bind: Jess> (bind?x 34) Die Namen globaler Variablen müssen mit * beginnen und enden: (defglobal?*x* 10) defglobal verhindert zurücksetzen durch reset. Jess> (reset) TRUE Löscht aktuelle Fakten und Regeln, mit Ausnahme von initial-fact. Einf. in die KI Kurzeinführung JESS 1-6
Fakten 1 Geordnete Fakten: Lkiste, erstes Element kategorisiert den Fakt. (person chris mueller 27) (hase osterhase) Erzeugung durch assert: Jess> (assert (hase osterhase)) <Fact-0> Jess> (facts) f-0 (MAIN::hase osterhase) For a total of 1 facts. Jeder Fakt bekommt eine Nummer, facts zeigt alle Fakten an. Einf. in die KI Kurzeinführung JESS 1-7
Fakten 2 Ungeordnete Fakten (Objekte): Die Eigenschaften (slots) eines Objektes (=Template) erhalten Bezeichner. (deftemplate <deftemplate-name> [extends <classname>] [<doc-comment>] [(slot <slot-name> [(default default-dynamic <value>)] [(type <typespec>))]*) <deftemplate-name> ist der Name/ Typ des Fakts (Objekt). slot-name muss ein Atom sein. type gibt einen Typ an. Wird derzeit aber nicht erzwungen. default setzt Default-Wert für einen Slot. Kein default Default-Wert ist nil. Einf. in die KI Kurzeinführung JESS 1-8
Fakten 3 Beispiel: Mit (deftemplate person (slot vorname) (slot nachname) (slot alter (default 20) (type INTEGER)) ) kann ein Fakt erzeugt werden: Jess> (assert (person (vorname chris) (nachname mueller))) <Fact-0> Jess> (facts) f-0 (MAIN::person (vorname chris) (nachname mueller) (alter 20)) For a total of 1 facts. Einf. in die KI Kurzeinführung JESS 1-9
Regeln 1 Eine einfache Regel ist defrule fuelleschachtel (schachtel (fabe gelb) (ort?x) (inhalt leer) (zeug (ort?x)) => (assert (schachtel (inhalt zeug))) (assert (zeug (ort schachtel))) (printout t?x " ist aufgeräumt") ) Passender Fakt für alle Einträge der linken Seite (vor =>) Die Aktionen der rechten Seite werden ausgeführt. Vorkommende Variablen (z.b.?x) werden an die entsprechenden Werte der passenden Fakten gebunden. Einf. in die KI Kurzeinführung JESS 1-10
Regeln 2 Fakten bearbeiten: defrule test?person <- (person (name mueller))?x <- (auto (farbe gruen)) => (retract?person) (modify?x (farbe gelb)) ) Passender Fakt (Muster) auf linker Seite wird durch <- an Variable gebunden. modify überschreibt die angegebenen Slots, die übrigen bleiben unverändert retract löscht den angegebenen Fakt. Einf. in die KI Kurzeinführung JESS 1-11
Regeln 3 Slots vergleichen: defrule test (person (name mueller) (vorname?n1) (alter?x)) (person (name mueller) (vorname?n2~?n1) (alter?y) (person (name mueller) (vorname?n1) (alter?z&:(<?z 20)) (person (name ~nil)) => (printout t "Gefunden!" crlf) ) ~ Negation.?n2~?n1: Die Namen müssen verschieden sein. Tests folgen einer Variable, getrennt durch & (und) oder (oder). : Folgender Funktionsaufruf. Einf. in die KI Kurzeinführung JESS 1-12
Regeln 4 Muster der linken Regelseite sind i.d.r. durch und verknüft. defrule test (or (person (name mueller) (person (name schmidt) (alter?y))) (person (name mueller) (vorname?n1) (alter?x)) (not (person (name mayer))) (test (eq?x?y)) => ) or ist eine Oder-Verknüpfung von Mustern (and Und). not: Trifft zu falls kein passendes Muster gefunden. test: Trifft zu falls folgender Funktionsaufruf TRUE. Nur (eq?x?y) funktioniert nicht! (da kein solcher Fakt existiert) Einf. in die KI Kurzeinführung JESS 1-13
Regeln 5 Priorität: defrule test (declare salience -100) (person (name mueller)) => ) salience ist eine Eigenschaft der Regel. Sind meherere Regeln ausführbar, wird die Regel mit dem höchsten salience- Wert zuerst ausgeführt. (Default ist 0) Jess> (run) Beginnt mit der Anwendung von Regeln. Einf. in die KI Kurzeinführung JESS 1-14
Debugging (facts): Zeigt alle Fakten an. (reset): Löscht (fast) alle Fakten. (clear): Löscht alle Fakten und Regeln. watch: Zeigt zusätzlich Informationen an (watch rules): wenn eine Regel feuert. (watch activations): wenn eine Regel aktiviert wird. (watch facts): Wenn ein Fakt erzeugt oder gelöscht wird. (watch all): wenn etwas passiert. Einf. in die KI Kurzeinführung JESS 1-15