Politecnico di Torino
INTELLIGENZA ARTIFICIALE 2012
Esempio: visita in profondità
Carlo Prone
[email protected]
Problema: da Arad a Bucarest
Problema
Metodo risolutivo
• Trovare un percorso dalla
città di Arad alla città di
Bucarest sul grafo appena
visto
• Visita in profondità del grafo
Visita in profondità – in breve
• Si visita il primo nodo di una lista di OPEN
• Tutti i suoi figli non ancora etichettati vengono
segnati OPEN e inseriti IN TESTA ALLA LISTA
con ordine arbitrario
• Il nodo diventa CLOSED
• Primo passo: il nodo di partenza (radice
dell’albero) in OPEN
Visita in profondità – in breve
• Terminazione:
– nodo goal raggiunto (successo)
– OPEN vuota (fallimento)
• Possibile introdurre un limite di profondità:
se il nodo attuale ha una distanza maggiore o uguale a
un limite fissato e non è soluzione NON proseguo
l’esplorazione sui suoi discendenti, ma altrove
(BACKTRACKING)
– non si hanno garanzie di trovare soluzione, se esiste
– non adottato in questo esempio
Visita in profondità – in breve
• Stesso procedimento di una visita in ampiezza
ma utilizzando una STACK (LIFO) piuttosto che
una QUEUE (FIFO) per i nodi OPEN
• Si scende sull’albero piuttosto che esplorare
esaustivamente un livello
• Inserimento dei nodi figli in OPEN con ordine
ARBITRARIO
– approccio greedy: figli con costo minore
Step 0
Arad
0
Zerind
Sibiu
75
• OPEN:
– Arad
Timisoara
140
• CLOSED:
(empty)
118
Step 1
Arad
0
Zerind
Sibiu
75
• OPEN:
– Zerind
– Timisoara
– Sibiu
Timisoara
140
• CLOSED:
– Arad
118
Step 2
Zerind
75
Oradea
71
• OPEN:
– Oradea
– Timisoara
– Sibiu
• CLOSED:
– Arad
– Zerind
Step 3
Oradea
146
Sibiu
151
ATTENZIONE:
nodo Sibiu già presente in OPEN, nessun nodo
successore da etichettare
⇒ BACKTRACK
Step 3
Oradea
146
Sibiu
151
• OPEN:
– Timisoara
– Sibiu
• CLOSED:
– Arad
– Zerind
– Oradea
Step 4
Timisoara
118
Lugoj
111
• OPEN:
– Lugoj
– Sibiu
• CLOSED:
–
–
–
–
Arad
Zerind
Oradea
Timisoara
Step 5
Lugoj
229
Mehadia
70
• OPEN:
– Mehadia
– Sibiu
• CLOSED:
–
–
–
–
–
Arad
Zerind
Oradea
Timisoara
Lugoj
Step 6
Mehadia
299
Dobreta
75
• OPEN:
– Dobreta
– Sibiu
• CLOSED:
–
–
–
–
–
Arad
– Mehadia
Zerind
Oradea
Timisoara
Lugoj
Step 7
Dobreta
374
Craiova
120
• OPEN:
– Craiova
– Sibiu
• CLOSED:
–
–
–
–
–
Arad
– Mehadia
Zerind – Dobreta
Oradea
Timisoara
Lugoj
Step 8
Craiova
494
Rimnicu
Vilcea
• OPEN:
– Pitesti
– Rimnicu Vilcea
– Sibiu
Pitesti
146
138
• CLOSED:
–
–
–
–
–
Arad
– Mehadia
Zerind – Dobreta
Oradea – Craiova
Timisoara
Lugoj
Step 9
Pitesti
632
Rimnicu
Vilcea
• OPEN:
– Bucharest
– Rimnicu Vilcea
– Sibiu
Bucharest
97
101
• CLOSED:
–
–
–
–
–
Arad
– Mehadia
Zerind – Dobreta
Oradea – Craiova
Timisoara
Lugoj
– Pitesti
Albero finale
Arad
0
Zerind
Timisoara
75
Sibiu
118
Oradea
140
Lugoj
71
111
Mehadia
70
Dobreta
75
Craiova
120
Pitesti
138
Bucharest
101
Rimnicu
Vilcea
146
Percorso finale
Arad
0
Zerind
Timisoara
75
Sibiu
118
Oradea
140
Lugoj
71
111
Mehadia
70
Dobreta
75
Craiova
120
Pitesti
138
Bucharest
101
Rimnicu
Vilcea
146
Soluzione trovata NON ottima
Costo percorso finale
• Arad 0
• Timisoara 118
• Lugoj 111
• Mehadia 70
• Dobreta 75
• Craiova 120
• Pitesti 138
• Bucharest 101
TOTALE 733
Costo percorso ottimo
• Arad 0
• Sibiu 140
• Rimnicu Vilcea 80
• Pitesti 97
• Bucharest 101
TOTALE 418
Considerazioni finali
• Trovata una soluzione (SUCCESSO)
• Non necessariamente percorso migliore
(soluzione NON OTTIMA)
• Implementazione diversa avrebbe potuto dare:
– diversa ottimalità della soluzione
– un altro albero esplorato
– tempo d’esecuzione differente
⇒ ALGORITMO NON DETERMINISTICO
(ex: no approccio greedy ma ordine casuale, o alfabetico
sul nome)
Euristiche
• È possibile introdurre delle valutazioni di tipo
euristico con l’intento di migliorare le
prestazioni dell’algoritmo
• Valutazione euristica dei nodi:
– espandere il figlio "più promettente" anziché uno
a caso
– abbandonare un nodo senza esplorare tutta la sua
discendenza e ripartire da un predecessore su un
altro figlio (leap-frogging)
Euristiche
• Possibili criteri euristici per valutare se un
nodo è subversive (ovvero non porterà mai a
una soluzione e non ha senso esplorarne la
discendenza)
– distanza finora compiuta maggiore del risultato
che mi aspetto
– direzione errata (so che devo andare verso sud, il
nodo è a nord, necessita di informazioni
aggiuntive)
Scarica

Arad - Politecnico di Torino