Docente: Marco Gaviano (e-mail:gaviano@unica.it) Corso di Laurea in Infomatica Corso di Laurea in Matematica Matematica Computazionale(6cfu) Ottimizzazione(8cfu) (a.a. 2015-16, lez.11) 1
La complessità computazionale del simplesso Nella soluzione di problemi derivanti dal mondo reale, il metodo del simplesso é risultato molto efficiente e rapido. In generale si é trovato che il numero di iterazioni che il metodo richiede per individuare la soluzione é dell'ordine di O(m). Le operazioni aritmetiche sono dell'ordine di O(mn). Esempi di problemi di programmazione lineare costruiti ad hoc hanno però dimostrato che il metodo del simplesso può richiedere un numero di iterazioni che cresce esponenzialmente con m. 2
In particolare Klee e Minty (1972) hanno costruito una classe di problemi di programmazione lineare di dimensione m2m per i quali l'algoritmo del simplesso visita ogni vertice della regione ammissibile con un numero di iterazioni pari a 2 m -1. Pertanto poiché la complessità riguarda anche il caso peggiore si ha che la complessità del simplesso é esponenziale. ale situazione ha portato molti ricercatori a studiare un comportamento medio del metodo del simplesso. 3
Supposto che i dati A, d e c possano essere scelti secondo una distribuzione di probabilità opportuna é stato dimostrato che, mediamente, il numero di iterazioni richieste da un'applicazione del metodo del simplesso é dell'ordine di O(min(m 2,n 2 )) ovvero l'algoritmo ha un comportamento medio polinomiale. Questo risultato é stato dimostrato indipendentemente da Adles, Karp e Shmir (83), Adles e Medido (85) e odd (1986) per una variante dell'algoritmo del simplesso (self-dual parametric). 4
La principale ipotesi fatta sulla distribuzione di probabilità e che se S e sono due matrici diagonali con elementi positivi e negativi, allora il problema che ha come dati S A, S d, e c ha la stessa probabilità di avere come input A, d, e c. Risultati significativi in proposito sono stati ottenuti da Borgwordt (87), Smale e Haimovich. Borgwordt ha preso in considerazione il problema: max cx, Ax con e =(1,1...1) e c ed A generati indipendentemente da una distribuzione simmetrica rispetto ad una rotazione. Per il metodo usato, una variante del metodo del simplesso, ha trovato che il numero atteso per le iterazioni é 1 4 m1 ( m n ) e, 5
Il metodo degli ellissoidi per problemi PL Il metodo degli ellissoidi é stato sviluppato da Yudin e Nemirovskii (1976) per funzioni convesse anche non differenziabili, a partire dal metodo delle sezioni centrali di Levin (1965) e Newman (1965) e dal metodo del gradiente Generalizzato di Shor (1970). Il metodo é stato studiato da Bland, Goldfarb e odd (1981). Khachian (1979 e 1980) ha dimostrato che la complessità nel caso venga applicato a problemi di programmazione lineare è polinomiale. Sfortunatamente in pratica l algoritmo si è rivelato inefficiente. 6
L'algoritmo di Karmarkar Nel 1984 N.K. Karmakar ha proposto un algoritmo per la risoluzione di un problema di programmazione lineare che, a differenza dell'algoritmo degli ellissoidi, ha complessità polinomiale e nella risoluzione di problemi classici, è comparabile col metodo del simplesso. L'algoritmo é applicabile ad un problema di PL scritto nella forma: (10.1) min z cx Ax 0 x Δ con ={xr n e x=1, x0}, e =(1,1, 1) R n 7
Si considerano valide le seguenti ipotesi: A é una matrice m n di rango m; Ae=0 e questo implica che x 0 =e/n é un punto ammissibile; il minimo di z=cx é zero. Un problema di programmazione lineare generale può ricondursi alla forma (10.1) per il quale le ipotesi 1, 2 e 3 sono soddisfatte. 8
Prima di dare l idea su cui si basa l'algoritmo, si riporta la definizione di gradiente di una funzione. Il gradiente di una funzione di n variabili, f(x), x R n si indica con f(x) ed è il vettore delle derivate parziali di f(x). f f f(x) f (x) 1 (x) 2 (x) 2 x x x Per esempio il gradiente della funzione f(x 1,x 2 )=8(x 1 ) 2 +(x 2 ) 2 é 16x f(x1x 2 ) 2x2 1 9
Una caratteristica del gradiente è che esso moltiplicato per 1 dà la direzione di massima discesa. Per la funzione f(x 1,x 2 )=8(x 1 ) 2 +(x 2 ) 2 si ha graficamente 10
Idea base dell'algoritmo di Karmarkar Sia dato un punto g ; si costruisca una sfera B di centro g tutta contenuta in. Minimizzare la funzione obiettivo z=cx su B é più semplice che minimizzarla su, infatti il minimo in B si trova, spostandosi da g di un passo pari al raggio di B nella direzione opposta al gradiente di z. L'algoritmo; partendo da una soluzione ammissibile x 0, genera una successione {x k } di soluzioni strettamente ammissibili, ovvero tali che le componenti di ogni x k sono positive. Quindi minimizza la funzione obiettivo all'interno di sfere di cui gli x k ne sono i centri. 11
Poiché i raggi delle sfere generate ad ogni iterazione potrebbero essere troppo piccoli causando inefficienza l'algoritmo di Karmarkar ad ogni iterazione trasforma il problema da risolvere utilizzando una trasformazione proiettiva, che trasforma in se stesso e la soluzione ammissibile corrente nel vettore e/n che è il baricentro di. La trasformazione é la seguente: Sia x, si definisce con X la matrice diagonale tale che Xe=x k (10.2) e X X x 1 x xˆ 1 x e la sua inversa xˆ x Xxˆ e Xxˆ. 12
Con questa trasformazione il problema (10.1) diventa: cxxˆ min, AXxˆ 0, xˆ Δ e Xxˆ in cui la funzione obiettivo è lineare fratta. In conclusione la trasformazione è giustificata dal fatto le sfere che si costruiscono ad ogni iterazione hanno per centro x k che risulta essere il baricentro di. In tal modo la sfera risulta il più grande possibile producendo un algoritmo efficiente. Il fatto che la funzione obiettivo non è lineare non crea difficoltà poiché essendo la soluzione ottimale nulla, è 13 sufficiente azzerare il numeratore.
Di fatto ad ogni iterazione la minimizzazione si fa in una sfera B centrata in e/n. Il raggio di B lo si pone uguale a /n con 0< <1 (in genere si pone =1/3). Si dimostra che il gradiente della z in (10.1) una volta che si effettua la trasformazione proiettiva diventa: 1 dˆ (I E (EE ) E)ĉ dove si é messo:  E, e  AX, ĉ Xc. 14
Nell'algoritmo si deve introdurre un criterio di stop, questo lo si determina con una funzione detta funzione potenziale. È necessario introdurre la funzione potenziale e si minimizza questa, in quanto, a causa della trasformazione la funzione obiettivo si é modificata; mentre la funzione potenziale che si userà é invariante rispetto a questa trasformazione. Inoltre l'utilizzo di questa funzione garantisce che l'algoritmo sia polinomiale. La funzione potenziale é cx f ( x) f ( x, c) log, x ( x j ) che come si può vedere é legata alla funzione z. Si definisce inoltre fˆ ( xˆ) j x f ( xˆ; cˆ). j 15
Per giustificare il criterio di stop utilizzato servono i seguenti lemmi e teoremi: Lemma. Siano ha Lemma. allora Lemma. Sia Se xˆ x e e/n xˆ fˆ (xˆ) legate dalla dalla relazione (10.2) si αdˆ/n nlogcˆ f(x) log(det(x)). dˆ dove xˆ log(ˆ c xˆ B(e/n, /n), allora -(Idˆ e/ n). 2 1 log( xˆ j ) log. 2 n 2(1 ) j j E (EE ) 1 E)ĉ, 16
eorema. Per la successione {x k }si ha f(x f(x Corollario. Per la successione {x k } si ha: k ) 0 ) 1 5 k cx k k exp 5n cx 0, k Si descrive ora in dettaglio l'algoritmo 17
Algoritmo Input:Sia A una matrice m n, c un n-vettore riga in modo tale che le ipotesi 1,2 e 3, siano soddisfatte; sia q un intero >0 Output: x* Inizializzazione: t.c. Ax x 0 0, e n cx* 2 -q c e n 18
for k=0,1,...,5n*q if c x k 2 -q c(e/n) stampa x k ; stop else X k =diag(x k ) ĉ=x k c, Â=AX k. end end E xˆ x k1 Â e e/n, dˆ (X (I dˆ/(3n dˆ k xˆ)/(e E ) X (EE k xˆ) ) 1 E)ĉ 19
Rimane ora da dimostrare come un problema generale PL si può esprimere nella forma (10.1), in modo che le ipotesi 1, 2 e 3 siano soddisfatte e si possa applicare l'algoritmo di Karmarkar. Si consideri il problema in forma canonica ed il suo duale minimizza z cx massimizza w ud (10.3) Ax x 0 d ua u 0 c 20
Si formi il sistema di disequazioni (ua) c - Ax - d (10.4) - x 0 - u 0 cx ud 0 Si consideri il problema di trovare i valori x e u che soddisfano (10.4). Questi valori danno una soluzione del problema primale e duale (i vincoli sono soddisfatti e cx ud implica l ottimalità). Il sistema (10.4) può scriversi in forma compatta (10.5) Myb con y=[x,u], M=matrice (2m+2n+1)(m+n) b=vettore (2m+2n+1) 1 21
A questo punto si suppone che il problema di PL abbia una soluzione ottimale e sia tale che il sistema My0 abbia come unica soluzione la soluzione nulla. La soluzione di 10.5 può essere ottenuta a meno di una costante risolvendo il seguente problema di PL min λ (10.6) My Is e y e - bt s y, s, t, 0 (b - Me - t λ e)λ 0 1 con I matrice identità (2m+2n+1)(2m+2n+1), t e scalari (vettori di dimensione 1). 22
Dim. Se y* è una soluzione di (10.5) (ossia My* b) allora (y*, b-my*, 1,0)/(e y*+e (b-my*)+1) soddisfa i vincoli di (10.6) ed è ottimale. Viceversa per una soluzione ottimale di (10.6) (y*, s*, t*, 0) si ha t*>0; (altrimenti si avrebbe My*0). Quindi (y*, s*, t*, 0) /t* soddisfa (10.5). 23
La (10.6) è un problema del tipo (10.1) e soddisfa le ipotesi 1,2 e 3. Infatti A=[M, I 2m+2n+1, b, (b-me-e)], e quindi A é una matrice (2m+2n+1)(3m+3n+3) con rango (2m+2n+1) (contiene la matrice identità); Ae=0 e quindi e/(3m+3n+3) é soluzione ammissibile; Il valore ottimo della funzione obbiettivo é zero. Possiamo quindi applicare l'algoritmo di Karmarkar a (10.6) e trovare il vettore (y*, s*, t*, 0) che rende minimo il valore della funzione obiettivo ( ) e quindi lasoluzione x* del problema (10.3). 24
La complessità dell'algoritmo di Karmarkar Per l'analisi della complessità dell'algoritmo si considera che i dati in input siano numeri interi e quindi la lunghezza dell'input é data da L m i0 n j1 (log 2 ( a 1) con a 0j =c j. Si verifica che ciascuna iterazione richiede un numero di operazioni tra bits dell'ordine dio(n 3 L). Si ha il seguente teorema eorema. L'algoritmo di Karmarkar risolve un problema di programmazione lineare in forma standard con n variabili ed m vincoli in circa O(p 4 L 2 ) operazioni fra bits con p=n+m. 25 ij 1)