Intelligenza artificiale
2-1
1.2 TECNICHE DI RISOLUZIONE DEI PROBLEMI
Gli approcci fondamentali alla risoluzione di problemi, mediante
l’uso di un calcolatore, sono essenzialmente due:
• Un approccio di tipo diretto per cui l’analista determina una
particolare sequenza di azioni che gli consentono di raggiungere il
risultato desiderato. In una fase successiva all’analisi potrebbe
implementare un programma codificando la sequenza di azioni in un
linguaggio riconosciuto dal computer. Con questo approccio la
sequenza logica delle azioni è predefinita e non può essere mutata
durante l’esecuzione. Questo tipo di implementazione è molto più
efficiente di ogni altro sistema perché procede dall’inizio
direttamente fino alla fine senza nessuno sforzo.
• E’ possibile però operare con un tipo di approccio radicalmente
diverso. Piuttosto che avere un analista che determina e codifica una
sequenza di azioni per avere una completa soluzione dello specifico
problema, potremmo avere rappresentazioni molto più generali di una
classe di problemi e permettere al computer di ricavare una soluzione
entro i limiti di detta classe. In effetti il problema viene visto come
uno specifico spazio che è composto da un insieme di stati discreti
che rappresentano i possibili modi per risolvere il problema. La
soluzione è vista come la ricerca di un percorso che parta da uno stato
iniziale per giungere allo stato finale richiesto.
Intelligenza artificiale
3-1
1.3 ANALISI DELLE DUE TECNICHE DI RISOLUZIONE
1.3.1 APPROCCIO DIRETTO
Il primo sistema esaminato per risolvere un problema rappresenta
la tecnica tradizionalmente usata per sviluppare un software. E’ una
tecnica detta diretta che può essere definita come l’implementazione di
un programma che esegue, in forma predefinita, il risultato del
ragionamento di un analista a riguardo di uno specifico problema. La
flessibilità di una risoluzione diretta sta nell’accettare da parte del
programma una buona varietà di dati in input. Il processo che porta alla
soluzione del problema, però, è già codificato nel programma. Vediamo
quali sono i vantaggi e gli svantaggi di questa tecnica per affrontare un
problema.
Vantaggi:
• Una implementazione diretta è efficiente in termini di velocità di
esecuzione e di spazio richiesto in memoria. Questo vantaggio risulta
dal fatto che il programma è orientato alla soluzione di un problema
ben definito (figura A);
• Può essere relativamente semplice da sviluppare un’implementazione
diretta perché si indirizza a problemi specifici, specialmente quando il
problema è abbastanza semplice;
• Le tecniche dirette hanno riscosso un grosso successo per la
risoluzione di problemi la cui difficoltà è basata principalmente sul
volume di dati o sul numero di ripetizioni richieste, piuttosto che sulla
complessità del ragionamento. Questo tipo di problema è difficile per
gli esseri umani, ma non per un calcolatore.
Svantaggi:
Intelligenza artificiale
4-1
• Il processo di ragionamento può essere di difficile comprensione per
un osservatore esterno;
• L’implementazione diretta tende ad essere fragile. E’ infatti poco
flessibile ed ogni cambiamento degli elementi di un problema
normalmente richiede almeno una ri-analisi e una modifica del
programma da parte dell’analista;
• Il problema e le azioni richieste devono essere completamente ed
esattamente definite e deve essere disponibile il set completo di dati
necessari alla esecuzione del programma.
Intelligenza artificiale
5-1
1.3.2 APPROCCIO CON TECNICHE DI INTELLIGENZA
ARTIFICIALE
La risoluzione di un problema con l’utilizzo di tecniche di
intelligenza artificiale parte da un diverso principio di base:
“Le tecniche di intelligenza artificiale tentano di creare un
processo di ragionamento nel programma”.
Allo stato attuale della ricerca la soluzione di un problema con
intelligenza artificiale si basa su un sistema composto da una
rappresentazione del problema, una conoscenza dello stesso ed una
codifica del processo di ricerca della soluzione. Nella figura B sono
rappresentati i concetti fondamentali delle tecniche di intelligenza
artificiale e gli elementi coinvolti.
Intelligenza artificiale
6-1
Questo tipo di approccio presenta diversi vantaggi:
• Il processo è interno al computer e quindi un’implementazione di
intelligenza artificiale può essere resa consapevole del proprio
processo di ragionamento utilizzando un controllo del ragionamento e
rendendo l’esecuzione visibile al programmatore ed all’utente;
• Un’implementazione di intelligenza artificiale è relativamente
flessibile e quindi meno fragile. Il sistema applica un ragionamento
flessibile dinamicamente; è quindi spesso capace di ottenere una
porzione dell’obiettivo da raggiungere quando affronta il problema
con dati parzialmente incompiuti e imprecisi e talvolta può adattarsi
modificando i criteri del ragionamento. Problemi con varie richieste e
dati parzialmente incompleti o imprecisi sono abbastanza facili da
risolvere per un uomo, ma sono relativamente difficili per un
computer se si usa una implementazione di tipo diretto;
• La conoscenza del problema è separata dal processo di ragionamento
ed è quindi possibile aggiornarla senza modificare il meccanismo del
ragionamento. Ciò è impossibile per una soluzione del tipo diretto in
quanto la conoscenza ed il processo di ragionamento sono una cosa
sola;
• Le tecniche di intelligenza artificiale, per la potenza del proprio
processo di ragionamento, possono essere utilizzate per risolvere
problemi molto complessi che risulterebbero di difficile soluzione
con sistemi di approccio diretto.
Analizziamo ora quali sono gli svantaggi di questo tipo di approccio:
• Un’implementazione di intelligenza artificiale è generalmente
eseguita più lentamente della corrispondente implementazione diretta,
principalmente a causa del tempo richiesto per la ricerca della
soluzione;
Intelligenza artificiale
7-1
• In una applicazione di intelligenza artificiale il programma ragiona a
modo proprio e talvolta il programmatore, pur sviluppando una
tecnica atta a risolvere il problema, non è in grado di descrivere con
precisione come la macchina ha ottenuto la soluzione;
• Se il problema è di tipo deterministico, si può definire un algoritmo
completo ed efficiente ed è improbabile che il problema possa subire
cambiamenti significativi. In casi di questo tipo una applicazione
della intelligenza artificiale sarebbe sottoutilizzata e poco efficiente e
pertanto decisamente poco conveniente.
1.4 TECNICHE DI INTELLIGENZA ARTIFICIALE
Nessuna tecnica di intelligenza artificiale può affrontare un
problema di qualsiasi genere. Il suo utilizzo può però fornirci delle
soluzioni accettabili per una ben definita classe di problemi.
Quali sono i criteri che ci consentono di affermare che la nostra
applicazione di intelligenza artificiale ha avuto successo? Una qualsiasi
implementazione di intelligenza artificiale è soddisfacente se la
soluzione del problema affrontato è sufficientemente accurata per le
nostre esigenze. In ogni caso potrebbe non essere la migliore. In una
applicazione di questo tipo la macchina deve simulare un processo di
ragionamento umano e non un problema numerico che richiede elevata
precisione di calcolo come avviene con un approccio di tipo diretto.
Questa differenza fondamentale implica che la precisione e l’accuratezza
che la soluzione deve soddisfare sono dettate dalla grandezza del
dominio del problema. La precisione ovviamente diminuisce al crescere
del dominio del problema.
Intelligenza artificiale
8-1
In base a questi principi le tecniche di intelligenza artificiale che
hanno riscosso più successo sono i sistemi esperti e le reti neurali. Dopo
una breve disamina sulle caratteristiche dei primi, tratterò più
approfonditamente le seconde che sono l’argomento di questo lavoro.
1.4.1 I SISTEMI ESPERTI
I sistemi esperti sono utilizzati per raggiungere una varietà di
obiettivi estremamente complicati che nel passato potevano essere
trattati da una stretta cerchia di esperti nel settore. Essi hanno capacità di
giudizio e simulano il processo di ragionamento umano basandosi sulla
specifica conoscenza del problema e dei modi attuabili per risolverlo:
catturano le conoscenze base che permettono di agire in un determinato
settore Una applicazione di questo tipo risulta caratterizzata da:
• Una conoscenza estesa ed altamente specifica del dominio di
interesse;
• Un’applicazione delle tecniche di ricerca;
• Un supporto di sistemi di analisi;
• Una capacità di rendere visibile il proprio modo di ragionare.
1.4.2 ANALISI DEL SISTEMA ESPERTO
Il sistema esperto simula il processo che viene usato per risolvere
il problema; quindi è necessaria a priori una chiara comprensione di tale
processo. Essenzialmente la ricerca si focalizza su un paio di aspetti
fondamentali:
• Il modo di ragionare dell’esperto;
• Lo specifico dominio di conoscenza.
Intelligenza artificiale
9-1
Sono diverse le componenti della conoscenza alla base dell’abilità
di un esperto nel ragionare:
• Fatti. Sono rappresentati da affermazioni, definizioni base riguardanti
il dominio in oggetto;
• Regole procedurali. Sono le regole e le leggi invarianti che
descrivono la sequenza logica di eventi ed i loro legami con il
dominio in esame.
• Regole euristiche. Regole generali che suggeriscono le procedure da
seguire quando le regole procedurali invarianti non sono disponibili.
Sono in genere approssimate e hanno generalmente origine dalle
conoscenze di un esperto.
La presenza di questa ultima categoria di regole contribuisce alla
potenza e alla flessibilità del sistema esperto e lo distingue dal software
più tradizionale. A questa forma di conoscenza l’esperto unisce dei
modelli concettuali del dominio in oggetto e degli schemi che lo
facilitano nel determinare una soluzione.
1.4.3 SVILUPPO DEL PROCESSO
Lo sviluppo del processo di un sistema esperto è costituito da
diverse fasi che sono simili ai segmenti ed ai cicli dell’ingegneria
software standard. Questi stadi sono costituiti da processi per identificare
il problema, per costruire prototipi, per implementare un ragionamento o
per valutarlo. Senza eccezioni il primo obiettivo nello sviluppo di un
qualsiasi sistema esperto è stabilire se il problema proposto si adatta e se
soprattutto richiede una soluzione con un sistema esperto.
Se il problema può essere descritto in termini di definizione diretta
e di algoritmo, è preferibile sviluppare una soluzione tramite l’utilizzo di
Intelligenza artificiale
10-1
software tradizionale. Se invece il problema non è ben definito o richiede
una grande capacità di giudizio, sarà troppo complesso per una efficace
risoluzione da parte di un sistema esperto.
Dopo aver individuato un problema adatto alle capacità di un
sistema esperto, si costruisce un prototipo per verificare l’effettiva
comprensione da parte del sistema della totalità del problema e si
definiscono gli obiettivi al fine di raggiungere la soluzione.
Il primo passo consiste nel formalizzare le varie dichiarazioni del
problema e prevede la progettazione del sistema esperto.
L’implementazione si articola in continui cicli di acquisizione di
esperienza, di aggiornamento di conoscenza base e di test. La fase di
valutazione è tesa a quantificare la misura in cui il sistema si avvicina
alla conoscenza di un esperto. In questa fase di valutazione e
realizzazione il sistema esperto entra in un lungo periodo di analisi,
durante il quale incrementa la sua conoscenza ed è monitorato per
adattarlo a rispondere ad eventuali cambiamenti del dominio di
conoscenza. Gli svantaggi di questo tipo di sistema sono dovuti
essenzialmente alle seguenti limitazioni:
• La conoscenza è acquisita da un numero ristretto di esperti;
• Le applicazioni sono limitate a domini molto specifici;
• La conoscenza richiede la risoluzione di obiettivi che siano
ragionevolmente completi, corretti e stabili.
1.4.4 RETE NEURALE
La rete neurale è un’ulteriore tecnica di intelligenza artificiale. In
questa prima fase non scenderemo nei dettagli, ma illustreremo solo le
caratteristiche per le quali, talvolta, sono preferibili ai sistemi esperti. La
Intelligenza artificiale
11-1
rete neurale simula, anche se alla lontana, il comportamento del cervello.
Similmente al cervello una tale rete è costituita da neuroni (unità)
collegati tra loro da interconnessioni (Figura C). A seconda del tipo di
rete e della legge di apprendimento viene definito il modo in cui le
informazioni fluiscono e il modo con cui vengono trasferite da un
neurone ad un altro. In questo caso le leggi di trasferimento o
l’architettura non hanno alcuna relazione con il dominio del problema in
analisi. Non è pertanto necessario conoscere le leggi che regolano il
problema o i passi che un esperto compirebbe per giungere ad una
soluzione. Una volta definita l’architettura, in base a conoscenze
empiriche e a metodi euristici, la rete è in grado di imparare da sola le
Intelligenza artificiale
12-1
leggi che governano il problema, basandosi sui dati che le vengono
forniti in sede di apprendimento. Se il set di dati è molto vario ed
abbondante, la rete sarà sufficientemente elastica ossia riuscirà a
riconoscere, in sede di test, anche set di dati parzialmente incompleti o
disturbati. Durante la fase iniziale, detta di “learning”, alla rete vengono
presentati i dati più volte, finché il grado di apprendimento raggiunto
non soddisfa le nostre esigenze.
In una fase seguente, denominata “testing”, si valuta
l’apprendimento sottoponendo la rete a nuovi set di dati. Se il test dà
risultati negativi si ripete la fase di learning, variando l’architettura o il
set di dati. Se invece il risultato del test è positivo la rete è in grado di
fornire, in tempo reale, soluzioni a problemi che rientrano nel dominio
definito dai dati. Da ciò si evince che, a differenza di un sistema esperto,
non è necessario avere una conoscenza dettagliata del problema e delle
leggi su cui è basato il ragionamento risolutivo.