Algoritmo del Simplesso Renato Bruni bruni@dis.uniroma.it Univertà di Roma Sapienza Corso di Ricerca Operativa, Corso di Laurea Ingegneria dell Informazione
Vertici e Punti Estremi di un Poliedro Un poliedro è intersezione di un numero finito di semispazi chiu e iperpiani (quindi i vincoli di un problema di Programmazione Lineare definiscono un poliedro) Algebricamente P Ax b x R n Geometricamente x P è punto estremo di P sse non estono x P e x P con x x, x x, x x, tali che x appartiene al segmento di estremi x e x x P è vertice di P sse este c R n tale che c T x c T y per tutti i punti y P diver da x (cioè tutto P trova da un lato di un iperpiano che passa per x) In un poliedro, vertici e punti estremi sono concetti equivalenti Ma queste definizioni sono geometriche, ce ne serve una algebrica.
Soluzioni di Base Ammisbili Intuitivamente, un vertice è intersezione di più vincoli soddisfatti all uguaglianza (cioè attivi). Tali vincoli devono individuare un unica soluzione, e un stema in n incognite ha soluzione unica sse ha n equazioni indipendenti x è soluzione di base di P sse rende attivi n vincoli indipendenti (cioè il rango della matrice dei vincoli attivi è n, e quindi i coefficienti di tali vincoli formano una base per R n ) se inoltre x è ammisbile (cioè soddisfa tutti i vincoli) è soluzione di base ammisbile (S.B.A.) Geometricamente soluzioni di base non ammisbili soluzioni di base ammisbili (vertici, punti estremi) In un vertice il rango della matrice dei vincoli attivi è n
Forma Standard min c T x generico problema di PL deve essere Ax b messo in forma standard x Per applicare l algoritmo del mplesso il Quala PL può mettere in tale forma. Esempio: min x - y x +3y 7 5x + y 3 x min x - y x +3y - u 7 5x + y + w 3 x, u, w min x - (y + - y - ) x +3(y + - y - ) - u 7 5x + (y + - y - ) + w 3 x, u, w y +, y - per i vincoli non di uguale introduco u variabile surplus, w variabile di slack, per la variabile libera y introduco y + e y - vincolate in segno,
Vertici della Forma Standard Nel poliedro in forma standard P{x R n, Axb, x } supponiamo P non vuoto, A mxn con n m e rango(a) m, dove x è vertice di P sse le colonne di A relative a componenti potive sono linearmente indipendenti (quindi formano una base B per lo spazio delle colonne di A) Infatti in un vertice il rango della matrice dei vincoli attivi deve essere n. Poichè le componenti nulle di x (ano h) corrispondono a vincoli attivi, e devono esserci altri n-h vincoli attivi indipendenti (quindi di uguale). Inoltre, dato che le colonne indipendenti di A sono al più m, ci sono almeno altri n-m vincoli di attivi, cioè almeno n-m componenti nulle.
Esempio Conderiamo questo poliedro in forma standard con n4 e m x + x x 3 +3x 4 3 x + x + x 3 +x 4 Un vertice avrà almeno n-m zeri x 4 La soluzione x potive sono la I e la II, cioè La soluzione x potive sono solo la IV, cioè è ammisbile e le colonne di A relative a componenti che sono indipend. quindi è vertice è ammisbile e le colonne di A relative a componenti 3 che è indipendente quindi è vertice
Partizione in Base e fuori Base Data una base B, posamo riscrivere in problema distinguendo min c BT x B + c NT x N Bx B + Nx N b x B + B - Nx N B - b x B m x N n-m e posamo individuare una soluzione di base x B B - b (se m è ammisbile, e quindi è S.B.A. vertice) x N n-m n Le S.B.A. sono al più, che sono tutti i gruppi di m colonne di A m Da es dobbiamo escludere: quelli che non sono una base e quelli che corrispondono a una soluzione di base non ammisbile. Inoltre, più ba possono dare una stessa S.B.A. se B - b contiene zeri (sol. degenere)
Esempio Conderiamo questo poliedro in forma standard x + x + x 3 x 4 x + x 3 x 4 4 Conderiamo tutte le 6 posbili coppie di colonne (rango(a)m quindi le ba di A sono di colonne) e vediamo se sono una base, quale soluzione di base forniscono, se tale soluzione è ammisbile, se è degenere indici colonne base soluzione di base ammisbile degenere {,} {,3} {,4} {,3} {,4} {3,4} no (- ) ( ) - ( ) ( ) ( ) no - - - no x B B - b x N n-m
Problema Ridotto Abbiamo un problema non vuoto, con rango(a) m e abbiamo B. Poichè x B B - b - B - Nx N, lo scriviamo in forma canonica rispetto a B: min c BT (B - b - B - Nx N ) + c T N x N c BT B - b + (c NT - c BT B - N)x N x B B - b - B - Nx N x B m x N n-m Definendo i costi ridotti γ T c NT - c BT B - N ed eliminando x B ho il problema ridotto, che ha n-m variabili min c BT B - b + (c NT - c BT B - N)x N B - b - B - Nx N m x N n-m
Test Ottimalità e Illimitatezza Se i costi ridotti γ c N - (B - N) T c B sono tutti non negativi, la S.B.A. corrispondente a B è ottima, e se sono tutti potivi è ottimo unico Se invece este un γ i < e la colonna i-ema di B - N è tutta non potiva, allora il problema è illimitato inferiormente Questi test sono solo sufficienti, non necessari! Se i due test falliscono, cerchiamo una nuova S.B.A. migliore (o almeno non peggiore) della precedente facendo entrare in base una componente che non vi era ed uscire dalla base una che vi era, finché non è soddisfatto uno dei due test (ciò chiama in realtà Fase ) Indichiamo con π la matrice B - N, e le sue colonne con (π π n-m )
Cambio di Base Troviamo l indice h {,, n-m} che entra in base in corrispondenza al costo ridotto più negativo γ h < Troviamo l indice k {,, m} che esce dalla base in corrispondenza al minimo del rapporto min i m (π h ) i > (B - b) i (π h ) i vari elementi della h-ema colonna di B - N Osservazione: se ho S.B.A. degenere, cambiando base potrei riottenere la stessa soluzione (iterazione degenere) Se non ripeto mai la stessa base, convergo curamente. Altrimenti potrei ciclare e serve una regola anticiclaggio. Es.: scelgo sempre, tra quelli adatti, gli indici minori
Operazione di Pivot Per calcolare i nuovi B - N e B - b cerchiamo di ottenerli dai precedenti attraverso una matrice T data dall identità tranne la k-ema colonna che è ottenuta dagli elementi della h-ema colonna di B - b Per calcolare i nuovi B - N e B - b nella pratica costruiamo (i π i sono le colonne di B - N) M (π h π π n-m B - b ) ma come h-emo metto e k (colonna k-ema dell identità) Poi divido la k-ema riga per (π h ) k (l elemento che trova all inizio di quella riga) e il risultato lo sommo, moltiplicato per -(π h ) i (l elemento che trova all inizio di ogni altra riga i) ad ogni altra riga i (è come se aves premoltiplicato per T), ottenendo (e k B - N B - b ) quelli nuovi!
Esempio 3 parte I Conderiamo questo poliedro in forma standard con n6 e m3 min x + x + x 3 +x 4 +x 5 +x 6 x +x +3x 3 +x 4 3 x x 5x 3 +x 5 x +x x 3 +x 6 x 6 Fortunatamente le ultime tre colonne di A formano già una base, e allora: B N - 3-5 - x B x 4 x 5 x 6 x N x x x 3 B - B - b 3 B - N - 3-5 - Calcolo i costi ridotti T - -3-4 Test ottimo? Non verificato perché non tutti - 3-5 - Test illimitato? Non verificato perché le colonne di π relative ai negativi non sono non potive
Esempio 3 parte II Serve allora cambio di base. La colonna col costo ridotto minore entra in base, quindi h (B Quella che esce dalla base è invece quella che da il min - b) i 3 quindi k i 3 (π ) i Allora scambio la II in base con la I fuori base (π ) i > B N - 3-5 - x B x 4 x x 6 x N x 5 x x 3 π e π π 3 B - b Per calcolare B - N e B - b formo la matrice M - 3-5 - 3 Divido la seconda riga per (cioè (π ) ) e poi sommo il risultato moltiplicato - (cioè -(π ) ) alla prima riga e moltiplicato - (cioè -(π ) 3 ) alla terza riga -/ / -/ 5/ / -/ -5/ 5/ 3/ B - N B - b
Esempio 3 parte III -/ 5/ / Calcolo i costi ridotti / -/ -5/ T - 3/ -5/ -7/ -/ 5/ 3/ Test ottimo? Non verificato perché non tutti Test illimitato? Non verificato perché le colonne di π relative ai negativi non sono non potive Serve allora cambio di base. La colonna col costo ridotto minore entra in base, quindi h3 (B Quella che esce dalla base è quella per cui ho il min - b) i quindi k3 i 3 (π 3 ) i / 3/ (π 3 ) i > Allora scambio la III in base con la III fuori base B 3-5 - N - x B x 4 x x 3 x N x 5 x x 6
Esempio 3 parte IV π 3 π π e 3 B - b Per calcolare B - N e B - b formo la matrice M / -5/ 3/ -/ / -/ 5/ -/ 5/ Divido la terza riga per 3/ (cioè (π 3 ) 3 ) e poi sommo il risultato moltiplicato -/ (cioè -(π 3 ) ) alla prima riga e moltiplicato -5/ (cioè -(π 3 ) ) alla terza riga 4/3 -/3 -/3 -/3 -/3 /3 5/3 5/3 /3 B - N B - b 4/3 -/3 -/3 Calcolo i costi ridotti -/3 /3 5/3 T - /3 /3 7/ -/3 5/3 /3 Test ottimo? Finalmente verificato perché tutti Allora calcolo la soluzione di base: B - b da i valori ottimi per le variabili in base (x 4, x, x 3 ), mentre quelle fuori (x 5, x, x 6 ) sono tutte x*
Fase del Simplesso Per vedere se il PL è ammisbile e se rango(a) m (o altrimenti eliminare i vincoli ridondanti) e trovare la prima base B e quindi B - b e B - N Ci sono più modi di farlo, uso quello delle variabili artificiali. Il problema è min c T x Ax b x n con b m altrimenti cambio segno Introduco α α m (o meno se ho già delle colonne dell identità) e ho il problema auliario che ha base ammisbile I α b m con S.B.A. x min Σ α i e il problema di partenza è ammisbile sse α* Ax + I m α b α m x n
Soluzione del Problema Auliario Lavorando come nella Fase già vista (tranne test illimitatezza) sul problema auliario trovo la sua soluzione ottima α* x* Se Σ α i > allora il problema originario è inammisbile, stop. Altrimenti: Se nessuna variabile artificiale è ancora in base, ho una base fatta da sole colonne del problema originario e posso partire con Fase su esso Se ho ancora variabili artificiali in base, le tolgo tutte: o riesco ad eliminarle tramite scambi degeneri (rimane la stessa soluzione) e cancellarle oppure corrispondono a righe di B - N nulle, cioè vincoli ridondanti del problema originale, che quindi posso cancellare ineme alla corrispondenti variabili artificiali
Algoritmo Complesvo A questo punto, algoritmo del Simplesso due fa è fatto da Fase seguita da Fase Se il problema è inammisbile lo scopro in Fase Dopodichè uso Fase fino a verificare un test di ottimalità o di illimitatezza (prima o poi converge: se mi accorgo di ciclare proseguo introducendo una regola anticiclaggio) Teoricamente direbbe esponenziale ma buon comportamento pratico, molto usato per problemi reali Veloce perché effettua tutte operazioni computazionalmente semplici ovviamente dipende da quanti vertici occorre vitare Estono altre varianti dell algoritmo: Simplesso tabellare, etc.