2. ELEMENTE DE PROGRAMARE LINIARĂ Programarea liniară reprezinta fundamentele disciplinei „cercetari operationale” numita si teoria optimizarii deciziilor. Problemele de programare liniară constau in determinarea valorii optime a unei funcţii liniare de mai multe variabile, cu o semnificaţie economica precisă, ştiind că variabilele trebuie să îndeplinească anumite condiţii, numite restrictii. Problemele de programare liniară pot fi considerate ca extensii ale problemelor de extremum cu legaturi, dar metodele de rezolvare sunt diferite. Cele mai cunoscute probleme practice care conduc la modele liniare sunt programarea producţiei şi a personalului, alcătuirea unui amestec sau stabilirea dietei cu cost minim, problema clasica a transporturilor. Algoritmii simplex cu ajutorul carora se rezolva problemele de programare liniara utilizeaza notiuni fundamentale din algebra liniara. De aceea, in prima parte reamintim aceste notiuni si cateva rezultate importante care se folosesc apoi in programarea liniara. 2.1. Preliminarii de algebra liniara Fie n > 1 un număr natural. Se notează cu R n mulţimea sistemelor de n numere reale de forma: ⎛ x1 ⎞ ⎜ ⎟ ⎜ x2 ⎟ x = ⎜ ⎟, xi ∈ R, i = 1, n M ⎜ ⎟ ⎜x ⎟ ⎝ n⎠ numite vectori sau vectori coloană n-dimensionali. Se definesc operatiile: ⎛ x1 + y1 ⎞ ⎛ αx1 ⎞ ⎜ ⎜ ⎟ ⎟ ⎜ x2 + y2 ⎟ ⎜αx2 ⎟ x+ y =⎜ ⎟ si αx = ⎜ ⎟ , respective adunarea a doi vectori si înmulţirea unui M ⎜ ⎟ ⎜x + y ⎟ n⎠ ⎝ n M ⎜ ⎟ ⎜ αx ⎟ ⎝ 3⎠ vector cu un număr real, numit scalar. Adunarea vectorilor este asociativa, comutativa, are un element neutru, notat 0 şi care are ⎛ − x1 ⎞ ⎜ ⎟ ⎜ − x2 ⎟ toate componentele zero, si vectorul − x = ⎜ reprezinta opusul vectorului x din R n . ⎟ M ⎜ ⎟ ⎜− x ⎟ ⎝ n⎠ Alte proprietăţi ale lui R n legate de înmulţirea cu scalari sunt : - pentru orice α ∈ R, x, y ∈ R n , α ( x + y ) = αx + αy. - pentru orice α , β ∈ R , avem : (α + β ) x = αx + βx - pentru orice α + β ∈ R , x ∈ R n , α ( βx) = (αβ ) x - pentru orice x ∈ R n , 1.x = x − evident. In aceste conditii, R n are o structură de spaţiu vectorial real. Fie vectorii a1, a2 ,..., ak ∈ R n şi scalarii λ1, λ2 ,..., λk ∈ R. Definiţia 2.1. Se numeşte combinaţie linară a vectorilor a1, a2 ,..., ak ∈ R n cu scalarii λ1, λ2 ,..., λk ∈ R vectorul x = λ1a1 + λ2 a2 + ... + λk ak . Se spune că vectorul x ∈ R n este o combinaţie liniară a vectorilor a1, a2 ,..., an , dacă există scalarii α1, α 2 ,..., α k astfel încât să avem: x = α1a1 + α 2 a2 + ... + α k ak . Definiţia 2.2. Un sistem de vectori S = {v1, v2 ,..., vm } se numeşte liniar independent dacă din relaţia α1v1 + α 2v2 + ... + α m vm = 0 , rezultă α1 = α 2 = ... = α m = 0 unică soluţie. Altfel, daca măcar unul din scalarii α1,α 2 ,..., α m este diferit de zero, atunci sistemul S se numeşte liniar dependent. Pentru cazul spaţiul vectorial R n există o teoremă ce caracterizează natura unui sistem de vectori şi pe care o dăm mai jos. Fie S = { α1,α 2 ,...,α m } ⊂ R n , unde : ⎛ a11 ⎞ ⎛ a12 ⎞ ⎛ a1m ⎞ ⎛ a11 a12 ⎜ ⎜ ⎜ ⎜ ⎟ ⎟ ⎟ a ⎜ a21 ⎟ ⎜ a2 ⎟ ⎜ a2 m ⎟ ⎜a a1 = ⎜ , a2 = ⎜ , …, am = ⎜ şi A = ⎜ 21 22 ⎟ ⎟ ⎟ ... ... M M M ⎜ ⎜ ⎜ ⎜ ⎟ ⎟ ⎟ ⎜a ⎟ ⎜a ⎟ ⎜a ⎟ ⎜a ⎝ n1 ⎠ ⎝ n2 ⎠ ⎝ nm ⎠ ⎝ n1 an 2 (astfel notat A = (aij )i =1,n ) matricea având drept coloane vectorii daţi. ... a1m ⎞ ⎟ ... a2m ⎟ , ... ... ⎟ ⎟ ... anm ⎟⎠ j =1, m Reamintim că rangul unei matrici este un număr mai mic sau egal cu minimul dintre numărul de linii şi numărul de coloane, rangA ≤ min{m, n} , care reprezintă ordinul maxim al minorului nenul al matricii. Propoziţia 2.1. O condiţie necesară şi suficientă ca sistemul de vectori S să fie liniar independent este ca rangul matricei A să fie egal cu numărul vectorilor, adică rangA = m . În caz contrar, sistemul S este liniar dependent. ⎧a11λ1 + a12λ2 + ... + a1mλm = 0 ⎪ ⎪a λ + a λ + ... + a2mλm = 0 . Demonstraţie. Fie λ1a1 + λ2 a2 + ... + λm am = 0 , adica ⎨ 21 1 22 2 ⎪............................................... ⎪⎩an1λ1 + an 2λ2 + ... + anmλm = 0 Din teoria sistemelor liniare omogene se ştie că o condiţie necesară şi suficientă pentru ca sistemul precedent să admită numai soluţia banală este ca rangA = numărul necunoscutelor = m. Cum m este şi numărul vectorilor din S, prima parte a teoremei este demonstrată. Dacă rangA < m , sistemul admite si alte soluţii decât cea banală şi reciproc, deci există măcar un scalar λi ≠ 0 printre scalarii λ1, λ2 ,..., λm şi rezultă din definiţia 2.2 că S este un sistem de vectori liniar dependent. Practic, pentru a afla natura unui sistem de m vectori din R n , se calculeaza r = rangA; si apoi i) dacă r = m sistemul de vectori este liniar independent; ii) dacă r < m sistemul de vectori este liniar dependent. Reamintim ca numărul maxim de vectori liniari independenţi în R n este n . Definiţia 2.3. Se numeşte baza în R n orice sistem de n vectori liniar independenţi. Din definiţie se vede că o bază este un sistem liniar independent maximal în raport cu incluziunea. Din aceasta rezultă că orice sistem care are n + 1 vectori este liniar dependent. Există o infinitate de baze în R n . Practic, pentru a decide dacă sistemul de vectori A = {a1, a2 ,..., an } este o bază, se calculeaza det A, unde A este matricea care are drept coloane vectorii a1, a2 ,..., an ; Dacă det A ≠ 0 , sistemul A formează o bază. Propoziţia 2.2. (Teorema bazei). Fie A = {a1, a2 ,..., an } o bază în R n şi x un vector oarecare din Rn. Atunci există scalarii unici α1, α 2 ,..., α n ∈ R astfel încât x = α1a1 + α 2 a2 + ... + α n an , adica x se poate exprima ca o combinaţie liniară de vectori ai bazei şi această exprimare este unică. ⎛ α1 ⎞ ⎜ ⎟ ⎜α ⎟ Sub forma matriciala, sistemul se scrie Ax A = x, unde x A = ⎜ 2 ⎟ sunt coeficienţii combinaţiei M ⎜ ⎟ ⎜α ⎟ ⎝ n⎠ liniare. Ei se mai numesc coordonatele (componentele) vectorului x scris în baza A. De aici rezulta ca x A = A−1x . Baza canonică din R n este baza formată din vectorii unitari ⎛1⎞ ⎜ ⎟ ⎜0⎟ e1 = ⎜ ⎟ , M ⎜ ⎟ ⎜0⎟ ⎝ ⎠ ⎛ 0⎞ ⎛ 0⎞ ⎜ ⎟ ⎜ ⎟ ⎜1⎟ ⎜ 0⎟ e2 = ⎜ ⎟,..., en = ⎜ ⎟. , iar matricea asociată bazei se noteaza cu I , si se numeste matricea M M ⎜ ⎟ ⎜ ⎟ ⎜ 0⎟ ⎜1⎟ ⎝ ⎠ ⎝ ⎠ ⎛ x1 ⎞ ⎜ ⎟ ⎜x ⎟ n unitate de ordinul n . Orice vector din R , x = ⎜ 2 ⎟ se exprimă x = x1e1 + x2e2 + ... + xnen . M ⎜ ⎟ ⎜x ⎟ ⎝ n⎠ O problema importanta, reluata la fiecare pas din algoritmul simplex, este transformarea coordonatelor unui vector la schimbarea bazei. Fie două baze ale spaţiului vectorial R n : A = {a1, a2 ,..., an } şi B = {b1, b2 ,..., bn } . Cu A şi B vom nota matricile asociate ⎛a ⎞ ⎛b ⎞ ⎜ 11 a22 L a1n ⎟ ⎜ 11 b22 L b1n ⎟ ⎜ ⎟ ⎜ ⎟ celor două baze din R n , adică: A = ⎜ a12 a23 L a2n ⎟, B = ⎜ b12 b23 L b2n ⎟. M M ⎟ M M ⎟ ⎜ M ⎜ M ⎜a ⎟ ⎜ ⎟ ⎝ n1 an 2 L ann ⎠ ⎝ bn1 bn 2 L bnn ⎠ ⎛ α1 ⎞ ⎛ β1 ⎞ ⎜ ⎟ ⎜ ⎟ ⎜α 2 ⎟ ⎜β ⎟ n Evident, det A ≠ 0, det B ≠ 0. Fie x ∈ R şi x A = ⎜ ⎟ xB = ⎜ 2 ⎟ , coordonatele vectorului x în M M ⎜ ⎟ ⎜ ⎟ ⎜α ⎟ ⎜β ⎟ ⎝ n⎠ ⎝ n⎠ cele două baze. Vectorii din R n , b1, b2 ,..., bn pot fi exprimaţi în baza A astfel : b1 = c11a1 + c12 a2 + ... + c1n an , b 2 = c21a1 + c22 a2 + ... + c2 n an ,..., bn = cn1a1 + cn 2 a2 + ... + cnn an , n adica bi = ∑ cij a j , i = 1, n în care cij ∈ R sunt coordonatele de trecere ale vectorilor din baza A j =1 în baza B şi formează matricea C = (cij )i, j =1,n . Matriceal, se scrie B = A C T , unde observam ca si matricea C este nesingulară. Se demonstreaza ca x A = CT xB , ceea ce se mai poate scrie sub forma x B = (C T ) −1 x A , numita formula de schimbare de bază în R n . Din relatia C T = A−1B , rezulta (C T ) −1 = B −1 A. Dacă baza A este bază canonică, atunci matricea A este matricea unitate, si atunci obtinem xB = B −1x. , în care x reprezintă coordonatele vectorului x în baza unitară. Caz particular. In programarea liniara, intereseaza in mod deosebit calcularea coordonatelor unui vector când se trece de la o bază la o nouă bază care diferă de prima printr-un singur vector. Fie A = {a1, a2 ,..., an } şi B = {b1, b2 ,..., bn } două baze din R n care diferă printr-un singur vector. Pentru simplificarea scrierii, consideram ca se schimba primul vector, dar raţionamentul este asemănător pentru oricare din ei. Fie b ∈ R n , care se poate exprima în baza A, b = λ1a1 + λ2 a2 + ... + λn an . Deoarece λ1 ≠ 0, (altfel λ λ 1 B nu ar fi bază), obtinem a1 = b − 2 a2 − ... − n an . λ1 λ1 λ1 Presupunem ca stim coordonatele lui x in baza A, x = α1a1 + α 2a2 + ... + α n an , x A = (α1,α 2 ,...,α n )T . Ne propunem sa determinan coordonatele vectorului x in noua baza B, adica x = β1a1 + β 2 a2 + ... + β n an , xB = ( β1, β 2 ,..., β n )T . Avem λ 1 λ α λ α − λ2α1 b − 2 a2 − ... − n an ) + α 2a2 + ... + α n an = 1 b + 1 2 a2 + ... + x = α1 ( λ1 λ1 λ1 λ1 λ1 α1 ⎧ ⎪ β1 = λ 1 ⎪ ⎪ λα ⎪ β 2 = 1 2−λ2α1 λ1α n − λnα1 an . Vom obtine ⎨ + , adica coordonatele in noua baza. λ1 λ1 ⎪L ⎪ ⎪ λ1α n −λnα1 ⎪ βn = λ1 ⎩ Rezultatele precedente se pot organiza sub forma unor tabele, în prima etapă aflânduse date cunoscute, iar a doua date calculele : Etapa I Etapa II Pentru exemplul nostru, λ1 se numeşte pivot. Elementele de la etapa a doua se calculează astfel : - se împart elementele de pe linia pivotului la pivot şi se trec pe linia pivotului la etapa a II-a. - se completeaza coloana pivotului cu zero ; - restul elementelor se calculează cu regula dreptunghiului. Pentru elementul de pe locul al doilea ( β 2 ) se formează dreptunghiul care are într-un vârf opus elementul corespunzător lui β 2 din prima etapă, adică şi se calculează diferenţa dintre produsul elementelor de pe diagonala pivotului şi produsul celorlalte elemente, apoi rezultatul se împarte la pivot şi se trece raportul în locul lui β 2 . 2.2. Formularea unei probleme de programare liniara (PPL) Forma generală a unei PPL este problema [opt] f = c1x1 + c2 x2 + ... + cn xn → funcţia de eficienţă ≤ a11x1 + a12 x2 + ... + a1n xn = b1 ≥ ⎫ ⎪ ⎪ ⎪ ⎪ ≤ ⎪ a21x1 + a2 2 x2 + ... + a2n xn = b2 ⎪⎪ ⎬ restricţii ≥ ⎪ ⎪ ............................................. ⎪ ≤ ⎪ am1x1 + am 2 x2 + ... + amn xn = bm ⎪ ⎪ ≥ ⎭⎪ x1, x2 ,.., xn ( cu semne specificate) Functia liniara f se numeste funcţia obiectiv(funcţie scop, de eficienţă), iar cele m restrictii sunt de asemenea liniare. In general, condiţiile impuse asupra variabilelor sunt condiţiile de negativitate. Modelul clasic al unei PPL este dat de problema practica a optimizarii productiei unui agent economic. Sistemul economic este definit prin mulţimea de activităţi {A1, A2, ... An} care compun sistemul economic analizat, mulţimea de resurse utilizate {R1, R2, ... Rm} precum şi prin relaţiile tehnico-economice dintre acestea. Legătura dintre activităţi şi resurse este determinată de tehnologia de fabricaţie corespunzătoare fiecărei activităţi Aj (j=1,...,n) şi poate fi caracterizată numeric prin vectorul coloană a(j) de componente (a1j, a2j, ... amj). Elementele {aij, i = 1,...,m; j = 1,...,n} se numesc coeficienţi tehnici sau coeficienţi de consum specific şi arată ce cantitate din resursa Ri se consumă pentru producerea unei unităţi din produsul (serviciul) Pj (ca rezultat al activităţii Aj). Toate "tehnologiile" de fabricaţie definite de vectorii coloană a(j) se pot organiza într-o matrice A cu m linii şi n coloane; fiecare linie se referă la o resursă Ri (i = 1,...,m) şi fiecare coloană se referă la o activitate Aj (j = 1,...,n). Notând cu xj (j = 1,...,n) rezultatul activităţii Aj într-o perioadă dată şi cu bi (i = 1,...,m) cantităţile disponibile din resursele Ri (i = 1,...,m), se pot scrie matematic următoarele restricţii tehnico-economice: a 11 x 1 + a 12 x 2 + ... + a 1n x n ≤ b 1 a 21 x 1 + a 22 x 2 + ... + a 2n x n ≤ b 2 sau A⋅x ≤ b LLLLLLLLLLLL a m1 x 1 + a m2 x 2 + ... + a mn x n ≤ b m ⎛ a 11 a 12 L a 1n ⎞ ⎛ x1 ⎞ ⎛ b1 ⎞ ⎜a ⎜x ⎟ ⎜ ⎟ ⎟ a L a 22 2n ⎟ ; x = ⎜ 2 ⎟ şi b = ⎜ b 2 ⎟ unde A = ⎜ 21 M O M ⎟ ⎜ M ⎜ M ⎟ ⎜ M ⎟ ⎝ a m1 a m2 L a mn ⎠ ⎝xn ⎠ ⎝bn ⎠ Interpretarea restrictiilor: cantitatea consumată dintr-o resursă nu poate depăşi disponibilitatile Exemplul 1.Optimizarea productiei. O întreprindere are la dispoziţie trei resurse A, B, C din care poate fabrica 4 tipuri de produse P1, P2 , P3 , P4 . Managerul doreşte să ştie care ar fi nivelul de producţie al fiecărui produs, ţinând seama de limitarea resurselor existente şi de profitul produs. Se cunosc următoarele date: coeficienţii tehnologici ai fiecărui produs, disponibilul de resurse, profitul unitar. Datele sunt în tabelul de mai jos. Produse Consumuri unitare (t) Disponibil (t) Resurse A B C Profit/unit. (în u.m) P1 1 0 1 P2 2 1 0 P3 1 1 1 P4 1 1 0 20 10 30 20 1000 800 500 Modelului matematic al problemei are 4 variabile, reprezentate de nivelul de producţie al fiecărui produs (numărul de unităţi, bucăţi etc. din fiecare produs). Daca notam cu xi nivelul produsului Pi , atunci functia obiectiv reprezintă profitul total adus prin fabricarea produselor, deci se va maximiza f ( x1, x2 , x3 , x4 ) = 20 x1 + 10 x2 + 30 x3 + 20 x4 (în unităţi monetare). Restrictiile modelului deriva limitarea resurselor, deci limitarea producţiei, dar in conditiile maximizarii profitului. Astfel, se obtine cate o restrictie pentru fiecare dintre resurse: x1 + 2 x2 + x3 + x4 ≤ 1000 x2 + x3 + x4 ≤ 800 x1 + x3 ≤ 500 . Evident, variabilele de decizie x1, x2 , x3 , x4 trebuie să fie pozitive, deci x1, x2 , x3 , x4 ≥ 0. Concuzionand, modelul matematic aferent problemei enuntate consta intr-o PPL: [max] f = 20 x1 + 10 x2 + 30 x3 + 20 x4 → funcţia de eficienţă x1 + 2 x2 + x3 + x4 ≤ 1000⎫ ⎪ ⎪ x2 + x3 + x4 ≤ 800 ⎬ restricţii ⎪ ⎪ x1 + x3 ≤ 500 ⎭ x j ≥ 0 j = 1,4 → condiţiile de negativitate Acest model poate fi scris si sub forma matriceala. Astfel, daca notam cu X = ( x1, x2 , x3 , x4 )T ∈ R 4 vectorul nivelurilor de producţie (vectorul necunoscutelor), cu A matricea coeficienţilor ⎛1 2 1 1⎞ ⎜ ⎟ A = ⎜0 1 1 1⎟ , ⎜1 0 1 0⎟ ⎝ ⎠ tehnologici, cu b vectorul resurselor, b = (1000,800,500)T ∈ R3 şi cu c coeficientii funcţiei de eficienţă, c = (20,10,30,20) ∈ R 4 , modelul precedent se scrie sub forma matriceal : [max] f = cT X AX ≤ b X ≥0 Exemplul 2. Problema amestecului. Se face un amestec din uleiuri minerale U1, U 2 , U 3 , U 4 , în vederea obţinerii unui produs finit cu anumite calităţi şi în cantitate de cel puţin 800 l . Amestecul trebuie să conţină substanţele S1 şi S 2 în cantitate de cel puţin 18000 g respectiv 21000 g. Conţinutul în substanţele S1 şi S 2 ale fiecărui tip de ulei şi costurile unitare sunt date mai jos : Uleiuri Conţinutul în grame/l Substanţe S1 S2 Cost unitar (mii lei/t) U1 20 10 U2 10 20 5 4 U3 30 10 4,5 U4 20 30 Necesar (g) 18000 21000 3 Ce cantitate din fiecare ulei trebuie pusă în amestec astfel incat costul total sa fie minim ? Variabilele modelului sunt cantităţile de uleiuri U1, U 2 , U 3 , U 4 , care trebuie puse în amestec, notate cu x1, x2 , x3 , x4 . Funcţia obiectiv este data de costul amestecului, care trebuie minimizat: [min] f = 5 x1 + 4 x2 + 4,5 x3 + 3 x4 Restrictiile modelului sunt de doua tipuri: o restrictie impusa de cantitatea minima de amestec, x1 + x2 + x3 + x4 ≥ 800. , si alte doua restrictii referitoare la substanţele minerale necesare amestecului: 20 x1 + 10 x2 + 30 x3 + 20 x4 ≥ 18000 10 x1 + 20 x2 + x103 + 30 x4 ≥ 21000 Se adauga evident condiţiile de negativitate x1, x2 , x3 , x4 ≥ 0. In concluzie, modelul matematic al problemei de amestec este : [min] f = 5 x1 + 4 x2 + 4,5 x3 + 3 x4 x1 + x2 + x3 + x4 ≥ 800. 20 x1 + 10 x2 + 30 x3 + 20 x4 ≥ 18000 10 x1 + 20 x2 + x103 + 30 x4 ≥ 21000 x1, x2 , x3 , x4 ≥ 0. Exemplul 3. Problema transporturilor. Problema clasica de transport constă în determinarea unui plan optim de transport al unui produs de la depozite la consumatori, astfel încât cheltuielile aferente transportului să fie minime. Un produs P , depozitatat în m centre de expediţie Di în cantităţile ai (i = 1, m) este solicitat în centrele de consum C j în cantităţile b j ( j = 1, n) . Cunoscand costurile unitare de transport cij de la centrul Di la centrul de consum C j , se cere sa se determine cantităţile de marfa xij pe toate rutele (i, j ), i = 1, m , j = 1, n , care trebuie transportate, astfel încât costul total al transportului să fie minim. Problema poate fi sintetic prezentata sub forma urmatorului tabel: Cj Di D1 D2 M Dm b C1 c11 x11 c21 x21 M cm1 xm1 b1 C2 c12 x12 c22 x22 … a1 … Cn c1n x1n c2n x2n M ... M M cm2 xm2 b2 … … cmn xmn bn an T … a a2 n Problema de transport este echilibrată daca cererea din centrele de consum ∑ b j coincide cu j =1 m n m i =1 j =1 i =1 oferta din centrele de depozitare ∑ ai , adică: ∑ b j = ∑ ai = T . Restrictiile modelului de transport deriva din transportul integral al disponibilului din n produsul P către centrele de consum, ∑ xij = ai , i = 1, m ( m restricţii ), si din satisfacerea j =1 m integrală a necesarului fiecărui centru C j : ∑ xij = b j , j = 1, n ( n restricţii ). i =1 Modelul matematic al unei problemei clasice de transport devine: m n min f = ∑ ∑ cij xij i =1 j =1 n ∑ xij = ai , i = 1, m j =1 m ∑x i =1 ij = b j , j = 1, n . xij ≥ 0, i = 1, m , j = 1, n . 2.3. Forme ale unei probleme de programare liniara Dupa cum am vazut deja, o problema de programare liniara consta in optimizarea (minimizarea sau maximizarea) unei functii liniare supusa unor conditii liniare (egalitati si/sau inegalitati). Forma generală a oricărei probleme de programare liniară este: ⎧ ⎪max (min ) f = c 1 ⋅ x 1 + c 2 ⋅ x 2 + ... + c n ⋅ x n ⎪ ⎪⎪ ≤ a ⋅ x + a ⋅ x + ... + a ⋅ x i = 1,..., n ⎨ i1 1 i2 2 in n = bi ≥ ⎪ ≤0 ⎪ ⎪x 1 , x 2 ,..., x n ≥ 0 ⎪⎩ oarecare unde cj (coeficienţii funcţiei obiectiv), aij (coeficienţii restricţiilor) şi bi (termenii liberi) sunt constate reale. Spunem ca o problema de programare liniara are forma standard (FS) daca toate restrictiile sunt ecuatii si toate variabilele sunt supuse conditiei de nenegativitate: ⎧min (max )c T x ⎪ ⎨ Ax = b ⎪ x ≥ 0. ⎩ O restrictie a unei probleme de programare liniara este numita concordanta daca este o inegalitate de tipul ≥ cand functia liniara trebuie minimizata sau o inegalitate de tipul ≤ cand functia liniara trebuie maximizata. Spunem ca o problema de programare liniara are forma canonica (FC) daca toate restrictiile sale sunt concordante si toate variabilele sunt supuse conditiei de nenegativitate. Cu alte cuvinte, o problema de programare liniara are forma canonica daca se scrie ⎧min c T x ⎧max c T x ⎪ ⎪ ⎨ Ax ≥ b sau ⎨ Ax ≤ b ⎪x ≥ o ⎪ x ≥ o. ⎩ ⎩ Orice PPL poate fi adusa la forma standard sau la forma canonica, folosind urmatoarele transformari elementare (echivalente): a) Sensul unei inegalitati se schimba prin inmultire cu – 1; b) Transformarea inegalitatilor in ecuatii: o inegalitate de forma aTx ≤ b poate fi scrisa ca o ecuatie aTx + y = b , introducand o variabila (numita variabila ecart, variabila abatere sau variabila de compensare) y ≥ 0 , iar o inegalitate de forma aTx ≥ b se transforma in ecuatia aTx – y = b prin scaderea variabilei ecart y ≥ 0; c) Transformarea ecuatiilor in inegalitati: o ecuatie de forma aTx = b este echivalenta cu inegalitatile aTx ≥ b si aTx ≤ b; d) O variabila supusa conditiei de nepozitivitate (x ≤ 0) se transforma intr-o variabila nenegativa prin substitutia x’ = - x; e) O variabila oarecare x (adica o variabila careia nu i se impun conditii asupra semnului) se poate inlocui cu doua variabile nenegative x’ si x”, folosind substitutia x = x’ – x”; f) Deoarece avem totdeauna inf f(x) = - sup ( - f(x)) o problema de minimizare se transforma intr-o problema de maximizare si invers, schimbind semnul coeficientilor din functia considerata. 2.4. Rezultate fundamentale in programarea liniara In expunerile urmatoare ne vom referi la o PPL sub forma standard, si vom considera de obicei problema de minimizare in forma standard, adica: ⎧min c T x ⎪ ⎨ Ax = b (*) ⎪ x ≥ 0. ⎩ O solutie a sistemului de ecuatii Ax = b care verifica in plus conditiile de nenegativitate x ≥ 0 este numita program sau solutie admisibila (solutie realizabila, solutie posibila etc.). Multimea programelor problemei (*) este P = {x∈Rn⏐Ax = b, x ≥ 0}. Un punct de minim global al functiei obiectiv z = cTx pe multimea problemelor P este numit solutie optima a PPL (*). In cele ce urmeaza vom presupune ca rang(A) = m < n, conditie care asigura compatibilitatea sistemului de restrictii si existenta unui numar infinit de solutii ale acestuia. Se numeste baza a problemei(*) orice baza a lui R m formata din vectori coloana ai matricii A. Se numeşte soluţie de bază a sistemului de ecuaţii Ax = b o soluţie cu proprietatea: componentelor sale nenule le corespund vectori coloană ai matricei A liniar independenţi. Rezultă că o soluţie de bază poate avea cel mult m componente diferite de zero. Convenim să numim variabilele corespunzătoare unei baze în R m variabile bazice. Utilizand scrierea matriceala, sistemul A⋅x = b se pune sub forma echivalenta: x (BS)⋅ ⎛⎜ B ⎞⎟ = b ⇔ B⋅xB + S⋅xS = b ⇔ B⋅xB = b – S⋅xS ⇔ xB = B-1⋅b – B-1⋅S⋅xS , unde baza B ⎝ xS ⎠ este o matrice pătratică nesingulara de dimensiune m, iar restul coloanelor formeaza matricea ⎛B−1b⎞ ⎜ 0 ⎟ S, matrice cu m linii şi n – m coloane. xB = ⎜ 0 ⎟ este solutia de baza asociata bazei B. ⎜ M ⎟ ⎜ 0 ⎟ ⎝ ⎠ Teorema fundamentala a programarii liniare a) Daca problema de programare liniara (*) are un program, atunci are un program de baza; b) Daca problema de programare liniara (*) are un program optim, atunci are un program de baza optim. Teorema. Mulţimea soluţiilor admisibile (optime) este multime închisă şi convexă. Dacă este şi mărginită atunci punctele extremale ale acesteia sunt chiar soluţiile admisibile (optime) de bază ale problemei. Aceste rezultate dau o metoda de rezolvare a unei PPL. Aceasta consta in investigarea tuturor solutiilor de baza (sunt cel mult C m n soluţii de bază, adică un număr finit), si apoi selectarea solutiei care realizeaza optimul functiei obiectiv. Metoda descrisa ramane doar una teoretica, datorita unui volum ridicat de calcule. Se impune asadar o alta cale de rezolvare a unei PPL. Algoritmul simplex (Dantzig, 1951) pentru rezolvarea problemelor de programare liniara reprezinta o metoda iterativa care exploreaza in mod sistematic multimea programelor unei PPL, prin trecerea de la un program de baza la alt program de baza, care este „cel putin la fel de bun” ca cel precedent. Metoda furnizeaza de asemenea criterii pentru punerea in evidenta a faptului ca problema are optim infinit, precum si a cazului in care multimea programelor este vida 2.5. Algoritmul simplex ⎧min c T x ⎪ Consideram PPL ⎨ Ax = b ⎪ x ≥ 0. ⎩ (*) , unde unde A este o matrice cu m linii si n coloane pentru care avem rang (A) = m < n. Fie B o baza a problemei. Atunci sistemul de ecuatii Ax = b se poate scrie in forma B -1 x = B b – B-1SxS. Notand B-1b = ⎯xB , B-1aj = y Bj , 1 ≤ j ≤ n, rezulta x B = x ' B − ∑ y Bj x j . j∈S B B S Solutia de baza corespunzatoare bazei B este data de x =⎯x si x = 0. Evident ca aceasta solutie de baza este un program daca avem indeplinita conditia B-1b ≥ 0. Definitie. O baza B care verifica conditia B-1b ≥ 0 se numeste baza primal admisibila. Pe de alta parte, functia obiectiv z = cTx poate fi exprimata sub forma: z = c BT x B + c ST x S = c BT B −1b − (c BT B −1 S − e ST )x S . Notam z ' B = c BT x B , z Bj = c BT y Bj ,1 ≤ j ≤ n , unde zB reprezinta valoarea functiei obiectiv pentru solutia de baza xB = B-1b , xS = 0. Atunci, relatia precedenta se scrie si sub forma z = z ' B −∑ (z Bj − c j )x j . j∈R Prezentam in continuare enuntul algoritmului simplex primal: Pasul 1. Se determina o baza primal admisibila B. Pasul 2. Se calculeaza ⎯xB , ⎯zB , y Bj , 1 ≤ j ≤ n. Pasul 3. Daca z Bj − c j ≤ 0 pentru orice j ∈ S, atunci STOP: ⎯xB este program optim. Altfel, se determina multimea S+ definita de {j/j ∈ S , z Bj − c j > 0 } si se trece la pasul urmator. Pasul 4. Daca exista j ∈ S+ astfel incat y Bj ≤ 0 , atunci STOP: problema are optim infinit. Altfel, determinam max z Bj − c j = z kB − ck . ( ) k ∈ S+ cu ajutorul criteriului de intrare in baza Pasul 5. Determinam indicele r ∈ B+ cu ajutorul criteriului de iesire din baza _ _ B ⎛ x' ⎞ x' B min ⎜⎜ Bi ⎟⎟ = Br . ⎝ y ik ⎠ y rk unde B+ = {i/i ∈ B , y ikB > 0 }. Pasul 6. Se considera noua baza ⎯B obtinuta din B prin inlocuirea coloanei ar cu coloana ak, si se reia algoritmul de la pasul al doilea, inlocuind B cu ⎯B. Comentarii 1. Calculele aferente fiecarei iteratii (fiecarei baze) se trec sub forma unor tabele numite tabele simplex. 2. Datorita simplificarii calculelor, si nu numai, se considera ca baza initiala matricea unitate. 3. Pasul 3 reprezinta testul de optimalitate. 4. Pasul 4 arata testul de infinititudine a solutiei si, in caz ca aceasta conditie nu este indeplinita, se determina noua variabila de baza, cu ajutorul criteriului de intrare in baza. 5. Pasul 5 reprezinta criteriul de iesire din baza. 6. 7. Trecerea de la o baza la alta se face conform formulelor de schimbarea bazei (caul particular al inlocuirii unui singur vector), conform cu 2.1. In cazul unei PPL de maxim, apar urmatoarele modificari: a) Testul de optimalitate (pasul 3) devine: daca z Bj − c j ≥ 0 pentru orice j ∈ S, atunci STOP, ⎯xB este program optim. Altfel se determina multimea S- = {j/j ∈ S , z Bj − c j < 0 } si se trece la pasul b) urmator. Pasul 4: daca exista j ∈ S astfel incat y Bj ≤ 0 , atunci STOP: problema are optim infinit. Altfel, determinam k ∈ S- cu ajutorul criteriului de intrare in baza min z Bj − c j = z kB − c k . ( ) Tabelul simplex asociat bazei B are in prima coloana variabilele de baza (vectorul x ), in a doua coloana valorile variabilelor de baza (vectorul ⎯xB), iar in urmatoarele n coloane vectorii y Bj ,1 ≤ j ≤ n . Pe o linie suplimentara se trec functia obiectiv z = cTx , B valoarea sa in baza B (adica z’B), precum si cantitatile z Bj − c j ,1 ≤ j ≤ n, necesare in aplicarea algoritmului simplex. Practic, trecerea de la un tabel la altul se face dupa urmatoarele reguli: - elementele situate pe linia pivotului se impart la pivot - elementele situate pe coloana pivotului devin zero, cu exceptia pivotului care devine 1 - celelalte elemente ale tabelului simplex se transforma dupa regula dreptunghiului: daca ne imaginam dreptunghiul a carui diagonala este determinata de elementul yijB care trebuie transformat si pivotul y rkB , atunci noua valoare yijB ' se obtine impartind la pivot diferenta dintre produsul yijB y rkB al elementelor situate pe diagonala considerata mai sus si produsul y rjB y ikB al elementelor situate pe cealalta diagonala a dreptunghiului. Exemplu [max] f = 20 x1 + 10 x2 + 30 x3 + 20 x4 x1 + 2 x2 + x3 + x4 ≤ 1000 x2 + x3 + x4 ≤ 800 x1 + x3 ≤ 500 x1, x2 , x3 , x4 ≥ 0 Se aduce problema la forma standard, adăugând trei variabile de compensare x5 , x6 , x 7 . Problema devine: [max] f = 20 x1 + 10 x2 + 30 x3 + 20 x4 =1000 x1 + 2 x2 + x3 + x4 + x5 =800 x2 + x3 + x4 + + x6 x1 + x3 + x7 =500 x j ≥ 0 , j = 1,7. Observam ca variabilele x5 , x6 , x 7 . furnizeaza o baza initiala primal admisibila, deci se poate aplica algoritmul simplex primal. O soluţie iniţială de bază este data de (0, 0, 0, 0, 1000, 800, 500). Prezentam succint mai jos calculele aferente aplicarii algoritmului. CB B XB 0 0 0 a5 a6 a7 0 0 30 a5 a6 a3 0 20 30 a5 a4 a3 20 20 30 a1 a4 a3 1000 800 500 0 500 300 500 15000 200 300 500 21000 200 500 300 23000 B 5 4 3 a1 a2 a3 1 2 1 0 1 1 1 0 1 20 10 30 0 2 0 -1 1 0 1 0 1 -10 10 0 1 1 0 -1 1 0 1 0 1 10 –10 0 1 1 0 0 2 0 0 –1 1 0 –20 0 B 0 0 0 a4 a5 a6 1 1 0 1 0 1 0 0 0 20 0 0 1 1 0 1 0 1 0 0 0 20 0 0 0 1 –1 1 0 1 0 0 0 0 0 –20 0 1 –1 1 1 0 0 –1 1 0 –10 –10 0 a7 0 0 1 0 –1 –1 1 -30 0 –1 1 -10 0 –1 1 -10 1000 800 500 500 300 200 500 Exercitii Sa se aplice simplex primal pentru rezolvarea urmatoarelor PPL: (max ) f = 3x 1 + 2x 2 + x 3 + 4x 4 + 3x 5 + 5x 6 ⎧ x 1 + 2 x 2 + x 3 + x 4 + 3x 5 + x 6 ≤ 8 ⎪2x 1 + 2 x 2 + 3x 3 + x 4 + 3x 5 + 2 x 6 ≤ 15 , ⎨ 3x + x + 2 x + 2 x + x + 2 x ≤ 11 2 3 4 5 6 ⎪ 1 x i ≥ 0, i = 1,...,6 ⎩ [min] f = 5 x1 + 4 x 2 + 3 x3 x1 + 2 x2 + 2 x3 ≤ 10 2 x1 + x2 ≤8 2 x2 − x3 ≤ 8 x1, x2 , x3 ≥ 0 . 2.6. Determinarea unei baze initiale ⎧min c T x ⎪ Consideram forma standard ⎨ Ax = b . ⎪ x ≥ 0. ⎩ Dupa cum am vazut, algoritmul simplex necesită, pentru pornire, o soluţie admisibilă de bază. Determinarea acesteia, atunci cand nu este matricea unitate, poate fi un proces de lunga durata. De aceea, s-au dezvoltat mai multe metode care determina o solutie initiala de baza pentru problema data. Una dintre aceste metode este metoda celor doua faze, pe care o descriem succint in continuare. Presupunem b ≥ 0 si, pentru simplificarea expunerii, consideram ca A nu contine vectori coloana unitari. Se construieste o noua PPL auxiliara: ⎧min( x n +1 + ... + x n + m ) ⎪ a , unde xi + n ,1 ≤ i ≤ m, sunt numite variabile artificiale , xa fiind ⎨ Ax + x = b, ⎪ x ≥ 0, x a ≥ 0, ⎩ vectorul de componente xi + n ,1 ≤ i ≤ m . Pentru aceasta problema, matricea unitate I asociata variabilelor artificiale xa este o baza primal admisibila, careia ii corespunde programul x = 0 , xa = b. De asemenea, observam ca functia obiectiv a problemei auxiliare este marginita inferior pe multimea programelor acestei probleme (un minorant este evident zero) si deci problema are solutii optime. Se impune asadar rezolvarea problemei auxiliare cu algoritmul simplex primal, deoarece o baza primal admisibila initiala este disponibila. Daca optimul problemei auxiliare este strict pozitiv, atunci problema initiala nu are solutie. In cazul in care optimul problemei auxiliare este este zero, atunci se preia tabelul optim ca tabel initial pentru problema data. Cu alte cuvinte, baza optima a problemei auxiliare furnizeaza o baza primal admisibila initiala pentru problema data. Aceasta inseamna ca metoda descrisa consta in doua etape: in faza I se construieste problema auxiliara si se rezolva cu simplex primal, iar in faza a doua, se rezolva problema initiala (data) tot cu algoritmul simplex primal, luind ca baza de pornire, baza optima a problemei auxiliare. Adaugam faptul ca la trecerea de la o faza la cealalta, se inceraca eliminarea din baza optima a variabilelor artificiale xa , printr-o iteratie simplex obisnuita. Exemplu Sa se rezolve problema de programare liniară: (max ) f = 2x 1 + 3x 2 ⎧3x 1 + x 2 ≤ 10 ⎪ ⎨ x 1 + 4x 2 ≥ 2 ⎪⎩ x 1 , x 2 ≥ 0 Aducem mai intai problema la forma standard: (max ) f = 2x 1 + 3x 2 ⎧3x 1 + x 2 + x 3 = 10 ⎪ ⎨ x 1 + 4x 2 − x 4 = 2 ⎪⎩ x 1 , x 2 , x 3 , x 4 ≥ 0 Observam ca termenii liberi sunt pozitivi şi exista deja o coloană a matricii unitate ⎛⎜ 10 ⎞⎟ ⎝ ⎠ corespunzătoare variabilei x3. Pentru a obţine şi a doua coloană ⎛⎜ 10 ⎞⎟ , vom aplica metoda ⎝ ⎠ celor doua faze, care presupune introducerea unei variabile artificiale x5 cu coeficientul 1 în a doua ecuaţie şi rezolvarea unei probleme auxiliare: (min)g = x 5 3 x ⎧ 1 + x 2 + x 3 = 10 ⎪ ⎨x 1 + 4x 2 − x 4 + x 5 = 2 ⎪⎩ x 1 , x 2 , x 3 , x 4 , x 5 ≥ 0 Problema auxiliara se rezolva cu algoritmul simplex primal, luind ca variabile de baza variabilele x3 si x5. Se obtin astfel în faza intai urmatoarele tabele simplex: cB 0 1 xB x3 x5 xB 10 2 2 cB xB 0 x3 0 x2 xB 19 2 1 2 0 B B B B B B 0 x1 3 1 1 1 0 x2 1 4 4 4 0 x3 1 0 0 0 0 x4 0 -1 -1 -1 1 X5 0 1 1 0 0 x1 11 4 1 4 0 0 x2 0 x3 0 1 1 0 0 0 0 x4 1 4 1 − 4 0 1 x5 1 − 4 1 4 -1 Constatam ca s-a obţinut optimul egal cu 0, ceea ce impune trecerea la faza a doua, în care soluţia optima de bază (x3,x2) astfel obtinuta va fi soluţie iniţială pentru algoritmul simplex aplicat problemei date. Practic, din tabelul optim al fazei intai, eliminăm coloana variabilei artificiale x5 si înlocuim valorile coeficienţilor funcţiei obiectiv, ceea ce duce la recalcularea liniei de jos a tabelului. Vom obtine astfel urmatorul tabel simplex: 2 3 0 0 cB xB xB x1 x2 x3 x4 19 11 1 0 1 0 x3 2 4 4 1 1 1 − 1 0 3 x2 2 4 4 3 5 3 − − 0 0 2 4 4 B B B In continuare, se aplica simplex primal, algoritm tabele: 2 cB xB xB x1 0 x3 4 0 2 x1 2 1 4 0 B B B cB xB 0 x4 xB 4 3 10 3 20 3 B 2 B x1 B 2 x1 0 1 0 ce conduce la urmatoarea succesiune de 3 x2 -11 4 5 0 x3 1 0 0 0 x4 3 -1 -2 3 x2 11 − 3 1 3 7 − 3 0 x3 1 3 1 3 2 3 0 x4 1 0 0 cB 0 3 B xB x4 x2 B xB 38 10 30 B 2 x1 11 3 7 3 x2 0 1 0 0 x3 4 1 3 0 x4 1 0 0 Soluţia optimă a problemei date este deci x1 = 0 şi x2 = 10 care dă un maxim al funcţiei egal cu 30. Exercitii. Sa se aplice metoda celor doua faze pentru rezolvarea urmatoarelor PPL: (max ) f = 2x 1 + x 2 ⎧3x 1 − x 2 ≤ 11 , ⎪ ⎨ x 1 + 4x 2 ≥ 2 ⎪ x ,x ≥ 0 ⎩ 1 2 [min] f = 5 x1 + 4 x 2 + 3x3 x1 + 2 x2 + 2 x3 ≤ 10 2 x1 + x2 ≥5 2 x2 − x3 = 3 x1, x2 , x3 ≥ 0 .