PROBLEM SOLVING INTELLIGENZA ARTIFICIALE A.A. 2014/2015 FRANCESCO RUSSO – 200486 ALBERTO SAGLIMBENI-190141.

Slides:



Advertisements
Presentazioni simili
Ingegneria della conoscenza e sistemi esperti Dario Bianchi, 1999 Risoluzione di problemi e ricerca.
Advertisements

Politecnico di Torino INTELLIGENZA ARTIFICIALE 2012 Esempio: visita in profondità Carlo Prone
Ricerca euristica Maria Simi a.a. 2008/2009 Ricerca euristica  La ricerca esaustiva non è praticabile in problemi di complessità esponenziale  Noi.
I sistemi di equazioni di I grado Un sistema di equazioni DEFINIZIONE Un sistema di equazioni è un insieme di due o più equazioni, tutte nelle stesse.
Fondamenti di Informatica A - Massimo Bertozzi ALBERI E ALBERI BINARI DI RICERCA (BST)
La seguente matrice è una matrice delle distanze di un’istanza del problema del Commesso Viaggiatore. Calcolare un lower bound per il valore del ciclo.
Huffman Canonico: approfondimento. Come abbiamo visto, Huffman canonico ci permette di ottenere una decompressione più veloce e con un uso più efficiente.
1 ELEMENTI DI INFORMATICA Università degli Studi di Cagliari Corso di Laurea in Ingegneria Elettronica Linguaggio C A.A. 2011/2012
8 – La cinetica.pdf – V 2.0 – Chimica Generale – Prof. A. Mangoni– A.A. 2012/2013 La cinetica chimica La cinetica chimica è la parte della chimica che.
Prof.ssa Rossella Petreschi Lezione del 3/12/2013 del Corso di Algoritmica GRAFI e PLANARITA’ Lezione n°15.
Algoritmi e Strutture dati a.a.2010/2011 Prof.ssa Rossella Petreschi
Insiemi di numeri e insiemi di punti
Progettare algoritmi veloci usando strutture dati efficienti
Cammini minimi in grafi:
Inserzione e Cancellazione
Branch and Bound Lezione n°19 Prof.ssa Rossella Petreschi
Algoritmi e Strutture dati a.a.2010/2011 Prof.ssa Rossella Petreschi
Branch and Bound Lezione n°14 Prof.ssa Rossella Petreschi
Progettare algoritmi veloci usando strutture dati efficienti
Approssimazione Lezione n°20 Prof.ssa Rossella Petreschi
Lezione n°9 Prof.ssa Rossella Petreschi
Algoritmi Avanzati a.a.2014/2015 Prof.ssa Rossella Petreschi
La funzione Path e le forme a cespuglio
Alberi binari Definizione Sottoalberi Padre, figli
Agenti risolutori di problemi
Lezione n°15 Prof.ssa Rossella Petreschi
Rappresentazione di alberi
Unità di apprendimento 7
B-alberi e alberi autoaggiustanti
Algoritmi Avanzati a.a.2011/2012 Prof.ssa Rossella Petreschi
Il problema del cammino minimo
Algoritmi Avanzati a.a.2014/2015 Prof.ssa Rossella Petreschi
Usi (meno scontati) della visita DFS
misure di eterogeneità
QUANTE COMBINAZIONI DI COLORI POSSIAMO TROVARE MESCOLANDOLI?
Algoritmi Avanzati a.a.2010/2011 Prof.ssa Rossella Petreschi
TERNE PITAGORICHE Obiettivi dell’esercitazione
Approssimazione Lezione n°15 Prof.ssa Rossella Petreschi
Algoritmi e Strutture Dati
per rappresentare grafi
Lezione n°16 Prof.ssa Rossella Petreschi
Lezione n°18 Prof.ssa Rossella Petreschi
Algoritmi e Strutture Dati
32 = 9 x2 = 9 x = 3 32 = 9 √9 = 3 L’estrazione di radice
Scrivere programmi corretti
Branch and Bound Lezione n°18 Prof.ssa Rossella Petreschi
Introduzione agli Algoritmi e alle Strutture Dati
Validazione, verifica, debugging e defensing programming
Alberi n-ary Lezioni di C.
Algoritmi e Strutture Dati
Backtracking Lezione n°13 Prof.ssa Rossella Petreschi
Usi (meno scontati) della visita DFS
Corso di Laurea Ingegneria Informatica Fondamenti di Informatica
Astrazione e Concretizzazione
Progettare algoritmi veloci usando strutture dati efficienti
APPUNTI SUL LINGUAGGIO C Implementazioni di Liste Concatenate
Algoritmi e Strutture Dati
APPUNTI SUL LINGUAGGIO C
LINGUAGGIO C Alberi e livelli
Backtracking Lezione n°17 Prof.ssa Rossella Petreschi
Cammini minimi in grafi:
A cura dei Docenti: Prof Salvatore MENNITI, Prof ssa Alessandra SIA
Algoritmi e Strutture Dati
Algoritmi e Strutture dati a.a.2010/2011 Prof.ssa Rossella Petreschi
Ricerca euristica Maria Simi a.a. 2010/ /07/2019
Ricerca 01/08/2019 package.
HeapSort Stesso approccio incrementale del selectionSort Tipo di dato
Correlazione e regressione
Ese 3 (del 3 Aprile 2003).
IL DONO DELLA SCIENZA.
Transcript della presentazione:

PROBLEM SOLVING INTELLIGENZA ARTIFICIALE A.A. 2014/2015 FRANCESCO RUSSO – ALBERTO SAGLIMBENI

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.

MAPPA CITTA’

DISTANZE AEREE

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 Alberto Saglimbeni

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 Alberto Saglimbeni

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 Alberto Saglimbeni

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 Alberto Saglimbeni

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 Alberto Saglimbeni

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 Alberto Saglimbeni

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 Alberto Saglimbeni

RICERCA IN PROFONDITA’  OPEN= {RIMNICU VILCEA, TIMISOARA}  temp=BUCHAREST  Is goal true, uscire con successo Francesco Russo Alberto Saglimbeni

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 Alberto Saglimbeni

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 Alberto Saglimbeni

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 Alberto Saglimbeni

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 Alberto Saglimbeni

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 Alberto Saglimbeni

LEAP FROGGING  2)Open={Sibiu(253)}  Closed={Arad(366),Timisoara(329) }  figli_temp=Lugoj(244)  Aggiungiamo Lugoj  Open={Lugoj(244),Sibiu(253)} Francesco Russo Alberto Saglimbeni

LEAP FROGGING  3)Open={Sibiu(253)}  Closed={Arad(366),Timisoara(329), Lugoj(244) }  Figli_temp=Mehadia(241)  Open={Mehadia(241),Sibiu(253)} Francesco Russo Alberto Saglimbeni

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 Alberto Saglimbeni

LEAP FROGGING  5)Open={Sibiu(253)}  Closed={Arad(366)}  E si continua con Sibiu Francesco Russo Alberto Saglimbeni

LEAP FROGGING  6)Open={}  Closed={Arad(366),Sibiu(253)}  Figli_temp={Fagaras(176),R.V.(193)}  Open={R.V.(193), Fagaras(176)} Francesco Russo Alberto Saglimbeni

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 Alberto Saglimbeni

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 Alberto Saglimbeni

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 Alberto Saglimbeni