Come precedentemente affermato il programma che stiamo per usare serve a produrre sistemi basati sulla conoscenza, o “esperti”. Si possono produrre programmi che raggiungono una competenza di livello pari a quella di esperti per quanto riguarda la risoluzione di problemi inerenti a settori specifici, è sufficiente implementare una buona conoscenza del dominio di applicazione. Ma se si pensa al processo di costruzione di un Sistema Esperto, questo si può ritenere anche un lavoro di “ingegneria della conoscenza” (knowledge engeneering). Il procedimento attraverso il quale si giunge alla forma completa di un sistema è assai vantaggioso di per sé, in quanto la conoscenza di esperti umani deve necessariamente essere prima messa in forma esplicita per diventare poi un informazione computabile da un computer.
A questo scopo la conoscenza dev’essere accuratamente esaminata per quanto concerne la sua correttezza, completezza e coerenza, e potrà essere in seguito riesami- nata migliorandola ulteriormente. Questa è un’altra delle ragioni per cui il concetto di conoscenza è strettamente legato a quello di cognizione. La cognizione d’altronde non è altro che lo studio di come gli esseri umani elaborano le informazioni, un tema indispensabile se si pensa alla volontà di rendere i computer in grado di emulare esseri umani. Ora, dal momento che una delle ultime destinazioni d’uso dei Sistemi Esperti risulta proprio essere l’area delle scienze cognitive, è ovvio il perché questi si siano rivelati così importanti per la costituzione di un’Intelligenza Artificiale.
3.5
Il mondo di CLIPS
Nella fine degli anni cinquanta furono creati diversi linguaggi di programmazione particolari che facilitavano la manipolazione di informazioni con un maggiore livello di astrazione. Tra questi, il programma che riscosse più sucesso si chiamava LISP (LISt Processing). La programmazione logica è una tecnologia che desiderava ricreare in una macchina il modo che noi umani abbiamo di approcciare il mondo. L’idea era quella che i sistemi dovrebbero essere costruiti in modo da esprimere la conoscenza in un linguaggio formale e i problemi dovrebbero essere risolti grazie a dei processi di inferenza a partire da quella conoscenza.
LISP era basato su questo ragionamento e tutt’oggi, grazie alla sua semplicità e flessibilità, la maggior parte dei programmi per la ricerca sull’Intelligenza Artificiale sono scritti in LISP.
Anche CLIPS è un LISP-based production system che ha a che fare con fatti e
42 CAPITOLO 3. CLIPS: IL MOTORE DEL SISTEMA COGNITIVO
velocità e costi esigui.
CLIPS dispone sia di un linguaggio di programmazione a oggetti denominato COOL (Complete Object-Oriented Language), sia di un sistema basato su motore di regole che implementa il Rete Algorithm.
3.5.1
Rete Algorithm
E’ un efficiente algoritmo di pattern matching, utile alla gestione delle regole, che riesce a risolvere in modo elegante uno dei problemi di maggiore rilievo nei Sistemi Esperti contenenti un elevato numero di regole, ovvero l’efficienza. Certo, poco importa qualsiasi altro aspetto di un programma se l’utente deve aspettare a lungo per osservare dei risultati, il sistema non sarebbe utilizzabile. Rete Algorithm
rappresenta la soluzione a questo problema. Questo algoritmo è a conoscenza di tutte le regole e può applicare una regola senza doverne verificare ognuna in sequenza. E’ asintoticamente indipendente dal numero di regole ed è diverse volte più veloce di qualsiasi algoritmo alternativo conosciuto. Riesce a compiere un rapidissimo confronto tra pattern, la sua velocità è ottenuta grazie alla memorizzazione delle informazioni sulle regole all’interno di una Rete. In questo modo decade la necessità di confrontare i fatti con tutte le regole del sistema ad ogni ciclo di riconoscimento, la Rete vedrà esclusivamente i cambiamenti che si avranno ad ogni ciclo di matching. Inoltre, utilizzando Rete Algorithm, il ciclo di calcolo si basa sulla propagazione delle modifiche differenziali nella Working Memory (che sarà descritta a breve). Questo velocizza enormemente il confronto tra i nuovi fatti e quelli precedenti, poiché i dati statici che non cambiano da ciclo a ciclo possono essere ignorati. Tutto ciò rappresenta un abbassamento di costi computazionali che rende il programma imparagonabile alla complessità di un software che tentasse di risolvere un simile problema di confronto tramite l’esecuzione di un linguaggio procedurale.
3.5.2
Componenti di un Sistema Esperto
Andiamo ora ad analizzare i componenti principali che costituiscono un Sistema Esperto:
Working Memory. E’ il database dei fatti utilizzati dalle regole. Rappresenta l’insieme dei fatti conosciuti. Nel nostro caso gli elementi della Working Memory riflettono il risultato, istante per istante, della percezione del robot, lo stato
3.5. IL MONDO DI CLIPS 43
attuale del mondo dal punto di vista di FACE, nonché le condizioni iniziali, volta per volta, in base alle quali costruire, decidere ed eseguire le prossime azioni da compiere.
Knowledge Base. E’ l’insieme di regole sulla quale si basa il sistema. Rappresenta il dominio di conoscenza del Sistema Esperto, in parole povere “in cosa è esperto, cosa sa, e quali metodi conosce” per risolvere determinate questioni che si presentano in relazione a determinati fatti. Di conseguenza ai dati in ingresso che vanno a costituire la Working Memory, e le regole che costituiscono la
Knowledge Base, un Sistema Esperto può reagire con un risposta corretta,
positiva, negativa, o non reagire minimamente con alcuna risposta. Facendo un parallelismo con l’uomo potremmo dire che la Working Memory è quello che noi percepiamo istante per istante del mondo che ci circonda, mentre la Knowledge
Base è la nostra conoscenza, dovuta alla somma della nostra esperienza e della
nostra personalità; quell’insieme di regole etiche, morali, logiche, attitudinali e influenzate dal contesto socio-culturale, che ci fanno essere così come siamo, ed agire così come agiamo.
La forma generica di una regola della Knowledge Base è la seguente:
If condizione-A and condizione-B and condizione-C . . . then azione-1, azione-2, azione-3, . . .
Le condizioni (A, B, C ecc.), chiamate anche “antecedenti”, sono valutate in base a quello che è attualmente conosciuto riguardo al problema da risolvere (ad es. i contenuti della Working Memory). Gli antecedenti possono consistere nella presenza/assenza di alcuni fatti, o nel soddisfacimento di particolari caratteristiche dei fatti conosciuti. I “conseguenti” di una regola (ossia le azioni riportate come azione-1, azione-2 ecc.) tipicamente alterano la Working
Memory dato che l’applicazione della regola porta soventemente alla creazione
di nuovi fatti, oppure alla modifica o all’eliminazione dei fatti presenti prima dell’esecuzione della regola. Tra queste azioni può essere inclusa la lettura di un comando dato dall’utente, la stampa di messaggi, l’accesso a dei file, e così via. Quando gli antecedenti vengono soddisfatti si dice che la regola è stata attivata (activated), quando i conseguenti di una regola vengono eseguiti si dice che la regola è stata eseguita (fired).
44 CAPITOLO 3. CLIPS: IL MOTORE DEL SISTEMA COGNITIVO
Inference Engine. Probabilmente l’elemento più importante di un Sistema Esperto. L’Inference Engine analizza quali regole vengono attivate, e assegna a ciascuna di loro una priorità, che stabilisce la precedenza di ognuna rispetto alle altre. Utilizza l’informazione presente nella Working Memory sommata alle regole della Knowledge Base per derivare l’informazione aggiuntiva riguardo a quale problema necessiti soluzione in prima istanza.
Agenda. L’Agenda è una lista di regole, ordinate con un preciso ordine di priorità, e viene creata dall’Inference Engine. Al suo interno si trovano esclusivamente quelle regole che sono state attivate, ovvero le cui condizioni siano state soddisfatte dai fatti o dagli oggetti presenti nella Fact-List. In altre parole l’Agenda è la lista ordinata delle regole che saranno eseguite in un particolare momento, che corrisponde all’esecuzione del comando (run). Nei casi in cui una regola possieda condizioni multiple, allora, perché la regola sia attivata e posta in Agenda, tutte queste condizioni devono essere soddisfatte simultaneamente. Come precedentemente affermato si ribadisce il concetto che una regola, le cui condizioni (patterns) sono tutte soddisfatte, viene attivata ma non ancora
eseguita. L’Agenda funziona come una pila (la top-rule è la prima ad essere
eseguita). Può succedere però che più regole siano poste in agenda nello stesso momento ed abbiano la stessa priorità, in questo caso si creerà un conflitto e l’Inference Engine, per decidere l’ordine in cui disporle, dovrà appellarsi alla strategia per la risoluzione di conflitti scelta dal programmatore (vedi Conflict
Resolution Strategy, 3.7).
User Interface. La User Inteface è semplicemente l’interfaccia grafica che permet- te all’utente di dialogare con il Sistema Esperto. L’interfaccia viene utilizzata sia per la scrittura del codice che per effettuare il debug e controllare la corretta esecuzione del programma implementato. Dall’interfaccia si possono infatti controllare l’Agenda, visualizzare la lista dei fatti (fact-list), il codice interno delle regole, e altre informazioni utili riportate nella sezione “Comandi di Debug” (3.8.1).
A questo punto risulta chiaro che un Sistema Esperto gode di una struttura unica, completamente diversa da quella che si riscontra nei programmi tradizionali. Un modo utile per riassumere e comprendere questa struttura è provare per un istante a osservarla “da fuori” e vederla divisa in due parti: una fissa, indipendente da