Scaricare la presentazione
La presentazione è in caricamento. Aspetta per favore
PubblicatoVirginio Corso Modificato 8 anni fa
1
PROBLEM SOLVING INTELLIGENZA ARTIFICIALE A.A. 2014/2015 FRANCESCO RUSSO – 200486 ALBERTO SAGLIMBENI-190141
2
PROBLEMA Bisogna trovare il percorso che va dal punto iniziale (Arad) fino al punto finale (Bucharest). Non tutti gli algoritmi possono essere applicati semplicemente senza appoggiarsi a variabili o vincoli aggiuntivi. Tratteremo la ricerca in profondità e al Leap Frogging applicati al nostro problema.
3
MAPPA CITTA’
4
DISTANZE AEREE
5
RICERCA IN PROFONDITA’ SIANO : OPEN= LISTA NODI APERTI CLOSED=LISTA NODI CHIUSI N_MAX= MASSIMO LIMITE DI PROFONDITA’ STATO INIZIALE: OPEN={ARAD} N=0 PSEUDOCODICE : If(empty(OPEN)) return false; If(n==n_max) return false; Node temp=Pop(OPEN); If(is_goal(temp)) return true; If(is_deadend(temp)) return false; Push_back(CLOSED,temp); ArrayList temp_list= successori(temp); Foreach(Node t in temp_list) { if(closed.contains(t)) return false; if(open.contains(t)) return false; } Francesco Russo 200486- Alberto Saglimbeni 190141
6
RICERCA IN PROFONDITA’ Open.Add_List(temp_list); //Fine pseudocodice IsDeadend restituisce true se il nodo è terminale Empty restituisce true se la lista è vuota E’ necessario porre un limite di profondità dell’albero, poiché usiamo uno stack implicito e quindi in certi casi potremmo provocare uno stack overflow Possiamo supporre n=5, guardando la mappa a nostra disposizione Francesco Russo 200486- Alberto Saglimbeni 190141
7
RICERCA IN PROFONDITA’ 1)OPEN={} temp=ARAD CLOSED={ARAD} non è un goal, né un deadend espandiamo Arad temp_list={Zerind,Sibiu,Timisoara} OPEN={ZERIND,SIBIU,TIMISOARA} Francesco Russo 200486- Alberto Saglimbeni 190141
8
RICERCA IN PROFONDITA’ 2)OPEN={SIBIU,TIMISOARA} temp=ZERIND CLOSED={ARAD,ZERIND} no goal, no deaded, n true temp_list={Oradea} OPEN={ORADEA,SIBIU,TIMISOARA} Francesco Russo 200486- Alberto Saglimbeni 190141
9
RICERCA IN PROFONDITA’ 3)OPEN= {SIBIU,TIMISOARA} temp=ORADEA CLOSED={ARAD,ZERIND,ORADEA} no goal, no deadend, n true temp_list : problema, Sibiu è già in open, quindi usciamo con fallimento Francesco Russo 200486- Alberto Saglimbeni 190141
10
RICERCA IN PROFONDITA’ 4)OPEN = {TIMISOARA} temp=SIBIU CLOSED={ARAD,ZERIND,ORADEA,SIBIU} no goal, no deadend, n true temp_list={Fagaras,Rimnicu Vilcea} OPEN= {FAGARAS, RIMINCU VILCEA, TIMISOARA} Francesco Russo 200486- Alberto Saglimbeni 190141
11
RICERCA IN PROFONDITA’ 5)OPEN={RIMNICU VILCEA,TIMISOARA} temp=FAGARAS CLOSED={ARAD,ZERIND,ORADEA,SIBIU, FAGARAS} no goal, no deadend, n true temp_list={Bucharest} OPEN={BUCHAREST, RIMNICU VILCEA, TIMISOARA} Francesco Russo 200486- Alberto Saglimbeni 190141
12
RICERCA IN PROFONDITA’ OPEN= {RIMNICU VILCEA, TIMISOARA} temp=BUCHAREST Is goal true, uscire con successo Francesco Russo 200486- Alberto Saglimbeni 190141
13
RICERCA IN PROFONDITA’ Scegliendo n=4 e Timisoara come primo nodo di espansione, l’algoritmo non avrebbe trovato nessuna soluzione poiché la profondità dell’albero avrebbe superato i limiti imposti. Ciò porta a riflettere su come scegliere un criterio adatto per la selezione dei nodi, oltre al fatto che essendo n un «limite» per l’algoritmo, si rischia di non trovare nessuna soluzione, sebbene ce ne siano varie. Francesco Russo 200486- Alberto Saglimbeni 190141
14
LEAP FROGGING Consideriamo come criteri di eliminazione dei figli generati da un nodo : -Ripetizioni in closed -Distanza dal goal aumentata rispetto all’ultimo -Nodo in closed Francesco Russo 200486- Alberto Saglimbeni 190141
15
LEAP FROGGING Utilizziamo a tale scopo la mappa delle distanze fornita. L’inserimento nella lista open può essere decrescente(in funzione della distanza) Notazione : Città(distanza) Pseudocodice: If(empty(open)) return false; Node temp=pop(open); Closed.push_back(temp); Francesco Russo 200486- Alberto Saglimbeni 190141
16
LEAP FROGGING ArrayList figli_temp=genera_figli(temp); If(figli_temp.empty()) { cerca_subversive();Return false; } Foreach(Node n in figli_temp){ if(not_valid(n))figli_temp.remove(n); If(n.is_goal) return true; } open.insord(figli_temp); //Decrescente Francesco Russo 200486- Alberto Saglimbeni 190141
17
LEAP FROGGING 1)Open={Arad(366)} ->Closed={Arad(366)} Figli_temp= {Zerind(374),Timisoara(329),Sibiu(253)} Zerind non è valido poiché aumenta la distanza Open= {Timisoara(329) ),Sibiu(253)} Francesco Russo 200486- Alberto Saglimbeni 190141
18
LEAP FROGGING 2)Open={Sibiu(253)} Closed={Arad(366),Timisoara(329) } figli_temp=Lugoj(244) Aggiungiamo Lugoj Open={Lugoj(244),Sibiu(253)} Francesco Russo 200486- Alberto Saglimbeni 190141
19
LEAP FROGGING 3)Open={Sibiu(253)} Closed={Arad(366),Timisoara(329), Lugoj(244) } Figli_temp=Mehadia(241) Open={Mehadia(241),Sibiu(253)} Francesco Russo 200486- Alberto Saglimbeni 190141
20
LEAP FROGGING 4)Open={Sibiu(253)} Closed={Arad(366),Timisoara(329),Lugoj(344), Mehadia(241) }; Figli_temp=Dobreta(242); Dobreta non è valido perché stiamo aumentando la distanza. Adesso dobbiamo cancellare da closed tutti i figli fino a tornare ad un fratello del nodo subversive valido. Francesco Russo 200486- Alberto Saglimbeni 190141
21
LEAP FROGGING 5)Open={Sibiu(253)} Closed={Arad(366)} E si continua con Sibiu Francesco Russo 200486- Alberto Saglimbeni 190141
22
LEAP FROGGING 6)Open={} Closed={Arad(366),Sibiu(253)} Figli_temp={Fagaras(176),R.V.(193)} Open={R.V.(193), Fagaras(176)} Francesco Russo 200486- Alberto Saglimbeni 190141
23
LEAP FROGGING 7)Open={Fagaras(176)} Closed={Arad(366),Sibiu(253),R.V.(193) } Figli_temp= {Craiova(138),Pitesti(100) } Open={Craiova(138),Pitesti(100), Fagaras(176)} Francesco Russo 200486- Alberto Saglimbeni 190141
24
LEAP FROGGING 8)Open= {Pitesti(100),Fagaras(176)} Closed={Arad(366),Sibiu(253),R.V.(193), Craiova(138) } Figli_temp={Pitesti(100),Dobreta(242)} Dobreta si elimina dato che aumenta la distanza Pitesti è già in open, non facciamo nulla Francesco Russo 200486- Alberto Saglimbeni 190141
25
LEAP FROGGING 9)Open={Fagaras} Closed={Arad(366),Sibiu(253),R.V.(193), Craiova(138), Pitesti(100) } Figli_temp= {BUCHAREST(0)} E’ il nodo goal, si ripercorre il percorso fino al padre. Francesco Russo 200486- Alberto Saglimbeni 190141
Presentazioni simili
© 2024 SlidePlayer.it Inc.
All rights reserved.