Corso 2 - Introduzione all'intelligenza artificiale

  Learning
  Autori
  Scrivi
Indice
  Altre sezioni
Enciclopedia
Educazione al multimediale
Download
Indice tematico
Modulo 1: L'intelligenza artificiale: i fondamenti teorici
Modulo 2: Alcuni settori dell'intelligenza artificiale
Modulo 3: I limiti e le applicazioni pratiche dell'intelligenza artificiale
Modulo 4: Un nuovo paradigma: reti neurali e vita artificiale

Introduzione all'intelligenza artificiale
di Fabio Ciotti

 

Terza dispensa

I limiti e le applicazioni pratiche dell'intelligenza artificiale.
Il ragionamento e la soluzione dei problemi

Sommario degli argomenti

  • Introduzione (1)

  • Il ragionamento e la soluzione dei problemi (2)

  • Computer che giocano a scacchi (3)

  • I sistemi esperti (4)

  • La questione del senso comune e il problema della cornice (5)

 
Video

Fate clik qui sopra per collegarvi al video di questa dispensa; potete anche semplicemente ascoltare la lezione mentre scorrete il testo, riducendo ad icona la finestra del player.

Se avete problemi a visualizzare il video controllate di aver installato il player sul vostro computer.

Il testo di questa dispensa è disponibile in formato RTF (Rich Text Format) nell'area Download del sito; potrete scaricarlo per leggerlo con calma o per stamparlo.

 

Introduzione

Nella dispensa precedente abbiamo visto in che modo nell'ambito dell'intelligenza artificiale si sia tentato di riprodurre sul computer alcune delle facoltà simboliche che caratterizzano il comportamento intelligente, come l'uso del linguaggio naturale e l'organizzazione della conoscenza sui fatti del mondo mediante complesse strutture rappresentazionali. Ma evidentemente questi due domini, per quanto importanti, non esauriscono l'insieme di facoltà che attribuiremmo ad un essere intelligente. Infatti un agente intelligente deve anche esser in grado di usare le conoscenze di cui è dotato per elaborare altre conoscenze, per orientare il suo comportamento e per risolvere problemi di varia natura. Sin dagli anni cinquanta molti ricercatori e studiosi di intelligenza artificiale hanno rivolto la loro attenzione proprio a questo tipo di facoltà, cercando di sviluppare dei programmi che fossero in grado di effettuare ragionamenti e di affrontare problemi complessi.

Il ragionamento e la soluzione dei problemi

Per capire in che modo si sia tentato di sviluppare programmi in grado di ragionare e di risolvere problemi, esaminiamo questi tre casi: un matematico che debba dimostrare un teorema, un giocatore di scacchi nel corso di una partita e un normale individuo che debba scegliere che modello di computer acquistare.

Il matematico parte da un insieme di conoscenze preesistenti (tutti i teoremi della matematica dimostrati) e - applicando alcune regole o conoscenze operative - cerca di dedurre da esse un nuovo teorema (il quale a sua volta andrà ad aumentare le conoscenze). Nel fare questo procede per tentativi, esplorando molte possibili strade di dimostrazione prima di individuare quella giusta. Allo stesso modo il giocatore di scacchi di fronte ad una situazione di gioco cerca di prevedere le conseguenze di ogni possibile mossa ragionevole sfruttando la sua conoscenza delle regole del gioco e la sua esperienza. Infine anche il nostro compratore cerca di acquisire la maggiore quantità possibile di informazioni per valutare tutti i pro e i contro delle varie scelte di acquisto che ha a disposizione, prendendo in considerazione fattori complessi come la sua disponibilità finanziaria, l'utilità di una configurazione piuttosto che di un'altra per la sua attività professionale o ricreativa etc.

Tutti e tre questi casi, se osservati in modo astratto, presentano alcuni tratti in comune. Sembra insomma che vi sia un modello generale di ragionamento soggiacente a queste attività. L'analisi di questo modello e la sua riproduzione mediante sistemi informatici è il dominio di molte ricerche che si collocano nell'ambito intelligenza artificiale e che vengono di norma rubricate sotto le etichette di soluzione di problemi (problem solving), dimostrazione automatica, ricerca selettiva. Naturalmente ognuna di queste ricerche ha degli aspetti peculiari legati al particolare oggetto di ciascuna di esse. Tuttavia si può individuare un corpo comune di metodologie e di strumenti. Questo corpo comune consiste nella ricerca di una serie di procedimenti generali per la risoluzione di problemi formalmente definibili. Per capire di cosa si tratti, cominciamo con un esempio di 'ricerca della soluzione di un problema' piuttosto comune e banale.

Immaginiamo che Marco sia in procinto di uscire di casa. Proprio mentre sta per aprire la porta si accorge di avere perduto le chiavi della sua automobile. Egli è tuttavia sicuro che le chiavi siano da qualche parte nel suo piccolo appartamento di tre stanze. Si mette così a cercarle. Per evitare di girare a vuoto, però, decide di procedere in modo sistematico nella sua ricerca. Inizia così a cercare dall'ingresso. Naturalmente anche per effettuare la sua ricerca nella stanza di ingresso adotta il medesimo approccio sistematico. Si mette pertanto ad esplorare ogni singolo mobile presente nell'ingresso, e per ogni singolo mobile guarda in ogni possibile cassetto, piano o anta. Poiché la ricerca nell'ingresso non ha avuto esito, passa in cucina. Anche qui guarda prima sul tavolo, poi sul frigorifero, poi sul piano di cottura. Non avendo ancora trovato le chiavi si mette ad esplorare l'ultima stanza, quella da letto, essendo ormai sicuro che le chiavi debbano essere li dentro. Ovviamente anche nella camera da letto adotta la sua strategia sistematica: comodino, cassetto del comodino, superficie del letto, sotto il letto…

Lasciamo il nostro amico alla sua ricerca e proviamo ad analizzare il suo comportamento. Il problema in questione è la ricerca delle chiavi. Obiettivo della ricerca, ovviamente, è trovare le chiavi. Le possibili soluzioni al problema nel momento iniziale della ricerca sono tutti i luoghi in cui le chiavi possono essere riposte. Chiamiamo questo lo spazio del problema. Per conseguire l'obiettivo Marco ha iniziato ad esplorare in modo sistematico tutte le possibili soluzioni suddividendo lo spazio del problema in modo gerarchico. Per ogni passo della sua ricerca ha naturalmente verificato se l'obiettivo non fosse conseguito.

Un procedimento di ricerca come questo, può facilmente essere rappresentato mediante un cosiddetto grafo ad albero. Un grafo ad albero è costituito da un insieme di punti o nodi, connessi da segmenti orientati (cioè dotati di un verso di percorrenza) e tale che esiste un solo nodo (detto radice) al quale non arriva nessun segmento. Se esistono dei nodi dai quali non parte nessun segmento, essi sono detti nodi terminali o foglie. Per associare un albero ad un processo di soluzione di un problema come quello che abbiamo visto è sufficiente associare ogni singolo passo della ricerca con un nodo.



Figura 1 - Il grafo ad albero che rappresenta il processo di ricerca di una soluzione

La ricerca di una soluzione corrisponde alla esplorazione dei percorsi che legano i nodi dell'albero finché non si raggiunge un nodo foglia che rappresenta lo stato finale o obiettivo della ricerca.

Ci sono due cose interessanti che possiamo capire grazie a questo modo di rappresentare la ricerca della soluzione di un problema. In primo luogo esso può essere applicato a moltissimi problemi di ambito diverso. Ad esempio potremmo rappresentare allo stesso modo la ricerca del migliore investimento da fare in borsa. O la scelta della mossa migliore durante una partita di scacchi. In secondo luogo ci accorgiamo che è possibile seguire diverse strategie nella ricerca delle soluzioni di un problema, ovvero diversi modi di esplorare l'albero.

Le due principali sono la ricerca in profondità (depht-first) e la ricerca in ampiezza (breath-first). Nella ricerca in profondità ogni percorso viene esplorato sistematicamente (in genere a partire da sinistra) fino ad arrivare ad una foglia. Se non si è trovata una soluzione si torna indietro fino alla prima biforcazione e si ripete l'operazione. Ad esempio nell'albero in figura la ricerca in ampiezza procederebbe in questo modo: Prima si esplorerebbe il percorso 1-2-5-10. In caso di esito negativo dal nodo 10 si tornerebbe al 2 per esplorare i percorsi 2-6-11 e 2-6-12. Se anche questa ricerca avesse un esito negativo si tornerebbe fino a 1 per esplorare i percorsi passanti per 3. Il processo continuerebbe fino al raggiungimento della soluzione. Per contro nella ricerca in ampiezza vengono valutati prima tutti i rami che partono da un dato nodo (ad esempio 1-2, 1-3, 1-4) e poi si scende di un livello e si ricomincia il processo. Ciascuna di queste due strategie presenta dei lati negativi e dei lati positivi. Per la ricerca in profondità, ad esempio, se l'albero scende per molti livelli e la soluzione si trova in uno dei nodi alti dei rami più a destra si perde moltissimo tempo per esplorare lunghi percorsi improduttivi. Inoltre se un percorso non arriva mai ad una foglia (l'albero cioè è infinito) il programma continuerebbe ad esplorarlo egualmente senza fermarsi. D'altra parte se una soluzione si trova in un nodo molto basso, è la ricerca in ampiezza a rivelarsi inefficiente.

Un altro aspetto da considerare è che alcuni problemi (è questo il caso della esplorazione di tutte le possibili mosse di una partita di scacchi per trovare la mossa giusta) generano un numero enorme di nodi. In questo caso una esplorazione sistematica lungo tutti i percorsi potrebbe richiedere tempi enormi. Per questi motivi i ricercatori impegnati nell'ambito del problem solving e della dimostrazione automatica hanno cercato di elaborare delle strategie di ricerca selettiva, mediante le quali un programma potesse limitare in anticipo i percorsi da esplorare per trovare una soluzione. Queste strategie sono denominate euristiche.

Uno dei procedimenti euristici più noti è l'analisi mezzi-fini, formalizzata da Allen Newell, Cliff Shaw e Herbert Simon durante lo sviluppo di un programma battezzato modestamente General Problem Solver (GPS, o 'solutore generale di problemi'). Nell'analisi mezzi-fini la ricerca procede in questo modo. Si prende in considerazione lo stato iniziale del problema e il suo obiettivo, cercando di individuare in che cosa consista la differenza. Poi si applicano una serie di regole di trasformazione per cercare di ridurre tale differenza: questo equivale al darsi una sorta di obiettivo parziale. Una volta conseguito l'obiettivo parziale si comincia da capo finché lo stato del problema non coincida con l'obiettivo dato. Secondo Newell, Shaw e Simon, questo tipo di ragionamento euristico sarebbe alla base del ragionamento umano.

In realtà il GPS, e i principi su cui era basato, si sono rivelati troppo semplicistici. Come mette in evidenza Haugeland, due in particolare sono le idee ingannevoli (J. Haugeland, Intelligenza Artificiale, Bollati Boringhieri 1988, p. 168 e seg.). La prima è la tesi che malgrado le diversità di superficie tutti i problemi, o almeno tutte le strategie di soluzione dei problemi, siano sostanzialmente equivalenti. Ben presto ci si è resi conto, al contrario, che ogni classe di problemi ha delle euristiche specifiche che si applicano esclusivamente al dominio di quei problemi. La seconda è la convinzione che la formulazione di un problema e del suo dominio nei termini formali richiesti dai programmi di problem solving sia tutto sommato un compito semplice. Invece il vero 'problema' nella risoluzione dei problemi consiste proprio nel trovare il modo migliore, più efficiente e, perché no, più elegante per formularlo.

Computer che giocano a scacchi

Molti dei nostri lettori avranno sicuramente visto il film di Stanley Kubrick 2001 Odissea nello spazio. Uno dei protagonisti del film, ricorderete, è il computer HAL 9000. HAL è un computer dotato di una stupefacente intelligenza: è in grado di conversare amabilmente in linguaggio naturale, di esprimere giudizi su opere d'arte, di interpretare lo stato d'animo dei suoi compagni di viaggio umani, oltre che di governare da solo l'astronave.

In una sequenza del film, viene messa in scena una partita di scacchi: una partita tra HAL e Dave, uno degli astronauti, che viene naturalmente vinta dal computer. Perché Kubrick decise di inserire quella sequenza nel film? Perché la vittoria di HAL al gioco degli scacchi poteva dare una idea assai chiara di quanto egli fosse intelligente.

Infatti il gioco degli scacchi, nella percezione comune, è considerato il gioco intelligente per eccellenza. Sebbene si tratti di un gioco, esso richiede una elevata capacità di ragionamento logico e una grande quantità di conoscenze. Non a caso, sin dalle origini dell'intelligenza artificiale moltissimi ricercatori hanno speso il loro ingegno nel tentativo di realizzare un programma che fosse in grado di giocare a scacchi. E soprattutto che fosse in grado di giocare allo stesso livello dei grandi maestri.

La storia degli scacchi al computer ha raggiunto il suo culmine un paio di anni fa, quando per la prima volta un computer è stato in grado di sconfiggere il più grande giocatore vivente, Gary Kasparov. Protagonista di questo storico risultato è stato Deep Blue, un computer progettato e programmato nei laboratori di ricerca della IBM. Kasparov e Deep Blue si sono scontrati due volte. Il primo match si è svolto nel febbraio 1996. In quella occasione Kasparov riuscì a sconfiggere il suo sfidante artificiale senza troppa fatica. Ma nella rivincita, che si è svolta nel maggio del 1997, è finalmente avvenuto ciò che si attendeva da anni: Deep Blue è riuscito a vincere due partite e a pareggiarne tre, battendo Kasparov.

Deep Blue è un computer particolarmente potente. si tratta infatti di una cosiddetta macchina parallela. Come sappiamo ogni computer di norma è dotato di una unità centrale di calcolo, o CPU, che ne rappresenta il cervello logico e matematico. Nelle macchine parallele, come Deep Blue, i processori sono molteplici, e lavorano tutti insieme, in parallelo appunto. Ogni singolo processore esegue una parte dei calcoli necessaria a risolvere un problema. In questo modo si possono raggiungere potenze di calcolo elevatissime. Nel caso di Deep Blue, inoltre, alcuni di questi processori erano stati progettati in modo speciale per affrontare il tipo di problemi posti dal gioco degli scacchi.

Ma perché gli studiosi di intelligenza artificiale hanno dimostrato così tanto interesse (e hanno speso tante energie e finanziamenti) verso il gioco degli scacchi? Una ragione la abbiamo già citata: si tratta di un gioco che viene considerato un esempio tipico di attività intelligente. Dunque, riuscire a creare un computer in grado di giocare a scacchi, e di battere un esperto giocatore umano, rappresenta un buon successo per l'IA.

Ma ci sono almeno due altre ragioni che rendono gli scacchi così interessanti. In primo luogo si tratta di un gioco in cui ci sono un insieme limitato di elementi distinti (le pedine) e delle regole molto precise che specificano quali mosse si possono fare. Ad esempio l'alfiere si può muovere solo in diagonale. Infine sappiamo con certezza quando il gioco finisce. Un gioco come questo, come sappiamo, può essere sicuramente giocato da un computer.

Progettare un programma che sappia giocare a scacchi, dunque, a prima vista non è così complicato. Basta rappresentare le pedine mediante un insieme di simboli, e poi tradurre le regole del gioco in una serie di regole per manipolare tali simboli. A questo punto il programma è in grado di calcolare per ogni mossa tutte le possibili contromosse dell'avversario e per ognuna di esse tutte le sue possibili contromosse, e così via. Se il programma potesse veramente operare in questo modo riuscirebbe senza dubbio a trovare la mossa giusta per ogni turno di gioco. Ma quante sono le possibili mosse di un partita di scacchi?

In media per ogni turno un giocatore dispone di 35 alternative. Dunque per valutare tutte le possibili conseguenze di un sola mossa occorre verificare 35 x 35, cioè 1225 possibilità. Questo significa che per valutare le conseguenze dopo due mosse bisogna analizzare più di un milione di possibilità. Per farla breve, per prevedere con questo metodo tutte le mosse di una partita bisognerebbe valutare un numero come 10120 possibilità. Un fenomeno di crescita come questo viene chiamato esplosione combinatoria. Anche il computer più veloce che possiamo immaginare impiegherebbe miliardi di miliardi di anni per fare questo calcolo: e il nostro universo ha solo 15 miliardi anni!

Evidentemente programmare un computer in questo modo non avrebbe senso. E soprattutto, è chiaro che un uomo che gioca a scacchi non ragiona in questo modo. Ben presto gli studiosi che si sono applicati a questo problema si sono resi conto che bisognava fornire al computer delle strategie di gioco che gli permettessero di limitare il numero di mosse e contromosse da esplorare. Queste strategie non garantiscono la certezza assoluta della vittoria: esse indicano solo le strade ragionevolmente più interessanti per trovare la mossa giusta. Sono dunque delle euristiche per l'esplorazione dello sterminato (praticamente infinito) albero che rappresenta tutte le possibili mosse di una partita.

Secondo molti teorici dell'intelligenza artificiale anche un uomo dotato di un livello poco più che minimo di conoscenza degli scacchi usa delle euristiche quando gioca. I grandi maestri, dunque sono coloro che hanno elaborato le euristiche più efficaci.

Ma come sappiamo il ragionamento euristico ha dimostrato di avere una portata molto più vasta. E questa è la terza ragione per cui gli scacchi hanno destato tanto interesse. La capacità di giocare bene a scacchi può essere vista come esempio di una capacità ben più generale: quella di affrontare e risolvere problemi complessi e di scegliere di volta in volta le soluzioni migliori. E questa capacità fa senza dubbio parte di ciò che chiamiamo essere intelligenti.

Va detto comunque che, anche se programmi come quello utilizzato da Deep Blue incorporano componenti euristiche, siamo ancora molto lontani dal poter dire di aver costruito una macchina dalla 'intelligenza scacchistica' paragonabile a quella di un giocatore umano. Il punto di forza di Deep Blue - come del resto di tutti i programmi per il gioco degli scacchi - resta infatti la capacità di calcolo, la 'forza bruta'. Rispetto al giocatore umano, in grado di individuare immediatamente le strategie più promettenti e di limitare fortemente il numero di mosse analizzato, le capacità euristiche del computer restano grossolane: quanto basta per limitare in qualche modo l'esplosione combinatoria, e renderla compatibile con le capacità di calcolo della macchina. Insomma, il computer è in grado di compensare la minore 'intelligenza' con la capacità di analizzare un numero assai maggiore di mosse, molto più velocemente di un uomo. La sconfitta di Kasparov indica solamente che l'equilibrio di questi due fattori si è ormai spostato (o si sta spostando) a favore della macchina, ma non che il computer sia diventato un giocatore dall'intelligenza scacchistica maggiore di quella di un uomo.

I sistemi esperti

Le ricerche nell'ambito del problem solving, insieme a quelle sulla rappresentazione delle conoscenze, sono alla base della creazione dei sistemi esperti. I sistemi esperti rappresentano la più importante (e forse la sola vera) applicazione dell'intelligenza artificiale che ha avuto una ricaduta pratica (anche e soprattutto a livello commerciale).

In estrema sintesi, con il termine 'sistema esperto' si intende un programma che è in grado di risolvere problemi complessi che rientrano in un particolare dominio, con una efficienza paragonabile a quella di uno specialista umano di quel settore. Ad esempio un sistema esperto potrebbe essere capace di fare diagnosi mediche esaminando le cartelle cliniche (opportunamente formalizzate) di un paziente; o potrebbe valutare tutti fattori di rischio e le prospettive di guadagno di un determinato investimento finanziario.

Come viene realizzato concretamente un programma di questo tipo? Di norma tutti i sistemi esperti hanno i seguenti componenti:

  • una base di conoscenza specialistica su un determinato dominio, che rappresenta il sapere necessario ad affrontare e risolvere problemi in quel campo. Ovviamente la base di conoscenza dovrà essere opportunamente rappresentata nella memoria del calcolatore mediante uno dei formalismi (o altri simili) che abbiamo visto nella terza dispensa parlando di knwoledge representation;

  • un motore inferenziale che sia in grado di dedurre (o inferire), a partire dalla base di conoscenza, le conclusioni che costituiscono la soluzione a un dato problema che rientra nel dominio. Il motore inferenziale, che è il vero cuore del programma, funziona applicando alla base di conoscenze una serie di procedure euristiche simili a quelle sviluppate nell'ambito del problem solving. Tuttavia nella maggior parte dei casi alle euristiche generali si affiancano delle euristiche specifiche per l'argomento di cui il sistema si occupa. Infatti in ogni campo specialistico un esperto umano è in grado di escludere immediatamente e senza valutarle una serie di opzioni che sono manifestamente improduttive;

  • una interfaccia utente che è costituita da un insieme di moduli informatici grazie ai quali un essere umano è in grado di interagire con il programma ponendo domande e leggendo le risposte. In alcun casi l'interfaccia utente può anche prevedere dei moduli di aggiornamento della conoscenza, che consentono agli utenti di aggiungere nuovi elementi alla base dati originale.

Il primo sistema esperto ad essere realizzato è stato DENDRAL, sviluppato da Feigenbaum nel 1965 e in grado di analizzare la struttura chimica delle molecole organiche. Ma il vero punto di svolta nella storia di questi programmi è rappresentato dalla creazione (sempre da parte di Feigenbaum insieme a Buchanan e Shortliffe) di MYCIN, che risale al 1972. MYCIN è un sistema specializzato nella diagnosi di malattie infettive, ed è sorprendentemente abile. Per lavorare fa ricorso ad una base di conoscenza molto dettagliata sulla sintomatologia di tutte le sindromi infettive conosciute, che confronta con la cartella clinica e con dati sulla storia clinica del singolo paziente sotto esame. Inoltre le euristiche di cui è dotato gli permettono non solo di ipotizzare una diagnosi, ma anche di dare una valutazione sul grado di esattezza delle diagnosi (o delle possibili diagnosi) proposte.

Le tecniche impiegate per realizzare MYCIN (che ha avuto un grande successo commerciale ed è tuttora utilizzati in moltissimi ospedali, soprattutto in ambito statunitense) hanno dato origine ad una vera e propria famiglia di sistemi esperti: CASNET ad esempio è un sistema esperto per la diagnosi del glaucoma; PUFF si occupa delle malattie polmonari (le sue diagnosi si sono rivelate giuste nel 95% dei casi); un altro medico artificiale, questa volta generico, è CADUCEUS; PROSPECTOR, invece è un sistema esperto in grado di individuare la posizione di possibili giacimenti minerari sulla base di dati geologici, ed è riuscito ad individuare miniere e giacimenti per un valore di miliardi di dollari. Oltre che nell'ambito medico e in quello industriale, questo genere di programmi si è rivelato molto utile anche nel campo dell'insegnamento e della didattica.

Insomma i sistemi esperti costituiscono nel loro insieme una delle applicazioni pratiche più interessanti dell'intelligenza artificiale. Tuttavia, in un certo senso, il successo di queste applicazioni rappresenta una misura delle difficoltà incontrate dall'intelligenza artificiale in senso forte. Un sistema esperto infatti, pur essendo molto abile nel suo campo, non sarebbe mai in grado di applicare la sua abilità ad altri domini: il suo è una specie di micromondo, solo un po' più ricco di quello in cui operava SHRDLU. E soprattutto un sistema, per quanto possa essere esperto in medicina o geologia, non riuscirebbe mai a trovare la soluzione ad un qualsiasi banale problema quotidiano che ciascun essere umano risolverebbe con il solo buon senso.

La questione del senso comune e il problema della cornice

Quando il progetto dell'intelligenza artificiale ebbe inizio, nella metà degli anni 50, molti tra i suoi sostenitori si dissero convinti che entro quaranta o cinquanta anni sarebbe stato possibile realizzare dei programmi veramente intelligenti. In realtà le cose sono andate diversamente, e le difficoltà incontrate in questa impresa si sono rivelate assai più profonde e radicali di quanto non ci si aspettasse. E la difficoltà maggiore non consiste tanto nel far fare ai computer cose 'difficili'. Come abbiamo visto esistono computer che sanno giocare a scacchi come il più bravo giocatore umano. Così come esistono moltissimi programmi in grado di dimostrare teoremi matematici, o di risolvere problemi molto specialistici. Ma nessuno di essi sarebbe in grado di comprendere i fatti più banali e ordinari della vita quotidiana, come ad esempio andare a prendersi un caffè, o capire una barzelletta.

Ma perché è così difficile fornire ad un computer quell'insieme di conoscenze e capacità che chiamiamo senso comune e che ognuno di noi acquisisce senza fare alcuno sforzo? Perché oggi un computer è in grado di sconfiggere il campione del mondo di scacchi, ma non riuscirebbe mai a districarsi in una normale situazione della vita quotidiana?

Malgrado le apparenze, i problemi implicati dal conferimento di un barlume di senso comune ad un computer sono moltissimi e straordinariamente complessi. Abbiamo visto, ad esempio, che i ricercatori hanno proposto diversi modi per rappresentare la conoscenza sul calcolatore; ma quanta informazione bisognerebbe dare al computer per permettergli di interpretare correttamente tutte le possibili situazioni che gli vengono presentate? Sicuramente moltissima, ma nessuno è stato finora in grado di stabilire esattamente quale e a individuare dei sistemi per orientare il comportamento di una macchina in situazioni reali.

Inoltre, ammesso che si riuscisse a formalizzare tutta la conoscenza del senso comune , ben altra cosa sarebbe fare in modo che un programma (magari in grado di controllare un robot) si dimostrasse sempre in grado di selezionare dalla sua memoria la conoscenza giusta per una data situazione, o di capire dal contesto quale conoscenze implicite utilizzare per dare un senso ad un atto comunicativo. Un problema apparentemente simile a quello della selezione delle conoscenze, ma in realtà ancora più complesso, è il cosiddetto problema della cornice (in inglese frame problem, ma qui il termine frame non ha nulla a che vedere con il formalismo ideato da Minsky), sul quale si è accumulata una letteratura scientifica e filosofica ricchissima. Per capire di cosa si tratti, usiamo una piccola storiella ideata da John Haugeland: "C'erano una volta tre Scatole: Papà Scatola, Mamma Scatola e il piccolo Baby Scatola. Papà Scatola stava sul pavimento al centro dello loro modesta casetta, con Baby Scatola appollaiato sulla spalla; Mamma scatola sedeva tranquillamente accanto alla porta. All'improvviso, sferragliando sulle sue rotelline, entrò Cavodoro, tutta desiderosa di risolvere qualche problema. Si guardò intorno e poi con somma cura spinse Papà scatola fino alla parete opposta." (J. Haugeland, Intelligenza Artificiale, Bollati Boringhieri 1988, p. 190)

Immaginiamo ora di porre queste tre domande al robot 'intelligente' Cavodoro:

  • Dov'è ora Papa scatola?

  • Dov'è ora Mamma scatola?

  • Dov'è ora Baby Scatola?

Cavodoro sa perfettamente dov'è Papa Scatola perché è lei che lo ha spinto fino alla parete. Per quanto riguarda Mamma Scatola e Baby, non avendoli toccati, il robot presumerebbe che siano rimasti dov'erano. Il fatto è che la sua azione di spostare Papà Scatola ha avuto un effetto collaterale: lo spostamento di Baby, poggiato sopra il papà. Dunque per rispondere alla terza domanda il robot dovrebbe tenere conto di questo effetto collaterale. Il problema è che i possibili effetti collaterali di una azione sono tantissimi. Ad esempio:

  • Quando si è aperta la porta Baby è caduto per lo spostamento d'aria;

  • Quando si è ha aperta la porta il gatto si è spaventato e ha fatto un salto su Papà Scatola che ha fatto cadere Baby;

  • Quando si è aperta la porta la finestra si rotta;

  •  …

Evidentemente, anche se il robot fosse dotato delle regole necessarie per farlo, calcolare tutti i possibili effetti collaterali di una azione sarebbe improponibile. Ma allora, in che modo selezionare tra questo sterminato numero di conseguenze quelle rilevanti?

Naturalmente in una situazione semplice come quella della famiglia di scatole non sarebbe difficile dare ad un programma la capacità di tenere conto degli effetti collaterali rilevanti (ricordate SHRDLU?). Ma nella vita reale l'impresa è molto più complicata. Ad esempio, se entriamo in una casa e diamo una spinta al padrone di casa, egli potrebbe reagire, oppure la moglie potrebbe chiamare la polizia, o potrebbe arrivare un vicino e fermarci. Ogni nostra azione insomma ha una serie di conseguenze che ci costringono ad aggiornare continuamente la nostra conoscenza. E talvolta questi aggiornamenti sono radicali. Noi esseri umani siamo capaci di fare queste cose senza troppa difficoltà e in pochi secondi sin dalla tenera età. Ma finora nessuno è stato in grado di capire esattamente come questo avvenga e di trasformarlo in una serie di regole euristiche che un computer potrebbe usare per aggiornare nel corso del tempo le sue conoscenze sui fatti accidentali del mondo e sulle conseguenze delle sue eventuali azioni.