E’ chiaro che un modello attentivo come quello esposto nella precedente sezione ha il vantaggio di essere altamente ripetibile, accurato e prevedibile. Il che può essere un grande vantaggio in situazioni dove deve essere garantito un funzionamento
7
http://www.fsm.unipi.it/
34 CAPITOLO 2. F.A.C.E.
2.4. OBIETTIVI DEL NUOVO SISTEMA COGNITIVO 35
determinato, come in un ambiente di terapia medica. D’altra parte porta con sé l’evidente svantaggio di una pessima flessibilità e usabilità del codice. Si pensi ad esempio di voler aggiungere una funzionalità al robot, questo comporterebbe una riscrittura del codice con dei tempi di sviluppo probabilmente scoraggianti. Nell’eventualità in cui si volesse implementare numerosi comportamenti e abilità nella mente del robot, incorreremo sicuramente in problemi di conflitto e incompatibilità con gli skills precedentemente implementati, situazioni difficili da gestire con un linguaggio di programmazione procedurale.
Oltre a questo FACE è un androide, come palesemente riportato nell’acronimo, ideato per trasmettere emozioni, emulare espressioni e comportamenti umani; tutte caratteristiche che hanno poco a che fare con la precisione e la prevedibilità degli algoritmi matematici.
Piuttosto, quello che si richiede dall’architettura del brain è una grande flessibilità, la capacità di risolvere velocemente i frequenti conflitti che si presentano normalmente in un processo decisionale, e coinvolgere in questo processo lo stato emotivo del robot e delle persone presenti nella sua sfera sociale. Il robot deve essere in grado di seguire con attenzione i protagonisti della scena e nel mentre eseguire delle espressioni consone con gli eventi circostanti e con il suo “stato d’animo”, ma non deve essere un semplice spettatore, e neppure eseguire una serie ordinata di comandi, bensì deve essere anch’esso protagonista partecipe di una condivisione sociale ed emotiva.
Una caratteristica desiderabile è, inoltre, quella di rendere accessibile il codice a scienziati e ricercatori non propriamente vicini al mondo della programmazione, ma comunque interessati a studi sul comportamento umano e alla sperimentazione di modelli cognitivi su una piattaforma robotica fisica.
Tutti questi aspetti hanno fornito lo spunto che ci hanno indirizzato verso una paradigma di programmazione differente (la programmazione a eventi), da utilizzare appositamente per scrivere il sistema cognitivo, e un linguaggio semplice, che si potrebbe definire naturale. Il software ideale per soddisfare questi requisiti si è dimostrato essere CLIPS, strumento per la creazione di Sistemi Esperti discusso nel seguente capitolo.
Capitolo 3
CLIPS: il motore del Sistema
Cognitivo
In questo capitolo verrà presentato CLIPS, il software utilizzato per scrivere il codice del blocco cognitivo di FACE. In primo luogo saranno brevemente discussi i vantaggi di utilizzare a questo scopo la programmazione a eventi a discapito di quella a oggetti. Dopodiché verrà introdotto il programma e le funzioni utilizzate per implementare il codice, allegando alcuni esempi. Una sezione sarà appositamente dedicata alla risoluzione di conflitti, uno dei più grandi punti di forza del software.
Questo capitolo non ha la pretesa di essere considerato una guida all’utilizzo di CLIPS, verrano infatti presentate esclusivamente le funzioni e le strutture dati sfruttate dal brain del robot FACE, senza scendere nei dettagli delle loro numerose possibilità di utilizzo.
Per una conoscenza più approfondita sull’uso di CLIPS si rimanda alla CLIPS
User’ Guide, guida per l’utente resa disponibile direttamente dall’autore originale
del software, Gary Riley, e scritta da Joseph D.Giarratano, o all’ancor più completo
CLIPS Reference Manual [GR98, GR05].
I testi appena citati sono stati ampiamente consultati per la realizzazione di questo lavoro.
3.1
I vantaggi della programmazione a eventi
La programmazione a eventi è un particolare paradigma di programmazione del- l’informatica. A differenza della programmazione più tradizionale, definita anche
programmazione a oggetti, in cui l’esecuzione delle istruzioni segue percorsi fissi che
38 CAPITOLO 3. CLIPS: IL MOTORE DEL SISTEMA COGNITIVO
si ramificano soltanto in punti ben determinati e predefiniti dal programmatore, nei programmi scritti utilizzando la tecnica a eventi il flusso del programma è largamente influenzato dal verificarsi di eventi esterni.
Anziché aspettare che un’istruzione impartisca al programma il comando di elaborare una certa informazione, sarà il sistema stesso a trovarsi sempre in una condizione di allerta e verificare continuamente la comparsa delle informazioni da elaborare. Ogni particolare informazione rilevata può far scattare una serie determinata di azioni predisposte dal programmatore. Programmare a eventi vuol dire quindi definire in modo personalizzato le azioni con cui il sistema deve rispondere al verificarsi di un determinato evento.
Benché l’ambito di applicazione tipico di questo paradigma di programmazione sia quello delle interfacce grafiche GUI (dove solitamente un evento potrebbe trattarsi della pressione di un tasto del mouse o della tastiera) vi sono molte altre situazioni in cui questo approccio può risultare conveniente.
Si pensi ad esempio a sistemi altamente dinamici ed evolutivi in cui si richiede, certe volte una risposta che dovrebbe essere immediata, mentre in altre situazioni, l’occorrenza di un evento, ad esempio un particolare suono o immagine, dovrebbe portare alla creazione di una nuova informazione, che costituisca a sua volta un evento che può attivare altre azioni in risposta o ulteriori associazioni logiche.
E’ evidente che stiamo entrando nel vivo della questione, la creazione di un Sistema Cognitivo che modelli i processi di ragionamento propri della mente umana, che procedono non per complessi algoritmi matematici, quanto per via di collegamenti associativi e regole di comportamento, che anziché essere apprese nel tempo verranno in questo caso scritte dal programmatore.
Inoltre, seguendo questo paradigma di scrittura del codice, sarà molto più facile apportare modifiche ai comportamenti e aggiungerne di nuovi senza scalfire il corretto funzionamento del programma.