La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

Java & JESS Ettore Colombo 10 Gennaio 2007 Ingegneria della Conoscenza e Sistemi Esperti.

Presentazioni simili


Presentazione sul tema: "Java & JESS Ettore Colombo 10 Gennaio 2007 Ingegneria della Conoscenza e Sistemi Esperti."— Transcript della presentazione:

1 Java & JESS Ettore Colombo 10 Gennaio 2007 Ingegneria della Conoscenza e Sistemi Esperti

2 Argomenti Userfunction Utilizzo di JESS in Java Store & Fetch Gestione oggetti Java nel codice JESS Shadow Facts

3 Userfunction Servono per aggiungere comandi/funzioni a JESS Implementare l’interfaccia Userfunction –creare una nuova classe Java che implementi jess.Userfunction definire un metodo costruttore definire il nome della nuova funzione creata implementando il metodo public String getName() definire la nuova funzione implementando il metodo public Value call(ValueVector vv, Context c) throws JessException –compilare il file creato e accertarsi che sia incluso nel classpath per l’esecuzione da JESS –nel codice JESS: dichiarare che si intende utilizzare la nuova funzione (load-function newFunction)

4 Esempio: la Random100 (1) import java.io.*; import java.util.*; import jess.*; public class random100 implements Userfunction { Random r=null; Date d=null; public random100() { d = new Date(); r = new Random((long)(d.getTime())); } random100 restituisce un intero positivo scelto “casualmente” nell’intervallo [0,100]

5 Esempio: la Random100 (2) public String getName() { // The name method returns the name by which the function // will appear in Jess code. return "random100"; } public Value call(ValueVector vv, Context context) throws JessException { int number=r.nextInt(100); if (number<0) number=(-1)*number; //System.out.println(number); return new Value(Integer.toString(number),RU.ATOM); }

6 Esempio d’uso della Random100 (load-function random100) (defrule inizializzaListaA (initial-fact) => (assert (listaA (random100) (random100) (random100))) ) (defrule inizializzaListaB (initial-fact) => (assert (listaB (random100) (random100) (random100))) ) (reset) (facts) (run) (facts) Dalla Console: f-0 (initial-fact) For a total of 1 facts. f-0 (initial-fact) f-1 (listaA ) f-2 (listaB ) For a total of 3 facts. Jess> Dalla Console: f-0 (initial-fact) For a total of 1 facts. f-0 (initial-fact) f-1 (listaA ) f-2 (listaB ) For a total of 3 facts. Jess>

7 Argomenti Userfunction Utilizzo di JESS in Java Store & Fetch Gestione oggetti Java nel codice JESS Shadow Facts

8 Utilizzo di JESS in Java JESS è fornito come file.jar contenente un insieme di classi Java È possibile utilizzare queste classi importandole opportunamente all’interno delle nostre applicazioni Java Esiste un API dettagliata e utile che descrive quali sono le classi utilizzate per costruire la shell JESS: _______________________________________________________________ Rete [fonte: JESS API]  The reasoning engine. Executes the built Rete network, and coordinates many other activities Attraverso i metodi della classe Rete è possibile: -eseguire i comandi come da shell/console [ executeCommand(String) ] -asserire fatti e togliere fatti -lanciare comandi di gestione [ run, clear, reset,...] -caricare un file di testo contenente comandi JESS (programmi JESS) -scambiare dati tra applicazione Java e motore inferenziale [store & fetch, shadow facts]

9 Esempio import jess.*; class Esempio { public static void main(String a[]) { new Esempio(); } public Esempio() { Rete engine = new Rete(); //Caricamento Regole System.out.println("::: Caricamento Regole :::"); try { engine.executeCommand("(batch./random100.clp)"); } catch (JessException je) {System.out.println("Error during rules uploading: "+je);} //Esecuzione Regole System.out.println("::: Esecuzione Regole :::"); try { engine.run(); } catch (JessException je) {System.out.println("Error during rules execution: "+je);} }

10 Argomenti Userfunction Utilizzo di JESS in Java Store & Fetch Gestione oggetti Java nel codice JESS Shadow Facts

11 Store & Fetch Esiste una “memoria” condivisa tra JESS e Java che è possibile utilizzare per condividere dati usando le funzioni:  store (inserimento)  fetch (lettura) NB: nell’esempio che segue, engine è un oggetto di classe Rete JESS (store dato1 15)engine.fetch(“dato1”) Java valore letto 15 valore scritto = 15 e identificato come “dato1” JESS engine.store(“dato1”,15)(fetch dato1) Java valore letto 15 valore scritto = 15 e identificato come “dato1”

12 Argomenti Userfunction Utilizzo di JESS in Java Store & Fetch Gestione oggetti Java nel codice JESS Shadow Facts

13 Gestione di oggetti Java in JESS Esempio: gestione delle GUI da JESS ;Creazione oggetto di tipo JButton, il bottone OK della GUI (bind ?button (new javax.swing.JButton "OK")) (call ?button setSize 20 20)  CHIAMATA DI UN METODO “?button” contiene il riferimento all’oggetto presenta nella memoria della Java Virtual Machine (import ) È il corrispondente JESS della “import” in Java Si possono indicare come sia interi package (import java.io.*) che singole classi (import java.awt.Button) Il package java.lang.* è implicitamente considerato

14 Esempio (defrule inizializzaOggetto (initial-fact) => (bind ?prova (new OggettoProva "Oggetto 1")) (assert (Oggetto ?prova)) ) (defrule stampaNome (Oggetto ?prova) => (printout t (call ?prova getNome) crlf) ) (reset) (facts) (run) (facts) Dalla Console: f-0 (initial-fact) For a total of 1 facts. Oggetto 1 f-0 (initial-fact) f-1 (Oggetto ) For a total of 2 facts. Jess> Dalla Console: f-0 (initial-fact) For a total of 1 facts. Oggetto 1 f-0 (initial-fact) f-1 (Oggetto ) For a total of 2 facts. Jess>

15 Argomenti Userfunction Utilizzo di JESS in Java Store & Fetch Gestione oggetti Java nel codice JESS Shadow Facts

16 Costruzione di Shadow Fact (defclass prova OggettoProva)  definisce il template prova basato sulla “struttura” dell’oggetto associato (bind ?bean (new prova))  crea un oggetto prova/OggettoProva (definstance prova ?bean static)  crea lo shadow fact cossispondente al bean ?bean. static indica che lo shadow fact è statico! shadow fact static vs dynamic: dichiarare dynamic uno shadow fact permette di mantenere aggiornati i valori degli slot in base alle modifiche sui valori delle property del JavaBean corrispondente Analogamente... in Java: engine.defclass(“prova”,”OggettoProva”,null); OggettoProva bean = new OggettoProva(); engine.definstance(“prova”, bean, false); false indica che lo shadow fact è statico... true per indicare che è dinamico! Il terzo argomento della defclass è il nome dell’eventuale superclasse della classe “OggettoProva”


Scaricare ppt "Java & JESS Ettore Colombo 10 Gennaio 2007 Ingegneria della Conoscenza e Sistemi Esperti."

Presentazioni simili


Annunci Google