. ALGORITMO DEL SIMPLESSO R. Tadei
Una piccola introduzione R. Tadei
SIMPLESSO L obiettivo del capitolo è quello di fornire un algoritmo, l algoritmo del simplesso, che risolve qualsiasi problema di programmazione lineare. Sono fondamentali le nozioni di pivot, di soluzione di base, e in generale tutti i concetti che sono stati espressi nel capitolo precedente sulla programmazione lineare. Dovrebbe diventare chiaro che lo studio del problema in termini di tableau, pivot, coefficienti di costo relativo ecc., è il coronamento di tutto il discorso precedente. Concludiamo il capitolo con la presentazione del metodo del simplesso revisionato, ovvero un modo più veloce per trovare la soluzione del problema. R. Tadei 3
Il Metodo del Simplesso è un metodo iterativo che, esplorando l insieme delle soluzioni basiche, raggiunge l ottimo, se esiste, in un numero finito di iterazioni. Supponiamo che il P.L. sia di minimo, in forma standard. Per operare, il Metodo necessita di una forma canonica equivalente. Se il tableau corrispondente non è in forma canonica allora bisogna cercare una soluzione ammissibile di base (slide 8), altrimenti si individua una s.a.b. iniziale ovvia e si procede con l algoritmo del simplesso. R. Tadei 4
Algoritmo del simplesso Ipotesi : si parte da una S.A.B. e dal tableau A=b in forma canonica. Si aggiunge una riga costituita dagli r j, j =,..., n e da -z 0 (valore, cambiato di segno, della f.o. nella s.a.b.) Tableau del simplesso a a a m a m a m a j a n b 0 0 : : : : 0 0 0 0 0 y,m y,m y j : y n y 0 : : y m,m y m,m y mj Y mn Y m0 0 r m r m r j r m -z 0 R. Tadei 5
i = y 0 i0 i m m i n Soluzione di base per ipotesi ammissibile, y i0 0, i =,..., m R. Tadei 6
Giustificazione dell'ultima riga del tableau Il tableau del simplesso è uguale a quello definito nel capitolo precedente, con l aggiunta dell ultima riga degli r j ; vediamone l utilità. La f.o. z = c T = c c... c n n può essere vista come un ulteriore vincolo del problema ; con l aggiunta della variabile (-z) otteniamo c c... c n n - z = 0 Aggiungiamo questa equazione come ultima riga nel tableau (.9) della slide 38 - CAP. Se si fa un operazione di pivot su a =, l ultima riga diventa : 0 c... c m (c m - y,m c )... (c n - y,n c n ) (0 - c y 0 ) Stessa operazione su a = : 0 0 c 3.. c m (c m - y,m c - y,m c )... - c y 0 - c y 0 R. Tadei 7
Si continua il procedimento per tutte le colonne delle var. di base e si ottiene : dove 0 0... 0 (r m )... (r n ) -z 0 m r = c y c = c z e m i, m i i= m m z = c y c y... c y 0 0 0 m m0 Con la base che si ha all inizio, la f.o. vale z=z 0. Ma, come si vede dalla (.5), se qualche r j è < di 0 conviene far entrare in base la variabile corrispondente a quella colonna. R. Tadei 8
Volendo minimizzare z, si ha la possibilità di migliorarne il livello z 0, aumentando quelle variabili per cui r j < 0 ; ora si deve individuare, se esiste, la variabile che esce dalla base : => se nella colonna della variabile candidata ad entrare tutti gli elementi sono < di 0, allora la var. non ha limiti superiori, per cui z (ottimo non limitato); => altrimenti esce la variabile della riga con il rapporto y io /y ij minore (con y ij >0), che rappresenta il livello massimo a cui può entrare la var. candidata. La nuova z 0 varrà : q entra e p esce z 0 = z 0 ( y p0 / y pq ) r q < z 0 (.) R. Tadei 9
I passi dell'algoritmo 0. formare il tableau del simplesso. se r j 0, j STOP ; la s.a.b. corrente è ottima. scegliere colonna q tale che r q < 0 per determinare la variabile da far entrare nella base (m q n) 3. calcolare i rapporti y i0 / y iq, con y iq > 0, i =,..., m. Se y iq 0, i =,..., m, STOP; problema illimitato, f. o.. Altrimenti, scegliere p = indice i corrispondente al rapporto y i0 / y iq minimo ( p è la variabile che esce dalla base ) 4. (p,q) è il pivot. Aggiornare il tableau con le operazioni di pivot. Ritornare al passo R. Tadei 0
R. Tadei Esempio 0 0, 0, 6 5 3.. 3 3 ma 3 3 3 3 3 t s
R. Tadei,6,, 0 6 5 3.. 3 3 min 6 3 5 3 4 3 3 K = = = = i t s i Trasformazione del problema in forma standard con l aggiunta delle variabili ausiliarie, 4 5 6, in questo caso di slack:
a a a 3 a 4 a 5 a 6 b Tableau iniziale 0 0 3 0 0 5 0 0 6 r j -3 - -3 0 0 0 0 N.B: con l aggiunta delle variabili di slack otteniamo subito una soluzione di base (non necessariamente ammissibile); j = j j = inoltre le z j sono uguali a zero perchè le m variabili di base sono tutte fittizie (sono infatti c j ciy ij cj quelle di slack) e quindi hanno costo c i nullo. Di conseguenza r i= j = c j R. Tadei 3 r c z = = BASE
Abbiamo fatto entrare in base a, uscendo a 4, ma la soluzione non è ancora ottima (come si può vedere dal seguente tableau); scegliamo allora di far entrare a 3 : esce quindi a 5 Pivot su 0 0-3 0-0 - 0 - - 0-0 - 0 0 f.o. (passata da 0 a -) R. Tadei 4
La soluzione non è ancora ottima, entra ed esce Pivot su 5 0 3-0 -3 0-0 -5 0 0-4 3-7 0 0-3 0 4 f.o. = -4 R. Tadei 5
Pivot su 5 /5 0 3/5 -/5 0 /5 0 3/5 -/5 /5 0 8/5 0 0-0 4 0 7/5 0 6/5 3/5 0 7/5 r j 0, j STOP, soluzione ottima La soluzione ottima trovata vale: = /5 ; = 0; 3 = 8/5; 4 = 0; 5 = 0; 6 = 4 La funzione obiettivo vale: z = -7/5 R. Tadei 6
. RICERCA DI UNA SOLUZIONE AMMISSIBILE DI BASE INIZIALE R. Tadei 7
Problema (fase del simplesso) Una soluzione ammissibile di base da cui partire con il simplesso non è sempre evidente, poichè non necessariamente il tableau del sistema è in forma canonica. Es: = 4 3 3 3 = 3 3 0, 0, 0 3 A = b 0 (.) trovare la s.a.b. R. Tadei 8
m in s. t. i m = y i y = b Introduciamo un nuovo problema, costruito su quello di partenza, in modo che risulti in forma canonica e sul quale, da quanto visto, possiamo utilizzare l algoritmo del simplesso. Se facciamo le cose in modo opportuno, il risultato che otteniamo è proprio una soluzione di base del problema di partenza. Si consideri il nuovo problema: A y 0 0 (.3) Se esiste s.a. alla (.) allora la (.3) ha come soluzione y i =0 per qualsiasi i R. Tadei 9
Risolvo il problema ausiliario : a.... a.... 0 b n a.... a 0.... b m mn m a.... a 0.... 0 z.................................... i i i in 0 perchè : m r = c z = 0 c y = y = a j j j i ij ij i= i= i= R. Tadei 0 m m ij
Esempio: min 4 s. t. 3 = 4 3 3 3 = 3 3 0, 0, 0 3 Una soluzione di base non è immediatamente visibile; R. Tadei
Studiamo il problema modificato: min( y y ) s. t. y = 4 3 3 3 y = 3 3,,, y, y 0; 3 In questo momento la soluzione di base è rappresentata da y =4 e y =3; Se il problema di partenza ha soluzione ammissibile di base riusciamo a far uscire dalla base del problema modificato y e y applicando il simplesso oppure il metodo del pivot. R. Tadei
Scelta ottima del vettore k da far entrare in base Esiste un modo per determinare quale sia il vettore ottimo da far entrare in base: min k ma i, y ik > 0 r k y y i 0 ik Perchè MAX? Avendo fissato k, devo scegliere il rapporto y io /y ik più piccolo ( con y ik >0 ) ma r k è minore di 0. Perchè MIN? Come si vede dalla (.) devo scegliere il minimo tra tutti i massimi trovati. R. Tadei 3
. METODO DEL SIMPLESSO REVISIONATO R. Tadei 4
Per un qualsiasi problema di p.l. si ha il sistema dei vincoli espresso nella forma : A=b La matrice A può essere vista come l unione di due sottomatrici B e D (dove B è la matrice quadrata formata dalle colonne che hanno la variabile in base) : Il sistema diventa: Esplicitando rispetto ad B : Sostituendo in z: Osservazione introduttiva A=[B D] [B D] [ B,, D ] T = b B = B - b - B - D D z = c B T (B - b - B - D D ) c D T D = =c B T B - b (c DT - c B T B - D) D R. Tadei 5
Osservazione (cont.) L ultima espressione esprime il costo di ogni soluzione nei termini D. Allora r D T = c D T - c B T B - D è il vettore dei costi relativi per le variabili non di base. In base a tutto ciò, definiamo come vettore dei moltiplicatori del simplesso, che avrà importanza fondamentale nello studio del simplesso duale, cioè il vettore λ T = c B T B - R. Tadei 6
Metodo del simplesso revisionato Sono dati : B - B = y 0 = B - b inverso della base corrente soluzione di base corrente Passo : Calcolare i moltiplicatori del simplesso λ T : λ T = c B T B - Calcolare i costi ridotti delle variabili fuori base: r D T = c DT - λ T D Se r D 0 STOP, B è ottima Passo : Altrimenti scegliere r j, ad esempio, più negativo; sia r q. Il vettore a q entra in base. Calcolare y q = B - a q (è il vettore a q espresso nel termini della base corrente). R. Tadei 7
Passo 3: Se y iq 0, i STOP, PROBLEMA ILLIMITATO Altrimenti trovare il vettore che lascia la base calcolando i rapporti y i0 / y iq, con y iq > 0 e scegliendo il minimo Passo 4: Sostituire in B il vettore che esce dalla base con il vettore che entra: Calcolare B - Calcolare B = B - b Tornare al passo ; cioè la nuova matrice inversa di base cioè la nuova soluzione di base R. Tadei 8
Riassumendo R. Tadei 9
SIMPLESSO Nel primo paragrafo di questo capitolo abbiamo trattato l algoritmo del simplesso, per il quale risulta fondamentale la formazione del tableau, formato dalla matrice del sistema dei vincoli scritta in forma canonica (slide 5-7), e lo abbiamo formalizzato (slide 0); è importante, però, andare oltre l applicazione meccanica dei passi illustrati: infatti leggendoli attentamente non può sfuggire che ogni passo è conseguenza o di teoremi, o di osservazioni che sono state fatte nel capitolo precedente; in questo senso il presente paragrafo rappresenta il completamento e l applicazione pratica di quanto precedentemente affermato e dimostrato. Le slide che vanno dalla numero alla numero 6 non sono altro che un esempio di applicazione pratica dell algoritmo. R. Tadei 30
Non è sicuramente sfuggito però che l algoritmo del simplesso, richiedendo come ingresso un tableau in forma canonica, può partire solo se abbiamo trovato una soluzione ammissibile di base, cosa che è immediata nel momento in cui il problema non in forma standard lo diventa con l aggiunta delle variabili di slack, ma che non è vera in generale; per risolvere questo problema, cioè quello di trovare una soluzione ammissibile di base dalla quale partire con il simplesso, abbiamo introdotto un problema fittizio costruito su quello di partenza, risolvibile con l algoritmo del simplesso, la cui soluzione, se esiste, rappresenta una possibile soluzione ammissibile di base per il problema dato; ovviamente da qui in avanti il problema è risolvibile con il simplesso e si procede applicando i passi dell algoritmo (slide 7 -). Infine in chiusura di paragrafo suggeriamo un modo per decidere quale variabile far entrare in base: a questo proposito è il caso di sottolineare che il simplesso dice quali variabili sono candidate ad entrare in base, ma non dice quale sia la scelta migliore tra tutte; R. Tadei 3
infatti se è vero che facendo entrare in base una determinata variabile si migliora il valore della funzione obiettivo, non è vero che tutte le variabili che potrebbero entrare in base migliorino allo stesso modo la funzione obiettivo; c è un modo per scegliere quella localmente migliore (slide 3). Il secondo paragrafo tratta il metodo del simplesso revisionato, che sostanzialmente realizza esattamente ciò che già realizzava l algoritmo standard del simplesso. La differenza tra i due metodi non è nell obiettivo, che è comune, ma nel metodo, cioè mentre il primo sfrutta pesantemente considerazioni teoriche, il secondo utilizza un approccio più analitico. Tutto questo ha un vantaggio, dal momento che non sarà sicuramente sfuggito che il simplesso è molto oneroso in quanto richiede ogni volta di aggiornare tutto il tableau, fatto questo che può diventare pesante se il problema in discussione presenta molte variabili. R. Tadei 3
Il pregio di questo secondo metodo consiste nel fare in modo che vengano utilizzati solo i dati che sono strettamente necessari; unico onere è l inversione ad ogni iterazione di una matrice, che non deve però preoccupare più di tanto, poiché, come verrà spiegato ad esercitazione, esiste un modo molto veloce e sicuro per realizzarla. Bisogna comunque tenere presente che questo metodo non è nato per essere applicato manualmente, quanto per rendere più facile la codifica da far eseguire al calcolatore, per il quale l inversione di una matrice, unica vera difficoltà, benché possa essere onerosa, non è un operazione particolarmente impegnativa (slide 4-8). R. Tadei 33