16/3/99Marco Meluccio1 Kappa PC. 16/3/99Marco Meluccio2 Introduzione Il sistema di sviluppo Kappa-PC...

62
16/3/99 Marco Meluccio 1 Kappa PC

Transcript of 16/3/99Marco Meluccio1 Kappa PC. 16/3/99Marco Meluccio2 Introduzione Il sistema di sviluppo Kappa-PC...

Page 1: 16/3/99Marco Meluccio1 Kappa PC. 16/3/99Marco Meluccio2 Introduzione Il sistema di sviluppo Kappa-PC permette di scrivere applicazioni in un ambiente.

16/3/99 Marco Meluccio 1

Kappa PC

Page 2: 16/3/99Marco Meluccio1 Kappa PC. 16/3/99Marco Meluccio2 Introduzione Il sistema di sviluppo Kappa-PC permette di scrivere applicazioni in un ambiente.

16/3/99 Marco Meluccio 2

Introduzione

Il sistema di sviluppo Kappa-PC permette di scrivere applicazioni in un ambiente grafico di alto livello.

I componenti di base del sistema sono rappresentati da strutture chiamate oggetti: questi possono essere o classi o istanze. Le relazioni tra gli oggetti in un modello possono essere rappresentate dai collegamenti in una struttura chiamata gerarchia.

Usando gli strumenti della programmazione ad oggetti si possono definire metodi e caratteristiche di un oggetto. Usando le regole si può poi definire come questi oggetti si comportano.

Page 3: 16/3/99Marco Meluccio1 Kappa PC. 16/3/99Marco Meluccio2 Introduzione Il sistema di sviluppo Kappa-PC permette di scrivere applicazioni in un ambiente.

16/3/99 Marco Meluccio 3

Esempio di gerarchia

Page 4: 16/3/99Marco Meluccio1 Kappa PC. 16/3/99Marco Meluccio2 Introduzione Il sistema di sviluppo Kappa-PC permette di scrivere applicazioni in un ambiente.

16/3/99 Marco Meluccio 4

Programmazione orientata agli oggetti

Gli oggetti in Kappa PC sono definiti o come classi o come istanze: le prime rappresentano oggetti più generali, mentre le seconde oggetti più specifici.

Ogni oggetto possiede un certo numero di slot: ognuno di questi descrive una caratteristica dell’oggetto in esame. Per specificare la caratteristica, si assegna un valore allo slot.

Ogni azione che un oggetto può eseguire è rappresentata da un metodo. Il processo di attivazione di un metodo è chiamato sending a message. Quando un oggetto riceve un messaggio che corrisponde ad uno dei suoi metodi, quel metodo è attivato.

Page 5: 16/3/99Marco Meluccio1 Kappa PC. 16/3/99Marco Meluccio2 Introduzione Il sistema di sviluppo Kappa-PC permette di scrivere applicazioni in un ambiente.

16/3/99 Marco Meluccio 5

Programmazione orientata agli oggetti

L’oggetto esegue qualunque procedura sia specificata nel metodo attivato dal messaggio.

La programmazione orientata agli oggetti ha due caratteristiche che la rendono particolarmente adatta allo sviluppo di applicazioni:

gli oggetti ereditano allo stesso modo metodi e slot; oggetti diversi possono rispondere allo stesso messaggio con

metodi diversi: questo significa che le differenze procedurali sono nascoste.

Altri benefici della programmazione ad oggetti sono una rappresentazione normale, la modularità e la possibilità di riutilizzo (riusability).

Page 6: 16/3/99Marco Meluccio1 Kappa PC. 16/3/99Marco Meluccio2 Introduzione Il sistema di sviluppo Kappa-PC permette di scrivere applicazioni in un ambiente.

16/3/99 Marco Meluccio 6

Metodi

Per creare i metodi ci sono due vie possibili: con l’interprete del linguaggio KAL utilizzare funzioni come

MakeMethod e RenameMethod; usare l’editor dei metodi (si clicca su edit tools, su classi o

istanze, su edit, sulla classe a cui si vuole aggiungere il metodo, si sceglie new nel menù metodi)

Un metodo può essere una qualunque funzione KAL o una sequenza di funzioni. Ci sono tre argomenti di default: Self, TheParent, TheOwner. Il valore della variabile Self è l’oggetto che riceve il messaggio, TheParent la classe da cui è derivato l’oggetto, TheOwner la classe in cui è definito il metodo.

Page 7: 16/3/99Marco Meluccio1 Kappa PC. 16/3/99Marco Meluccio2 Introduzione Il sistema di sviluppo Kappa-PC permette di scrivere applicazioni in un ambiente.

16/3/99 Marco Meluccio 7

Class editor

Page 8: 16/3/99Marco Meluccio1 Kappa PC. 16/3/99Marco Meluccio2 Introduzione Il sistema di sviluppo Kappa-PC permette di scrivere applicazioni in un ambiente.

16/3/99 Marco Meluccio 8

Metodi

I metodi eseguono diversi tipi di azioni: cambiano lo stato dell’applicazione, generalmente

cambiando i valori degli slot in un oggetto; mandano messaggi o allo stesso oggetto o ad altri oggetti;

mandare messaggi permette agli oggetti di cooperare tra loro per produrre risultati globali: un modo di pensare ad un programma orientato agli oggetti è una collezione di semplici computer (esempio nel linguaggio KAL: SendMessage(MarysCar, INIT) attiva il metodo INIT);

attivano altre attrezzature del sistema Kappa PC, come il ragionamento basato sulle regole o come l’accesso a dati.

Page 9: 16/3/99Marco Meluccio1 Kappa PC. 16/3/99Marco Meluccio2 Introduzione Il sistema di sviluppo Kappa-PC permette di scrivere applicazioni in un ambiente.

16/3/99 Marco Meluccio 9

Ereditarietà

L’ereditarietà dei metodi è simile all’ereditarietà dei valori degli slot; come per questi ultimi infatti i metodi possono essere:

ereditati (se un oggetto contiene un metodo, tutti gli oggetti derivati, che non contengono un metodo con lo stesso nome, ereditano il metodo non cambiato);

resi locali (un metodo può essere ridefinito in una classe: tutti gli oggetti a livelli più bassi nella gerarchia erediteranno il nuovo metodo; per rendere locale un metodo bisogna scegliere dal menu Methods l’opzione MakeLocal nell’editor di classi o istanze e poi editare il metodo; l’asterisco indica un metodo ereditato).

Page 10: 16/3/99Marco Meluccio1 Kappa PC. 16/3/99Marco Meluccio2 Introduzione Il sistema di sviluppo Kappa-PC permette di scrivere applicazioni in un ambiente.

16/3/99 Marco Meluccio 10

Monitor

Monitor: metodi che sono legati agli slot e che sono attivati o dai cambiamenti nel valore dello slot o dalla richiesta di un valore non noto. Ci sono quattro tipi di monitor:

if needed (questo monitor è attivato se c’è bisogno di un valore di uno slot, ma non è conosciuto);

when accessed (è attivato quando si accede allo slot indipendentemente dal fatto che ci sia o no il valore dello slot);

before change (è attivato prima che il valore dello slot sia cambiato)

after change (è attivato dopo che lo slot è cambiato).

Page 11: 16/3/99Marco Meluccio1 Kappa PC. 16/3/99Marco Meluccio2 Introduzione Il sistema di sviluppo Kappa-PC permette di scrivere applicazioni in un ambiente.

16/3/99 Marco Meluccio 11

Gli slot

Gli slot servono per descrivere le caratteristiche di un oggetto. Come succede per i metodi, possono essere ereditati o resi locali introducendo nuovi valori.

Gli slot hanno una struttura interna composta di opzioni. Kappa PC fornisce un insieme di opzioni standard per controllare il tipo e il numero dei valori. Si può:

specificare il numero di valori; controllare i tipi dei valori; descrivere un insieme di valori permessi; specificare altre istanze come valori.

Page 12: 16/3/99Marco Meluccio1 Kappa PC. 16/3/99Marco Meluccio2 Introduzione Il sistema di sviluppo Kappa-PC permette di scrivere applicazioni in un ambiente.

16/3/99 Marco Meluccio 12

Gli slot: ereditarietà

Una volta che un slot è reso locale e ne viene cambiato il valore, tutte le classi e le istanze che ereditano lo slot ottengono il nuovo valore: il risultato è una specie di shadowing effect. E’ possibile anche cambiare il valore di uno slot senza rendere quest’ultimo locale: in tal caso, il nuovo valore viene cambiato nello slot e in quelli al di sotto nella gerarchia, ma non cambia lo schema dell’ereditarietà (le opzioni dello slot continuano ad essere ereditate come prima).

Quando si crea la base di conoscenza, si deve trovare il giusto posto per gli slot: questi devono essere messi più in alto possibile nella gerarchia.

Page 13: 16/3/99Marco Meluccio1 Kappa PC. 16/3/99Marco Meluccio2 Introduzione Il sistema di sviluppo Kappa-PC permette di scrivere applicazioni in un ambiente.

16/3/99 Marco Meluccio 13

Gli slot: base di conoscenza

La struttura della conoscenza tende ad evolvere con l’aumento della conoscenza stessa: per esempio, se classi o istanze con degli slot in comune non hanno un genitore in comune, questo può essere un segnale che si potrebbe dare a loro un genitore comune. Espandendo la base di conoscenza, è possibile che sia necessario aggiungere delle classi da qualche parte all’interno della gerarchia: questo può provocare un movimento degli slot verso l’alto.

Per muovere degli oggetti all’interno della gerarchia, si possono utilizzare le funzioni MoveInstance e MoveHierarchy.

Page 14: 16/3/99Marco Meluccio1 Kappa PC. 16/3/99Marco Meluccio2 Introduzione Il sistema di sviluppo Kappa-PC permette di scrivere applicazioni in un ambiente.

16/3/99 Marco Meluccio 14

Gli slot: opzioni

Usare le opzioni degli slot permette di fornire informazioni più dettagliate sugli oggetti e quindi creare applicazioni più accurate.

Le opzioni descrivono gli slot nello stesso modo in cui gli slot descrivono le istanze. Una opzione è un contenitore, un posto per mettere ulteriore informazione sullo slot.

Il Kappa PC fornisce automaticamente un insieme di opzioni a ciascuno slot. Quest’ultimo può avere molte opzioni, ma non avere un valore: in questo caso Kappa PC gli assegna il valore NULL.

Page 15: 16/3/99Marco Meluccio1 Kappa PC. 16/3/99Marco Meluccio2 Introduzione Il sistema di sviluppo Kappa-PC permette di scrivere applicazioni in un ambiente.

16/3/99 Marco Meluccio 15

Gli slot: opzioni

I tipi di opzioni degli slot sono: cardinalità; valori permessi; tipo di valore; ereditarietà dello slot; i monitor: if needed, when accessed, before change e after

change; linea di prompt.

Page 16: 16/3/99Marco Meluccio1 Kappa PC. 16/3/99Marco Meluccio2 Introduzione Il sistema di sviluppo Kappa-PC permette di scrivere applicazioni in un ambiente.

16/3/99 Marco Meluccio 16

Slot editor

Page 17: 16/3/99Marco Meluccio1 Kappa PC. 16/3/99Marco Meluccio2 Introduzione Il sistema di sviluppo Kappa-PC permette di scrivere applicazioni in un ambiente.

16/3/99 Marco Meluccio 17

Gli slot: monitor

I monitor sono metodi che sono attivati quando si accede alla coppia oggetto:slot.

if needed (questa opzione contiene il nome di un metodo nell’oggetto. Il metodo è automaticamente eseguito quando il valore dello slot è richiesto e non c’è un valore. Il metodo prende il nome dello slot come argomento opzionale e restituisce il valore da essere usato al posto di NULL nell’espressione di KAL che si riferisce allo slot);

when accessed (a differenza del monitor if needed viene chiamato anche quando il valore dello slot è conosciuto);

before change e after change (chiamati prima e dopo il cambiamento del valore nello slot).

Page 18: 16/3/99Marco Meluccio1 Kappa PC. 16/3/99Marco Meluccio2 Introduzione Il sistema di sviluppo Kappa-PC permette di scrivere applicazioni in un ambiente.

16/3/99 Marco Meluccio 18

Gli slot: tipi di valori

I tipi di valori possibili per uno slot sono i seguenti: text (tipo di default): i limiti di valori per questo tipo si

possono fissare nella campo allowable values; number (intero o floating point): è possibile definire un

massimo e un minimo; boolean (True o False); object (può essere il nome di una classe o di una istanza).

Con la linea di prompt è possibile specificare la domanda che si vuole porre all’utente.

La cardinalità può essere singola o multipla.

Page 19: 16/3/99Marco Meluccio1 Kappa PC. 16/3/99Marco Meluccio2 Introduzione Il sistema di sviluppo Kappa-PC permette di scrivere applicazioni in un ambiente.

16/3/99 Marco Meluccio 19

Il linguaggio KAL

Il KAL è un linguaggio simile nella sua sintassi al C e si comporta come il Lisp. E’ un linguaggio interpretato che può essere compilato nel C.

La sintassi del linguaggio KAL può essere divisa in sei tipi principali:

gli atomi (una singola parola o un gruppo di parole tra virgolette; ad esempio: MarysCar o “red white blue”);

gli slot pairs (nome di un oggetto, due punti, nome di uno slot; ad esempio: MarysCar:Color, Autos:NumberOfDoors oppure TomsCar:Owner:Age, dove TomsCar assume il valore Tom e Tom:Age 45, quindi si ottiene 45);

Page 20: 16/3/99Marco Meluccio1 Kappa PC. 16/3/99Marco Meluccio2 Introduzione Il sistema di sviluppo Kappa-PC permette di scrivere applicazioni in un ambiente.

16/3/99 Marco Meluccio 20

Il linguaggio KAL

gli operatori infissi (=, +=, -=; aritmetici: +, -, *, / , ^, di confronto: <, >, <=, >=, ==, !=, ~=; su stringhe: # unisce due stringhe, confronto #=, #<, #>; logici: And, Or, Xor; altri operatori: +, -, Not);

le espressioni speciali (While, For, ForAll, If, Let); i blocchi di espressioni unite da parentesi; le funzioni permettono di

creare e modificare gli elementi della conoscenza; valutare espressioni logiche, matematiche e su stringhe; controllare blocchi di espressioni; manipolare liste, file, database e fogli elettronici; controllare il processo di conoscenza; controllare l’interfaccia grafica.

sintassi: NomeFunzione(argomento1, argomento2,…)

Page 21: 16/3/99Marco Meluccio1 Kappa PC. 16/3/99Marco Meluccio2 Introduzione Il sistema di sviluppo Kappa-PC permette di scrivere applicazioni in un ambiente.

16/3/99 Marco Meluccio 21

Ragionamento basato sulle regole

KappaPC fornisce un ambiente di sviluppo che permette di scegliere diversi modi per sviluppare un’applicazione: programmazione orientata agli oggetti, ragionamento basato su regole, programmazione classica.

Una regola è simile ad una frase condizionale in un programma convenzionale: if this, then that.

Un motivo per cui usare le regole è l’inference engine, uno speciale programma per trattare le regole. Inoltre le regole possono rappresentare un modo efficiente per codificare l’informazione.

Page 22: 16/3/99Marco Meluccio1 Kappa PC. 16/3/99Marco Meluccio2 Introduzione Il sistema di sviluppo Kappa-PC permette di scrivere applicazioni in un ambiente.

16/3/99 Marco Meluccio 22

Ragionamento basato sulle regole

Si possono evidenziare due tipi di ragionamento: ragionamento in avanti (simulare dei processi: per esempio

modellare gli effetti della condizione della batteria su un’operazione della macchina);

ragionamento all’indietro (diagnosticare dei problemi: per esempio scoprire perché una macchina non vuole partire).

Il primo procede dalle premesse alle conclusioni. Il secondo dalle conclusioni cerca di verificare se un certo fatto può essere stabilito ed è anche detto ragionamento guidato dall’obiettivo.

Page 23: 16/3/99Marco Meluccio1 Kappa PC. 16/3/99Marco Meluccio2 Introduzione Il sistema di sviluppo Kappa-PC permette di scrivere applicazioni in un ambiente.

16/3/99 Marco Meluccio 23

Esempio di ragionamento basato su regole

GoodElecSys

IF the SparkPlugCondition is Good

and the Timing is In Synch

and the Battery is Charged

THEN the ElectricalSystem is Good

BadElecSys

IF the SparkPlugCondition is Bad

Or the Timing is Out OfSynch

Or the Battery is Low

THEN the ElectricalSystem is Bad

Page 24: 16/3/99Marco Meluccio1 Kappa PC. 16/3/99Marco Meluccio2 Introduzione Il sistema di sviluppo Kappa-PC permette di scrivere applicazioni in un ambiente.

16/3/99 Marco Meluccio 24

Esempio di ragionamento basato su regole

Supponendo “SparkPlugCondition good” e “Timing In Synch”, cosa succede se il valore dello slot della batteria è posto a “charged”? In questo modo si asserisce un nuovo fatto: il motore d’inferenza scopre che una premessa della regola combacia con questo nuovo fatto. Continua poi a controllare se le altre due premesse sono verificate.

Nel ragionamento all’indietro invece non si comincia asserendo, ma ponendo una domanda:Qual è lo stato del sistema elettrico?

Il ragionamento all’indietro procede dalle conclusioni alle premesse e quando il motore d’inferenza raggiunge un valore che non può essere accertato, questo verrà chiesto all’utente. In questo caso verrà chiesto il valore della batteria. Se questo sarà “low”, il ragionamento all’indietro porterà alla conclusione che il sistema elettrico è “bad”, se sarà “charged”, si otterrà che il sistema elettrico è “good”.

Page 25: 16/3/99Marco Meluccio1 Kappa PC. 16/3/99Marco Meluccio2 Introduzione Il sistema di sviluppo Kappa-PC permette di scrivere applicazioni in un ambiente.

16/3/99 Marco Meluccio 25

Scegliere il ragionamento basato su regole

E’ necessario: scegliere tra il ragionamento in avanti e il ragionamento all’indietro: il

primo è più appropriato quando si inseriscono nuovi fatti e si vogliono trovare le conclusioni (spesso vero in una simulazione: cambia il valore della batteria e si vogliono trovare le conseguenze), il secondo è più utilizzato per ragioni diagnostiche (ad esempio: La macchina ha la batteria guasta?).

determinare quando si devono utilizzare le regole: se un processo richiede poche condizioni ed è composto da serie di passi predeterminati, le regole sono inefficienti. Le regole sono utili se le condizioni possono essere spezzate in tante piccole regole e se il controllo fornito dal motore d’inferenza (ragionamento all’indietro e in avanti) è appropriato.

Page 26: 16/3/99Marco Meluccio1 Kappa PC. 16/3/99Marco Meluccio2 Introduzione Il sistema di sviluppo Kappa-PC permette di scrivere applicazioni in un ambiente.

16/3/99 Marco Meluccio 26

Ragionamento basato su regole: sintassi

Specificare premesse e conclusioni

Una premessa o una conclusione di una regola in KAL tipicamente contiene nomi degli oggetti, i loro slot e i loro valori. Un esempio è il seguente:

MarysCar:SparkPlugCondition #= Good

Questa espressione chiede se l’oggetto MarysCar contiene uno slot SparkPlugCondition con un valore Good.

L’operatore #= testa se due stringhe sono uguali (da non confondere con l’operatore = che assegna un valore o con == che confronta due numeri).

Page 27: 16/3/99Marco Meluccio1 Kappa PC. 16/3/99Marco Meluccio2 Introduzione Il sistema di sviluppo Kappa-PC permette di scrivere applicazioni in un ambiente.

16/3/99 Marco Meluccio 27

Ragionamento basato su regole: sintassi

Usare regole con variabili

Regole come quella fornita come esempio nella pagina precedente possono essere applicate solo ad una istanza in particolare. Per rendere più generale una regola si possono utilizzare delle variabili.

Variabili nelle regole sono chiamate patterns in Kappa PC.

Un esempio:GoodElecSys [car|Autos]

If car:SparkPlugCondition #= Good And

car:Timing #= InSynch And

car:Battery #= Charged;

Then car:ElectricalSystem = Good;

Page 28: 16/3/99Marco Meluccio1 Kappa PC. 16/3/99Marco Meluccio2 Introduzione Il sistema di sviluppo Kappa-PC permette di scrivere applicazioni in un ambiente.

16/3/99 Marco Meluccio 28

Ragionamento basato su regole: sintassi

Nell’esempio precedente prendiamo in considerazione l’espressione tra parentesi [car|Autos]: la parola o l’atomo prima della barra verticale è la variabile da usare all’interno della regola, mentre la parola dopo la barra indica la classe le cui istanze saranno legate alla variabile.

Priorità delle regole

Fissare la priorità di una regola permette di determinare l’ordine di precedenza nel ragionamento quando sono applicate più di una regola. La priorità va da -32000 a +32000, mentre il valore di default è 0. Per cambiare la priorità si può usare o il Rule Editor o la funzione SetRulePriority.

Page 29: 16/3/99Marco Meluccio1 Kappa PC. 16/3/99Marco Meluccio2 Introduzione Il sistema di sviluppo Kappa-PC permette di scrivere applicazioni in un ambiente.

16/3/99 Marco Meluccio 29

Regole in Kappa PC

Ci sono alcune considerazioni importanti nello scrivere le regole:

quali regole si vogliono rilevanti, in quale momento e in quale tempo è segnato nella Rule List;

nella lista Agenda si trovano le coppie object:slot nell’ordine con cui sono processati dal motore d’inferenza in avanti;

si può creare un insieme più ristretto di regole per rendere più efficiente il ragionamento in avanti (Rule Set);

per bloccare il ragionamento in qualche punto si possono usare dei Break Point;

Page 30: 16/3/99Marco Meluccio1 Kappa PC. 16/3/99Marco Meluccio2 Introduzione Il sistema di sviluppo Kappa-PC permette di scrivere applicazioni in un ambiente.

16/3/99 Marco Meluccio 30

Regole in Kappa PC

se si usa un ragionamento in avanti, si possono scegliere quattro modi di ragionamento:

– selective (default);– depth-first;– breadth-first;– best-first;

se due regole sono in conflitto, si deve decidere quale applicare fissando le priorità;

se si usa il ragionamento all’indietro, è necessario fissare gli obiettivi (goal).

Page 31: 16/3/99Marco Meluccio1 Kappa PC. 16/3/99Marco Meluccio2 Introduzione Il sistema di sviluppo Kappa-PC permette di scrivere applicazioni in un ambiente.

16/3/99 Marco Meluccio 31

Ragionamento in avanti

Il ragionamento in avanti comincia quando una coppia oggetto:slot è rimossa dall’Agenda. La corrente coppia è messa a confronto con ogni regola nell’insieme di regole fornite con la funzione ForwardChain. Una regola nell’insieme è considerata se almeno una delle sue premesse si riferisce alla coppia in esame. Per ciascuna regola vengono esaminate tutte le rimanenti regole. Una regola in cui tutte le regole sono verificate è detta applicabile, è tolta dalla Rule List e sono valutate le sue conseguenze.

Page 32: 16/3/99Marco Meluccio1 Kappa PC. 16/3/99Marco Meluccio2 Introduzione Il sistema di sviluppo Kappa-PC permette di scrivere applicazioni in un ambiente.

16/3/99 Marco Meluccio 32

Ragionamento in avanti

Se le conclusioni rispondono alla domanda posta in partenza (goal), il ragionamento si ferma.

Altrimenti le conclusioni trovate vengono poste nell’Agenda.

In questo modo si termina un ciclo di ragionamento in avanti. Se non è raggiunto il goal, viene presa la successiva coppia object:slot nell’Agenda e il ciclo ricomincia.

Se non è specificato alcun goal, il ragionamento termina quando non c’è più nulla da esaminare, ovvero quando l’Agenda è vuota.

Page 33: 16/3/99Marco Meluccio1 Kappa PC. 16/3/99Marco Meluccio2 Introduzione Il sistema di sviluppo Kappa-PC permette di scrivere applicazioni in un ambiente.

16/3/99 Marco Meluccio 33

Tre passi per il ragionamento in avanti

Sono necessari tre passi per il ragionamento in avanti: cambiare il valore di uno slot

ObjName:SlotName = NewValue;

comunicare al motore d’inferenza che è stato cambiato un valore di uno slot con il comando Assert (si può omettere utilizzando l’opzione [NOASSERT])Assert(ObjName, SlotName);

iniziare il ragionamento in avantiForwardChain(GoalName, RuleSet);

Al posto di GoalName può essere passato il valore NULL.

Il goal è invece obbligatorio nel ragionamento all’indietro.

Page 34: 16/3/99Marco Meluccio1 Kappa PC. 16/3/99Marco Meluccio2 Introduzione Il sistema di sviluppo Kappa-PC permette di scrivere applicazioni in un ambiente.

16/3/99 Marco Meluccio 34

Strategie del ragionamento in avanti

BadElecSys:

IF car:SparkPlusCondition #= Bad Or

car:Timing #= OutOfSynch Or

car:Battery #= Low;

THEN car:ElectricalSystem = Bad;

GoodElecSys:

IF car:SparkPlugCondition #= Ok And

car:Timing #= InSynch And

car:Battery #= Charged;

THEN car:ElectricalSystem = Ok;

BadEngineSys:

IF car:IgnitionKey #= Off Or

car:GasSystem #= Bad Or

car:ElectricalSystem #= Bad;

THEN car:Status = Stopped;

GoodEngSys:

IF car:IgnitionKey #= On And

car:GasSystem #= Ok And

car:ElectricalSystem #= Ok;

THEN car:Status = Running;

BrighLights:

IF car:LightSwitch #= On And

car:Battery #= Charged;

THEN car:LightsAppearance = Bright;

DimLights:

IF car:LightSwitch #= On And

car:Battery #= Low;

THEN car:LightsAppearance = Dim;

Page 35: 16/3/99Marco Meluccio1 Kappa PC. 16/3/99Marco Meluccio2 Introduzione Il sistema di sviluppo Kappa-PC permette di scrivere applicazioni in un ambiente.

16/3/99 Marco Meluccio 35

Strategie del ragionamento in avanti

BriskTurnover:

IF car:IgnitionKey #= On And

car:ElectricalSystem #= Low;

THEN car:EngineTurnover = Brisk;

SluggishTurnover:

IF car:IgnitionKey #= On And

car:ElectricalSystem #= Bad;

THEN car:EngineTurnover = Sluggish;

All’inizio del processo i valori iniziali sono i seguenti:Battery NULLElectricalSystem NULLEngineTurnover NULLIgnitionKey OnLightsAppearance NULLLightSwitch OnStatus NULL

Page 36: 16/3/99Marco Meluccio1 Kappa PC. 16/3/99Marco Meluccio2 Introduzione Il sistema di sviluppo Kappa-PC permette di scrivere applicazioni in un ambiente.

16/3/99 Marco Meluccio 36

Strategia selective

E’ la strategia di default: è la più efficiente, perché segue un solo passo di ragionamento, ma non è una strategia esaustiva. Se si cambia strategia, si può tornare a questa con SetForwardChainMode(SELECTIVE).

Durante il ragionamento nuove regole sono aggiunte alla rule list secondo la loro priorità. Appena una regola è TRUE, le rimanenti regole sono cancellate. L’Agenda deve essere vuota prima che sia testata la successiva regola nella lista. Il processo è iniziato dalla seguente lista di comandi:– MyCar:Battery = Low;– Assert(MyCar, Battery);– ForwardChain(NULL, ruleset);

Si ottiene:– MyCar:ElectricalStatus = Bad;– MyCar:Status = Stopped;

Page 37: 16/3/99Marco Meluccio1 Kappa PC. 16/3/99Marco Meluccio2 Introduzione Il sistema di sviluppo Kappa-PC permette di scrivere applicazioni in un ambiente.

16/3/99 Marco Meluccio 37

Strategia selective

Agenda Active Rule ListMyCar:Battery empty

empty GoodElecSys, BadElecSys, BrighLights,DimLights

empty BadElecSys, BrighLights, DimLights

MyCar:ElectricalSystem empty

empty GoodEngSys, BadEngineSys,BriskTurnover, SluggishTurnover

empty BadEngineSys, BriskTurnover,SluggishTurnover

MyCar:Status empty

Page 38: 16/3/99Marco Meluccio1 Kappa PC. 16/3/99Marco Meluccio2 Introduzione Il sistema di sviluppo Kappa-PC permette di scrivere applicazioni in un ambiente.

16/3/99 Marco Meluccio 38

Strategia depth-first

E’ una ricerca esaustiva: scopre tutte le possibili implicazioni, ma è meno efficiente. Differisce dalla strategia selective nel fatto che non viene azzerata la rule list dopo ogni applicazione con successo di una regola.

Durante il processo di ragionamento nuove regole sono aggiunte all’inizio della rule list. Se ci sono più item nell’Agenda e nella rule list, la priorità è data al successivo item nell’Agenda. Si inizia con i seguenti comandi:

– SetForwardChainMode(DEPTHFIRST);– MyCar:Battery = Low;– Assert(MyCar, Battery);– ForwardChain(NULL, ruleset);

Si ottiene:MyCar:ElectricalStatus = Bad; MyCar:Status = Stopped;

MyCar:EngineTurnover = Sluggish; MyCar:LighsAppearance = Dim;

Page 39: 16/3/99Marco Meluccio1 Kappa PC. 16/3/99Marco Meluccio2 Introduzione Il sistema di sviluppo Kappa-PC permette di scrivere applicazioni in un ambiente.

16/3/99 Marco Meluccio 39

Strategia depth-first

Agenda Active Rule List

MyCar:Battery empty

empty GoodElecSys, BadElecSys,BrightLights, DimLights

MyCar:ElectricalSystem BrightLights, DimLights

empty GoodEngSys, BadEngineTurnover,BriskEngineTurnover,SluggishTurnover, BrightLights,DimLights

empty BadEngineSys, BriskTurnover,SluggishTurnover, BrightLights,DimLights

Page 40: 16/3/99Marco Meluccio1 Kappa PC. 16/3/99Marco Meluccio2 Introduzione Il sistema di sviluppo Kappa-PC permette di scrivere applicazioni in un ambiente.

16/3/99 Marco Meluccio 40

Strategia depth-first

MyCar:Status BriskTurnover, SluggishTurnover,BrightLights, DimLights

empty BriskTurnover, SluggishTurnover,BrightLights, DimLights

empty SluggishTurnover, BrightLights,DimLights

MyCar:EngineTurnover BrightLights, DimLights

empty BrightLights, DimLights

MyCar:LightsAppearance

Page 41: 16/3/99Marco Meluccio1 Kappa PC. 16/3/99Marco Meluccio2 Introduzione Il sistema di sviluppo Kappa-PC permette di scrivere applicazioni in un ambiente.

16/3/99 Marco Meluccio 41

Strategia breadth-first

Come la strategia depth-first, è una strategia esaustiva che scopre tutte le possibili implicazioni. Anche questa è meno efficiente della strategia selective. Durante il processo di ragionamento le nuove regole vengono aggiunte in fondo alla rule list. Se ci sono più item nell’Agenda e nella rule list, la priorità è data alla successiva regola nella rule list. Si inizia con i seguenti comandi:

– SetForwardChainMode(BREADTHFIRST);– MyCar:Battery = Low;– Assert(MyCar, Battery);– ForwardChain(NULL, ruleset);

Si ottiene:MyCar:ElectricalSystem = Bad; MyCar:LighsAppearance = Dim;

MyCar:Status = Stopped; MyCar:EngineTurnover = Sluggish;

Page 42: 16/3/99Marco Meluccio1 Kappa PC. 16/3/99Marco Meluccio2 Introduzione Il sistema di sviluppo Kappa-PC permette di scrivere applicazioni in un ambiente.

16/3/99 Marco Meluccio 42

Strategia breadth-first

Agenda Active Rule List

MyCar:Battery empty

empty GoodElecSys, BadElecSys,BrightLights, DimLights

MyCar:ElectricalSystem BrighLights, DimLights

MyCar:ElectricalSystem DimLights

MyCarElectricalSystemMyCar:LightsAppearance

empty

MyCar:LightsAppearance GoodEngSys, BadEngineSys,BriskTurnover, SluggishTurnover

Page 43: 16/3/99Marco Meluccio1 Kappa PC. 16/3/99Marco Meluccio2 Introduzione Il sistema di sviluppo Kappa-PC permette di scrivere applicazioni in un ambiente.

16/3/99 Marco Meluccio 43

Strategia breadth-first

MyCar:LightsAppearance BadEngineSys, BriskTurnover,SluggishTurnover

MyCar:LightsAppearanceMyCar:Status

BriskTurnoverSluggishTurnover

MyCar:LightsAppearanceMyCar:Status

SluggishTurnover

MyCar:LightsAppearanceMyCar:StatusMyCar:EngineTurnover

empty

MyCar:StatusMyCar:EngineTurnover

empty

MyCar:EngineTurnover empty

empty empty

Page 44: 16/3/99Marco Meluccio1 Kappa PC. 16/3/99Marco Meluccio2 Introduzione Il sistema di sviluppo Kappa-PC permette di scrivere applicazioni in un ambiente.

16/3/99 Marco Meluccio 44

Strategia best-first

Questa strategia è simile a quella depth-first, è esaustiva e scopre tutte le implicazioni possibili. Le nuove regole vengono aggiunte alla lista, ma l’ordine è dato dalla priorità. Se ci sono più item nell’Agenda e nella rule list, la priorità è data al successivo item nell’Agenda. Per esempio possiamo assumere le seguenti priorità: BadElecSys 8, BadEngineSys 7, BrightLights 6, BriskTurnover 5, DimLights 4, GoodElecSys 3, GoodEngSys 2, SluggishTurnover 1. Il processo è iniziato dai comandi:– SetForwardChainMode(BESTFIRST);– MyCar:Battery = Low;– Assert(MyCar, Battery);– ForwardChain(NULL, ruleset);

Si ottiene:MyCar:ElectricalSystem = Bad; MyCar:Status = Stopped;

MyCar:LighsAppearance = Dim; MyCar:EngineTurnover = Sluggish;

Page 45: 16/3/99Marco Meluccio1 Kappa PC. 16/3/99Marco Meluccio2 Introduzione Il sistema di sviluppo Kappa-PC permette di scrivere applicazioni in un ambiente.

16/3/99 Marco Meluccio 45

Strategia best-first

Agenda Active Rule List

empty BadElecSys (8), BrightLights(6),DimLights(4), GoodElecSys(3)

MyCar:ElectricalSystem BrightLights(6), DimLights(4),GoodElecSys(3)

empty BadEngineSys (7), BrightLights (6),BriskTurnover (5), DimLights (4),GoodElecSys (3), GoodEngSys (2),SluggishTurnover (1)

MyCar:Status BrightLights(6), BriskTurnover (5),DimLights (4), GoodElecSys (3),GoodEngSys (2), SluggishTurnover (1)

empty BrightLights (6), BriskTurnover (5),DimLights (4), GoodElecSys (3),GoodEngSys (2), SluggishTurnover (1)

Page 46: 16/3/99Marco Meluccio1 Kappa PC. 16/3/99Marco Meluccio2 Introduzione Il sistema di sviluppo Kappa-PC permette di scrivere applicazioni in un ambiente.

16/3/99 Marco Meluccio 46

Strategia best-first

empty BriskTurnover (5), DimLights (4),GoodElecSys (3), GoodEngSys (2),SluggishTurnover (1)

empty DimLights (4), GoodElecSys (3),GoodEngSys (2), SluggishTurnover (1)

MyCar:LightsAppearance GoodElecSys (3), GoodEngSys (2),SluggishTurnover (1)

empty GoodElecSys (3), GoodEngSys (2),SluggishTurnover (1)

empty GoodEngSys (2), SluggishTurnover (1)

empty SluggishTurnover (1)

MyCar:EngineTurnover empty

Page 47: 16/3/99Marco Meluccio1 Kappa PC. 16/3/99Marco Meluccio2 Introduzione Il sistema di sviluppo Kappa-PC permette di scrivere applicazioni in un ambiente.

16/3/99 Marco Meluccio 47

Ragionamento all’indietro

Nel ragionamento all’indietro o ragionamento guidato dall’obiettivo, il motore d’inferenza tenta di verificare un fatto cercando regole che provano il fatto stesso e poi cercando di verificare le loro premesse. Le premesse a loro volta diventano nuovi fatti da verificare con altre regole e così via. Ci sono tre fasi di questo tipo di ragionamento:

espansione:il motore d’inferenza cerca di verificare le premesse delle regole o le coppie

object:slot al fine di cercare di soddisfare l’obiettivo; collapsing:

il motore d’inferenza cerca di verificare se il goal è stato soddisfatto; richiesta:

quando il motore d’inferenza non riesce a trovare il valore di uno slot, lo richiede all’utente. Può essere utilizzata questa strategia per chiedere all’utente informazioni in particolari momenti. Questa fase è opzionale e si può eliminare con l’opzione [NOASK].

Page 48: 16/3/99Marco Meluccio1 Kappa PC. 16/3/99Marco Meluccio2 Introduzione Il sistema di sviluppo Kappa-PC permette di scrivere applicazioni in un ambiente.

16/3/99 Marco Meluccio 48

Ragionamento all’indietro

Si può attivare il processo all’indietro da una delle tre finestre del sistema Kappa PC:

l’interprete KAL (usando la funzione BackwardChain); la finestra Rule Trace (usando l’opzione BackwardChain nel menu

Control); l’Inference Browser (usando l’opzione Step Mode dal menu Options).

Il ragionamento all’indietro può essere attivato anche da espressioni KAL in un metodo, in una funzione, in una regola…

Ci sono tre elementi importanti da tenere in considerazione: la variabile opzionale [NOASK]; il goal sempre richiesto; l’opzionale insieme di regole (rule set).

Page 49: 16/3/99Marco Meluccio1 Kappa PC. 16/3/99Marco Meluccio2 Introduzione Il sistema di sviluppo Kappa-PC permette di scrivere applicazioni in un ambiente.

16/3/99 Marco Meluccio 49

Strumenti di sviluppo

Page 50: 16/3/99Marco Meluccio1 Kappa PC. 16/3/99Marco Meluccio2 Introduzione Il sistema di sviluppo Kappa-PC permette di scrivere applicazioni in un ambiente.

16/3/99 Marco Meluccio 50

Kappa PC’s main window

La finestra principale del sistema Kappa PC serve come interfaccia per gestire lo sviluppo di una applicazione. Questa finestra permette di:

salvare e recuperare file e applicazioni; gestire tutte le finestre dell’ambiente di sviluppo Kappa PC.

La barra menu principale contiene quattro menu:– file;– edit;– windows;– options.

Page 51: 16/3/99Marco Meluccio1 Kappa PC. 16/3/99Marco Meluccio2 Introduzione Il sistema di sviluppo Kappa-PC permette di scrivere applicazioni in un ambiente.

16/3/99 Marco Meluccio 51

Object Browser

Page 52: 16/3/99Marco Meluccio1 Kappa PC. 16/3/99Marco Meluccio2 Introduzione Il sistema di sviluppo Kappa-PC permette di scrivere applicazioni in un ambiente.

16/3/99 Marco Meluccio 52

Object Browser

L’Object Browser permette di vedere e di modificare gli oggetti e le loro relazioni nella applicazione. Presenta una vista grafica della gerarchia degli oggetti.

Ogni oggetto con sottoclassi definite nascoste è mostrato con un rettangolo intorno, mentre, se sono nascoste solo delle istanze, l’oggetto è mostrato con un ellisse. Le classi sono mostrate con una linea continua, mentre le istanze sono mostrate con una linea tratteggiata e in corsivo.

Si può accedere all’Object Browser anche con le funzioni (sono descritte nell’Help sotto Object Browser Functions).

Page 53: 16/3/99Marco Meluccio1 Kappa PC. 16/3/99Marco Meluccio2 Introduzione Il sistema di sviluppo Kappa-PC permette di scrivere applicazioni in un ambiente.

16/3/99 Marco Meluccio 53

Esempio finestra sessione

Page 54: 16/3/99Marco Meluccio1 Kappa PC. 16/3/99Marco Meluccio2 Introduzione Il sistema di sviluppo Kappa-PC permette di scrivere applicazioni in un ambiente.

16/3/99 Marco Meluccio 54

Finestre sessioni

La Session Window è la principale interfaccia per l’utente dell’applicazione. L’ambiente Kappa PC permette allo sviluppatore dell’applicazione di adattare questa finestra con la propria scelta grafica, creando un’interfaccia che semplifica l’interazione tra l’utente e l’applicazione.

La Session Window ma due modalità: layout (serve per modificare la presentazione grafica

dell’applicazione); runtime (mostra l’applicazione che interagisce con

l’utente).

Page 55: 16/3/99Marco Meluccio1 Kappa PC. 16/3/99Marco Meluccio2 Introduzione Il sistema di sviluppo Kappa-PC permette di scrivere applicazioni in un ambiente.

16/3/99 Marco Meluccio 55

Tool Box

Per creare l’interfaccia grafi-ca dell’applicazione, è possi-bile utilizzare la Tool Box mostrata a sinistra.

E’ possibile inserire nella finestra dell’applicazione ad esempio:Button, CheckBoxGroup,

ComboBox,Edit,

SingleListBox, MultipleListBox,

RadioButtonGroup, Slider, CheckBox

Page 56: 16/3/99Marco Meluccio1 Kappa PC. 16/3/99Marco Meluccio2 Introduzione Il sistema di sviluppo Kappa-PC permette di scrivere applicazioni in un ambiente.

16/3/99 Marco Meluccio 56

Editor

E’ possibile utilizzare questi editor per modificare classi, istanze, funzioni, regole, goal, metodi, slot.

Page 57: 16/3/99Marco Meluccio1 Kappa PC. 16/3/99Marco Meluccio2 Introduzione Il sistema di sviluppo Kappa-PC permette di scrivere applicazioni in un ambiente.

16/3/99 Marco Meluccio 57

La finestra interprete KAL

La finestra KAL permette interpretare le espressioni in linguaggio KAL. L’interprete serve a due scopi:

un ambiente di sviluppo alternativo agli editor e all’Object Browser;

un meccanismo per testare le espressioni KAL valutandole.

Per esempio si può creare una nuova classe con:

MakeClass(Autos, Root)

oppure creare una nuova regola con:

MakeRule(Rule1, [car|Autos], car:MaxSpeed >= 180, carType = Racing);

Page 58: 16/3/99Marco Meluccio1 Kappa PC. 16/3/99Marco Meluccio2 Introduzione Il sistema di sviluppo Kappa-PC permette di scrivere applicazioni in un ambiente.

16/3/99 Marco Meluccio 58

KalView Debugger

La finestra KalView Debugger è divisa in tre parti: la finestra del codice sorgente mostra la funzione o il

metodo in esame; la Value Window mostra il valore di ritorno di ciascuna

espressione, quando si esegue la funzione passo a passo; mostra anche vari messaggi;

la Watches Window mostra i valori di varie variabili o slot.

Se questa finestra è ridotta a icona, funge da watchdog per eventuali errori nelle funzioni e nei metodi. Questo però rallenta l’esecuzione dell’applicazione.

Page 59: 16/3/99Marco Meluccio1 Kappa PC. 16/3/99Marco Meluccio2 Introduzione Il sistema di sviluppo Kappa-PC permette di scrivere applicazioni in un ambiente.

16/3/99 Marco Meluccio 59

Strumenti del sistema di regole

Questi tre strumenti:Rule Relations WindowRule Trace WindowInference Browser

formano il sistema di regole del KAPPA PC.

Page 60: 16/3/99Marco Meluccio1 Kappa PC. 16/3/99Marco Meluccio2 Introduzione Il sistema di sviluppo Kappa-PC permette di scrivere applicazioni in un ambiente.

16/3/99 Marco Meluccio 60

Rule Relations Window

Kappa PC fornisce un modo grafico per mostrare le relazioni tra le regole. Nella finestra si può mostrare quale regola interessa. Altre regole, le cui conclusioni combaciano con le premesse della regola specificata, sono mostrate come If Dependencies; altre invece, le cui premesse combaciano con le conclusioni della regola specificata, sono mostrate come Then Dependencies.

Page 61: 16/3/99Marco Meluccio1 Kappa PC. 16/3/99Marco Meluccio2 Introduzione Il sistema di sviluppo Kappa-PC permette di scrivere applicazioni in un ambiente.

16/3/99 Marco Meluccio 61

Rule Trace Window

Questa finestra permette di vedere le regole che il motore di inferenza invoca nella forma scritta. Permette anche di seguire l’impatto del ragionamento su particolari slot nella base di conoscenza. Si può vedere come il sistema genera nuove conclusioni. Se si vuole utilizzare il Rule Trace durante il ragionamento basato sulle regole bisogna fissare tracing e breaking su particolari regole prima di iniziare il processo di ragionamento.

La Rule Trace Window permette di guardare il processo di ragionamento sia in avanti sia all’indietro.

Page 62: 16/3/99Marco Meluccio1 Kappa PC. 16/3/99Marco Meluccio2 Introduzione Il sistema di sviluppo Kappa-PC permette di scrivere applicazioni in un ambiente.

16/3/99 Marco Meluccio 62

Inference Browser

Questa finestra permette di vedere le regole che il motore di inferenza invoca in una forma grafica. Nel browser si può vedere come il sistema arriva alle conclusioni esaminando linee di ragionamento una volta che il processo di ragionamento è completo. Si può usare l’Inference Browser anche per rintracciare gli errori nella base di conoscenza dell’applicazione.