L ALGORITMO DEL SIMPLESSO REVISIONATO L'algoritmo del simplesso revisionato costituisce una diversa implementazione dell algoritmo standard tesa a ridurre, sotto certe condizioni, il tempo di calcolo e l'occupazione di memoria richiesti. Anch'esso, dunque, partendo da una prima soluzione di base ammissibile si sposta verso la soluzione ottima con l'applicazione, ad ogni iterazione, del test di ottimalità ed il passaggio, qualora l ultima soluzione esaminata non sia ottima, ad una soluzione di base ammissibile migliore ed i criteri utilizzati sono quelli stessi di cui si serve il simplesso standard. Ciò che è rivisto nel simplesso revisionato è la procedura mediante la quale si perviene alle informazioni necessarie per effettuare il test di ottimalità e lo scambio tra variabile entrante e variabile uscente.
Le informazioni necessarie per effettuare tali operazioni sono: i coefficienti di costo modificati delle variabili non basiche per realizzare il test di ottimalità ed individuare la variabile entrante; la colonna dei tassi di assorbimento modificati della variabile entrante; la colonna dei termini noti modificati per individuare la variabile uscente. Per giungere alla conoscenza di questi tre vettori è necessario con la tecnica utilizzata nel simplesso standard modificare con una operazione di pivot, ad ogni iterazione, tutta la matrice A dei tassi di assorbimento. L'obiettivo del simplesso revisionato è quello di contenere, quando sia possibile, tale inconveniente.
PROCEDURA MATRICIALE PER LA TRASFORMAZIONE DI UN SISTEMA DI EQUAZIONI LINEARI IN FORMA CANONICA Sia Ax = b, un sistema di m relazioni in n variabili (n>m) a rango massimo. In tale ipotesi la matrice A conterrà almeno una matrice di base e si supponga, per semplicità di notazione, che essa sia costituita dalle ultime m colonne della matrice A del sistema. Si partizioni la matrice A nelle singole colonne p j (j=,2,...,n) dei coefficienti: e si ponga: A = [p,p 2,,p n ] = [p n-m+,p n-m+2,,p n ] Indicando con C la matrice residua composta dalle prime (n - m) colonne di A: C = [p,p 2,,p n-m ]
si può scrivere: A = [C ] Premoltiplicando per l'inversa - di si ha: - A = [ - C - ] Essendo - = I m e indicando con R il prodotto - C, si ottiene: - A = [R I m ] che costituisce la trasformazione, in forma canonica, della matrice A rispetto alla base.
CALCOLO DELL'INVERSA CON IL METODO DEL PIVOT Si consideri una matrice quadrata A di ordine m e si voglia calcolarne l'inversa A -. Si indichi con D una matrice con m righe e 2m colonne, costituita da due partizioni, la prima rappresentata dalla matrice A, la seconda dalla matrice identità I m di ordine m: D = [A I m ] Si trasformi, con il metodo del pivot, la matrice A in una matrice identità I m di ordine m: D = [I m W] Poiché nelle prime m colonne di D vi è la matrice identità, l'operazione effettuata equivale a: A - D = A - [A I m ] = [A - A A - I m ] dunque: W = A - e quindi: D' = [I m A - ]
Si voglia ricercare l'inversa della matrice: = 3 4 2 A La si riscriva completandola con la matrice identità di ordine due: 0 0 3 4 2 Con una operazione di pivot su a si ottiene: 4 0 5 0 2 Con una operazione di pivot su a 22 si ottiene: / 5 4 /5 2/ 5 3/ 5 0 0 da cui si ricava: = 5 / 5 4 / 5 2 / 5 3 / A
LA TAELLA DEL SIMPLESSO IN FORMA MATRICIALE Un problema p.l. con m vincoli ed n variabili può essere espresso attraverso un sistema di (m+) relazioni in (n+) variabili: in cui: A + x + = b + x + è il vettore colonna delle variabili del problema, comprensivo della variabile (-z): x + x = z b + è il vettore colonna dei termini noti aumentato di un'ultima componente, nulla, che rappresenta il valore iniziale della (-z): b + b = 0 A + è la matrice costituita dalla matrice dei tassi di assorbimento A aumentata del vettore dei coefficienti di costo e del vettore colonna relativo alla variabile (-z):
A + = A T c 0 Si partizioni il vettore x suddividendolo in : x N (vettore delle variabili non basiche); x (vettore delle variabili basiche (con la z); e si partizionino, corrispondentemente, la matrice A ed il vettore c T : x x = x N ; c T = [c T N c T ]; A=[N ] La relazione: A + x + = b + può essere allora scritta:
T T c N c 0 N N x x = 0 b Ponendo: = + T c N N N = + T c 0 La: T T c N c 0 N N x x = 0 b
può essere scritta: e dunque: [N + + ] x x N b = 0 N + x N + + x = b + Per portare il sistema in forma canonica rispetto alle variabili di base, si premoltiplichi per ( + ) - : ( + ) - N + x N + ( + ) - + x = ( + ) - b + (*) e si sostituisca l'espressione esplicita della ( + ) - :
Assegnata la matrice + : CALCOLO DELLA ( + ) - c 0 si vuole trovare una matrice X tale che sia: ovvero: c 0 + X = I m+ X X X2 2 X 22 = I m 0 0 Effettuando il prodotto righe per colonne al primo membro ed eguagliando agli elementi del secondo membro si ottiene: X + X 2 = I m X 2 + X 22 = 0
c X + X 2 = 0 c X 2 + X 22 = da cui si ricava: X = - X 2 = 0 X 2 = -c - X 22 = e dunque si ottiene: ( + ) - = c 0
È possibile, utilizzando l'espressione esplicita della ( + ) -, ottenere le espressioni dei diversi termini che costituiscono la (*). Il primo termine: 0 N + + ( ) N = = T T c c N c T N c T N N fornisce la matrice dei tassi di assorbimento ed il vettore dei coefficienti di costo delle variabili non basiche, modificati rispetto alla base. Il secondo termine: ( + ) - + = I m+ è la matrice identità corrispondente alle variabili di base.
Il terzo termine: 0 b + + ( ) b = = T c 0 c T b b è il vettore dei termini noti modificati, cioè i valori che delle variabili in base ed il valore della (-z). Ad una generica iterazione k, la tabella del simplesso contiene dunque il seguente insieme di informazioni: N x ΝΒ c N + I N m+ c e ponendo: c - = π T, si ottiene: x = c T b b N x c ΝΒ ðn N I m+ + x = Il vettore π viene indicato in letteratura come vettore dei moltiplicatori del simplesso. ð T b b
PASSAGGIO DA SIMPLESSO STANDARD A REVISIONATO Si riesaminino le informazioni necessarie nel simplesso per effettuare il test di ottimalità ed il passaggio ad una eventuale soluzione di base ammissibile migliore. Coefficienti di costo modificati delle variabili non basiche: c' T N = c T N - c T - N = c T N - π T N i coefficienti di costo modificati possono essere ottenuti a partire dalle informazioni iniziali c T N, c T, N purché sia nota la -, o anche dalle sole c T N ed N purché siano noti - e π. Vettore dei tassi di assorbimento modificati della variabile entrante: N' = - N il vettore dei tassi di assorbimento modificati della variabile entrante, può essere ottenuto con la espressione:
p' s = - p s Dunque p' s può essere ottenuta, a partire dal vettore iniziale p s, purché sia nota la -. Vettore dei termini noti modificati: b' = - b può essere ottenuto a partire dal vettore iniziale b, conoscendo la -. Il valore della funzione obiettivo: z = -c T - b = -π T b può essere ottenuto a partire dalle informazioni iniziali c T e b conoscendo la - oppure a partire dal solo vettore b, purché sia noto π. Dunque, una volta nota la - e il vettore π T = c T - (vettore dei moltiplicatori del simplesso associato alla base ) si possono generare tutte le informazioni necessarie per la conduzione dell'algoritmo del simplesso. È da notare che -, ed il vettore π sono entrambi
contenuti nella ( + ) -. Si potrebbe, allora, pensare che, volendo ricavare, ad ogni iterazione, le informazioni strettamente necessarie per la conduzione dell'algoritmo del simplesso, si dovrebbe calcolare ad ogni iterazione la ( + ) - corrente. In realtà ciò non è necessario. Infatti la tabella iniziale dell'algoritmo del simplesso contiene sempre, per la presenza delle slack e/o delle artificiali, una matrice identità di ordine m. Alla generica iterazione k dell'algoritmo il sistema sarà in forma canonica rispetto ad un gruppo di m variabili diverso da quello iniziale, ed alla (-z). Poiché la matrice iniziale è del tipo [N + I m+ ] ne deriva che le colonne che inizialmente costituivano la matrice identità conterranno l'inversa della matrice di base alla k esima iterazione. D'altra parte anche nella tabella iniziale le ultime (m+) colonne contengono la ( + ) -. Infatti essendo + = I m+ sarà ancora ( + ) - = I m+.
IL SIMPLESSO REVISIONATO I dati del problema si suppongono riuniti in una tabella iniziale. Da tale tabella vengono prelevate, durante lo sviluppo dell'algoritmo, le informazioni man mano che esse si rendono necessarie. Alla prima iterazione risulta: ( + ) - = I m+ ed il vettore dei termini noti è quello iniziale. All'inizio di ciascuna iterazione k sono disponibili la ( + ) k e la colonna dei termini noti modificati. Per effettuare il test di ottimalità si calcola il vettore c T ' N : c' T N = c T N - c T - N = c T N - π T N Qualora il test fornisca esito negativo viene individuata la variabile entrante x s. Viene quindi calcolata la colonna pivot modificata p' s p' s = - p s
che, unitamente al vettore b' k, consente la determinazione della variabile uscente, ovvero della riga pivot e dunque del perno a' rs. Si effettua una operazione di pivot sul perno a' rs limitata alla ( + ) - ed al vettore dei termini noti. In tal modo la colonna p' s viene trasformata nel vettore u r, vettore unitario ad (m+) componenti avente l'elemento unitario nella posizione r esima. La ( + ) k e la b' k vengono trasformati rispettivamente nella ( + ) k + e la b' k+. Si è ripristinato, in questo modo, un insieme di informazioni corrispondente a quello disponibile all'inizio dell'iterazione che consente dunque di ripetere il procedimento.
ESEMPIO z= 2x - x 2 + x 3 Max! s.a 3x + x 2 + x 3 60 x - x 2 + 2x 3 0 x + x 2 - x 3 20 x x 2 x 3 0 Aggiungendo ai vincoli le variabili slack, si ottiene la tabella iniziale. 2 3 4 5 6 x x 2 x 3 y y 2 y 3 -z b 3 60-2 0-20 2-0 Tabella iniziale Da questa tabella vengono prelevati, nel corso dell algoritmo, i dati necessari.
Prima iterazione. Risulta: ( + ) - 0 0 0 = 0 0 0 0 0 0 0 0 0 () - 0 0 = 0 0 0 0 π = [0, 0, 0] Siano v N e v due vettori le cui componenti forniscono gli indici delle variabili che, a ciascuna iterazione, sono non basiche e basiche rispettivamente. Risulta: v N = [, 2, 3,]; v = [4, 5, 6]
Coefficienti di costo modificati delle variabili non basiche: c N = c N - π N = 3 [ 2, -, ] [0, 0, 0] - 2 - = [2, -, ] v N = [ 2 3] la soluzione non è massima e la colonna pivot è quella relativa alla variabile x. Colonna pivot modificata: 0 0 3 3 p = 0 0. = 0 0 Riunendo le informazioni ricavate si ottiene la tabella ristretta, su cui agisce il simplesso
revisionato: x y y 2 y 3 -z b y 3 0 0 0 60 y 2 0 0 0 0 y 3 0 0 0 20 -z 2 0 0 0 0 Tabella ristretta. Var. entr. x, uscente y 2 Si effettua una operazione pivot sulla tabella ristretta alla ( + ) - orlata col vettore dei termini noti, ottenendo le informazioni necessarie per condurre la seconda iterazione. Seconda iterazione. x y y 2 y 3 -z b y 0-3 0 0 30 x 0 0 0 0 y 3 0 0-0 0 -z 0 0-2 0 20
Tabella ristretta dopo il pivot Risulta: ( + ) - -3 0 0 = 0 0 0 0-0 0-2 0 () - -3 0 = 0 0 0 - π = [0, 2, 0] v N 2 = [5, 2, 3,]; v 2 = [4,, 6] Coefficienti di costo modificati delle variabili non basiche: c 2 N = c N - π 2 N = 0 [ 0, -, ] [0, 2, 0] - 2
0 - = [-2,, -3] v N = [ 5 2 3] la soluzione non è massima e la colonna pivot è quella relativa alla variabile x 2. Colonna pivot modificata: -3 0 4 p 2 2 = 0 0. - = - 0-2 Riunendo le informazioni ricavate si ottiene la seconda tabella ristretta: x 2 y y 2 y 3 -z b y 4-3 0 0 30 x - 0 0 0 0 y 3 2 0-0 0 -z 0-2 0 20 Tabella ristretta 2. Var. entr. x 2, uscente y 3 Si effettua l operazione di pivot ristretta,
ottenendo le informazioni necessarie per condurre la terza iterazione: Terza iterazione. x 2 y y 2 y 3 -z b y 0 - -2 0 0 x 0 0 0.5 0.5 0 5 x 2 0-0.5 0.5 0 5 -z 0 0 -.5-0.5 25 Tabella ristretta 2 dopo il pivot Coefficienti di costo modificati delle variabili non basiche: v N = [ 5 6 3] c 3 N = c N - π 3 N = 0 0 [ 0, 0, -] [0,.5, 0.5] 0 2 0 -
= [-.5, -0.5, -.5] v N = [ 5 6 3] L'analisi dei coefficienti di costo mostra che si è trovata la soluzione massima essendo tutti i coefficienti di costo delle variabili non basiche non positivi. La soluzione ottima risulta allora: y 2 = y 3 = x 3 = 0 ; x = 5 ; x 2 = 5 ; z = 25