Intelligenza Artificiale Simbolica m. ernandes, e. trentin
Problem Solving Introduzione Intelligenza Artificiale - Problem Solving
“Risolvere problemi” E’ uno dei processi intellettivi che secondo il Comportamentismo richiede e definisce l’“attività intellettuale”. Induzione (Apprendimento) Sussunzione (Riconoscimento) Ragionamento (Deduzione) Problem Solving (implica tutte le precedenti) Approccio comportamentista: Test di Turing Intelligenza Artificiale - Problem Solving
“Come” costruire un Problem Solver ? Approccio Human-oriented (cognitivista) Deve SIMULARE l’attività intelligente Risolvere problemi “pensando come un uomo” Approccio Machine-oriented (comport.) Deve MANIFESTARE attività intelligente Risolvere i problemi al meglio Intelligenza Artificiale - Problem Solving
Approccio Machine-Oriented Problem Solver che MANIFESTA intelligenza Algoritmi di Ricerca Problem Solving = ricerca nello spazio degli stati. Perchè? PS = Hard Computing Il bias della “potenza di calcolo”: Con calcolatori sufficientemente potenti si può “attaccare” ogni tipo di problema. Falso: l'esplosione combinatoria rende futile la forza bruta Intelligenza Artificiale - Problem Solving
Cosa è un problema? (I) “Problema” è un concetto non definibile, solo esemplificabile. (Nilsson, 1982) Alcuni esempi: I puzzle “da tavola” in genere NP “Commesso viaggiatore” Rompicapo come il Cubo di Rubik SAT, Dimostrazione teoremi Giochi (Dama, Scacchi, etc.) VLSI Intelligenza Artificiale - Problem Solving
Cosa è un problema? (II) Formalizzazione: 5-tupla di elementi: P={X,SCS,x0,g,t} 7 2 5 8 1 6 4 3 2 8 7 6 5 4 3 1 Formalizzare = astrarre un problema Intelligenza Artificiale - Problem Solving
Ricerca nello spazio degli stati Problem Solving Ricerca nello spazio degli stati “Blind” Search Intelligenza Artificiale - Problem Solving
Grafi e strategie Spazio degli Stati X Spazio della Ricerca (SCS(SCS(…(x0)…))) Alberi Nodi Cosa vuol dire trovare una soluzione? Cosa è una strategia di ricerca? Intelligenza Artificiale - Problem Solving
Valutare le strategie 4 criteri fondamentali: Completezza Ottimalità Complessità Spaziale Complessità Temporale Le “regole d’oro” di J.Pearl (1984) Non dimenticarsi di cercare sotto ogni pietra Non alzare due volte la stessa Intelligenza Artificiale - Problem Solving
Ricerca Cieca Come espandere un nodo? Coda dei nodi aperti: CODA.insert(node); node = CODA.remove(); L’ordinamento dei nodi in CODA determina la strategia di ricerca Intelligenza Artificiale - Problem Solving
Algoritmo Generale di Search Struttura Generale if (goal_test(x0)== true) return SUCCESS else CODA.insert(x0) do { if (CODA.isEmpty()) return FAILURE nodo = CODA.remove() figli[] = SCS(nodo) CODA.insert(figli) } while( goal_test(nodo)== false ) 4. return SUCCESS Intelligenza Artificiale - Problem Solving
“Breadth First” Ricerca in Ampiezza Usa una memoria FIFO E’ un algoritmo “difensivo” E’ completo e ottimale Complessità spaziale: O(bd) Complessità temporale: O(bd) Intelligenza Artificiale - Problem Solving
“Breadth First” - simulazione GOAL Intelligenza Artificiale - Problem Solving
Alcuni numeri depth N° nodi Tempo Memoria 2 111 1 msec 11 KB 4 11111 0,1 sec 1 MB 6 >106 10 sec >100 MB 8 >108 17 min >10 GB 10 >1010 28 ore >1 TB 12 >1012 116 giorni >100 TB 14 >1014 32 anni >10000 TB b =10, velocità ricerca = 100 mila nodi/sec., 100 byte/nodo Korf: dagli anni ’60 la velocità di ricerca è cresciuta di 2 x 106. Quasi il 50% del contributo va ai miglioramenti algoritmici. Intelligenza Artificiale - Problem Solving
“Depth First” Ricerca in Profondità Usa una memoria LIFO E’ un algoritmo “aggressivo” E’ non completo e non ottimale Complessità temporale: O(bd) Complessità spaziale: O(db) Intelligenza Artificiale - Problem Solving
“Depth First” - simulazione backtracking GOAL Intelligenza Artificiale - Problem Solving
Come migliorarli? Conoscendo lo stato goal Non ripetendo gli stati Evitando di espandere lo stato di provenienza Evitando i cicli In generale: evitando di generare nodi con stati già visitati nella ricerca Conoscendo il costo degli operatori Intelligenza Artificiale - Problem Solving
Ricerca Bidirezionale (sfruttare la conoscenza dello stato goal) Ricerca in Ampiezza Dallo stato iniziale verso il goal Dal goal verso lo stato iniziale Quando termina? Perché non usare 2 “depth first”? E’ completa e ottimale Complessità spaziale: O(bd/2) Complessità temporale: O(bd/2) Intelligenza Artificiale - Problem Solving
Ricerca Bidirezionale - Simulazione GOAL X0 Intelligenza Artificiale - Problem Solving
Ricerca a profondità limitata (evitare di cadere in loop infiniti) Ricerca in profondità Si stabilisce una profondità massima l Se la coda è vuota al raggiungimento di l si ritorna un fallimento Non è completa (se l<d) né ottimale Complessità spaziale: O(bl) Complessità temporale: O(bl) PRO: evita loop infiniti senza usare memoria! CON: richiede conoscenza a priori del problema Intelligenza Artificiale - Problem Solving
Iterative Deepening Search (evitare di cadere in loop infiniti) Ricerca a profondità limitata Passo 1: l = 0 Passo 2: si applica la ricerca a profondità limitata partendo da X0 se la coda è vuota al raggiungimento di l si reitera il passo 2 aumentando l E’ ottimale e completa Complex. temporale: (d+1)1 + (d)b + (d-1)b2 + … + (1)bd = O(bd) Complex. spaziale: O(bd) CONTRO: si espandono più volte gli stessi stati. bd(b/(b-1))2 Intelligenza Artificiale - Problem Solving
Iterative Deepening - sim Iterazione: 0 Intelligenza Artificiale - Problem Solving
Iterative Deepening - sim Iterazione: 1 Intelligenza Artificiale - Problem Solving
Iterative Deepening - sim Iterazione: 2 Intelligenza Artificiale - Problem Solving
Iterative Deepening - sim Iterazione: 3 GOAL Intelligenza Artificiale - Problem Solving
Ricerca a costo uniforme (sfruttare la conoscenza del costo degli operatori) La “Breadth First” Search minimizza il costo di cammino della soluzione se la funzione di costo per ogni operatore è costante (es: 1) funzione di costo: g(n) La “Uniform-Cost” Search minimizza il costo di cammino anche con operatori a costo variabile (es: “commesso viaggiatore”) Requisito: g(n) <= g(SCS(n)), cioè costo non negativo Altrimenti non c’è strategia che tenga! E’ completa e ottimale. Intelligenza Artificiale - Problem Solving
Ricerca a costo uniforme - Sim 4 2 4 6 6 5 2 8 6 5 6 1 1 4 5 6 2 3 2 GOAL 7 6 4 2 3 COSTO: Intelligenza Artificiale - Problem Solving
Ricerca nello spazio degli stati Problem Solving Ricerca nello spazio degli stati “Heuristic” Search Intelligenza Artificiale - Problem Solving
Cosa è un’euristica? “Qualsiasi cosa” che serva di supporto in un processo decisionale E’ una conoscenza, magari imperfetta, del dominio in cui ci troviamo Un esempio reale: “la Carta di Mercatore” Tipicamente nel Problem Solving: Valutazione del costo di cammino futuro Intelligenza Artificiale - Problem Solving
Come usare un’euristica? X0 g(n) Actual State (n) f(n) h(n) Goal State Intelligenza Artificiale - Problem Solving
Due Esempi di Euristiche 2 6 7 1 5 8 4 3 Tessere fuori posto hfp(n) = 5 Distanza di Manhattan hm(n) = 11 Intelligenza Artificiale - Problem Solving
Proprietà generali delle Euristiche Ammissibilità: h(n) è ammissibile se h(n) ≤ h*(n) Dominanza: h2 domina h1 se h1(n) ≤ h2(n) e h1 & h2 sono ammissibili Intelligenza Artificiale - Problem Solving
Proprietà generali delle Euristiche 2 Consistenza: h(n) è consistente se Monotonicità: h(n) è monotona se n c(n,n’) h(n’) h(n) n’ Intelligenza Artificiale - Problem Solving
Dim: consistenza = ammissibilità 1. Per def: h(n) c(n,n’) + h(n’) (n,n’) 2. Allora possiamo sostituire n’ con un nodo risolvente 3. quindi: h(n) c(n,) + h() 4. h() = 0 e c(n,) = h*(n) per * (percorso ottimo) 5. da 3 e 4 abbiamo che h(n) h*(n) Dim: monotonicità = consistenza 1. Per def: h(n) c(n,n’) + h(n’) n,n’ SCS(n) 3. ripetendo il punto 2 con: n’ n’’ e c(n,n’’) c(n,n’) + c(n’,n’’) rimane garantito che h(n) c(n,n’’) + h(n’’) n,n’’ SCS(…(SCS(n))…) 2. e anche: h(n’) c(n’,n’’) + h(n’’) n’,n’’ SCS(n’) 4. quindi: h(n) c(n,n’) + h(n’) (n,n’) Intelligenza Artificiale - Problem Solving
Esempi di Euristiche Ammissibili 7 8 5 2 1 6 4 3 A) Tessere Fuori Posto B) Distanza di Manhattan C) h3=hfp+ hm non è ammissibile! Navigazione Robot tra ostacoli h(n) = Distanza in linea retta (se il costo degli step è 1 per movimento ortogonale e per movimento diagonale) Intelligenza Artificiale - Problem Solving
Euristica di Manhattan Somma delle distanze ortogonali delle parti (le tessere nel Puzzle di Sam-Loyd) dalle loro posizioni nel goal state. E’ ammissibile E’ monotona. Rispetta la parità di h*(n) E’ pienamente informata quando siamo vicini all’obiettivo Intelligenza Artificiale - Problem Solving
Algoritmi di Ricerca Euristica Hill-Climbing Best-First Search Algoritmi Greedy Algoritmi A* Algoritmo Generale: WA* Memory Bounded Search IDA*, SMA* Ricerca a miglioramenti Iterativi Simulated Annealing Intelligenza Artificiale - Problem Solving
Hill-Climbing Search Si usa unicamente la funzione euristica Non c’è backtracking Non si usa memoria Non è ottimale Non è completo Minimi locali 4 5 4 3 5 3 GOAL Intelligenza Artificiale - Problem Solving
Best-First Ottimale: A* (Hart, Nilsson and Raphael, 1968) A* = un nome ambizioso Funzione di valutazione f(n)=g(n)+h(n) Caratteristiche: Ottimale Completo Complex time & space: O(bd) Ottimamente efficiente Intelligenza Artificiale - Problem Solving
Algoritmo A* Intelligenza Artificiale - Problem Solving if (goal_test(x0)== true) return SUCCESS else OPEN.insert(x0, g(x0)+h(x0) ) do { if (OPEN.isEmpty()) return FAILURE nodo = OPEN.remove() CLOSED.insert(nodo) figli[] = SCS(nodo) for all figli{ if (!CLOSED.contains(figlio)) OPEN.insert(figlio, g(figlio)+h(figlio)) } } while( goal_test(nodo)== false ) 4. return SUCCESS Intelligenza Artificiale - Problem Solving
Dimostrazioni A* è un algoritmo ottimale A* è un algoritmo completo Intelligenza Artificiale - Problem Solving
A* = algoritmo ottimale n0 Per ASSURDO: A* espande da OPEN 2 e 2 non è la soluzione ottima n 1. per definizione g(2) > f* 2. sia n * nodo foglia (in OPEN) * 3. se h è ammissibile allora f(n) ≤ f* 4. 2 viene preferito a n quindi f(n) ≥ f(2) 5. da 3 e 4 abbiamo che f* ≥ f(2) 6. dato che 2 è finale allora h(2)=0 e f(2)= g(2) 7. da 5 e 6 abbiamo che f* ≥ g(2) che contraddice il punto 1 Intelligenza Artificiale - Problem Solving
A* = algoritmo completo Per ASSURDO: A* ritorna un insuccesso o non termina 1. A* ritorna un insuccesso se OPEN è vuota 2. OPEN si svuota se nessuna foglia ha figli 3. se esiste un tra n0 e allora per ogni n esiste un figlio 4. da 2 e 3 deriva che se esiste allora OPEN non si svuota e A* non ritorna un insuccesso 5. se è di lunghezza finita allora A* termina anche in grafi infiniti grazie all’uso di g(n): perché g(n) < n 6. due condizioni per la completezza: - costo di un infinito = - * non infinito Intelligenza Artificiale - Problem Solving
Best-First Generale: WA* (Ira Pohl, 1970) Funzione di valutazione f(n) = (1-w)g(n) + wh(n) w = 0 ricerca breadth-first w = 0,5 ricerca A* w = 1 ricerca Greedy Come cambia il costo della ricerca? w < 0,5 non ha senso, quindi: Funzione di valutazione f(n) = g(n) + w h(n) Crescendo w la ricerca diventa sempre più “greedy” Il costo delle soluzioni è limitato superiormente da: wC* (se w > 1) Intelligenza Artificiale - Problem Solving
WA*: alcuni risultati sul 15-puzzle Mosse Nodi 1 52,7 380 x 106 1,5 56,6 500 x 103 2 63,5 79 x 103 6 103,3 10500 99 145,3 7000 Intelligenza Artificiale - Problem Solving
Iterative Deepening A* (IDA*) (Korf, 1985) Una innovazione “attesa” 1985: prime soluzioni ottime del gioco del 15 Eredita due qualità: linear space search: O(bd) da DFID ottimalità da A* E’ completo, complex. temp = O(bd) Intelligenza Artificiale - Problem Solving
Algoritmo IDA* Come funziona: Ha una soglia di costo: threshold. Funzione di valutazione f(n) = g(n) + h(n) Ha una LISTA di nodi LIFO SE f(n) threshold si espande il nodo. SE la LISTA è vuota si ricominca da capo la ricerca aggiornando threshold Intelligenza Artificiale - Problem Solving
Algoritmo IDA* ? Intelligenza Artificiale - Problem Solving if (goal_test(x0)== true) return SUCCESS soglia = g(x0)+h(x0) LISTA.insert(x0) do { nodo = LISTA.remove() figli[] = SCS(nodo) for all figli{ if (g(figlio)+h(figlio) soglia) LISTA.insert(figlio) } } while( goal_test(nodo)== false and !LISTA.isEmpty()) if(goal_test(nodo)== true) return SUCCESS else{ update(soglia) GOTO 3 ? Intelligenza Artificiale - Problem Solving
IDA* Simulazione Threshold: 3 0+3 1+4 1+2 Threshold: 3 2+3 Intelligenza Artificiale - Problem Solving
IDA* Simulazione Threshold: 5 0+3 1+4 1+2 Threshold: 5 2+5 2+5 2+3 2+3 3+4 3+4 3+2 3+4 4+3 Intelligenza Artificiale - Problem Solving
IDA* Simulazione Threshold: 7 0+3 6+3 6+1 5+4 5+2 4+3 4+5 3+6 3+4 2+3 2+5 1+4 1+2 7+0 Threshold: 7 Intelligenza Artificiale - Problem Solving
Formalizzazione Problemi: Il Puzzle di Sam Loyd X = tutte le configurazioni SCS(x) = tutti gli operatori di x x0 = configurazione random g = unitario per ogni SCS t = configurazione ordinata configurazioni risolvibili N! N!/2 operatori (non-reversibili) b =ca. 4 b = ca.3 Intelligenza Artificiale - Problem Solving
Formalizzazione Problemi: Cubo di Rubik Non ha senso ruotare la stessa faccia due volte consecutive Muovere due facce opposte consecutivamente equivale alla sola mossa dell’asse centrale Dopo aver mosso la faccia “A” e poi la faccia “B”, va mossa una delle altre 4 facce rimanenti. configurazioni risolvibili X = tutte le configurazioni SCS(x) = tutti gli operatori di x x0 = configurazione random g = unitario per ogni SCS* t = configurazione ordinata** (8! 12! 38 212)/12 8! 12! 38 212 operatori utili su x 18 ca.11 * se si usa costo unitario h(n) deve essere normalizzato a 1! ** per usare manhattan si associa ad un lato il colore delle tessere centrali Intelligenza Artificiale - Problem Solving