1. Intro
2. Come fa un computer a risolvere problemi che necessitano di intelligenza? (quindi non solo calcoli)
3. Come fa un computer a giocare a scacchi?
4. Come fa un computer a ragionare?
5. Conclusioni
Intro
L'intelligenza artificiale (di seguito anche IA) è una disciplina dell'informatica. Essa presenta diverse definizioni.
La più famosa e operativa dice che l'intelligenza artificiale è una disciplina che ha come obiettivo la costruzione di agenti razionali (vedi Russel-Norving, Intelligenza artificiale: un approccio moderno - l'approccio degli agenti razionali, appunto). Qui per agente si intende un programma per computer che fa qualcosa (agente = che agisce). Potremmo guardare agli agenti razionali come agenti che fanno la cosa giusta. La cosa giusta da fare è, il più delle volte, ovvia dal contesto: la cosa giusta da fare davanti a un edificio in fiamme è evacuarlo e spegnere l'incendio, la cosa giusta da fare davanti a una partita a scacchi è fare la miglior mossa possibile, e così via, Questo è una definizione operativa perché si occupa di cosa fanno gli agenti.
Il termine intelligenza artificiale, quindi, da questo punto di vista, non è ovvio come le cose da fare davanti a un incendio (ovvio qui non è sinonimo di facile, scusate amici pompieri): per la verità, l'intelligenza non è la proprietà di saper fare qualcosa, bensì il complesso di facoltà psichiche e mentali che consentono all’uomo di pensare, comprendere o spiegare i fatti o le azioni, elaborare modelli astratti della realtà, intendere e farsi intendere dagli altri, giudicare, e che lo rendono insieme capace di adattarsi a situazioni nuove e di modificare la situazione stessa quando questa presenta ostacoli all’adattamento; propria dell’uomo, in cui si sviluppa gradualmente a partire dall’infanzia e in cui è accompagnata dalla consapevolezza e dall’autoconsapevolezza, è riconosciuta anche, entro certi limiti (memoria associativa, capacità di reagire a stimoli interni ed esterni, di comunicare in modo anche complesso, ecc.), agli animali (e, perché no a questo punto, ai computer).
Questa definizione del vocabolario Treccani mette in luce diversi aspetti che l'agente razionale non ha, secondo le definizioni. (Nota: non voglio però tralasciare niente. Russel e Norvig parlano di apprendimento dell'agente dell'ambiente circostante: dalle percezioni che si hanno dell'ambiente, un agente razionale può capire cosa fare, imparare cosa va fatto in situazioni future simili, o capire la situazioni in cui si trova. Questo assomiglia all'intelligenza com'è presentata da Treccani: capacità di adattarsi a situazioni nuove e di modificare la situazione stessa. Lo scopo del post non è mettere in crisi l'intelligenza artificiale o insultarla a priori, ma analizzarla un po' - e, perché no, con spirito critico)
L'intelligenza, come si vede, è quell'insieme di facoltà che rende chi ne è dotato capace di elaborare e costruire modelli, spiegare cosa c'è attorno, percepire situazioni, e forse anche emozioni e sentimenti (anche se il vocabolario non lo dice).
Certo è che la nozione di agente razionale approssima molto della definizione, e magari un giorno arriveremo ad avere agenti che possono quasi fare tutto quello che fanno gli uomini.
Ma rimane Pablo Picasso che puntella: "I computer sono inutili. Sanno dare solo risposte".
D'altra parte, Douglas Richard Hofstader, filosofo e accademico, ha detto nel suo famoso Gödel, Escher, Bach - Un'eterna ghirlanda brillante (libro impegnativo; l'autore ha vinto il Pulitzer per la saggistica grazie ad esso) che "i calcolatori sono per loro intrinseca natura gli esseri più rigidi, privi di desideri e ubbidienti che ci siano (...) Sono l'essenza dell'inconsapevolezza. Come può allora essere programmato un comportamento intelligente? Non è questa la più appariscente delle contraddizioni?". Qui si apre davvero una questione interessante. L'IA è figlia di questo paradosso. Tuttavia, molti passi sono stati avanti verso l'approssimazione dell'intelligenza.
In questo articolo proverò a rispondere a tre domande, che magari stuzzicheranno il lettore.
- Come fa un computer a risolvere problemi che necessitano di intelligenza? (quindi non solo calcoli)
- Come fa un computer a giocare a scacchi?
- Come fa un computer a ragionare?
Rispondiamo alle domande, con ordine, una per una. Ovviamente non è mia intenzione rispondere in maniera esaustiva e completa, ma almeno tentare di capire un po' di più di cosa si sta parlando.
Come fa un computer a risolvere problemi che necessitano di intelligenza? (quindi non solo calcoli)
Proviamo prima a formulare bene questa domanda: cosa vuol dire che un problema necessita di intelligenza? Probabilmente, che esso necessita di un po' di tempo per essere risolto. Questo è dovuto al fatto che le azioni possibili per arrivare all'obiettivo sono molteplici. Il problema può dirsi difficile nel senso computazionale del termine (vedi il post precedente dove si parla di complessità computazionale), perché il numero totale di azioni che si possono svolgere è veramente alto.
L'informatica è figlia della matematica: problema è qualcosa di cui dobbiamo parlare con precisione, ma leggendo tra le righe l'analisi informale appena fatta si intravede qualcosa che si può formalizzare.
Un problema è un insieme di quattro oggetti:
- stato da cui parte il problema
- azioni che si possono svolgere quando si è in uno stato
- obiettivo da raggiungere
- una funzione di transizione che, dato uno stato e un'azione, finisce in un nuovo stato, che è quello che risulta applicando l'azione allo stato.
Un po' di esempi (i primi due presi dal Russel-Norvig):
- nel gioco del 15, gli stati sono la posizione delle caselle, le azioni spostare le caselle, l'obiettivo mettere le caselle in fila
- nel problema di pulire una casa, lo stato è la stanza in cui sono, le azioni pulire la stanza o cambiare stanza, l'obiettivo avere tutte le stanze pulite
- nel problema di spegnere un incendio che divampa in un edificio, gli stati sono il punto che stiamo "spegnendo", le azioni erogare acqua o spostare la pompa, l'obiettivo spegnere l'incendio
- nel problema di giocare a calcio, le azioni sono molteplici (passare la palla, marcare un avversario, chiamare un compagno, dire all'allenatore che ci si è fatti male, ...), lo stato è complesso (dove sono nel campo? Sono stanco? Quanto disto dalla porta?), l'obiettivo segnare, fare un assist, vincere la partita
L'ultimo problema è definito in modo piuttosto confuso. Questo lo si deve un po' a me, ma anche perché il gioco del calcio non è facile da modellare, o, per usare una parola cara agli informatici, da astrarre (attività per cui ci vuole una certa intelligenza, appunto). Infatti, a parte il calcio per robot (si legge nel Russel-Norvig), l'IA non ha fatto molta strada nei giochi fisici.
Ora che abbiamo definito un problema, come fa un computer a risolverlo? Una persona che non è molto ferrata, farebbe così:
- prendo un foglio di carta, e mi scrivo lo stato da cui voglio partire (facile)
- disegno una freccia per ogni azione che posso fare, e all'estremo di ogni freccia lo stato in cui vado (facile)
- scelgo un altro stato tra questi e ricomincio da capo (facile!)
In una parola: facile! Questa persona, oltre a non essere molto ferrata, dovrà armarsi di pazienza e disegnare un bell'albero di stati per trovare, prima o poi, l'obiettivo. Ma le operazioni rimangono semplici da svolgere una per una.
Vi sembrerà strano forse, ma i computer non fanno altro che questo, per risolvere un problema: i passi che vengono eseguiti sono proprio quelli appena descritti.
L'unica cosa che cambia da metodo a metodo è il terzo punto: come scelgo il successivo stato da analizzare. Ecco qui che l'intelligenza dell'uomo entra in gioco.
Questo problema che stiamo risolvendo è sottoposto ad una ricerca della soluzione. Un algoritmo di ricerca prende in input un problema e da in output la sequenza di azioni necessaria per risolverlo.
Gli algoritmi di ricerca differiscono solo per il punto 3, com'è stato già detto. Di seguito una lista non esaustiva, e puramente divulgativa (Russel-Norvig va molto più a fondo):
- L'algoritmo di ricerca per ampiezza prende ogni stato in ordine, così come lo trova, e lo analizza.
- L'algoritmo di ricerca per profondità prende lo stato più a sinistra che c'è, e va fino in fondo ad analizzare, fermandosi quando non può più fare niente. Dopodiché, torna su.
- L'algoritmo di ricerca a costo uniforme sceglie gli stati secondo il costo delle azioni (perché non tutte le azioni costano uguale: alzare un peso da 1 kg è diverso che alzarlo da 100), prendendo lo stato che costa meno raggiungere
- L'algoritmo di ricerca ID (iterative deepening, approfondimento iterativo) è un algoritmo impaziente che applica un massimo di d azioni, con d dato in input.
- L'algoritmo di ricerca ingordo analizza lo stato che ha minor valore euristico, ossia lo stato avente il minimo valore che la funzione assegna allo stato.
- L'algoritmo di ricerca A* analizza lo stato che ha il minimo valore risultante dalla somma dei costi delle azioni che hanno portato ad esso (presi uno per uno) più il valore euristico dello stato immediatamente successivo (vi gira la testa? Ci viene incontro la matematica: se mi trovo in uno stato s e ho n stati dopo s, cioè applicando ogni azione che posso, e per arrivare a s ci ho impiegato m, allora scelgo di analizzare lo stato s' avente minima somma m + h(s), dove h(s) è il valore euristico di s). A* poi aggiorna i valori degli stati che ha già incontrato, se per caso ha scoperto a questo punto di arrivare ad uno stato già "visitato" in meno tempo.
- L'algoritmo di ricerca best-first ricorsivo (che nome! Meglio RBFS) è un algoritmo che agisce più o meno come quello in profondità, ma tiene traccia di un cammino alternativo da prendere al bisogno, sempre aiutandosi con l'euristica.
Questi algoritmi differiscono per la velocità con cui arrivano all'obiettivo. Sono praticamente dati in ordine dal più lento al più veloce. Attenzione però: La complessità temporale di questi algoritmi di ricerca è praticamente sempre esponenziale, quindi dal punto di vista teorico del numero di operazioni sono tutti uguali! C'è da dire poi che la velocità dipende spesso dal problema. I problemi NP-completi, come quelli che ho analizzato nel post precedente, saranno sempre difficili da risolvere, anche trovando una tecnica perfetta che prende ispirazione da queste appena descritte.
Come fa un computer a giocare a scacchi?
Era il 10 febbraio del 1996. Io avevo due anni.
A Filadelfia si disputa la prima partita di scacchi del mondo in cui è un computer a vincere.
Garri Kasparov, all'epoca il più forte giocatore del mondo, abbandona la partita dopo circa 40 mosse. La situazione in cui si trova la partita è la seguente
Non sono un grande intenditore di scacchi, ma se il campione del mondo ha abbandonato in questa situazione, un motivo ci dovrà pur essere.
Il motivo si chiama Deep Blue, ed è stato un computer progettato appositamente per giocare a scacchi. Costruito da IBM, fu oggetto anche di numerose critiche, alcune delle quali fondate, riguardo ad una manovra dell'azienda per risollevarsi, e riguardo a sospetti che fecero pensare a Kasparov che dietro quel computer ci fosse una persona.
Kasparov spesso dichiarò di vedere nelle mosse del computer intelligenza e creatività così profonde da non riuscire a comprenderle (vedi Wikipedia qui): una bella pubblicità per l'IA.
Come funzionava Deep Blue? Come ha fatto a battere in una partita il campione del mondo di scacchi in carica? Come sempre, bisogna mettere i puntini sulle i.
Deep Blue è sì un computer, ma il suo funzionamento è dato semplicemente da un programma. E' più giusto dire, quindi, che è il programma Deep Blue ad aver battuto Kasparov. Certo, l'hardware del computer (la CPU, la RAM, le risorse fisiche in pratica...) ha ovviamente giocato un ruolo importante (abbiamo già detto che la maggior parte dei problemi di ricerca hanno complessità esponenziale, e quindi avere delle buone risorse hardware spesso è determinante).
Come funziona quindi questo programma? Non è troppo diverso dagli algoritmi di ricerca della domanda precedente. C'è però una differenza fondamentale tra cercare una soluzione a un problema in cui siamo soli soletti, e risolvere un problema in cui sai che davanti a te c'è un'altra entità (una persona in questo caso, ma anche un altro agente razionale, oppure una scimmia che ribalta la scacchiera) che tenta di metterti i bastoni tra le ruote. L'algoritmo che è alla base dei programmi che giocano a scacchi, ma in generale dei programmi che sanno giocare*, ha un nome ben preciso.
Prima di svelarlo, proviamo a pensare alla solita persona non troppo ferrata (ma molto tempo e molta pazienza a disposizione) che tenta di giocare a un gioco più semplice, come il gioco del tris. Una persona del genere potrebbe
- elencare tutte le situazioni in cui il gioco è finito, e segnare ogni situazione con tre numeri: +1 se è lei a vincere, 0 se è pareggio, -1 se ha perso. Questa operazione è possibile, perché la persona sa se è una X o un O e può arrivare in questo modo a determinare i numerini.
- andare all'indietro, cioè eliminare una casella, e fare finta nella situazione in cui ci si ritrov ora (quella dove la casella manca), tocchi all'avversario.
Dobbiamo già fermarci, perché questo discorso non è molto semplice.
Ricapitolando un attimo, stiamo elencando tutte le situazioni in cui il gioco è finito, che chiamiamo terminali, e stiamo segnando con numerini (ma potremmo farlo anche con disegnini) lo stato del gioco: ho vinto, ho perso oppure ho pareggiato? Questo valore si chiama utilità.
Ora, si fa l'assunzione che in quella situazione il gioco sia finito dopo che l'avversario (chiamiamolo tizio) ha effettuato l'ultima mossa. Eliminando quindi una casella, ci si ritrova alla situazione in cui era il turno di tizio.
Ora, con un po' di intelligenza si può fare un'assunzione. Che mossa farebbe tizio per vincere, o almeno per mettermi in difficoltà il più possibile? Anche questa risposta è semplice: sceglie la mossa che porta a una situazione avente minima utilità tra tutte le situazioni sottostanti, ovvero la mossa che porta allo stato con il numerino più piccolo! Fatto questo, segna questo numerino vicino alla sua tabella.
Ora che abbiamo "predetto" cosa farà tizio, si torna indietro come al punto 2. E quindi tocca a me!
Cosa sceglierò io per vincere? (almeno che io non voglia perdere, ma allora che sto giocando a fare?)
Ora che abbiamo "predetto" cosa farà tizio, si torna indietro come al punto 2. E quindi tocca a me!
Cosa sceglierò io per vincere? (almeno che io non voglia perdere, ma allora che sto giocando a fare?)
Sceglierò il valore più grande sottostante, così da minimizzare la perdita a cui tizio vuole inevitabilmente portarmi! In pratica, stiamo minimizzando la massima perdita (che voli pindarici!!).
Alla fine di questo algoritmo avremo un albero di gioco. Il primo stato in alto dell'albero sarà la situazione di partenza, ed ecco che abbiamo un albero che ci dice cosa fare in ogni situazione del tris, supponendo che il mio avversario sia il più forte possibile, ovvero che scelga ogni mossa minimizzando il mio punteggio finale.
Se si nota che io sceglierò sempre il massimo dei valori sottostanti nell'albero di gioco, e che il mio avversario sceglierà sempre il minimo, ecco che possiamo chiamare me stesso max e il mio avversario min. Abbiamo un algoritmo che possiamo chiamare minmax, ma, non si sa bene il perché, si chiama minimax (forse è più simpatico, non saprei).
minmax dunque è un algoritmo che suggerisce al programma che decisione prendere in ogni stato del gioco. Se togliamo la griglia del tris e mettiamo una scacchiera coi pezzi sopra, una volta che abbiamo detto al gioco quali sono le regole degli scacchi, egli può giocare benissimo. Da una scacchiera, può creare tutte le situazioni possibili, ovvero tutte le mosse possibli a scacchi. Ogni cammino in tale albero forma una partita. Quindi il gioco degli scacchi è completamente descritto dal suo albero delle mosse. Sapete quante sono? 10123. Sono tantine: è un 1 seguito da 123 zeri.
Ovviamente, Deep Blue non ha giocato in questo modo, altrimenti sarebbe ancora qui a pensare alla prima mossa da fare contro Kasparov, che avrebbe vinto per timeout. Il ragionamento di fondo, però, è questo.
Per la verità, Deep Blue non arrivava per forza a costruire tutto l'albero delle mosse possibili da uno stato, ma con una tecnica chiamata potatura sceglieva la migliore mossa da fare, aiutandosi con funzioni di valutazione che gli comunicavano il vantaggio di portarsi in una situazione piuttosto che in un altra. Russel-Norvig mostra bene l'algoritmo minimax e anche la variante con potatura, e dedica a Deep Blue qualche parola.
Date queste considerazioni tecniche, si potrebbe dire che un computer sta giocando davvero? Io, personalmente, non credo. Il computer non sta giocando, ma sta prendendo decisioni in relazione al gioco, massimizzando il valore delle perdite che un ipotetico avversario invincibile fa. Ovviamente l'IA ha portato a modificare minimax per portare a varianti umane, che tengono conto della distrazione, degli errori, e di altri fattori, per così dire, umani. Ma è meglio giocare con una persona in carne e ossa. Almeno ci puoi parlare.
Ecco cosa ha detto un filosofo di nome John Rawls riguardo alle decisioni minimax (le decisioni prese dall'algoritmo). Quelle di seguito sono testuali parole di Wikipedia che puoi trovare qui.
"Se si pone un individuo dietro un "velo di ignoranza" (la cosiddetta posizione originale) sulla propria situazione esistenziale, egli formulerà il concetto di società giusta usando il principio del minimax. Secondo questo principio, gli individui dovrebbero scegliere il tipo di società che offre "il miglior caso peggiore", cioè in cui gli individui più sfortunati siano nella condizione meno disperata."
* i giochi che abbiamo considerato sono i cosiddetti giochi a somma zero a informazione perfetta, ovvero giochi in cui la somma delle utilità degli stati terminali è sempre costante, e in cui tutti sanno in che stato è il gioco (non vi sono carte coperte, ad esempio). In pratica sono giochi in cui alla fine si ha un vincitore, e l'altro giocatore deve necessariamente perdere. E' inoltre previsto il pareggio.
Non abbiamo trattato giochi in cui entra in gioco (scusate il GIOCO di parole) la probabilità (tirare i dadi, distribuire le carte), e a più di due giocatori.
Come fa un computer a ragionare?
Ragionare è, sempre secondo Treccani, Condurre un discorso secondo la logica, oppure argomentare, trattare e discutere di un soggetto in modo razionale. Questa bella definizione già include il metodo che viene utilizzato per far "ragionare" i computer: la logica.
Aristotele, filosofo greco, formalizzò il ragionamento tramite la tecnica del sillogismo. Famoso esempio è
A) Tutti gli uomini sono mortali
B) Socrate è un uomo
C) Socrate è mortale
A e B in questo contesto si dicono premesse e C la conclusione del sillogismo.
Il sillogismo è una forma di ragionamento molto semplice, si potrebbe dire primitiva, che pone le basi della logica classica, e arriva a formare l'informatica agli inizi del '900. La logica è molto importante per la disciplina che stiamo trattando.
Possiamo affermare che il sillogismo è valido, poiché la verità della conclusione segue dalla verità delle premesse. Questa forma di discorso quasi banale è la base dei ragionamenti per computer.
Per arrivare a una conclusione i computer utilizzano principalmente tre sistemi formali, ovvero tre strategie per derivare conclusioni dalle premesse.
Innanzitutto, chiamiamo con lettere quelle proposizioni di cui trattiamo (A, B, e C, sopra, stanno per le tre frasi del discorso, che chiameremo appunto proposizioni).
La logica proposizione è quella branca della logica che tratta oggetti costituiti da lettere che possono essere vere o false. Qui non trattiamo discorsi più complicati come
Alla fine di questo algoritmo avremo un albero di gioco. Il primo stato in alto dell'albero sarà la situazione di partenza, ed ecco che abbiamo un albero che ci dice cosa fare in ogni situazione del tris, supponendo che il mio avversario sia il più forte possibile, ovvero che scelga ogni mossa minimizzando il mio punteggio finale.
Se si nota che io sceglierò sempre il massimo dei valori sottostanti nell'albero di gioco, e che il mio avversario sceglierà sempre il minimo, ecco che possiamo chiamare me stesso max e il mio avversario min. Abbiamo un algoritmo che possiamo chiamare minmax, ma, non si sa bene il perché, si chiama minimax (forse è più simpatico, non saprei).
minmax dunque è un algoritmo che suggerisce al programma che decisione prendere in ogni stato del gioco. Se togliamo la griglia del tris e mettiamo una scacchiera coi pezzi sopra, una volta che abbiamo detto al gioco quali sono le regole degli scacchi, egli può giocare benissimo. Da una scacchiera, può creare tutte le situazioni possibili, ovvero tutte le mosse possibli a scacchi. Ogni cammino in tale albero forma una partita. Quindi il gioco degli scacchi è completamente descritto dal suo albero delle mosse. Sapete quante sono? 10123. Sono tantine: è un 1 seguito da 123 zeri.
Ovviamente, Deep Blue non ha giocato in questo modo, altrimenti sarebbe ancora qui a pensare alla prima mossa da fare contro Kasparov, che avrebbe vinto per timeout. Il ragionamento di fondo, però, è questo.
Per la verità, Deep Blue non arrivava per forza a costruire tutto l'albero delle mosse possibili da uno stato, ma con una tecnica chiamata potatura sceglieva la migliore mossa da fare, aiutandosi con funzioni di valutazione che gli comunicavano il vantaggio di portarsi in una situazione piuttosto che in un altra. Russel-Norvig mostra bene l'algoritmo minimax e anche la variante con potatura, e dedica a Deep Blue qualche parola.
Date queste considerazioni tecniche, si potrebbe dire che un computer sta giocando davvero? Io, personalmente, non credo. Il computer non sta giocando, ma sta prendendo decisioni in relazione al gioco, massimizzando il valore delle perdite che un ipotetico avversario invincibile fa. Ovviamente l'IA ha portato a modificare minimax per portare a varianti umane, che tengono conto della distrazione, degli errori, e di altri fattori, per così dire, umani. Ma è meglio giocare con una persona in carne e ossa. Almeno ci puoi parlare.
Ecco cosa ha detto un filosofo di nome John Rawls riguardo alle decisioni minimax (le decisioni prese dall'algoritmo). Quelle di seguito sono testuali parole di Wikipedia che puoi trovare qui.
"Se si pone un individuo dietro un "velo di ignoranza" (la cosiddetta posizione originale) sulla propria situazione esistenziale, egli formulerà il concetto di società giusta usando il principio del minimax. Secondo questo principio, gli individui dovrebbero scegliere il tipo di società che offre "il miglior caso peggiore", cioè in cui gli individui più sfortunati siano nella condizione meno disperata."
* i giochi che abbiamo considerato sono i cosiddetti giochi a somma zero a informazione perfetta, ovvero giochi in cui la somma delle utilità degli stati terminali è sempre costante, e in cui tutti sanno in che stato è il gioco (non vi sono carte coperte, ad esempio). In pratica sono giochi in cui alla fine si ha un vincitore, e l'altro giocatore deve necessariamente perdere. E' inoltre previsto il pareggio.
Non abbiamo trattato giochi in cui entra in gioco (scusate il GIOCO di parole) la probabilità (tirare i dadi, distribuire le carte), e a più di due giocatori.
Come fa un computer a ragionare?
Ragionare è, sempre secondo Treccani, Condurre un discorso secondo la logica, oppure argomentare, trattare e discutere di un soggetto in modo razionale. Questa bella definizione già include il metodo che viene utilizzato per far "ragionare" i computer: la logica.
Aristotele, filosofo greco, formalizzò il ragionamento tramite la tecnica del sillogismo. Famoso esempio è
A) Tutti gli uomini sono mortali
B) Socrate è un uomo
C) Socrate è mortale
A e B in questo contesto si dicono premesse e C la conclusione del sillogismo.
Il sillogismo è una forma di ragionamento molto semplice, si potrebbe dire primitiva, che pone le basi della logica classica, e arriva a formare l'informatica agli inizi del '900. La logica è molto importante per la disciplina che stiamo trattando.
Possiamo affermare che il sillogismo è valido, poiché la verità della conclusione segue dalla verità delle premesse. Questa forma di discorso quasi banale è la base dei ragionamenti per computer.
Per arrivare a una conclusione i computer utilizzano principalmente tre sistemi formali, ovvero tre strategie per derivare conclusioni dalle premesse.
Innanzitutto, chiamiamo con lettere quelle proposizioni di cui trattiamo (A, B, e C, sopra, stanno per le tre frasi del discorso, che chiameremo appunto proposizioni).
La logica proposizione è quella branca della logica che tratta oggetti costituiti da lettere che possono essere vere o false. Qui non trattiamo discorsi più complicati come
Per ogni uomo esiste un lavoro che l'aspetta
Che parla di ogni uomo, e di un lavoro che esiste per esso. Anche se non cambia poi molto*, è comunque meglio partire da semplici lettere come A, B, C, ...
Torniamo dunque ai tre sistemi formali, che sono nell'ordine
1) la risoluzione;
2) il concatenamento in avanti;
3) il concatenamento all'indietro.
La risoluzione parte da un semplice ragionamento come
Piove e non piove
Il quale significa affermare praticamente nulla: non può esistere infatti una tale situazione, ovvero piovere e non piovere contemporaneamente. Questa è la più netta e più semplice contraddizione che esiste.
Così se affermo, delirando
Oggi sono felice, piove, non piove e potrei andare al parco
Posso dire la stessa cosa affermando
Oggi sono felice e potrei andare al parco
Perché in mezzo al mio discorso ho posto due affermazioni contraddittorie (piove e non piove), che possono essere eliminate (o, meglio, risolte) poiché, come affermato prima, non significano nulla.
Il ragionamento per risoluzione funziona proprio in questo modo: risolvo, ovvero elimino, le lettere che si contraddicono, per arrivare piano piano ad una conclusione.
Così posso far arrivare a una conclusione un computer, semplicemente dicendo
Se piove non vado al parco
Non piove
Non piove
Si lascia al lettore il piacere di arrivare alla facile conclusione.
Un momento, però: abbiamo parlato di affermazioni di lettere del tipo A e B e C, ... e non del tipo Se A allora B. Poco importa: ogni affermazione, anche complessa come se A allora B, può essere espressa come un elenco di lettere legate da un e. Si veda Russel-Norvig per i dettagli (che qui non sono importanti).
* La logica che tratta oggetti del tipo Per ogni uomo esiste un lavoro che l'aspetta si chiama logica del prim'ordine e tratta variabili che rappresentano qualunque oggetto (in questo caso l'uomo) o il particolare oggetto (il lavoro che aspetta l'uomo) di cui si sta parlando, oltre a facili lettere che rappresentano frasi. Si introducono poi altre lettere per spiegare che questi oggetto hanno proprietà, e funzioni che preso un oggetto ne restituiscono un altro. La cosa interessante è che i computer trattano queste frasi complicate, con particolari "trucchetti", quasi allo stesso modo delle facili affermazioni del tipo A e B e C
Un altro tipo di ragionamento che utilizza il computer è quello che chiameremo concatenamento, in avanti o all'indietro. Qui i discorsi che vengono fuori sono praticamente sillogismi.
Innanzitutto, il computer qui si aspetta solo frasi che sono lettere, oppure sono del tipo
Se A, B, C, ... allora O
A,B,C,... si chiamano premesse, O l'obiettivo. Ora, il ragionamento per arrivare a O può prendere solo una strada: se riesco a dire al computer A, B, C, ... allora esso può affermare O. Non vi possono essere altre strade a questo punto.
Come fa il computer ad arrivare alle premesse?
Per far ragionare un computer bisogna partire da fatti che esso sa già, e che utilizza per derivare i facili sillogismi. Questi fatti possono essere contenuti in una base di conoscenza, una specie di cervello che l'uomo da in dotazione al computer. Quando poi esso risolve il primo sillogismo, mette la conclusione (l'obiettivo) nella base di conoscenza, e ricomincia da capo.
Per far ragionare un computer bisogna partire da fatti che esso sa già, e che utilizza per derivare i facili sillogismi. Questi fatti possono essere contenuti in una base di conoscenza, una specie di cervello che l'uomo da in dotazione al computer. Quando poi esso risolve il primo sillogismo, mette la conclusione (l'obiettivo) nella base di conoscenza, e ricomincia da capo.
Russel-Norvig è pieno di esempi di ragionamenti, anche abbastanza complessi, che il computer riesce a fare grazie a queste strategie.
Il concatenamento presentato ora (chiamato così perché concatena, ovvero mette insieme, le premesse per arrivare all'obiettivo) è chiamato in avanti perché parte dalle premesse e arriva alla conclusione. Il concatenamento all'indietro fa esattamente la cosa opposta: parte dalla conclusione, e cerca di derivare le premesse, per poter dire finalmente di aver ragionato bene.
Conclusioni
Ecco che abbiamo "risposto" alle nostre domande. In verità, abbiamo solo abbozzato le risposte.
Ho cercato di presentare questi argomenti in maniera semplice, quasi banale, tralasciando il più possibile ogni dettaglio matematico, salvo quando utile o divertente.
L'intelligenza artificiale è una materia che è stata molto venduta come l'abilità che un computer possiede nel fare cose che possono fare gli uomini. Lo stesso termine suggerisce un intelligenza che è stata inventata. Ognuno può tirare le conclusioni che vuole, e io vorrei tirare le mie: l'intelligenza non si inventa, semmai si proietta su di un sistema per farlo lavorare.
Trovo un contrasto netto tra questa materia e molte altre branche, per così dire più umili, dell'informatica. La calcolabilità e la complessità, ad esempio, mettono l'accento sul limite chiamato computer: non potremo mai calcolare tutto. Si potrebbero sprecare fiumi d'inchiostro, ma basti fare un esempio famoso, che è quello delle Torre di Hanoi, un gioco che v'invito a cercare su Google per non annoiarvi troppo: non potrà mai esistere qualcuno (e mai vuol dire proprio mai) che risolverà il gioco per 64 dischi, perché questo vuol dire, anche con un computer potentissimo, attendere svariati miliardi di anni.
Attenzione: limite non vuol dire pessimismo, bensì un discorso ben preciso sul fatto che il computer non può salvare il mondo: fa quel che può.
Certo: l'IA aiuta l'uomo in ogni fronte, da quello medico a quello logistico. L'IA, e non credo di sbagliarmi, ha anche salvato delle vite, contribuito alla costruzione di protesi, aiutato persone a trasportare milioni di oggetti in giro per il mondo. Questo è bello: questo è ciò che i computer possono aiutare a fare.
Però, a questo punto si potrebbe puntellare come Picasso, contestualizzando un po': un computer non potrà mai ragionare da solo, ma far risparmiare tempo all'uomo nel farlo lui, così come ha fatto risparmiare tempo nei calcoli che oggi i computer fanno, e che aiutano lo stesso uomo a vivere meglio.
Inoltre, un computer non sta giocando a scacchi, ma sta provando a farlo, con grandi risultati per carità, ma senza pensare: la maggior parte dei motori scacchistici ha aperture (fasi iniziali del gioco) prese da altri campioni di scacchi, ha valutazioni matematiche che a un uomo non potranno mai venire in mente. Il computer non gioca, è solo un pozzo di memoria che fa ricerche cieche (sì, va bene la ricerca informata, ma si sta solo risparmiando tempo) su quali mosse fare!
Il computer, inoltre, non risolve problemi in fondo, cercando le soluzioni: tutto ciò che fa si riduce a calcoli, miliardi di calcoli (non possiamo immaginare quanti ne faccia) che si ritrovano in una CPU, in un codice difficile da decifrare per l'uomo, e che tornano a essere numeri, solo numeri, che decifrati danno una risposta.
Non me ne voglia chi sogna un futuro con robot e case intelligenti: l'intelligenza è solo dell'uomo. Facciamone buon uso.