Università degli Studi di Cagliari FACOLTA’ DI INGEGNERIA

Slides:



Advertisements
Presentazioni simili
Premessa: si assume di aver risolto (correttamente
Advertisements

Algoritmi e Strutture dati Mod B
Algoritmi e Strutture Dati
TSP Traveling Salesman’s Problem Università di Camerino
Politecnico di Torino Tesi di Laurea
Il problema del minimo albero ricoprente in un grafo non cooperativo
Il Problema del Commesso Viaggiatore
Alberi binari di ricerca
Il problema del cammino minimo tra 2 nodi in un grafo con archi privati.
Università degli Studi di Roma Tor Vergata
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 1 Strutture dati per.
Algoritmi e Strutture Dati
U V U V (a) |cfc|=2 prima e dopo (b) |cfc|=2 prima e |cfc|=1 dopo
Il problema del minimo albero ricoprente in un grafo con archi privati
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl Capitolo 4 Ordinamento:
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Capitolo 12 Minimo albero ricoprente: Algoritmi di Prim e di Borůvka Algoritmi.
Algoritmi e Strutture Dati
Capitolo 4 Ordinamento Algoritmi e Strutture Dati.
Capitolo 10 Tecniche algoritmiche Algoritmi e Strutture Dati.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Capitolo 12 Minimo albero ricoprente: Algoritmi di Prim e di Borůvka Algoritmi.
Algoritmi e Strutture Dati
Algoritmi e Strutture Dati
Capitolo 4 Ordinamento Algoritmi e Strutture Dati.
Algoritmi e Strutture Dati (Mod. B)
Algoritmi e Strutture Dati (Mod. B)
Ricerca della Legge di Controllo
Seminario su clustering dei dati – Parte II
Modelli e Algoritmi per la Logistica Branch & Bound Prof. Carlo Mannino Prof. Antonio Sassano Dipartimento di Informatica e Sistemistica Università di.
Grafi.
Modelli e Algoritmi per la Logistica
Modelli e Algoritmi per la Logistica
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.
Fibonacci Heaps e il loro utilizzo nell’algoritmo di Prim
Elementi di Informatica di base
Lezioni di Ricerca Operativa Corso di Laurea in Informatica
Prof. Cerulli – Dott.ssa Gentili
Algoritmi e Strutture Dati
Euristiche: algoritmi costruttivi e di ricerca locale
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Capitolo 12 Minimo albero ricoprente: Algoritmi di Prim e di Borůvka Algoritmi.
Università degli Studi di Cagliari FACOLTA’ DI INGEGNERIA
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 1 Strutture dati per.
Didattica e Fondamenti degli Algoritmi e della Calcolabilità Terza giornata: principali classi di complessità computazionale dei problemi Guido Proietti.
Capitolo 9 Il problema della gestione di insiemi disgiunti (Union-find) Algoritmi e Strutture Dati.
Capitolo 13 Cammini minimi: Algoritmo di Floyd e Warshall Algoritmi e Strutture Dati.
Capitolo 13 Cammini minimi: Ordinamento topologico Algoritmi e Strutture Dati.
Olimpiadi di Informatica 2010 Giornate preparatorie
Capitolo 12 Minimo albero ricoprente: Algoritmo di Kruskal (*) Algoritmi e Strutture Dati.
Claudio Arbib Università dell’Aquila Ricerca Operativa Metodo del simplesso per problemi di distribuzione single-commodity.
Capitolo 12 Minimo albero ricoprente Algoritmi e Strutture Dati.
algoritmi approssimati
Sistemi basati su conoscenza Metodi di ricerca informata Prof. M.T. PAZIENZA a.a
Capitolo 10 Tecniche algoritmiche Algoritmi e Strutture Dati.
Capitolo 10 Tecniche algoritmiche Algoritmi e Strutture Dati.
Il Problema del Commesso Viaggiatore. Traveling Salesman’s Problem (TSP) Un commesso viaggiatore deve visitare un certo numero di città Conosce la distanza.
Lagrange Relaxation. Limiti Inferiori (Lower Bounds) Avere un Lower-Bound alla lunghezza del cammino minimo da una garanzia della qualità della soluzione.
Capitolo 12 Minimo albero ricoprente: Algoritmo di Kruskal Algoritmi e Strutture Dati.
Prof. Cerulli – Dott. Carrabs
Capitolo 13 Cammini minimi: Bellman e Ford Algoritmi e Strutture Dati.
Algoritmi approssimati. Algoritmi approssimati Per qualche problema NP-completo esistono algoritmi polinomiali che ritornano soluzioni “quasi ottime”.
Master Bioinformatica 2002: Visite di Grafi Algoritmi di visita Scopo: visitare tutti i vertici di un grafo per scoprirne proprietà di vario tipo. Alcune.
Flusso di Costo Minimo Applicazione di algoritmi: Cammini Minimi Successivi (SSP) Esercizio 1 Sia data la seguente rete di flusso, in cui i valori riportati.
Complessità Computazionale
Dynamic Programming Testi di riferimento per approfondimenti: Dimitri Bertsekas, Dynamic Programming, deterministic and stochastic models, Prentice-Hall.
Capitolo 12 Minimo albero ricoprente: Algoritmo di Kruskal Algoritmi e Strutture Dati.
ASD a.a.2010/2011- Lezione 12 Algoritmi e Strutture dati a.a.2010/2011 Prof.ssa Rossella Petreschi Backtracking/ Branch and Bound Lezione n°12.
Lezioni di Ricerca Operativa Corso di Laurea in Informatica
Algoritmi Avanzati a.a.2013/2014 Prof.ssa Rossella Petreschi Albero ricoprente di costo minimo Lezione n°12.
Lezioni di Ricerca Operativa Corso di Laurea in Informatica
Transcript della presentazione:

Università degli Studi di Cagliari FACOLTA’ DI INGEGNERIA Ricerca Operativa - RO - Dott.ssa Michela Lai mlai@unica.it http://sorsa.unica.it/ Esercitazione 5

Programmazione Lineare a variabili Intere Vedremo alcuni algoritmi impiegati per la risoluzione di problemi di programmazione lineare a variabili intere (PLI): Metodi Branch&Bound: Garantiscono l’ottimalità della soluzione determinata. Sono algoritmi divide et impera (dividono ricorsivamente un problema in più sotto-problemi di semplice risoluzione e utilizzano queste soluzioni per risolvere il problema originario a variabili intere) Metodi euristici: Non determinano necessariamente la soluzione ottima, ma possono essere molto più efficienti dei metodi Branch&Bound dal punto di vista computazionale 2

Alcune definizioni Sia dato il generico problema di ottimizzazione (P) e sia z(P) il valore ottimo della funzione obiettivo del problema (P). Si definisce rilassamento di un problema (P) qualsiasi problema dove: Il valore ottimo della funzione obiettivo di fornisce un limite inferiore al valore ottimo della funzione obiettivo di (P): Nel caso di problemi di massimo e il rilassamento fornisce un limite superiore al valore ottimo della funzione obiettivo di (P):

Alcune considerazioni Spesso i rilassamenti sono di più “facile” soluzione rispetto ai problemi originari a variabili intere. Le valutazioni inferiori (o superiori) possono essere ottenute molto più rapidamente rispetto al tempo richiesto per risolvere il problema originario. Talvolta la soluzione di un rilassamento è anche ottima per (P). Rilassamento continuo: è il problema ottenuto da (P) rimuovendo la condizione di interezza sulle variabili

Branch & Bound Per introdurre l’algoritmo di Branch-and-Bound, consideriamo a titolo di esempio la seguente istanza del problema dello zaino: max 4 x1 + x2 + 3 x3 + x4 5 x1+ 4 x2 + 3 x3 + 3 x4 ≤ 8 x1, x2, x3, x4 Є {0,1} L’insieme delle soluzioni di questo problema può essere enumerato in un albero delle decisioni, in cui al livello i viene scelto il valore da assegnare alla i-esima variabile (presa in un determinato ordine).

Branch & Bound I cammini dalle foglie alla radice individuano le attribuzioni dei valori 0 e 1 alle variabili  determinano quindi tutte le soluzioni. Le soluzioni non necessariamente sono ammissibili per il problema dato (Es.: il cammino A individua una soluzione inammissibile, mentre il cammino B è una soluzione ammissibile)

Branch & Bound Nel Branch-and-Bound si costruisce e si esplora l’albero delle decisioni fino a che non sia garantito che la soluzione trovata tra i nodi foglia raggiunti sia la soluzione ottima del problema. Poiché il numero di nodi dell’albero delle decisioni cresce in modo esponenziale con la dimensione del problema, si cerca di visitare esplicitamente il minor numero possibile di nodi e riconoscere in anticipo quando (proseguendo il cammino oltre un certo nodo): si ottengono soluzioni inammissibili (ES.: sottoalbero di radice C) si ottengono soluzioni peggiori della migliore soluzione ammissibile già ottenuta per il problema originario In questi casi interi sottoalberi possono essere scartati o, in altre parole, visitati implicitamente (da qui il nome di algoritmi di enumerazione implicita)

Branch & Bound Per determinare se un certo sottoalbero può essere scartato, si risolvono dei rilassamenti del problema originale, ognuno associato ad un nodo dell’albero delle decisioni. Come costruire l’albero delle decisioni? Quali sono i rilassamenti del problema di PLI che si vuole risolvere?

Branch & Bound Sia dato il seguente problema (P) di PLI e si risolva il suo rilassamento continuo (P0) in corrispondenza del nodo radice. Se la soluzione ottima del rilassamento continuo è intera tale soluzione coincide con la soluzione ottima del problema originario. Se non è intera, si seleziona una variabile xi con valore non intero nella soluzione ottima di (P0) e si crea nell’albero il problema (P1): ai vincoli del problema (P0) si aggiunge il vincolo: il problema (P2): ai vincoli del problema (P0) P0 P1 P2

Branch & Bound CASO 1 Le soluzioni di (P1) e (P2) sono intere. Si prende quella di valore minimo e si arresta l’algoritmo. CASO 2 Una soluzione è intera (ad esempio P1) e l’altra no: Se z(P1)≤ z(P2) o (P2) inammissibile, la soluzione di (P1) è ottima per (P). Altrimenti, se la soluzione di (P2) non è intera si prende una variabile xi con valore non intero nella soluzione ottima di (P2) e si creano due nuovi problemi: (P3) dove ai vincoli del problema (P2) si aggiunge il vincolo (P4) dove ai vincoli del problema (P2) si aggiunge il vincolo CASO 3 Se le soluzioni di (P1) e (P2) non sono intere, si generano due sottoproblemi da ognuno di essi e così via

Branch & Bound Dato un problema di minimo, occorre “potare” l’albero delle decisioni in corrispondenza di un dato nodo se: La soluzione del corrispondente rilassamento è inammissibile La soluzione del corrispondente rilassamento non può generare un nuovo limite superiore rispetto all’ottimo di (P). Ovvero una soluzione ammissibile per (P) minore della migliore soluzione ammissibile determinata fino a quel momento. La soluzione del corrispondente rilassamento è intera ed è migliore dell’attuale limite superiore. In questo caso diventa il nuovo limite superiore. L’algoritmo si arresta quando sono stati visitati tutti i nodi disponibili dell’albero delle decisioni.

Branch & Bound Dato un problema di massimo, occorre “potare” l’albero delle decisioni in corrispondenza di un dato nodo se: La soluzione del corrispondente rilassamento è inammissibile La soluzione del corrispondente rilassamento non può generare un nuovo limite inferiore rispetto all’ottimo di (P). Ovvero una soluzione ammissibile per (P) maggiore della migliore soluzione ammissibile determinata fino a quel momento. La soluzione del corrispondente rilassamento è intera ed è migliore dell’attuale limite inferiore. In questo caso diventa il nuovo limite inferiore. L’algoritmo si arresta quando sono stati visitati tutti i nodi disponibili dell’albero delle decisioni.

Branch & Bound: un esempio Esempio. Sia dato ad esempio il seguente problema (P) di PLI: max x1 + 3 x2 s.t. x1 ≥ 0.5 u1 -5x1 + 3x2 ≤ 5 u2 x1 + 1.4x2 ≤ 6.5 u3 x1, x2 Є Z+ U {0}

Branch & Bound: un esempio Risolviamo graficamente il suo rilassamento continuo (P0): max x1 + 3 x2 x1 ≥ 0+5 u1 -5x1 + 3x2 ≤ 5 u2 x1 + 1.4x2 ≤ 6.5 u3 x1, x2 ≥ 0 Ottimo (1.25, 3.75) pari a 12.5

Branch & Bound: un esempio Questa soluzione rappresenta un limite superiore (o upper bound) al valore ottimo dell’originario problema di PLI Poiché la soluzione ottima di (P0) è inammissibile per (P), selezioniamo una variabile con valore non intero nella soluzione ottima e generiamo i sottoproblemi (P1) e (P2). Esistono molte regole per la scelta della variabile. Trascurando i diversi criteri di scelta possibili, in questo esempio si fissa la variabile di indice più piccolo (fissiamo quindi x1).

Branch & Bound: un esempio Sottoproblema (P1): max x1 + 3 x2 x1 ≥ 0+5 u1 -5x1 + 3x2 ≤ 5 u2 x1 + 1.4x2 ≤ 6.5 u3 u’4 x1, x2 ≥ 0 Ottimo (1, 10/3) pari a 11

Branch & Bound: un esempio Sottoproblema (P2): max x1 + 3 x2 x1 ≥ 0+5 u1 -5x1 + 3x2 ≤ 5 u2 x1 + 1.4x2 ≤ 6.5 u3 u”4 x1, x2 ≥ 0 Ottimo (2, 3.214) pari a 11.643

Branch & Bound: un esempio La soluzione ottima di (P2) rappresenta il limite superiore al valore ottimo dell’originario problema di PLI in questa iterazione. Poiché queste soluzioni sono ancora inammissibili per il problema originario, si seleziona uno dei due problemi - es. (P2) - e una variabile con valore non intero nella soluzione ottima del problema considerato. A partire dal problema (P2), si generano ora i problemi (P3) e (P4).

Branch & Bound: un esempio Sottoproblema (P3): max x1 + 3 x2 x1 ≥ 0+5 u1 -5x1 + 3x2 ≤ 5 u2 x1 + 1.4x2 ≤ 6.5 u3 x1 ≥ 2 u”4 u’5 x1, x2 ≥ 0 Ottimo (2.3, 3) pari a 11.3

Branch & Bound: un esempio Sottoproblema (P4): max x1 + 3 x2 x1 ≥ 0+5 u1 -5x1 + 3x2 ≤ 5 u2 x1 + 1.4x2 ≤ 6.5 u3 x1 ≥ 2 u”4 u”5 x1, x2 ≥ 0 Soluzione inammissibile

Branch & Bound: un esempio Si devono ancora esplorare i nodi dell’albero relativi ai problemi (P1) e (P3). Selezioniamo il problema (P3) e generiamo i problemi (P5) e (P6).

Branch & Bound: un esempio Sottoproblema (P5): max x1 + 3 x2 x1 ≥ 0+5 u1 -5x1 + 3x2 ≤ 5 u2 x1 + 1.4x2 ≤ 6.5 u3 x1 ≥ 2 u”4 x2 ≤ 3 u’5 u’6 x1, x2 ≥ 0 Ottimo (2, 3) pari a 11. Questa è una soluzione ammissibile del problema originario (P), ovvero un limite inferiore sull’ottimo di (P).

Branch & Bound: un esempio Sottoproblema (P6): max x1 + 3 x2 x1 ≥ 0+5 u1 -5x1 + 3x2 ≤ 5 u2 x1 + 1.4x2 ≤ 6.5 u3 x1 ≥ 2 u”4 x2 ≤ 3 u’5 u”6 x1, x2 ≥ 0 Ottimo (3, 2.5) pari a 10.5

Branch & Bound: un esempio Il nodo (P5) costituisce una soluzione ammissibile per (P) pari a 11. Non vi è alcuna necessità di generare due ulteriori problemi a partire da (P1) e (P6) in quanto non si otterrebbero soluzioni ammissibili per (P) migliori rispetto a quella ottenuta.

Branch & Bound: un esempio Verificare con Lindo che la soluzione ottenuta sia quella ottima per il problema originario (P). OBJECTIVE FUNCTION VALUE 1) 11.00000 VARIABLE VALUE REDUCED COST X1 2.000000 -1.000000 X2 3.000000 -3.000000

Branch & Bound Conclusioni L’efficienza degli algoritmi Branch-and-Bound dipende da diversi fattori, tra cui: Il gap tra la soluzione del rilassamento lineare al nodo radice e la soluzione del problema originario a variabili intere Il metodo utilizzato per risolvere i rilassamenti Le regole per la selezione delle variabili da fissare Le regole per la visita dell’albero Anche utilizzando le migliori strategie per gli aspetti elencati, non si può mai escludere di dover esaminare una frazione consistente dei nodi dell’albero delle decisioni 26

Algoritmi euristici Numerosi problemi di ottimizzazione a variabili intere sono “difficili” in quanto non si dispone di tecniche in grado di determinare in modo efficiente la soluzione ottima. In molti problemi diventa pertanto necessario sviluppare algoritmi in grado di fornire una buona soluzione ammissibile, senza garantirne l’ottimalità. Algoritmo euristico: Determina una soluzione non necessariamente ottima per un dato problema (P). Algoritmo esatto: Determina la soluzione ottima per un dato problema (P). Vedremo ora alcuni esempi di algoritmi euristici di tipo greedy. 27

Algoritmi greedy Determinano la soluzione di un problema di ottimizzazione (P) attraverso una sequenza di decisioni localmente ottime, senza mai modificare le decisioni prese. Facile implementazione e notevole efficienza computazionale, ma in generale non garantiscono l’ottimalità della soluzione trovata e talvolta neppure la sua ammissibilità.

Algoritmi greedy Il problema dello zaino Questo algoritmo costruisce una soluzione inserendo per primi nello zaino gli oggetti “più promettenti”, cioè quelli che hanno un maggior beneficio per unità di peso. L’algoritmo inizializza l’insieme degli oggetti selezionati come l’insieme vuoto e poi scorre la lista degli oggetti in ordine di beneficio unitario decrescente. L’oggetto selezionato viene accettato solo se la capacità residua dello zaino è sufficiente. In caso contrario viene scartato e si passa all’oggetto successivo nell’ordinamento. L’algoritmo termina quando tutti gli oggetti sono stati esaminati o la capacità residua dello zaino diventa nulla.

Algoritmi greedy Il problema dello zaino Sia data la seguente istanza del problema dello zaino: max 7x1 + 2x2 + 4x3 + 5x4 + 4x5 + x6 5x1 + 3x2 + 2x3 + 3x4 + x5 + x6 ≤ 8 x1, x2, x3, x4, x5, x6 Є {0,1} Implementare il precedente algoritmo greedy e verificare con Lindo se la soluzione ottenuta è ottima oppure no. L’algoritmo greedy produce la soluzione [0,0,1,1,1,1] con f.o.14 e peso totale 7. La soluzione ottima è [1,0,1,0,1,0] con f.o.15 e peso totale 8. In conclusione, l’algoritmo descritto non garantisce l’ottimalità!

Algoritmo di Kruskal Albero ricoprente di minimo costo Definizione: Dato un grafo G(N,A) con |N|=n. Un grafo G*(N*,A*) è un sottografo di G=(N,A) se A* è contenuto in A e N* contiene tutti i nodi estremi degli archi di A*. L’algoritmo di Kruskal è una tecnica greedy che costruisce una soluzione, inserendo gli archi uno alla volta in ordine di costo crescente e verificando ogni volta che il sottografo corrispondente sia privo di cicli. L’algoritmo inizializza T, l’insieme degli archi appartenenti all’albero, come insieme vuoto e poi scorre la lista degli archi in ordine di costo crescente.

Algoritmo di Kruskal Albero ricoprente di minimo costo L’arco (i,j) di volta in volta selezionato viene accettato solo se il sottografo avente tutti gli archi in T U {i, j} è privo di cicli. In caso contrario viene scartato e si passa all’arco successivo nell’ordinamento. L’algoritmo termina quando T contiene esattamente n-1 archi A differenza del caso precente, si può dimostrare che l’algoritmo di Kruskal fornisce delle soluzioni esatte

Il problema del commesso viaggiatore Un commesso viaggiatore deve consegnare le sue mercanzie in n località, compresa quella in cui si trova. Nota la distanza tra località, il commesso viaggiatore vuole organizzare il suo viaggio in modo che la distanza percorsa sia minima e tutte le località siano raggiunte. Dato un grafo non orientato e completo (contenente cioè tutti i possibili archi) G(N,A) con |N|=n e |A|=m=n(n-1)/2 Ad ogni località è associato un nodo Ad ogni arco è associato un costo cij reale e positivo, che rappresenta la minima distanza tra i e j 33

Algoritmo “Nearest Neighbour” Il problema del commesso viaggiatore Questo algoritmo greedy costruisce una soluzione scegliendo ad ogni passo come prossima tappa la località più vicina a quella in cui il commesso viaggiatore si trova attualmente. L’algoritmo inizializza l’insieme P degli archi appartenenti al cammino come l’insieme vuoto e definisce come nodo corrente il nodo iniziale. Ad ogni iterazione, si esaminano tutti gli archi che uniscono il nodo corrente a nodi che non sono ancora toccati dal cammino parziale P. Tra tali archi si seleziona l’arco (i,j) di costo minimo, lo si aggiunge a P e si definisce j come nodo corrente

Algoritmo “Nearest Neighbour” Il problema del commesso viaggiatore L’algoritmo termina, quando tutti i nodi sono toccati da P, inserendo l’arco di ritorno dall’ultimo nodo visitato al nodo iniziale. Sai data la seguente istanza di TSP simmetrico: Implementare l’algoritmo “Nearest Neighbour” prendendo come nodo iniziale quello di indice 1

Algoritmo “Nearest Neighbour” Il problema del commesso viaggiatore L’algoritmo “Nearest Neighbour”, partendo dal nodo 1, produce il ciclo: f.o.=12 Mentre la soluzione ottima è f.o.=11 Anche questo algoritmo greedy non è esatto

Una tecnica esatta certifica che la soluzione trovata Conclusioni Gli algoritmi euristici non determinano necessariamente la soluzione ottima di un problema di ottimizzazione. Tuttavia, essi possono fornire soluzioni di elevata qualità in tempi molto più rapidi rispetto ad una tecnica esatta. Una tecnica esatta certifica che la soluzione trovata è quella ottima.