230 likes | 384 Views
Politecnico di Torino INTELLIGENZA ARTIFICIALE 2012. Esempio: visita in profondità Carlo Prone carlo.prone@studenti.polito.it. Problema: da Arad a Bucarest. Problema. Metodo risolutivo. Visita in profondità del grafo.
E N D
Politecnico di TorinoINTELLIGENZA ARTIFICIALE 2012 Esempio: visita in profondità Carlo Prone carlo.prone@studenti.polito.it
Problema Metodo risolutivo Visita in profondità del grafo • Trovare un percorso dalla città di Arad alla città di Bucarest sul grafo appena visto
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 • OPEN: • Arad • CLOSED: (empty)
Step 1 • OPEN: • Zerind • Timisoara • Sibiu • CLOSED: • Arad
Step 2 • OPEN: • Oradea • Timisoara • Sibiu • CLOSED: • Arad • Zerind
Step3 ATTENZIONE: nodo Sibiu già presente in OPEN, nessun nodo successore da etichettare BACKTRACK
Step3 • OPEN: • Timisoara • Sibiu • CLOSED: • Arad • Zerind • Oradea
Step4 • OPEN: • Lugoj • Sibiu • CLOSED: • Arad • Zerind • Oradea • Timisoara
Step5 • OPEN: • Mehadia • Sibiu • CLOSED: • Arad • Zerind • Oradea • Timisoara • Lugoj
Step6 • OPEN: • Dobreta • Sibiu • CLOSED: • Arad –Mehadia • Zerind • Oradea • Timisoara • Lugoj
Step7 • OPEN: • Craiova • Sibiu • CLOSED: • Arad –Mehadia • Zerind–Dobreta • Oradea • Timisoara • Lugoj
Step 8 • OPEN: • Pitesti • RimnicuVilcea • Sibiu • CLOSED: • Arad –Mehadia • Zerind–Dobreta • Oradea – Craiova • Timisoara • Lugoj
Step9 • OPEN: • Bucharest • RimnicuVilcea • Sibiu • CLOSED: • Arad –Mehadia • Zerind–Dobreta • Oradea – Craiova • Timisoara • Lugoj – Pitesti
Soluzione trovata NON ottima Costo percorso finale Costo percorso ottimo Arad 0 Sibiu 140 RimnicuVilcea 80 Pitesti 97 Bucharest 101 TOTALE 418 • Arad 0 • Timisoara 118 • Lugoj 111 • Mehadia 70 • Dobreta 75 • Craiova 120 • Pitesti 138 • Bucharest 101 TOTALE 733
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)