Intelligenza Artificiale
Simbolica
m. ernandes, e. trentin
Problem Solving
Introduzione
Intelligenza Artificiale Problem Solving
2/102
“Risolvere problemi”
E’ uno dei processi intellettivi che secondo il
Comportamentismo richiede e definisce
l’“attività intellettuale”.
1.
2.
3.
4.
Induzione
(Apprendimento)
Sussunzione
(Riconoscimento)
Ragionamento
(Deduzione)
Problem Solving (implica tutte le precedenti)
Approccio comportamentista: Test di Turing
Intelligenza Artificiale Problem Solving
3/102
“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
4/102
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
5/102
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
6/102
Cosa è un problema? (II)
Formalizzazione:
5-tupla di elementi:
3
7
6
1
5
2
4
8
P={X,SCS,x0,g,t}
1
2
3
4
5
6
7
8
Formalizzare = astrarre un problema
Intelligenza Artificiale Problem Solving
7/102
Problem Solving
Ricerca nello spazio degli stati
“Blind” Search
Intelligenza Artificiale Problem Solving
8/102
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
9/102
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
10/102
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
11/102
Algoritmo Generale di Search
Struttura Generale
1. if (goal_test(x0)== true) return SUCCESS
2. else CODA.insert(x0)
3. 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
12/102
“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
13/102
“Breadth First” - simulazione
GOAL
Intelligenza Artificiale Problem Solving
14/102
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 b =10, velocità
>1014 ricerca =32
TB
100anni
mila nodi/sec.,>10000
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
15/102
“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
16/102
“Depth First” - simulazione
GOAL
Intelligenza Artificiale Problem Solving
backtracking
17/102
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
18/102
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
19/102
Ricerca Bidirezionale - Simulazione
GOAL
X0
Intelligenza Artificiale Problem Solving
20/102
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
21/102
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
bd(b/(b-1))2
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.
Intelligenza Artificiale Problem Solving
22/102
Iterative Deepening - sim
Iterazione: 0
Intelligenza Artificiale Problem Solving
23/102
Iterative Deepening - sim
Iterazione: 1
Intelligenza Artificiale Problem Solving
24/102
Iterative Deepening - sim
Iterazione: 2
Intelligenza Artificiale Problem Solving
25/102
Iterative Deepening - sim
Iterazione: 3
GOAL
Intelligenza Artificiale Problem Solving
26/102
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
27/102
Ricerca a costo uniforme - Sim
4
6
2
2
1
4
8
6
6
5
2
6
4
3
5
1
5
6
2
GOAL
COSTO:
Intelligenza Artificiale Problem Solving
7
6
4
3
2
0
28/102
Problem Solving
Ricerca nello spazio degli stati
“Heuristic” Search
Intelligenza Artificiale Problem Solving
29/102
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
30/102
Come usare un’euristica?
X0
g(n)
Actual State (n)
f(n)
h(n)
Goal State
Intelligenza Artificiale Problem Solving
31/102
Due Esempi di Euristiche
3
2
8
5
7
6
4
1
Tessere fuori posto
Distanza di Manhattan
hfp(n) = 5
hm(n) = 11
Intelligenza Artificiale Problem Solving
32/102
n
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
n
n
33/102
Proprietà generali delle Euristiche 2
n’
Consistenza:
h(n) è consistente se
h(n’)
c(n,n’)
n
h(n)
h
(
n
)
c
(
n
,'
n
)
h
(
n
'
)
(
n
,'
n
)
Monotonicità:
h(n) è monotona se
h
(
n
)
c
(
n
,
n
'
)(
h
n
'
)
n
|
n
'
S
C
S
(
n
)
Intelligenza Artificiale Problem Solving
34/102
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)
2. e anche: 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))…)
4. quindi: h(n)
c(n,n’) -+ h(n’) (n,n’)
Intelligenza
Artificiale
Problem Solving
35/102
2
Esempi di Euristiche Ammissibili
3 7 4
6 1
5 8 2
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 2 per
movimento diagonale)
Intelligenza Artificiale Problem Solving
36/102
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
37/102
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
38/102
Hill-Climbing Search
Si usa unicamente la funzione euristica
Non c’è backtracking
Non si usa memoria
4
5
4
Non è ottimale
Non è completo
Minimi locali
3
3
5
0
GOAL
Intelligenza Artificiale Problem Solving
39/102
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
40/102
Algoritmo A*
1. if (goal_test(x0)== true) return SUCCESS
2. else OPEN.insert(x0, g(x0)+h(x0) )
3. 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
41/102
Dimostrazioni
A* è un algoritmo ottimale
A* è un algoritmo completo
Intelligenza Artificiale Problem Solving
42/102
A* = algoritmo ottimale
n0
Per ASSURDO:
A* espande da OPEN 2 e 2 non è la soluzione ottima
1. per definizione g(2) > f*
2. sia n * nodo foglia (in OPEN)
3. se h è ammissibile allora f(n) ≤ f*
n
*
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
43/102
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
44/102
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
45/102
WA*: alcuni risultati sul 15-puzzle
w
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
46/102
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
47/102
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
48/102
£
Algoritmo IDA*
1.
2.
3.
4.
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
49/102
IDA* Simulazione
1+4
0+3
1+2
Threshold: 3
1+4
2+3 2+3
Intelligenza Artificiale Problem Solving
50/102
0+3
IDA* Simulazione
1+4
2+5
2+5
3+4
Threshold: 5
1+4
1+2
2+3 2+3
3+4
3+2
4+3
Intelligenza Artificiale Problem Solving
2+5
3+4
2+3
3+4
3+4
4+3
51/102
0+3
IDA* Simulazione
1+4
2+5
3+6
4+5
3+4
2+5
3+6
1+2
Threshold: 7
1+4
2+3 2+3
3+4
3+4
4+5
4+5 4+3
5+2 5+4
6+1 - 6+3
Intelligenza7+0
Artificiale
Problem Solving
52/102
Formalizzazione Problemi:
Il Puzzle di Sam Loyd
configurazioni
risolvibili
X = tutte
le configurazioni
operatori
(non-reversibili)
SCS(x) = tutti
gli operatori
di x
N!N!/2
= ca.3
bb
=ca.
4
x0 = configurazione random
g = unitario per ogni SCS
t = configurazione ordinata
Intelligenza Artificiale Problem Solving
53/102
Formalizzazione Problemi:
Cubo di Rubik
1) Non ha senso ruotare la stessa faccia due volte
configurazioni
risolvibili
(8!
X = tutte
le configurazioni
8! 12! 38 212 )/12
consecutive
2) Muovere due facce opposte consecutivamente equivale
operatori
utilicentrale
su xdi x
18
SCS(x)
= tutti
glidell’asse
operatori
ca.11
alla sola
mossa
3) Dopo aver mosso la faccia “A” e poi la faccia “B”, va
una delle altre random
4 facce rimanenti.
x0 = mossa
configurazione
g = unitario per ogni SCS*
t = configurazione ordinata**
* 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
54/102