Intelligenza Artificiale I

Documenti analoghi
Fabio Sartori 26 Novembre Introduzione ai sistemi a regole. Un esempio dall enigmistica Architettura

Corso di Laurea in INFORMATICA

Corso di Laurea in INFORMATICA

19 - Eccezioni. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

INTRODUZIONE ALLA PROGRAMMAZIONE AD ALTO LIVELLO IL LINGUAGGIO JAVA. Fondamenti di Informatica - D. Talia - UNICAL 1. Fondamenti di Informatica

Programmazione in Java (I modulo)

CORSO LINUX PER LA CERTIFICAZIONE LPI ESSENTIALS

Shell: variabili di sistema. Per visualizzare il valore di tutte le variabili d ambiente si usa il comando set

Corso di Laboratorio di Sistemi Operativi

Introduzione alla programmazione

Lez. 5 La Programmazione. Prof. Salvatore CUOMO

Esercitazione CLIPS. Realizzazione di un Sistema a Regole per la Risoluzione del Problema dell'agricoltore

Programmazione Orientata agli Oggetti. Emilio Di Giacomo e Walter Didimo

Programmazione C Massimo Callisto De Donato

Algoritmi di Ricerca. Esempi di programmi Java

Scopo: 1. Acquisire conoscenza dell ambiente SWI Prolog 2. Risolvere alcuni problemi mediante il linguaggio Prolog

IL LINGUAGGIO JAVA Input, Tipi Elementari e Istruzione Condizionale

Introduzione alla Programmazione Logica ed al linguaggio PROLOG

Funzioni, Stack e Visibilità delle Variabili in C

1. Acquisire conoscenza dell ambiente TuProlog/SWI Prolog 2. Risolvere alcuni problemi mediante il linguaggio Prolog

Modulo III - Creazione di documenti, presentazioni e report

Algoritmi di Ricerca. Esempi di programmi Java

la traduzione dei programmi ed introduzione a Java

Programma del corso. Elementi di Programmazione. Introduzione agli algoritmi. Rappresentazione delle Informazioni. Architettura del calcolatore

Dispensa YACC: generalità

Introduzione al Sistema Operativo MS-Windows ed all Uso dell IDE DEV-C++

Intelligenza Artificiale. Sistemi a regole

Fondamenti di Informatica 6. Algoritmi e pseudocodifica

L utility Unix awk [Aho-Weinberger-Kernighan]

Corso di Matematica per la Chimica. Dott.ssa Maria Carmela De Bonis a.a

Laboratorio di Python

Introduzione alla logica

Programmazione Orientata agli Oggetti in Linguaggio Java

Controllo di flusso negli script: if-then-else

Strutture dati. Il che cosa e il come. F. Damiani - Alg. & Lab. 04/05

LabVIEW (Laboratory Virtual Instrument Engineering Workbench)

File binari e file di testo

Cosa si intende con stato

Cosa è importante: pom.xml Goal Plug-in Repository

public static boolean occorre (int[] a, int n) { int i = 0; boolean trovato = false;

Manipolazioni elementari di flussi di testo strutturati

Laboratorio di Algoritmi e Strutture Dati

Fondamenti di Informatica. Algoritmi di Ricerca e di Ordinamento

CORSO DI PROGRAMMAZIONE

PROBLEMI ALGORITMI E PROGRAMMAZIONE

GLI SCRIPT DI SHELL. Lucidi a cura di B.De Carolis. UNIX shell script UdB- Dip Informatica

Le etichette nei programmi. Istruzioni di branch: beq. Istruzioni di branch: bne. Istruzioni di jump: j

Esercitazione 1: Introduzione a MATLAB

Il linguaggio di programmazione Python

Informatica! Appunti dal laboratorio 1!

STRUTTURE DI CONTROLLO DEL C++

Lezione 5: Controllo del flusso e costrutti avanzati

Laboratorio Progettazione Web Il linguaggio PHP Le Istruzioni. Andrea Marchetti IIT-CNR AA 2015/2016

Rappresentazione degli algoritmi

Classpath e Esercizi su RMI

Descrizione delle operazioni di calcolo. Espressioni costanti semplici

Linguaggi di programmazione

GESTIONE DEI FILE IN C. Docente: Giorgio Giacinto AA 2008/2009

Primi passi con JFlex

Linguaggi di Programmazione

Questi lucidi provengono dal capitolo 2 di:

Introduzione Programmazione Java

Introduzione alla Programmazione Funzionale

Elementi lessicali. Lezione 4. La parole chiave. Elementi lessicali. Elementi lessicali e espressioni logiche. Linguaggi di Programmazione I

Lezione 3: Programmazione della Shell di Unix

Linguaggio C: introduzione

Corso sul linguaggio Java

Puntatori in C. Puntatori. Variabili tradizionali Esempio: int a = 5; Proprietà della variabile a: nome: a

Laboratorio Progettazione Web Il linguaggio PHP Le Istruzioni. Andrea Marchetti IIT-CNR AA 2014/2015

Un esempio di if annidati

Lez. 8 La Programmazione. Prof. Pasquale De Michele (Gruppo 2) e Raffaele Farina (Gruppo 1) 1

Corso di Fondamenti di Informatica

7 - Programmazione procedurale: Dichiarazione e chiamata di metodi ausiliari

Manipolazione di testo

Elementi Elem d enti i d I i nf I orm nf a orm tic a a tic a e Applicazioni Numeriche T I File in Octave

Bash: history list (I)

Yet Another Compiler-Compiler. Generazione automatica di analizzatori sintattici

6 - Blocchi e cicli. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

Programmazione = decomposizione basata su astrazioni

Espressività e limitazioni delle grammatiche regolari

Scritto da Martedì 12 Luglio :14 - Ultimo aggiornamento Venerdì 15 Luglio :47

Costanti e Variabili

Introduzione all ambiente MATLAB. Richiami II. Calcolo Numerico - A.A. 2008/09

Array in Fortran 90. Ing. Luca De Santis. Anno accademico 2006/2007. DIS - Dipartimento di informatica e sistemistica

Algoritmi e soluzione di problemi

Linguaggi di programmazione - Principi e paradigmi 2/ed Maurizio Gabbrielli, Simone Martini Copyright The McGraw-Hill Companies srl

Costrutti condizionali e iterativi

Un algoritmo realizza una relazione funzionale tra i valori di input e quelli di output

Introduzione alle classi e agli oggetti. Walter Didimo

Concetti base. Java - package 2

Problema: dati i voti di tutti gli studenti di una classe determinare il voto medio della classe.

Corso di Informatica. Problemi ed algoritmi. Ing Pasquale Rota

Procedura di installazione rrunnweb

Lezione 6 Introduzione al C++ Mauro Piccolo

print((math.floor(1345/10)%10); print (Math.floor(1345/100)%10); Le funzioni in JavaScript

Istruzioni per l utilizzo di Prode Properties

Esplorare e modificare il file system Compilare con gcc Lanciare un programma da linea di comando

Le decisioni. Istruzione if. if (amount <= balance) balance = balance - amount; Sintassi: if (condizione) istruzione

Scopo del laboratorio

FRANCESCO MARINO - TELECOMUNICAZIONI

Transcript:

Intelligenza Artificiale I Esercitazione 1 Marco Piastra Esercitazione 1-1

Jess? Acronimo di Java Expert System Shell Sistema scritto in Java Autore: Ernest Friedman-Hill, Sandia National Laboratories in Livermore, Canada Un sistema a regole: il costrutto fondamentale è costituito da regole if <cond> then <action> Deriva da un sistema pre-esistente, detto CLIPS Utilizza la sintassi del linguaggio LISP Un programma in Jess consiste in un insieme di regole da applicarsi iterativamente ad una collezione di fatti Caratteristiche salienti: Linguaggio (quasi dichiarativo: i programmi non descrivono uno schema di flusso Regole, per rappresentare le conoscenze in modo esplicito Funzioni, per esprimere conoscenze procedurali Linguaggio (quasi ad oggetti: si usano fatti compositi, organizzati come una collezione di slot Esercitazione 1-2

Java: uso della variabile CLASSPATH Esercitazione 1-3 Non sapete cos è? E normale: vuol dire che non avete mai usato Java Impostazione della variabile CLASSPATH $ CLASSPATH=<value> $ è il prompt, non scrivetelo $ export CLASSPATH per verificare $ echo $CLASSPATH Nel nostro caso: $ CLASSPATH=/home/opt/Jess61p8 $ export CLASSPATH Rispettare SEMPRE la differenza tra maiuscolo e minuscolo! (è Linux, non Windows Attivazione di Jess $ java jess.main Jess> Uscita da Jess Jess> (exit $ (Coraggio, ce l avete fatta.

Liste (file finitestatemachine.jess Si usa la sintassi del LISP Semplicissima, talvolta diabolica: l unica struttura dati è la lista. Lots of Impossible Stupid Parenthesis (deftemplate fsm (slot current-state (multislot input-stream (multislot output-stream Una lista che contiene altre liste (obbligatorio il bilanciamento delle parentesi (exit Una lista semplice. E anche un comando Jess. Qualsiasi espressione corretta in Jess è una lista Esercitazione 1-4

deftemplate (file finitestatemachine.jess Definisce uno schema (o template di fatti (strutture dati di Jess (deftemplate event (slot current-state (slot input-symbol (slot output-symbol (slot new-state Serve a definire fatti del tipo: (event (current-state even (input-symbol 1 (output-symbol 1 (new-state odd Un particolare fatto in Jess, tutti gli slot hanno un valore Esercitazione 1-5

(file finitestatemachine.jess?current <- (fsm (current-state?cs (input-stream?is $?rest (output-stream $?output (event (current-state?cs (input-symbol?is (output-symbol?os (new-state?ns " to state "?ns " output "?os crlf (modify?current (current-state?ns (input-stream?rest (output-stream?os?output Significato: un mondo intero, praticamente tutto Jess. Esercitazione 1-6

(file finitestatemachine.jess Una lista, come ci si poteva aspettare?current <- (fsm (current-state?cs (input-stream?is $?rest (output-stream $?output (event (current-state?cs (input-symbol?is (output-symbol?os (new-state?ns " to state "?ns " output "?os crlf (modify?current (current-state?ns (input-stream?rest (output-stream?os?output Esercitazione 1-7

(file finitestatemachine.jess Nome della regola, serve solo come identificativo?current <- (fsm (current-state?cs (input-stream?is $?rest (output-stream $?output (event (current-state?cs (input-symbol?is (output-symbol?os (new-state?ns " to state "?ns " output "?os crlf (modify?current (current-state?ns (input-stream?rest (output-stream?os?output Esercitazione 1-8

(file finitestatemachine.jess?current <- (fsm (current-state?cs (input-stream?is $?rest (output-stream $?output (event (current-state?cs (input-symbol?is (output-symbol?os (new-state?ns Separatore: cercatelo come prima cosa " to state "?ns " output "?os crlf (modify?current (current-state?ns (input-stream?rest (output-stream?os?output Esercitazione 1-9

(file finitestatemachine.jess?current <- (fsm (current-state?cs (input-stream?is $?rest (output-stream $?output (event (current-state?cs (input-symbol?is (output-symbol?os (new-state?ns " to state "?ns " output "?os crlf (modify?current (current-state?ns (input-stream?rest (output-stream?os?output Parte sinistra (LHS - Left Hand Side: sono le condizioni che stabiliscono se la regola è applicabile Esercitazione 1-10

(file finitestatemachine.jess?current <- (fsm (current-state?cs (input-stream?is $?rest (output-stream $?output (event (current-state?cs (input-symbol?is (output-symbol?os (new-state?ns " to state "?ns " output "?os crlf (modify?current (current-state?ns (input-stream?rest (output-stream?os?output La parte sinistra descrive una sorta di pattern che si applica ai fatti noti Esercitazione 1-11

(file finitestatemachine.jess?current <- (fsm (current-state?cs (input-stream?is $?rest (output-stream $?output (event (current-state?cs (input-symbol?is (output-symbol?os (new-state?ns " to state "?ns " output "?os crlf (modify?current (current-state?ns (input-stream?rest (output-stream?os?output Parte destra (RHS - Right Hand Side: sono le azioni da effettuare quando la regole viene applicata (FIRE Esercitazione 1-12

(file finitestatemachine.jess?current <- (fsm (current-state?cs (input-stream?is $?rest (output-stream $?output (event (current-state?cs (input-symbol?is (output-symbol?os (new-state?ns " to state "?ns " output "?os crlf (modify?current (current-state?ns (input-stream?rest (output-stream?os?output Si possono asserire, ritrattare o modificare fatti Si possono eseguire altre azioni (p.es. stampa di un messaggio Esercitazione 1-13

(file finitestatemachine.jess Una variabile?current <- (fsm (current-state?cs (input-stream?is $?rest (output-stream $?output (event (current-state?cs (input-symbol?is (output-symbol?os (new-state?ns " to state "?ns " output "?os crlf (modify?current (current-state?ns (input-stream?rest (output-stream?os?output Esercitazione 1-14

(file finitestatemachine.jess?current <- (fsm (current-state?cs (input-stream?is $?rest (output-stream $?output (event (current-state?cs (input-symbol?is (output-symbol?os (new-state?ns " to state "?ns " output "?os crlf (modify?current (current-state?ns (input-stream?rest (output-stream?os?output Si distingue (da un simbolo per il punto interrogativo Esercitazione 1-15

(file finitestatemachine.jess?current <- (fsm (current-state?cs (input-stream?is $?rest (output-stream $?output (event (current-state?cs (input-symbol?is (output-symbol?os (new-state?ns " to state "?ns " output "?os crlf (modify?current (current-state?ns (input-stream?rest (output-stream?os?output Si lega (binding ad un valore singolo Esercitazione 1-16

(file finitestatemachine.jess Oppure ad un fatto (dipende dalla posizione?current <- (fsm (current-state?cs (input-stream?is $?rest (output-stream $?output (event (current-state?cs (input-symbol?is (output-symbol?os (new-state?ns " to state "?ns " output "?os crlf (modify?current (current-state?ns (input-stream?rest (output-stream?os?output Esercitazione 1-17

(file finitestatemachine.jess?current <- (fsm (current-state?cs (input-stream?is $?rest (output-stream $?output (event (current-state?cs (input-symbol?is (output-symbol?os (new-state?ns " to state "?ns " output "?os crlf (modify?current (current-state?ns (input-stream?rest (output-stream?os?output Una multivariabile ($ +? Esercitazione 1-18

(file finitestatemachine.jess?current <- (fsm (current-state?cs (input-stream?is $?rest (output-stream $?output (event (current-state?cs (input-symbol?is (output-symbol?os (new-state?ns " to state "?ns " output "?os crlf (modify?current (current-state?ns (input-stream?rest (output-stream?os?output Si lega ad una sequenza di valori (una lista Esercitazione 1-19

(file finitestatemachine.jess?current <- (fsm (current-state?cs (input-stream?is $?rest (output-stream $?output (event (current-state?cs (input-symbol?is (output-symbol?os (new-state?ns " to state "?ns " output "?os crlf (modify?current (current-state?ns (input-stream?rest (output-stream?os?output Diverse occorrenze della stessa variabile: si legano allo stesso valore (binding Esercitazione 1-20

(file finitestatemachine.jess?current <- (fsm (current-state?cs (input-stream?is $?rest (output-stream $?output (event (current-state?cs (input-symbol?is (output-symbol?os (new-state?ns " to state "?ns " output "?os crlf (modify?current (current-state?ns (input-stream?rest (output-stream?os?output Una condizione, nella LHS della regola Esercitazione 1-21

(file finitestatemachine.jess?current <- (fsm (current-state?cs (input-stream?is $?rest (output-stream $?output (event (current-state?cs (input-symbol?is (output-symbol?os (new-state?ns " to state "?ns " output "?os crlf (modify?current (current-state?ns (input-stream?rest (output-stream?os?output Se la regola è applicabile, ciascuna condizione si lega ad un fatto (non necessariamente diverso Esercitazione 1-22

(file finitestatemachine.jess?current <- (fsm (current-state?cs (input-stream?is $?rest (output-stream $?output (event (current-state?cs (input-symbol?is (output-symbol?os (new-state?ns Ciascuna condizione descrive una sorta di pattern, che si applica ad un fatto singolo " to state "?ns " output "?os crlf (modify?current (current-state?ns (input-stream?rest (output-stream?os?output Esercitazione 1-23

(file finitestatemachine.jess?current <- (fsm (current-state?cs (input-stream?is $?rest (output-stream $?output (event (current-state?cs (input-symbol?is (output-symbol?os (new-state?ns " to state "?ns " output "?os crlf (modify?current (current-state?ns (input-stream?rest (output-stream?os?output Anche questa condizione descrive un pattern, che si applica ad un fatto avente un template diverso Esercitazione 1-24

(file finitestatemachine.jess?current <- (fsm (current-state?cs (input-stream?is $?rest (output-stream $?output (event (current-state?cs (input-symbol?is (output-symbol?os (new-state?ns " to state "?ns " output "?os crlf (modify?current (current-state?ns (input-stream?rest (output-stream?os?output Le variabili nella LHS definiscono vincoli: in questo caso i due fatti che rendono la regola applicabile devono avere valori identici Esercitazione 1-25

(file finitestatemachine.jess?current <- (fsm (current-state?cs (input-stream?is $?rest (output-stream $?output (event (current-state?cs (input-symbol?is (output-symbol?os (new-state?ns " to state "?ns " output "?os crlf (modify?current (current-state?ns (input-stream?rest (output-stream?os?output Anche questi due valori devono essere identici Esercitazione 1-26

(file finitestatemachine.jess?current <- (fsm (current-state?cs (input-stream?is $?rest (output-stream $?output (event (current-state?cs (input-symbol?is (output-symbol?os (new-state?ns " to state "?ns " output "?os crlf (modify?current (current-state?ns (input-stream?rest (output-stream?os?output Questa variabile invece si lega al fatto che si lega al pattern Esercitazione 1-27

(file finitestatemachine.jess?current <- (fsm (current-state?cs (input-stream?is $?rest (output-stream $?output (event (current-state?cs (input-symbol?is (output-symbol?os (new-state?ns " to state "?ns " output "?os crlf (modify?current (current-state?ns (input-stream?rest (output-stream?os?output Il valore viene usato nella RHS (azioni: si modifica il fatto stesso Esercitazione 1-28

(file finitestatemachine.jess?current <- (fsm (current-state?cs (input-stream?is $?rest (output-stream $?output (event (current-state?cs (input-symbol?is (output-symbol?os (new-state?ns " to state "?ns " output "?os crlf (modify?current (current-state?ns (input-stream?rest (output-stream?os?output Usando il valore di altre variabili Esercitazione 1-29

(file finitestatemachine.jess?current <- (fsm (current-state?cs (input-stream?is $?rest (output-stream $?output (event (current-state?cs (input-symbol?is (output-symbol?os (new-state?ns " to state "?ns " output "?os crlf (modify?current (current-state?ns (input-stream?rest (output-stream?os?output In generale, le variabili si legano nella LHS e vengono usate nella RHS Esercitazione 1-30

deffacts (file paritychecker-fsa.jess Definisce i fatti iniziali Facendo un (reset si cancellano i fatti noti e si torna ai fatti definiti con deffacts (deffacts test-string (fsm (current-state even (input-stream 0 1 1 1 0 0 1 1 (output-stream Esercitazione 1-31

deffacts (file paritychecker-fsa.jess Definisce i fatti iniziali Facendo un (reset si cancellano i fatti noti e si torna ai fatti definiti con deffacts (deffacts test-string (fsm (current-state even (input-stream 0 1 1 1 0 0 1 1 (output-stream Si definisce un fatto, singolo in questo caso, come iniziale Esercitazione 1-32

deffacts (file paritychecker-fsa.jess Definisce i fatti iniziali Facendo un (reset si cancellano i fatti noti e si torna ai fatti definiti con deffacts (deffacts test-string (fsm (current-state even (input-stream 0 1 1 1 0 0 1 1 (output-stream Si definisce un fatto, singolo in questo caso, come iniziale Possono essere definiti più fatti con un singolo deffacts Esercitazione 1-33

deffacts (file paritychecker-fsa.jess Definisce i fatti iniziali Facendo un (reset si cancellano i fatti noti e si torna ai fatti definiti con deffacts (deffacts test-string (fsm (current-state even (input-stream 0 1 1 1 0 0 1 1 (output-stream Si definisce un fatto, singolo in questo caso, come iniziale Possono essere definiti più fatti con un singolo deffacts Possono esserci piùdeffacts nello stesso programma Esercitazione 1-34

deffacts (file paritychecker-fsa.jess Definisce i fatti iniziali Facendo un (reset si cancellano i fatti noti e si torna ai fatti definiti con deffacts (deffacts test-string (fsm (current-state even (input-stream 0 1 1 1 0 0 1 1 (output-stream Si definisce un fatto, singolo in questo caso, come iniziale Possono essere definiti più fatti con un singolo deffacts Possono esserci piùdeffacts nello stesso programma Tutti i fatti iniziali vengono trattati nello stesso modo: vengono asseriti eseguendo un (reset Esercitazione 1-35

Caricare un programma Prima cosa, far partire il Jess (è meglio $ java jess.main Jess> Caricamento di un file (batch paritychecker-fsa.jess Oppure (batch paritychecker-fsa.jess Se vi è andata bene, Jess risponde: TRUE Esercitazione 1-36

Come funziona Jess (prima approssimazione Una volta attivato, Jess esegue un ciclo MATCH Determinazione delle regole applicabili (Regole la cui parte sinistra si lega a fatti nella memoria Ci sono regole applicabili? si no CONFLICT RESOLUTION Scelta della regola da applicare (Sempre una alla volta FIRE Applicazione di una regola (Può determinare la modifica dei fatti in memoria Esercitazione 1-37

Comandi di attivazione Reset: cancella i fatti in memoria e asserisce nuovamente i fatti iniziali I fatti iniziali sono definiti con deffacts Eseguire sempre un reset prima di una nuova attivazione, non si sa mai (reset Jess risponde: TRUE Run: attiva il ciclo principale (run Jess risponde: <dipende dal programma> TRUE Esercitazione 1-38

Comandi utili per capire cosa accade in un programma Esegui un ciclo alla volta (run 1 Oppure (run n per eseguire n cicli Elenca i fatti in memoria (facts La risposta è un po criptica, ma si capisce Elenca le regole applicabili (MATCHed (agenda La risposta è criptica, si capirà meglio più avanti Esercitazione 1-39