Modelli e Algoritmi per la Logistica Lezione – 10 Metodi Euristici – L’algoritmo “Greedy” ANTONIO SASSANO Università di Roma“La Sapienza” Dipartimento di Informatica e Sistemistica Roma, 25-11-01
Problemi di OC con funzione obiettivo lineare Insieme base G ={1,2,…,n} (eventi elementari) (es. progetto i attivato, nodo i scelto, connessione i stabilita) 1 2 3 n Costi (Vantaggi) elementari {ci associati agli elementi di G } c1 c2 cn F3 Soluzione Ammissibile = Opportuno sottoinsieme F1 ÍG (es. sottoinsieme di progetti attivati che soddisfano il “budget”) F1 F2 c(F1 )= å ci Costo di una soluzione F1 = somma dei costi elementari degli elementi di F1 iÎF1 Insieme delle soluzioni ammissibili S ={F1, F2, …,Fm} Problema: min {c(F): FÎ S}
Problemi di PL01 S = {vettori di incidenza degli insiemi FÎ S} Insieme baseG ={1,2,…,n} (eventi elementari) 1 2 3 9 5 6 7 8 4 F Soluzione ammissibile F={1,2,3,9}Î S Se rappresentiamo F con il suo vettore di incidenza xF abbiamo: xF= E quindi: S = {vettori di incidenza degli insiemi FÎ S} S PL01= Problemi di OC con funzione obiettivo lineare f(x)=cTx min {c¢x: xÎ S Í {0,1}n } min {c(F): FÎ S} =
Soluzioni e “Certificati” xÎ S soluzione ammissibile valore della soluzione c¢ x = z c¢ x*= z* valore ottimo Lower bound LB < z* = “certificato di qualità” per x : Riduzione del “gap” : z “gap” 1. Miglioramento del “lower bound” z* 2. Miglioramento (riduzione) di z LB Tecniche di ricerca nell’insieme delle soluzioni Tecniche euristiche (euriskein = trovare) - Algoritmo Avido (“Greedy”) - Ricerca Locale (“Local Search”) - Algoritmi Genetici
Algoritmo Avido (“Greedy”) Insieme base G ={1,2,…,n} (eventi elementari) Insieme delle soluzioni ammissibili S ={F1, F2, …,Fm} (Fi ÍG ) T Í Fi per qualche Fi Î S T soluzione parziale Costo di una soluzione parziale T = c(T )= å ci iÎT Idea base Costruire una sequenza di soluzioni parziali T0 ,T1, T2 , T3 ...: a. a partire dall’insieme vuoto (soluzione parziale T0) b. aggiungendo, ad ogni passo, l’elemento che produce la soluzione parziale con il minimo costo. c. arrestandosi quando: 1. la soluzione parziale corrente è una soluzione ammissibile; 2. ogni soluzione parziale ottenibile aggiungendo un nuovo elemento ha un valore maggiore della funzione obiettivo.
Esempio (“Greedy”) F1 F3 9 5 4 2 3 1 6 7 8 F2 F4 c = T2= {4,2} c({4,2} )>c({4,1} ) ma { 4,1} non è una soluzione parziale T3= F2 T3Èk non è una soluzione parziale per ogni kÏT3
Esempio: Albero Ricoprente - Insieme base G = insieme degli archi A di un grafo G(N,A) - Soluzione ammissibile Fi = insieme di archi di un albero ricoprente Soluzione parziale T = insieme di archi di un sottografo aciclico [l’insieme degli archi di ogni sottografo (parziale) aciclico è contenuto negli insieme degli archi di un (particolare) albero ricoprente] v1 v2 v0 v4 v3 v5 12 6 1 3 7 5
Algoritmo Avido (“Greedy”) - Flow chart T:=Æ; c(T)= ¥ Q*= min {c(TÈ k ): kÏT , TÈ k soluzione parziale} k*= arg min {c(TÈ k ): kÏT , TÈ k soluzione parziale} T:=TÈ k* NO TÎ S Q* > c(T) e min {f(x): xÎÆ} = ¥ T soluzione greedy STOP SI
L’Algoritmo di Kruskal e’ un “greedy” - Costruisci una sequenza di foreste H(S,T) con S N (soluzioni parziali!) - Inizia con S={} e T={}: (foresta in G(N,A)) - Ad ogni passo: a) aggiungi a T l’arco di costo minimo wy A-T con la proprietà che H’(S{w,y},T{wy}) sia aciclico b) aggiungi ad S i nodi w ed y - Quando |T|=n-1: H(N,T) è l’albero di costo minimo (trova l’ottimo!!) v1 v2 v0 v4 v3 v5 12 6 1 3 7 5 7 v2 v0 v1 v4 v3 v5 6 12 1 3 5 v2 v0 v1 v4 v3 v5 6 12 1 3 7 5 v5 v2 v0 v1 v4 v3 6 12 1 3 7 5 6 v1 v2 v0 v4 v3 v5 12 1 3 7 5