Introduzione a JESS Ettore Colombo 13 Dicembre 2006 Ingegneria della Conoscenza e Sistemi Esperti.

Slides:



Advertisements
Presentazioni simili
Active Server Pages ed ADO. Scrivere ASP Le pagine ASP possono contenere codice HTML o XML Le parti del documento che racchiudono codice script vanno.
Advertisements

Shell: variabili di sistema PATH HOME USER PWD SHELL HOSTNAME HOSTTYPE Per visualizzare il valore di tutte le variabili dambiente si usa il comando set.
Costruttori e Distruttori
PHP.
Analizzatori Lessicali con JLex
Algoritmi e Programmazione
Intelligenza Artificiale
Biglietti e Ritardi: schema E/R
Introduzione al linguaggio C
1 Istruzioni, algoritmi, linguaggi. 2 Algoritmo per il calcolo delle radici reali di unequazione di 2 o grado Data lequazione ax 2 +bx+c=0, quali sono.
Argomenti dalla linea dei comandi Gli argomenti possono essere passati a qualsiasi funzione di un programma, compresa la main(), direttamente dalla linea.
Funzioni definite dall’utente
Informatica 2. Concetti fondamentali di programmazione Programmare vuol dire scrivere un algoritmo in un linguaggio che faccia funzionare un calcolatore.
Corso di Laurea in Biotecnologie Informatica (Programmazione)
Corso di Informatica (Programmazione)
XML e XSL. XSL - eXtensible Stylesheet Language XSL è un linguaggio di annotazione che serve a "trasformare" la struttura di un documento in formato XML.
Algoritmi e Strutture Dati
Lezione 4: Costrutti Condizionali Prof. Raffaele Montella.
UML: Extension Mechanism Corso IS I /03 Gianna Reggio Versione 0.0.
Istruzioni di selezione in Java Programmazione Corso di laurea in Informatica.
Sistemi Operativi GESTIONE DEI PROCESSI.
Dichiarazioni e tipi predefiniti nel linguaggio C
Intelligenza Artificiale
Le funzioni.
Vincoli di integrità generici Con i costrutti visti sinora, non è sempre possibile definire tutti i possibili vincoli di integrità. Per questo esiste listruzione.
Manipolazione dei dati I comandi SQL che permettono di modificare il contenuto di una base di dati sono insertdeleteupdate insert ha la seguente sintassi:
Sistemi Operativi - Introduzione 1 Il sistema operativo UNIX Dettagli e comandi avanzati Niccolò Battezzati Politecnico di Torino Dip. Automatica e Informatica.
Mezzo di trasporto Automobile a Piedi Taxi Autobus Treno Metro.
Sistemi a Regole Ettore Colombo 13 Dicembre 2006 Ingegneria della Conoscenza e Sistemi Esperti.
Scelta del Mezzo di Trasporto
Basi di dati Claudia Raibulet
JESS: Esercizi Ettore Colombo Dicembre 2006 Ingegneria della Conoscenza e Sistemi Esperti.
Importanza DTD La DTD (Document Type Definition) consente di dichiarare in maniera univoca la struttura di markup mediante la definizione dello schema.
CODIFICA Da flow-chart a C++.
TURBOPASCAL …. ripassiamo - prof. V. Riboldi -.
Esecuzione dei programmi Prolog Liste ed operatori aritmetici
Il primo passo: I basilari del Prolog
BIOINFO3 - Lezione 331 SUBROUTINE IN PERL Una subroutine (funzione, metodo, procedura o sottoprogramma), e` una prozione di codice all`interno di un programma.
Fopndamenti di programmazione. 2 La classe String Una stringa è una sequenza di caratteri La classe String è utilizzata per memorizzare caratteri La classe.
2000 Prentice Hall, Inc. All rights reserved. Attivazione di funzioni La chiamata/attivazione di funzione viene indicata citando il nome della funzione.
File e Funzioni Si possono distinguere tre tipi di file che vengono utilizzati in MATLAB: M-file: hanno estensione .m e in essi vengono memorizzati i.
Jess, The Rule Engine for the Java Platform
Definire operatori Strutture dati Fabio Massimo Zanzotto (slides di Andrea Turbati)
PHP - PHP: Hypertext Preprocessor. Introduzione PHP (acronimo ricorsivo per "PHP: Hypertext Preprocessor") è un linguaggio di scripting general-purpose.
- prof. V. Riboldi - SOTTOPROGRAMMI IN TPASCAL METODO TOP DOWN.
Il linguaggio Fortran 90: 3. Procedure e Funzioni
JavaScript Generalità Cos'è JavaScript?
Programmazione ad oggetti
Introduzione a Javascript
Tecnologie di InternetDocument Type Definition Dott. Nicola Dragoni Document Type Definition  Document Type Definition (DTD)  Documento XML valido 
Corso di Algoritmi e Strutture Dati APPUNTI SUL LINGUAGGIO C
Capitolo 6 Iterazione Lucidi relativi al volume: Java – Guida alla programmazione James Cohoon, Jack Davidson Copyright © The McGraw-Hill Companies.
Fondamenti di Informatica II Ingegneria Informatica (A-I) Prof. M.T. PAZIENZA a.a – 3° ciclo.
Informatica 4 Funzioni. FUNZIONE: definizione MATEMATICA Relazione (o applicazione) binaria tra due insiemi A e B che associa a ogni elemento di A un.
1 Tipi di Dato §descrittori, tipi, controllo e inferenza dei tipi §specifica (semantica) e implementazione di tipi di dato l implementazioni “sequenziali”
MySQL Database Management System
Ingegneria del software Modulo 1 -Introduzione al processo software Unità didattica 1 -Cicli di vita Ernesto Damiani Università degli Studi di Milano Lezione.
Sistemi a regole [di produzione]
Operatori di incremento e decremento
Ancora sulla shell. Shell e comandi La shell e' un programma che interpreta i comandi dell'utente. I comandi possono essere dati da terminale, oppure.
Java & JESS Ettore Colombo 10 Gennaio 2007 Ingegneria della Conoscenza e Sistemi Esperti.
Linguaggio C: Le basi Stefano Cagnoni e Monica Mordonini
Cloud informatica V anno. Introduzione a PHP Lo scripting PHP PHP è un linguaggio di scripting lato server. Le caratteristiche di un linguaggio di scripting.
Eprogram informatica V anno. Introduzione a PHP Introduzione La diffusione di PHP ha avuto un notevole incremento dalla fine degli anni Novanta a oggi,
Introduzione a Clips (C Language Integrated Production System) Università degli Studi di Brescia Facoltà di Ingegneria Elettronica Dipartimento di Elettronica.
Parsing ricorsivo discendente Il parsing ricorsivo discendente (recursive descent parsing) è un metodo di tipo top-down che può essere facilmente codificato.
Basi di Java Strutture base di Java. Basi di java ▪Variabili ▪Operatori ▪Condizioni e Cicli ▪Array.
Introduzione alle Classi e agli Oggetti in Java 1.
Transcript della presentazione:

Introduzione a JESS Ettore Colombo 13 Dicembre 2006 Ingegneria della Conoscenza e Sistemi Esperti

Introduzione Shell per sistemi a regole implementato in Java Realizzato da Ernest J. Friedman-Hill Distributed Computing Systems Sandia National Laboratories Livermore, CA - USA Disponibile presso: Licenza gratuita per usi non-commerciali

Elementi di un programma JESS Definire un programma Jess comporta –La specifica di un insieme di regole di produzione –La definizione dei fatti iniziali che vanno a comporre la memoria di lavoro all’atto dell’inizializzazione del motore inferenziale –La specifica di comandi opzionali (ad es. per attivare automaticamente il motore inferenziale al caricamento del programma) É possibile usare JESS in due modi In applicazioni JAVA Stand-alone (tramite Console) java jess.Console 1.inserire comandi dalla linea di comandi della console 2.da linea di comando eseguire batch nome del file.clp Java Expert System Shell Comandi Gestione IN/OUT Comandi Gestione Computazione Comandi Gestione Fatti e Regole

Esempio hello.clp ;(clear) (defrule hello "prints Hello world" (initial-fact) => (printout t "Hello world!" crlf) ) (reset) Dalla Console: Jess> (run) Hello world! 1 Jess> Dalla Console: Jess> (run) Hello world! 1 Jess>

Esempio sort.clp (deffacts initial-facts (lista ld ) (sort ld)) (defrule sort-list ?tmp <- (sort ?lname) ?oldlist <- (lista ?lname $?A ?x ?y $?R) (test (> ?x ?y)) => (assert (lista ?lname ?A ?y ?x ?R)) (printout t "Scambiato " ?x " con " ?y crlf) (retract ?oldlist)) (defrule stop-sorting (declare (salience -100)) ?tmp <- (sort ?lname) => (retract ?tmp)) (facts) (reset) (facts) (run) (facts) Dalla Console: For a total of 0 facts. f-0 (initial-fact) f-1 (lista ld ) f-2 (sort ld) For a total of 3 facts. Scambiato 5 con 4 Scambiato 3 con 1 Scambiato 2 con 1 Scambiato 6 con 1 Scambiato 6 con 2 Scambiato 6 con 3 Scambiato 6 con 4 Scambiato 6 con 5 f-0 (initial-fact) f-10 (lista ld ) For a total of 2 facts. Dalla Console: For a total of 0 facts. f-0 (initial-fact) f-1 (lista ld ) f-2 (sort ld) For a total of 3 facts. Scambiato 5 con 4 Scambiato 3 con 1 Scambiato 2 con 1 Scambiato 6 con 1 Scambiato 6 con 2 Scambiato 6 con 3 Scambiato 6 con 4 Scambiato 6 con 5 f-0 (initial-fact) f-10 (lista ld ) For a total of 2 facts.

Variabili & Multivariabili & Variabili Globali Ogni nome di variabile è costituito da un atomo preceduto dal simbolo (?) Assumono valori di atomi, numeri o stringhe La funzione bind assegna un valore ad una variabile: (bind ?x “The value”)  ?x ha valore “The value” (bind ?a 124)  ?a ha valore 124 Se il nome è preceduto da $ la variabile è una multivariabile (bind $?grocery-list (create$ eggs bread milk)) $?grocery-list ha valore (eggs bread milk) Per definire una variabile globale si usa: (defglobal [? = ]*) Il deve essere racchiuso tra (*) Esempi: (defglobal ?*counter* = 0 ?*a* = “prova” ) definisce le variabili ?*a* e ?*counter*

Funzioni In Jess si usa la notazione prefissa... come in LISP Le condizioni e le azioni possono includere chiamate a funzioni Esempi: (+ 2 3) (> (+ 2 3) 10) Per definire una nuova funzione di JESS si usa il comando (deffunction [ ] ( *) * [ ]) Esempio: (deffunction max (?a ?b) (if (> ?a ?b) then ?a else ?b))  definita la funzione “max”, possiamo scrivere l’istruzione: (bind ?max (max 5 3))

La memoria di lavoro I fatti presenti nella memoria di lavoro (Working Memory) sono ordinati in una lista: la fact list Ad ogni fatto della memoria di lavoro è associato un identificatore: il fact-id All’inizio dell’esecuzione è asserito un fatto iniziale (initial-fact) Nella memoria di lavoro possono essere caricati: –Fatti ordinati –Fatti non ordinati –Shadow Facts

Fatti ordinati Un fatto ordinato è una lista di atomi, stringhe, numeri. Si tratta di fatti non strutturati Il primo atomo di questa lista (head del fatto) serve ad identificare una categoria di fatti Esempi: (shopping-list eggs milk bread) (person “Bob Smith” Male 35) I fatti sono contenuti nella memoria di lavoro Per aggiungere nuovi fatti alla memoria di lavoro si usa il comando (assert ) (assert (shopping-list eggs milk bread)) (assert (person “Bob Smith” Male 35)) Per togliere dei fatti presenti nella memoria di lavoro si usa il comando (retract ) (retract ?x)  dove ?x contiene l’id del fatto da eliminare

Fatti non ordinati Si tratta di fatti strutturati Per definire questi fatti è necessario dichiarare quale deve essere la struttura (deftemplate [extends ] [ ] (slot [(default | default-dynamic )] [(type ))]*) (deftemplate auto extends mezziDiTrasporto (slot model) (slot anno) (slot colore (default bianco)) (assert (auto (model Fiat-Punto) (anno 2000) (colore rosso)) (assert (auto (model Ford-Focus) (anno 2006)) NB: l’ordine degli slot non è rilevante

Asserire insiemi di fatti (deffacts [ ] [ ]*) (deffacts inizio (prova 1 2) (secondaprova)) i fatti possono essere sia ordered che unordered, con uguale o diversa struttura dopo il comando deffacts, al fine di asserire efettivamente i fatti nella memoria di lavoro, è necessario inserire il comando (reset)

Regole Per inserire nuove regole nella base della conoscenza si usa il comando defrule: (defrule [ ] [(declare...)] [ ]* => [ ]*) La parte LHS di una produzione in Jess, è un elenco di Condition Element (non conta l’ordine) La parte RHS di una produzione in Jess è un elenco di Azioni –cambiando l’ordine delle azioni della RHS, lo stato in cui porta l’esecuzione delle regole può cambiare –Azioni più comuni: aggiungere un elemento alla working memory (assert (Espressione (Nome E54) (Arg1 1))) modificare un attributo presente nella working memory (modify ?x1 (Op nil) (Arg2 nil)) ) eliminare un elemento dalla working memory (retract ?x1)

Salience delle regole Ogni regola è dotata di una proprietà detta salience, che ne rappresenta la priorità Fra le regole attivate e presenti nell’agenda verranno considerate quelle con salience maggiore (defrule prima-mangia ?eat  (food ?any) (not (full)) => (retract ?eat) (assert (full))) (defrule poi-dividi (declare (salience -100)) ?give  (food ?any) => (assert (share ?any)) (retract ?give))

Condition Element = or | | | Pattern: descrizioni, anche parziali, di fatti; se esistono fatti nella WM che corrispondano a questa descrizione, questo CE sarà verificato Altri CE: NOT: verificato se il CE associato non è verificato AND/OR: verificati se rispettivamente tutti o almeno uno dei CE associati sono verificati test: permette di specificare delle condizioni (ad esempio su parti di pattern o su variabili)

Pattern Matching... intra-element field constraint literal constraint wildcard constraint ? indica un singolo elemento all’interno di una lista $? indica invece un numero di elementi arbitrario (defrule cart-containing-milk (shopping-cart (contents $?anything_before milk $?anything_after)) => (printout t “The cart contains milk.” crlf)) si possono inoltre utilizzare vincoli addizionali sui pattern (&, |, ~, :) (price ?x&:(> 5 ?x)) match with any x that is less than 5 (person (city ~Milano&~Roma)) match with anyone who lives neither in Rome nor in Milan Vengono analizzati gli elementi presenti nella working memory presi singolarmente Esempio: (Espressione (Nome ?n) (Arg1 0) (Op +) (Arg2 ?))

Esempi di pattern matching Il pattern (Espressione (Arg1 ?arg) (Arg2 ?arg)) Determinerà un match negli oggetti: (Espressione (Nome E9) (Arg1 E23) (Op *) (Arg2 E23)) (Espressione (Nome E5) (Arg1 0) (Op -) (Arg2 0)) Ma non determinerà un match nell’elemento: (Espressione (Nome E8) (Arg1 0) (Op *) (Arg2 E23)) Un pattern con match nell’oggetto precedente è: (Espressione (Arg1 ?arg1) (Arg2 ?arg2 &~?arg1))

Pattern Matching... extra-element Vengono analizzati gli elementi presenti nella working memory tenendo presente eventuali relazioni esistenti con altri pattern della stessa LHS Esempio: (defrule moltiplicazione-x-0 (Goal (Tipo semplificazione) (Oggetto ?X )) ?f  (Espressione (Nome ?X ) (Arg1 0) (Op *)) =>... ) In questo caso oltre ad analizzare l’aspetto intra-element in modo da soddisfare i pattern presenti nella LHS della produzione, si chiede che il valore dell’attributo Oggetto sia identico al valore dell’attributo Nome ?f  ?f è una variabile contiene il fact-id del fatto che soddisfa il pattern

Definizione di una regola (defrule moltiplicazione-x-0 (declare (salience 10)) (Goal (Tipo semplificazione) (Oggetto ?X)) ?x1  (Espressione (Nome ?X) (Arg1 0) (Op *)) => (modify ?x1 (Op nil) (Arg2 nil)) )

Esempio di Regola (ordered facts) ( defrule fratelli_mamma (madre ?mamma ?figlio1) (madre ?mamma ?figlio2) (test (neq ?figlio1 ?figlio2)) (not (fratelli ?figlio1 ?figlio2)) (not (fratelli ?figlio2 ?figlio1)) => (assert (fratelli ?figlio1 ?figlio2)) ) (madre Marge Lisa) (madre Marge Bart) (madre Marge Maggie) (madre Marge Lisa) (madre Marge Bart) (madre Marge Maggie) (fratelli Maggie Bart) (fratelli Maggie Lisa) (fratelli Bart Lisa)

Esempio di Regola (unordered facts) (deftemplate madre (slot genitore) (slot figlio)) (deftemplate fratelli(slot fratello1) (slot fratello2)) ( defrule fratelli_mamma (madre (genitore ?mamma) (figlio ?figlio1)) ?x1 <- (madre (genitore ?mamma) (figlio ?figlio2~?figlio1)) => (assert (fratelli (fratello1 ?figlio1) (fratello2 ?figlio2))) )

Jess: Risoluzione dei Conflitti le regole eseguite (fired) vengono tolte dall’Agenda, perciò non più eseguite viene scelta la regola con salience più alta (default è 0) In JESS è possibile utilizzare due strategie –Depth First (LIFO) (definita di default) –Breadth First (FIFO) (set-strategy (depth | breadth))  per definire la strategia da usare se Depth strategy: tra regole della stessa salience sono eseguite le regole attivate più di recente prima delle meno recenti se Breadth strategy: regole della stessa salience sono eseguite nell’ordine in cui sono state attivate non viene fatta una selezione casuale. Viene scelta la regola dichiarata prima

Altre funzioni importanti (facts)  visualizza la fact-list (la working memory di Jess) (agenda)  visualizza il contenuto dell’agenda (reset)  ripristina la situazione iniziale di variabili globali, deffacts, (initial-fact) (clear)  svuota l’agenda e la working memory (run)  inizia l’esecuzione delle regole (halt)  ferma l’esecuzione delle regole