Dipartimento di Ingegneria dell’Informazione Università degli Studi di Parma Intelligenza Artificiale Risoluzione dei Problemi (parte 2) Agostino Poggi.

Slides:



Advertisements
Presentazioni simili
Strutture dati per insiemi disgiunti
Advertisements

Problema dellordinamento Input: Sequenza di n numeri Output: Permutazione π = tale che: a 1 a 2 …… a n Subroutine in molti problemi E possibile effettuare.
Master Bioinformatica 2002: Grafi Problema: cammini minimi da tutti i vertici a tutti i vertici Dato un grafo pesato G =(V,E,w), trovare un cammino minimo.
Algoritmi e Strutture Dati (Mod. B)
Problemi di soddisfacimento di vincoli Maria Simi a.a. 2005/2006.
Ricerca euristica Maria Simi a.a. 2006/ /03/2017
Algoritmi e Strutture Dati
Intelligenza Artificiale Simbolica
Hash Tables Indirizzamento diretto Tabelle Hash Risoluzioni di collisioni Indirizzamento aperto.
Breath-first search Visita in ampiezza di un grafo Algoritmo Esempio
Alberi binari di ricerca
Breath-first search Visita in ampiezza di un grafo Algoritmo Esempio
Algoritmo di MiniMax Questa presentazione è un chiaro esempio di come aggiungere i tagli Alfa-Beta per migliorare l’efficienza dell’algoritmo MiniMax.
Teoria e Implementazione
Sistemi basati su conoscenza Metodi di ricerca informata Prof. M.T. PAZIENZA a.a
Intelligenza Artificiale 1 Gestione della conoscenza lezione 5 Prof. M.T. PAZIENZA a.a
Sistemi basati su conoscenza Ricerca di soluzioni a problemi Prof. M.T. PAZIENZA a.a
Sistemi basati su conoscenza Ricerca di soluzioni a problemi Prof. M.T. PAZIENZA a.a
Algoritmi Paralleli e Distribuiti a.a. 2008/09
Algoritmo di Ford-Fulkerson
Algoritmi e strutture Dati - Lezione 7
Capitolo 4 Ordinamento: Selection e Insertion Sort Algoritmi e Strutture Dati.
Capitolo 4 Ordinamento: Selection e Insertion Sort Algoritmi e Strutture Dati.
Capitolo 4 Ordinamento: Selection e Insertion Sort Algoritmi e Strutture Dati.
Algoritmi e Strutture Dati (Mod. B)
Algoritmi e Strutture Dati (Mod. A)
Algoritmi e Strutture Dati (Mod. B)
Ordinamento di una lista: bubble-sort
07/04/2003Algoritmi Ricerca in una sequenza di elementi Data una sequenza di elementi, occorre verificare se un elemento fa parte della sequenza oppure.
Algoritmi e Strutture Dati
QuickSort Quick-Sort(A,s,d) IF s < d THEN q = Partiziona(A,s,d) Quick-Sort(A,s,q-1) Quick-Sort(A,q + 1,d)
Ingegneria della conoscenza e sistemi esperti Dario Bianchi, 1999 Risoluzione di problemi e ricerca.
Intelligenza Artificiale Risoluzione di Problemi
Intelligenza Artificiale
Dipartimento di Ingegneria dellInformazione Università degli Studi di Parma Intelligenza Artificiale Apprendimento Parte 2 Agostino Poggi Stefano Cagnoni.
Elementi di Informatica di base
Strutture dati per insiemi disgiunti
Algoritmi e Strutture Dati
Capitolo 3 Strutture dati elementari Algoritmi e Strutture Dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano.
Euristiche: algoritmi costruttivi e di ricerca locale
Risoluzione di problemi e ricerca
Cammini minimi da un sorgente
Ricerca di soluzioni a problemi Prof. M.T. PAZIENZA a.a
Ricerca euristica Maria Simi a.a. 2008/2009 Ricerca euristica  La ricerca esaustiva non è praticabile in problemi di complessità esponenziale  Noi.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 1 Strutture dati per.
Ordinamento in tempo lineare Il limite inferiore Ω(n log n) vale per tutti gli algoritmi di ordinamento generali, ossia per algoritmi che non fanno alcuna.
Sistemi basati su conoscenza Ricerca di soluzioni a problemi Prof. M.T. PAZIENZA a.a
Algoritmi Paralleli e Distribuiti a.a. 2008/09 Lezione del 07/04/2009 Prof. ssa ROSSELLA PETRESCHI a cura del Dott. SAVERIO CAMINITI.
1 Ordinamento (Sorting) INPUT: Sequenza di n numeri OUTPUT: Permutazione π = tale che a 1 ’  a 2 ’  … …  a n ’ Continuiamo a discutere il problema dell’ordinamento:
Algoritmi e strutture Dati - Lezione 7 1 Algoritmi di ordinamento ottimali L’algoritmo Merge-Sort ha complessità O(n log(n))  Algoritmo di ordinamento.
Sistemi basati su conoscenza Metodi di ricerca informata Prof. M.T. PAZIENZA a.a
Sistemi basati su conoscenza Metodi di ricerca informata Prof. M.T. PAZIENZA a.a
Capitolo 10 Tecniche algoritmiche Algoritmi e Strutture Dati.
Algoritmi elementari su grafi
Ricerca locale M. Simi, Algoritmi di ricerca locale  Efficienti in occupazione di memoria: tengono traccia solo dello stato corrente (non.
Flusso Massimo Applicazione di algoritmi
Intelligenza Artificiale Risoluzione di Problemi
Dipartimento di Ingegneria dell’Informazione Università degli Studi di Parma Intelligenza Artificiale Risoluzione dei Problemi Agostino Poggi Stefano Cagnoni.
1 Ordinamento (Sorting) Input: Sequenza di n numeri Output: Permutazione π = tale che: a i 1  a i 2  ……  a i n Continuiamo a discutere il problema dell’ordinamento:
Gli agenti per il problem solving Maria Simi a.a 2007/2008.
Ricerca locale M. Simi, Algoritmi di ricerca locale  Efficienti in occupazione di memoria  tengono traccia solo dello stato corrente (non.
Sistemi basati su conoscenza Ricerca di soluzioni a problemi Prof. M.T. PAZIENZA a.a
Didattica e Fondamenti degli Algoritmi e della Calcolabilità Sesta giornata Risolvere efficientemente un problema in P: Il problema dell’ordinamento: Insertion.
Università degli Studi di Cagliari FACOLTA’ DI INGEGNERIA
Sistemi e Tecnologie Informatiche Complessità di calcolo.
Ricerca locale Maria Simi Assunzioni sui problemi  Gli algoritmi visti esplorano gli spazi di ricerca alla ricerca di un goal e restituiscono.
Algoritmi e Strutture Dati HeapSort. Select Sort: intuizioni L’algoritmo Select-Sort  scandisce tutti gli elementi dell’array a partire dall’ultimo elemento.
Agenti risolutori di problemi Risolvere i problemi mediante ricerca Maria Simi a.a 2013/2014.
Ricerca euristica Maria Simi a.a. 2013/2014 Ricerca euristica  La ricerca esaustiva non è praticabile in problemi di complessità esponenziale  Noi.
Algoritmi e Strutture Dati Luciano Gualà
Transcript della presentazione:

Dipartimento di Ingegneria dell’Informazione Università degli Studi di Parma Intelligenza Artificiale Risoluzione dei Problemi (parte 2) Agostino Poggi Stefano Cagnoni

Risoluzione dei Problemi 2 Ricerca a Costo Uniforme (Uniform Cost Search)  L’algoritmo di ricerca in ampiezza trova la soluzione col valore di profondità più basso.  Se consideriamo il costo della soluzione, questa soluzione può non essere la soluzione ottima.  L’algoritmo di ricerca a costo uniforme permette di trovare la soluzione a minor costo espandendo tra i nodi della frontiera il nodo caratterizzato dal minor costo (già valutato).  Se il costo è uguale alla profondità del nodo il funzionamento di questo algoritmo è uguale all’algoritmo di ricerca in ampiezza.

Risoluzione dei Problemi 3 Ricerca a Costo Uniforme  Possiamo definire un algoritmo di ricerca a costo uniforme come segue: function Uniform-Cost-Search(problem) { return General-Search(problem, Enqueue-by-Cost); }  Questo algoritmo è ottimo quando il costo è una funzione non decrescente della profondità del nodo.  È completo poiché utilizza una strategia sistematica simile all’algoritmo di ricerca in ampiezza.  Ha la stessa complessità temporale e spaziale dell’algoritmo di ricerca in ampiezza.

Risoluzione dei Problemi 4 Ricerca in Profondità (Depth-First Search)  L’algoritmo di ricerca in profondità, ad ogni livello di profondità, espande il primo nodo fino a raggiungere un goal o un punto in cui il nodo non può essere più espanso.  Possiamo definire un algoritmo di ricerca in profondità come segue: function Depth-First-Search(problem) { return General-Search(problem, Enqueue-At-Front); }

Risoluzione dei Problemi 5 Ricerca in Profondità  Ottimalità: non è ottimo perché non usa nessun criterio per favorire le soluzioni a costo minore e quindi la prima soluzione trovata può non essere la soluzione ottima.  Completezza: non è completo perché può imbattersi in un percorso di profondità infinita.  Se b è il fattore di ramificazione e m è la massima profondità dell’albero, allora il numero massimo di nodi espansi è: 1 + b + b 2 + b b m  Complessità temporale: b m  Complessità spaziale: bm (riduz.10 9 risp. ricerca in amp. nel caso visto per d=12)

Risoluzione dei Problemi 6 Ricerca Limitata in Profondità (Depth-Limited Search)  Per superare il problema dell’algoritmo di ricerca in profondità nell’esplorare alberi con rami con un numero infinito di nodi si può imporre un limite alla profondità dei nodi da espandere.  La scelta del limite dovrebbe essere condizionata dalla previsione sulla profondità a cui si trova la soluzione.  Possiamo definire un algoritmo di ricerca in profondità limitata come segue: function Depth-Limited-Search(problem, Depth) { return General-Search(problem, Enqueue-At-Front, Depth); }

Risoluzione dei Problemi 7 Ricerca Limitata in Profondità  Ottimalità: non è ottimo per gli stessi motivi della ricerca in profondità.  Completezza: è completo nel caso in cui il limite sia superiore alla profondità della soluzione.  Se b è il fattore di ramificazione e se fissiamo il limite di profondità dell’albero a L, allora il numero massimo di nodi espansi è: 1 + b + b 2 + b b L  Complessità temporale: b L  Complessità spaziale: bL

Risoluzione dei Problemi 8 Ricerca Iterativa in Profondità (Iterative Deepening Search)  Il problema principale dell’algoritmo di ricerca limitato in profondità è la scelta del limite a cui fermare la ricerca.  Il modo per evitare del tutto questo problema è quello di applicare iterativamente l’algoritmo di ricerca limitato in profondità con limiti crescenti, cioè 0, 1, 2,....  In questo caso l’ordine di espansione dei nodi è simile a quello della ricerca in ampiezza con la differenza che alcuni nodi sono espansi più volte.

Risoluzione dei Problemi 9 Ricerca Iterativa in Profondità  Possiamo definire un algoritmo di ricerca in profondità iterativa come segue: function Iterative-Deepening-Search(problem) { for Depth = 0 to  do { result = General-Search(problem, Enqueue-At-Front, Depth); if result != failure return result; }  Questo algoritmo è completo ed è ottimo quando l’algoritmo di ricerca in ampiezza è ottimo.

Risoluzione dei Problemi 10 Ricerca Iterativa in Profondità  Se b è il fattore di ramificazione e se la profondità della soluzione è d, allora il numero massimo di nodi espansi dall’algoritmo di ricerca iterativa in profondità è: (d+1)1 +(d) b + (d-1)b 2 +(d-2) b b d  Complessità temporale: b d  Per b = 10 e d = 5 rendendo iterativo l’algoritmo passiamo da a nodi espansi.  Complessità spaziale: bd  Questo metodo è preferibile quando lo spazio di ricerca è grande e la profondità della soluzione non è conosciuta.

Risoluzione dei Problemi 11 Ricerca Bidirezionale (Bidirectional Search)  L’idea è quella di cercare contemporaneamente in avanti dallo stato iniziale e indietro dal goal.  Se b è il fattore di ramificazione e d è la profondità della soluzione, allora la complessità temporale dall’algoritmo di ricerca bidirezionale è: 2b d/2 che può essere approssimato con: b d/2.  Per utilizzarlo bisogna superare alcuni problemi:  La ricerca all’indietro richiede di generare i predecessori di un nodo. Per fare ciò, gli operatori devono essere reversibili.  Come si tratta il caso in cui ci sono diversi goal possibili?  Bisogna controllare in modo efficiente se un nodo è già stato trovato dall’altro metodo di ricerca.  Che tipo di ricerca è preferibile utilizzare nei due sensi?

Risoluzione dei Problemi 12 Eliminazione della Ripetizione di Percorsi  In certi problemi si può risparmiare molto tempo evitando di espandere dei nodi già visitati. Infatti, se non evitiamo di ripetere la ricerca sugli stessi nodi lo spazio di ricerca può essere infinito (es se un operatore, applicato allo stato A, genera lo stato B e, applicato allo stato B, genera lo stato A), mentre lo rendiamo finito tagliando i nodi ripetuti.  Per fare ciò esistono tre tipi di controllo, che hanno diversa complessità ed efficienza:  Viene proibito di ritornare nel nodo che ha generato il nodo corrente.  Viene proibito di ritornare in un nodo antenato del nodo corrente.  Viene proibita la generazione di un nodo già esistente.

Risoluzione dei Problemi 13 Ricerca lungo il Cammino Migliore (Best-First Search)  I metodi precedenti si basano al massimo su una misura del costo delle sequenze di azioni trovate, ma non hanno nessun modo per valutare quanto queste possibili soluzioni parziali siano vicine ad un goal del problema.  I metodi di ricerca lungo il cammino migliore fanno questa valutazione attraverso una funzione di valutazione.  Possiamo definire un tale algoritmo come: function Best-First-Search(problem, Enqueue-by-Eval-Fn) { return General-Search(problem, Enqueue-by-Eval-Fn); }

Risoluzione dei Problemi 14 Ricerca lungo il Cammino più Vicino al Goal (Greedy search)  Questo metodo cerca di minimizzare il costo per raggiungere il goal. Quindi espande il nodo che viene considerato più vicino al goal.  In molti casi questo costo può essere solo stimato e non calcolato in modo deterministico.  La funzione che fa questa stima del costo è detta funzione euristica ed è indicata dalla lettera h.  h(n) stima il costo per andare dal nodo n al goal.  Possiamo definire un tale algoritmo come: function Greedy-Search(problem, Enqueue-by-h) { return General-Search(problem, Enqueue-by-h); }

Risoluzione dei Problemi 15 Ricerca lungo il Cammino più Vicino al Goal (Greedy search)  Questo algoritmo ha molte caratteristiche che lo rendono simile alla ricerca in profondità.  Quindi non è né ottimo né completo.  Se b è il fattore di ramificazione e m è la massima profondità dello spazio di ricerca, allora nel peggior caso questo algoritmo ha una complessità spaziale e temporale di b m.  A differenza dell’algoritmo di ricerca in profondità, la complessità temporale e spaziale sono uguali perché tutti i nodi vengono mantenuti in memoria.  L’efficienza della ricerca dipende dalla bontà dell’euristica.