TECNICHE ALGORITMICHE PER PROBLEMI DI OTTIMIZZAZIONE - Tecniche golose (greedy). - Algoritmi sequenziali. - Ricerca locale. - Metodi basati su programmazione lineare. - Metodi basati su approccio primale-duale. - Programmazione dinamica. - Algoritmi randomizzati. 1
- Tecniche per PTAS (es. tecnica di completamento). - Tecniche per FPTAS (es. scalatura). - Tecniche euristiche senza garanzia di prestazione. o Simulated annealing. o Algoritmi genetici. o Tabu search. 2
ALGORITMI GREEDY Nelle tecniche greedy (avide, golose) le scelte effettuate da un algoritmo nella costruzione di una soluzione sono guidate dall avidità, dal desiderio di accaparrarsi prima di tutto gli elementi che a prima vista appaiono più convenienti, anche se alla lunga le scelte fatte possono non essere ottimali. 3
Tecniche greedy sono particolarmente utilizzate nel caso di problemi di ottimo su insiemi, cioè problemi P=<I, S, m, opt> in cui, data un istanxa x I, una soluzione y è un sottoinsieme di x che soddisfa una determinata proprietà ed ha un determinato valore m(x,y). Data un istanza x={e 1,, e n } ogni elemento ha un valore e la soluzione viene costruita utilizzando prima gli elementi di maggior valore. 4
ALGORITMO BISACCIA GREEDY Sia data un istanza x costituita da n oggetti o 1,, o n con pesi a 1,, a n e profitti p 1,, p n e una capacità b. Sia o MAX l oggetto il cui profitto p MAX è massimo. In questo caso il valore di un elemento è la sua densità: d i =p i /a i. L algoritmo è il seguente: 1. ordina gli oggetti per densità non crescente, 2. inserisci gli oggetti nella bisaccia fino a che vi è capienza; sia s la soluzione così ottenuta ed m=m(x,s) il suo valore, 3. se m p MAX scegli come soluzione ottima s altrimenti scegli s ={o MAX }. 5
L algoritmo BISACCIA GREEDY fornisce una soluzione 2- approssimata. DIMOSTRAZIONE. Siano k gli elementi inseriti e siano: w=σ i=1,k a i, m=σ i=1,k p i. Abbiamo w+a k+1 > b e m*(x)<m+p k+1. Sia M = max{m, p MAX }. Si presentano due casi: i) p k+1 m m* < 2m 2M ii) m < p k+1 p MAX m* < 2p MAX 2M QED 6
Nota bene. Se per il problema KNAPSACK ammettiamo soluzioni reali anziché intere l algoritmo precedente ci fornisce la soluzione ottima in modo semplice. La bisaccia potrà essere riempita completamente utilizzando (oltre agli oggetti o 1,, o k ) una frazione f=(b-w)/a k+1 dell oggetto o k+1 e quindi il valore della soluzione ottima sarà m*=m+f p k+1. 7
Non sempre gli algoritmi greedy forniscono soluzioni approssimate con fattore di approssimazione costante. Consideriamo il seguente algoritmo greedy per il problema MIN VERTEX COVER in cui si presume che il valore di un nodo di un grafo sia il suo grado, cioè il numero di archi che egli ricopre. 1. Scegli un nodo n di grado massimo, 2. inserisci n nella soluzione, 3. cancella il nodo n ed i relativi archi dal grafo, finché non ci sono più archi. Tale algoritmo può portare ad un rapporto di approssimazione logaritmico. 8
Si può facilmentecreare un esempio in cui la soluzione ottima consiste di n nodi mentre la soluzione greedy contiene n + Σ j=2,n n/j = nh(n) = O(n ln n) nodi. 9
Analogamente nel caso del problema MAX INDEPENDENT SET si può pensare che il valore di un nodo sia tanto maggiore quanto minore è il numero di nodi adiacenti che esso ha. Consideriamo il seguente algoritmo greedy: 1. Scegli un nodo n di grado minimo, 2. inserisci n nella soluzione, 3. cancella il nodo n ed i relativi archi dal grafo, finché non ci sono più archi. 10
L algoritmo può dare un errore O(n) infatti si può mostrare un esempio in cui la soluzione fornita dall algoritmo ha un valore m G tale che m* (δ+1) m G dove δ è il grado massimo di un nodo del grafo e può essere quindi n-1. 11
ALGORITMI SEQUENZIALI Negli algoritmi sequenziali gli elementi dell input vengono forniti in ordine arbitrario ed una soluzione viene costruita via via senza esaminare preliminarmente gli elementi che verranno forniti successivamente. Tecniche di questo tipo vengono utilizzate in problemi di partizionamento in cui gli elementi vanno suddivisi in diversi insiemi disgiunti e la qualità della soluzione dipende dalla partizione realizzata. In particolare vengono utilizzati negli algoritmi on line, in cui l input viene rivelato via via e un algoritmo deve prendere decisioni solo sulla base della porzione di input vista fino a tale istante. 12
Esempi. Gestione di risorse nei sistemi di elaborazione: - sequenziamento di task su più processori (scheduling). - allocazione di memoria (paginazione, segmentazione). Algoritmo sequenziale per problemi di sequenziamento di lavori. Consideriamo il seguente problema (MIN MULTIPROCESSOR SCHEDULING ON IDENTICAL MACHINES). Un istanza T del problema è costituita da n lavori t 1,, t n di durata p 1,, p n e p macchine M 1,, M p. Si deve cercare un sequenziamento dei lavori sulle macchine che minimizzi il tempo di completamento dei lavori (makespan). 13
ALGORITMO DI GRAHAM For i =1 to n: si assegni il lavoro t i alla macchina M j per la quale risulta minimo il valore Σ k=1,i-1 p jk dove p jk = p k se il lavoro t k è stato assegnato alla macchina j, 0 altrimenti. Data un istanza T, l algoritmo di Graham fornisce una soluzione s G di valore: m G (T, s G ) = max Σ k=1,n p jk (2 1/p) m*(t). 14
DIMOSTRAZIONE. Sia W= Σ k=1,n p k la durata totale di tutti i lavori e siano M h la macchina che ha makespan m G e t L l ultimo lavoro assegnato alla macchina M h. Abbiamo: m* W/p, m* p L, W p (m G -p L ) + p L e quindi m G W/p + p L p L /p (2 1/p)m* QED 15
Nota bene 1. La limitazione ottenuta è stretta. Si consideri l istanza costituita da p(p-1) lavori di lunghezza 1 ed un lavoro di lunghezza p. Per tale istanza la soluzione ottima ha valore p mentre l algoritmo di Graham fornisce una soluzione di valore 2p-1. 16
Nota bene 2. Primo algoritmo on line. Un algoritmo on line e un algoritmo che serve una serie di richieste ma quando serve la richiesta (n-1)-esima ancora non conosce la richiesta n-esima. Un migliore risultato si ottiene con l algoritmo (off line) di tipo greedy LPT (Largest Processing Time) che ordina preventivamente i lavori: m LPT (4/3 1/(3p))m*. Per verificare che nel caso p=2 la limitazione è stretta si consideri l istanza T=(3,3,2,2,2). 17
Algoritmi sequenziali per il BIN PACKING. Il problema MIN BIN PACKING consiste nel determinare il minimo numero di contenitori (bin) di capacità B che possono contenere n oggetti dati di peso a 1,, a n. Vediamo ora un algoritmo 2-approssimato per il problema MIN BIN PACKING. ALGORITMO NEXT FIT Per i=1,, n ripeti: sia B h l ultimo bin utilizzato; inserisci l oggetto di peso a i nel bin B h se esso lo può contenere, altrimenti usa un nuovo bin B h+1. L algoritmo Next-Fit è 2-approssimato. 18
DIMOSTRAZIONE. Sia A=Σ i a i. Se consideriamo ogni coppia di bin consecutivi la somma dei pesi degli oggetti in essi contenuti è > B. D altra parte m* A/B. Quindi r = m NF /m* < 2 (A/B) / (A/B) = 2. QED Anche il seguente algoritmo sequenziale garantisce un rapporto 2. ALGORITMO FIRST FIT Per i=1,, n ripeti: inserisci l oggetto di peso a i nel primo bin che lo può contenere Chiaramente l algoritmo First Fit ha prestazioni migliori, o almeno uguali, a quelle dell algoritmo Next Fit. Si può dimostrare che l algoritmo First Fit genera soluzioni approssimate il cui valore è: m FF 1.7 m* + 2 19
Risultati migliori si possono ottenere con l algoritmo greedy First Fit Decreasing che prima ordina gli elementi in modo decrescente e poi li colloca con il metodo First Fit. Tale metodo produce soluzioni che verificano: m FFD 1.5 m* + 1 m FFD 11/9 m* + 4 20
ALGORITMO BEST FIT Per i=1,, n ripeti: inserisci l oggetto o i di peso a i nel bin che lo può contenere in modo migliore, cioè, se d 1,, d h sono gli spazi disponibili nei vari bin finora utilizzati l oggetto oi viene inserito in un bin B k tale che d k a i sia minimo e positivo. L algoritmo Best Fit tende quindi a ridurre gli sfridi. Esso può dare risultati migliori o peggiori di First Fit a seconda delle istanze. Applicazioni tipiche degli algoritmi on line First Fit, Next Fit, Best Fit si trovano anche nella gestione della memoria di sistemi di elaborazione. 21
RICERCA LOCALE La tecnica di ricerca locale è una tecnica di tipo molto generale. Perché essa sia applicabile è necessario che, data un istanza x di un problema di ottimizzazione P, sull insieme delle soluzioni di x sia definito un concetto di neighborhood (vicinato) N(x,y). Lo schema generale di un algoritmo di ricerca locale è il seguente: 22
SCHEMA DI RICERCA LOCALE Sia data un istanza x di un problema di minimizzazione. 1. Determina una soluzione y 0 dell istanza x. 2. i=0 3. Ripeti: sia y N(x,y i ) una soluzione tale che m(x, y) < m(x, y i ), allora y i+1 = y finché raggiungi una soluzione y k (ottimo locale) tale che: y N(x,y k ) m(x, y k ) m(x, y), 4. Restituisci y LS = y k. 23
Gli algoritmi di ricerca locale si differenziano sia per le modalità con cui viene definito il vicinato, sia per le modalità di esplorazione del vicinato stesso alla ricerca di una soluzione migliore di quella corrente. A volte la ricerca locale può avere costo esponenziale perché il vicinato ha taglia esponenziale o perché l algoritmo effettua un numero esponenziale di iterazioni. Noi siamo interessati ai casi in cui l algoritmo può operare in tempo polinomiale. In particolare ciò significa che il vicinato di una soluzione si ottiene variando solo un numero limitato di elementi. Ad esempio, nel caso di MAX SAT se consideriamo che una soluzione è costituita da un vettore di valori vero, falso, per contenere il numero di vicini possiamo decidere di includere nel vicinato solo i vettori ottenuti variando al più un numero prefissato k di valori di verità. 24
Consideriamo il problema MAX CUT (TAGLIO MASSIMO). Dato un grafo G=<V,E> con V = n, suddividere i nodi in due insiemi U e V U tali che l insieme C={e=(i,j) e E, i U, j V U} (taglio) abbia cardinalità massima. Innanzitutto dobbiamo definire il concetto di vicinato per il problema. Data una soluzione costituita da una partizione U, V U dei nodi di V, il suo vicinato è costituito da tutte le partizioni che si differenziano da quella data perché un nodo v 1 viene spostato da U a V U o, viceversa, un nodo v 2 viene spostato da V U ad U. 25
ALGORITMO LS MAX TAGLIO - Sia U 0 un qualunque sottoinsieme (anche vuoto) di V. - Ripeti: a. se spostando un nodo v 1 da U i a V-U i la cardinalità del taglio aumenta allora U i+1 = U i { v 1 }, b. se spostando un nodo v 2 da V-U i a U i la cardinalità del taglio aumenta allora U i+1 =U i +{v 2 }, c. se si verificano entrambe le possibilità scegli la migliore, finché raggiungi un ottimo locale U. - Restituisci C={e=(i,j) e E, i U, j V U}. 26
Dato un grafo G, l algoritmo LS MAX TAGLIO fornisce una soluzione C di misura m LS (G,C) m*(g)/2. DIMOSTRAZIONE Siano: c = numero di archi nel taglio = m LS (G,C) i = numero di archi interni ad U o = numero di archi interni a V-U. Inoltre, dato un nodo v, siano: i(v) = numero di archi tra v e nodi in U o(v) = numero di archi tra v e nodi in V-U Abbiamo E = m = c + i + o, quindi i + o = m c. 27
Poiché U è un ottimo locale abbiamo: v U i(v) o(v) 0 v V U o(v) i(v) 0 e quindi Σ v U (i(v) o(v)) = 2i c 0 Σ v V-U (o(v) i(v)) = 2o c 0 Abbiamo quindi 2i + 2o 2c 0 m 2c 0 c m/2 m*(g)/2 QED 28
Una interessante applicazione di tecniche di ricerca locale si ha nel problema MIN TSP. In questo caso il vicinato di un ciclo Hamiltoniano è costituito da tutti i cicli che si ottengono da quello dato scambiando gli estremi di due archi (euristica 2-opt). 29
ALGORITMI BASATI SULLA PROGRAMMAZIONE LINEARE Varie tecniche di risoluzione approssimate per problemi di ottimizzazione NP-hard sono basate sulla programmazione lineare. Sia dato un problema di ottimizzazione con valori binari del seguente tipo (MIN PLB): m*(i) = min i c i x i con le condizioni: Ax b e x {0, 1} n. Consideriamo il suo rilassamento (LP): m LP *(I LP ) = min i c i x i con le condizioni: Ax b e 0 x 1. 30
Ricordiamo anche che il rilassamento duale (D) è: m D *(I D ) = max j b j y j con le condizioni: A T y c e 0 y. Ricordiamo anche che m D *(I D ) = m LP *(I) m*(i) quindi una soluzione r-approssimata per il problema rilassato è anche una soluzione r-approssimata per il problema originario (se è ammissibile). 31
APPROCCIO PRIMALE-DUALE Costruire una soluzione primale ammissibile x ed una soluzione duale y tali che: i c i x i r j b j y j Abbiamo allora: m(i, x) r m D (I D, y) r m D *(I D ) = r m LP *(I LP ) r m*(i) 32
APPLICAZIONE AL VERTEX-COVER Il problema duale del VERTEX COVER è il problema MAX EDGE PACKING: dato un grafo G=<V, E> con pesi sui nodi c i, i=1,, V il problema consiste nell assegnare ad ogni arco (i, j) un peso y(i, j) in modo da massimizzare la somma dei pesi degli archi Σ (i,j) E y(i,j) con il vincolo che, per ogni nodo v, Σ j V y(i,j) c i. 33
Quindi abbiamo che dal problema iniziale: min i V c i x i con i vincoli x i + x j 1 (i, j) E x i {0,1} i V passiamo al problema rilassato con i vincoli i V x i 0 e al problema duale max (i,j) E y(i, j) con i vincoli j V y(i, j) c i i V y(i, j) 0 (i, j) E 34
ALGORITMO PRIMALE DUALE VERTEX COVER Definiamo non saturo un arco (i, j) tale che y(i, j) < c i e y(i, j) < c j. 1. (i, j) E y(i, j) = 0 2. S = Ø 3. finché ci sono archi non saturi ripeti: - scegli un arco (i,j), - aumenta y(i, j) fino a che il vincolo è soddisfatto rispetto a i o a j, - se y(i, j) = c i poni S = S {i} e c j = c j - y(i, j), - se y(i, j) = c j poni S = S {j} e c i = c i - y(i, j), 4. restituisci S. 35
L algoritmo fornisce una soluzione 2 approssimata per il problema del VERTEX COVER. DIMOSTRAZIONE Sia I l istanza del problema VERTEX COVER assegnata. La soluzione S è una soluzione ammissibile poiché, per ogni arco in E, S contiene almeno uno dei nodi adiacenti. Inoltre: i S j V y(i, j) = c i e quindi i S c i = i S j V y(i, j) 2 (i,j) E y(i, j) 2 m*(i D ) 2 m*(i) QED 36
ESEMPIO B A C Problema primale: min x A + x B + x C con i vincoli x A + x B 1 x B + x C 1 x C + x A 1 soluzione intera minima = 2; soluzione rilassata minima = 3/2 37
Problema duale: max y AB + y BC + y AC con i vincoli y AB + y BC 1 y BC + y AC 1 y AC + y AB 1 soluzione duale massima = 3/2 38
APPROCCIO BASATO SU RILASSAMENTO E ARROTONDAMENTO Il secondo approccio consiste nei seguenti passi: risolvere il problema rilassato e determinare una soluzione x LP* arrotondare x LP* ad una soluzione intera in modo deterministico (ad esempio rispetto ad una soglia t) x i = 1 se (x LP *) i t, 0 altrimenti in modo randomizzato (con una data distribuzione di probabilità) x i = 1 con probabilità f((x LP*) i ), 0 con probabilità 1 - f((x LP*) i ) e quindi derandomizzare. 39
APPLICAZIONE AL VERTEX COVER ALGORITMO LP VERTEX COVER Risolviamo l istanza del problema MIN VERTEX COVER rilassato: min i V c i x i con i vincoli x i + x j 1 (i, j) E 0 x i 1 i V Sia x* LP la soluzione ottima rilassata. Scegliamo come soluzione intera l insieme U = {i (x LP *) i 0.5} V 40
L algoritmo LP VERTEX COVER fornisce una soluzione 2- approssimata. DIMOSTRAZIONE La soluzione è chiaramente ammissibile (altrimenti si avrebbe x i + x j < 1). La soluzione ha misura m(g, U) 2 m LP (G, x LP*) 2 m*(g) QED 41
APPLICAZIONE AL MAX SAT Consideriamo una istanza I di MAX SAT: Data una clausola C j siano: P j l insieme delle variabili che compaiono affermate nella clausola C j, N j l insieme delle variabili che compaiono negate nella clausola C j, w j il peso della clausola. Formuliamo il problema come problema di PLB in cui le variabli z j corrispondono alle clausole e le variabili y i corrispondono alle variabili Booleane: max Σ j w j z j con i vincoli: j Σ i Ρj y i + Σ i Νj (1 y i ) z j j z j {0, 1} ; i y i {0, 1} 42
Nella versione rilassata abbiamo i vincoli: j 0 z j 1 ; i 0 y i 1 SCHEMA DI ALGORITMO ARROTONDAMENTO RANDOMIZZATO MAX SAT Risolvere il problema rilassato ottenendo le soluzioni ottime y LP * e z LP *; per ogni i porre la variabile y i = V con probabilità f((y LP *) i ) y i = F con probabilità 1 f((y LP *) i ). 43
Lo schema dà luogo a due diversi algoritmi approssimati in base alla scelta della funzione f, dalla cui combinazione si ottiene un algoritmo con rapporto di approssimazione 4/3. 44
ALGORITMO 1 Esegui lo schema di algoritmo con f((y LP *) i ) = 1/2. L ALGORITMO 1 fornisce una soluzione randomizzata 2-approssimata. DIMOSTRAZIONE Se la clausola C j ha k variabili abbiamo p jk = Prob [C j con k variabili è soddisfatta] = 1 1/2 k Per ogni j e ogni k, p jk 1/2. Sia W il peso totale delle clausole soddisfatte dall algoritmo e sia E[W] il suo valore atteso. Sia W* il valore della soluzione ottima. E[W] = Σ j w j p jk 1/2 Σ j w j 1/2 W*. QED 45
Per ottenere una soluzione 2-approssimata deterministica è possibile derandomizzare il procedimento con il metodo delle probabilità condizionate. Si osservi che, supponendo di aver assegnato già i valori di verità alle variabili x 1, x 2,, x n-1, abbiamo che E[W x 1, x 2,, x n-1 ] = E[W x 1, x 2,, x n-1, x n =V] Prob {x 1 =V} + E[W x 1, x 2,, x n-1, x n =F] Prob {x 1 =F} = 1/2 (E[W x 1, x 2,, x n-1, x n =V] + E[W x 1, x 2,, x n-1, x n =F]) max {E[W x 1, x 2,, x n-1, x n =V], E[W x 1, x 2,, x n-1, x n =F]} 46
Poniamo ora x n = V se E[W x 1, x 2,, x n-1, x n =V] E[W x 1, x 2,, x n-1, x n =F]} x n = F altrimenti In altre parole scegliamo x n =V se la somma dei valori delle clausole in cui compare x n è della somma dei pesi delle clausole in cui compare x n (si noti l analogia con l algoritmo GREEDY SAT). Otteniamo così un assegnazione completa di valori di verità alle variabili x 1, x 2,, x n-1, x n con la seguente proprietà. Se W è il peso totale delle clausole soddisfatte W E[W x 1, x 2,, x n-1 ]. 47
Procedendo a ritroso possiamo fare la stessa scelta per quanto riguarda il valore di verità da assegnare a x n-1, x n-2, ecc. Una volta che a tutte le variabili è stato assegnato un valore abbiamo W E[W] 1/2 W* In questo modo otteniamo un algoritmo deterministico che ha prestazioni almeno tanto buone quanto quelle dell algoritmo randomizzato originario. 48
ALGORITMO 2 Esegui lo schema di algoritmo con f((y LP *) i ) = (y LP *) i. L ALGORITMO 2 fornisce una soluzione randomizzata tale che E[W] (1-1/e) W*. DIMOSTRAZIONE Se la clausola C j ha k variabili abbiamo p jk = Prob [C j con k variabili è soddisfatta] = 1 Π i Ρj (1- (y LP *) i ) Π i Νj (y LP *) i α k (Σ i Ρj (y LP *) i + Σ i Νj (1 (y LP *) i )) α k (z LP *) j α k (z*) j. dove α k =1-(1-1/k) k 1-1/e. Abbiamo quindi E[W] = Σ j w j p jk (1 1/e)W*. QED 49
Anche l algoritmo 2 può essere derandomizzato. I due algoritmi possono essere combinati: ALGORITMO 3 Data una istanza di MAX SAT: risolvere il problema rilassato ottenendo le soluzioni ottime y LP * e z LP *; per ogni i porre la variabile y i = V con probabilità 1/2 y i = F con probabilità 1/2 per ogni i porre la variabile y i = V con probabilità (y LP *) i y i = F con probabilità 1 (y LP *) i scegliere la soluzione migliore. 50
L algoritmo 1 è buono per clausole con molti letterali: p k = 1 1/2 k per k=2 abbiamo p k = 3/4 L algorimo 2 è buono per clausole con pochi letterali: p k = 1 (1-1/k) k per k=2 abbiamo p k = 3/4 La combinazione dei due fornisce una soluzione W 3/4 W*. 51
UNA TECNICA AD HOC: IL PROBLEMA DEL COMMESSO VIAGGIATORE Nel caso che valga la disuguaglianza triangolare (ΔTSP) il problema del commesso viaggiatore ammette soluzione approssimata. ALGORITMO DI CHRISTOFIDES Sia dato un grafo completo G=(V, E) ed una matrice di distanze d per cui vale la disuguaglianza triangolare. Sia m*(g) il costo del tour ottimo. Determinare un minimo spanning tree T; determinare un matching di costo minimo H tra tutti i nodi di grado dispari di T; creare un multigrafo M costituito da T H; determinare un cammino Euleriano w su M; 52
determinare un tour τ immerso in w. 53
L algoritmo di Christofides fornisce un cammino τ tale che m(τ) 3/2 m*(g) DIMOSTRAZIONE Innanzitutto osserviamo che un cammino Hamiltoniano è anch esso uno spanning tree cui viene aggiunto un arco di ritorno. Quindi m(t) m*(g). In secondo luogo osserviamo che se τ è un tour, scegliendo tutti i suoi archi pari o tutti i suoi archi dispari abbiamo in ogni caso un matching. Possiamo quindi vedere un tour come la combinazione di due matchings. Se H è un matching minimo abbiamo quindi m(h) 1/2 m*(g). 54
Se w è un cammino Euleriano su T H, in base alla disuguaglianza triangolare abbiamo: m(t) m(w) m(t) + m(h) 3/2 m*(g). Si noti che l algoritmo ha costo polinomiale perché il problema di determinare un minimo matching massimale è in genere NP-hard ma è risolubile in tempo polinomiale se il grafo soddisfa la disuguaglianza triangolare. Si noti anche che il valore 3/2 è stretto poiché esistono grafi in cui l algoritmo non può dare un rapporto migliore. QED 55