Sunteți pe pagina 1din 21

Capitolul I

Programare liniară
Modelul matematic al problemei
de optimizare (programare) liniară.
Modelul matematic al problemei de
optimizare (programare) liniară
Să presupunem că o întreprindere confecţionează un număr de n produse
pentru care se folosesc un număr de m resurse (materii prime, resurse financiare,
etc.) limitate superior de cantităţile bi, 1  i  m. Notăm cu xj, 1  j  n numărul
(cantitatea) produsului de tipul j (necunoscut). Notăm cu aij cantitatea din
resursa i, 1  i  m necesară producerii unei unităţi de produs de tipul j, 1  j  n.
Ca atare cantitatea totală de resursă i care intră încompunerea tuturor produselor
va fi :
ai1x1+ ai2x2+....+ ainxn, 1  i  m.
Fiind limitată cantitatea de resursă i putem serie:
ai1x1+ ai2x2+....+ ainxn  bi, 1  i  m.
xj fiind numărul total de produse de tipul j are loc
xj  0, 1  j  n.
Notând cu cj, beneficiul unitar adus de produsul de tipul j, 1  j  n,
beneficiul total pentru toate cele n produse va fi:
n
cj xj
j 1
Problema care se pune este de a determina ce cantitate xj trebuie produsă din
fiecare produs j, 1  j  n astfel încât beneficiul total să fie maxim.
Problema de programare liniară

Definiţie. Se numeşte problemă de optimizare (programare) liniară cu restricţii


un sistem de forma:
n

max(min)z   c j x j
 j 1
 n
 a ij x j  bi , 1  i  m
 j 1
 x  0, 1  j  n
 j

Forme ale problemelor
de programare liniară
max(min) z  c T x

• forma matriceală:  Ax  b
x  0

max(min) z  c T x

• forma standard:  Ax  b
x  0

min z  c T x max z  c T x
• forma canonică:  
 Ax  b  Ax  b
x  0 x  0
 
Trecerea unei probleme de la o formă la alta
Transformări echivalente
1) Restricţiile date sub formă de inegalităţi se pot transforma în egalităţi:
Ax  b sau A x  b
se transformă în ecuaţii prin aduarea sau scăderea unor variabile x(e) numite
variabile ecart obţinând
Ax + x(e) =b sau Ax - x(e) =b, unde x(e)  0;
Inecuaţia îşi schimbă semnul dacă o înmulţim cu -1.
2) O ecuaţie se poate transforma în două inegalităţi echivalente cu ea astfel:
Ax = b este echivalentă cu inecuaţiile Ax  b şi A x  b.
3) O variabilă x supusă condiţiei de nepozitivitate (x  0) se poate
transforma în una supusă condiţiei de nenegativitate făcând substituţia
x’ = -x.
4) O variabilă x asupra căreia nu se pun condiţii de semn se poate înlocui cu
două variabile nenegative făcând substituţia
x = x '- x ".
5) Are loc egalitatea: min z = - max (-z)
Exemplu

Să se aducă la forma standard şi la forma canonică următoarea problemă


de programare liniară:
min z  x1  x2  3x3
x  2x  8
 1 2

 x1  3x2  2
 2 x  x  2 x  1
 1 2 3
 x1  0, x 2 oarecare, x 3  0
Exemplu - Forma standard
- variabila x2 fiind oarecare se înlocuieşte cu diferenţa a două variabile
nenegative: x2=x4-x5 ;
- x3 fiind negativă facem substituţia x3=-x6 ;
- se introduc variabilele ecart x7, x8 pentru transformarea inegalităţilor în
egalităţi. Obţinem forma standard a sistemului dat:
min z  x1  x4  x5  3 x6
 x  2x  2x  8
 1 4 5

 x1  3 x4  3x5  x7  2 .
2 x  x  x  2 x  x8  1
 1 4 5 6
 xi  0, i  1, 4, ...,8
Exemplu - Forma canonică
Forma canonică se obţine transformând prima ecuaţie în două inecuaţii de
sens contrar; pentru ca toate inegalităţile să fie concordante înmulţim pe cele
care au semnul ,,  " cu -1. Se obţine următoarea formă canonică:
min z  x1  x4  x5  3x6
 x  2x  2x  8
 1 4 5
 x1  2 x4  2 x5  8
 .
 x1  3x4  3x5  2
 2 x1  x4  x5  2 x6  1

 xi  0, i  1, 2, ...,6
Algoritmul simplex. Noţiuni fundamentale
Fie o problemă de programare liniară în forma standard:
minz  cT x

Ax  b (1)
x  0

Definiţie. Se numeşte soluţie a problemei, un vector x = (x1,...,xn) care
satisface relaţia Ax=b.
Definiţie. Soluţia x = (x1,...,xn) se numeşte soluţie de bază dacă vectorii
corespunzători componentelor xi din matricea A a sistemului sunt liniar
independenţi.
Definiţie. Se numeşte bază a sistemului de vectori A orice submulţime
formată din m vectori liniar independenţi dintre vectorii a1, a2,…,an ai
matricei A.
Fie o bază B a sistemului Ax=b. Notăm cu JB={i: ai B} şi JR={j: aj  B}.
Definiţie. Vectorii ai se numesc vectori bazici, iar vectorii aj se numesc
vectori nebazici.
Definiţie. O soluţie se numeşte posibilă dacă are toate componentele
nenegative.
Definiţie. O soluţie se numeşte admisibilă sau program dacă satisface
condiţiile Ax=b şi x  0.
Algoritmul simplex. Noţiuni fundamentale

Mulţimea programelor problemei (1) este deci:


P={x  Rn/ Ax=b, x  0}.
Observăm că o soluţie este admisibilă dacă este soluţie de bază şi posibilă.
Mulţimea P va fi deci intersecţia unui număr finit de semispaţii din Rn,
fiind aşadar un tronson.
Fie z* = min{cTx/ x P}. Convenim să spunem că : z* = +  dacă P=  .
Dacă z* = +  spunem că problema (l) are optim infinit.
Un program x*  P al problemei (1) pentru care are loc cTx*= z* se numeşte
soluţie optimă sau program optim. Deci x* P este soluţie optimă dacă şi numai
dacă cTx*  cTx, pentru orice x P.
Algoritmul simplex primal-justificare
Fie o problemă de programare liniară dată sub forma standard.
min(max) z  c T x

 Ax  b , (1)
x  0

unde A este o matrice m x n, pentru care avem rang A=m, m  n şi fie B o bază
 
oarecare, B= a j1 , a j2 , ..., a jm . Notăm xB variabilele corespunzătoare vectorilor
bazici, cu xR variabilele corespunzătoare vectorilor care formează matricea A ,
cu cB coeficienţii din funcţia obiectiv corespunzători variabilelor din xB şi cR
coeficienţii celorlalte variabile şi problema (l) devine:
min(max) z  c B x B  c R x R
 B R R
 Bx  A x b (2)
 B R
 x  0 , x 0
Algoritmul simplex primal-justificare
Forma explicită a soluţiei de bază xB din următoarele consideraţii:
B-1B xB+ B-1AR xR= B-1b; (3)
R B -1
Dacă x =0, rezultă că x = B b.
Solutia de bază este admisibilă dacă este îndeplinită condiţia:
xB= B-1b  0 . (4)
Definiţie. O bază B care verifică (4) se numeşte bază primal admisibilă.
Valoarea corespunzătoare funcţiei obiectiv pentru soluţia admisibilă
găsită va fi:
z  c B x B = cBB-1b.
Exprimând funcţia obiectiv cu ajutorul variabilelor secundare xR şi având
în vedere că din (3) obţinem:
xB= B-1b- B-1AR xR (5)
B
şi notând x = B-1b şi y Bj = B-1aj, unde aj este coloana j a matricei A (j  JR),
B
B
atunci egalitatea (5) devine: x = x -  j xj .
y B

jJ R
Algoritmul simplex primal-justificare

Deci funcţia obiectiv exprimată cu ajutorul variabilelor secundare devine:

m  B 
z  c x =  c j x j =  ci xi +  c j x j =  ci  xi 
T
 yijB x j + c j x j =

j 1 iJ B jJ R iJ B  jJ R  jJ R
 
=  ci xi -    ci yij  ci x j
B B

iJ B jJ R  iJ B 


sau prescurtat
B
z= z   (z
j J R
B
j  c j )x j . (6)
Algoritmul simplex primal-justificare

Considerând că se cere minimizarea funcţiei obiectiv vom da cateva explicaţii


care vor justifica algoritmul folosit:
- dacă z Bj  c j  0, pentru orice j JR din relaţia (6) rezultă că soluţia
admisibilă este optimă; acest lucru are loc deoarece cum xj 0 (fiind soluţie
admisibilă) rezultă
 j j j
( z B
 c ) x  0 deci z 0
=z-  j  c j )x j  z ,
( z B

jJ R jJ R
prin urmare nu s-a obţinut un program mai bun.
Algoritmul simplex primal-justificare
- dacă z Bj  c j >0, pentru un anume k  JR , atunci soluţia nu este optimă şi poate
fi îmbunătăţită dacă xk ia valori pozitive adică se obţine un program
z0=z- ( z k  ck ) xk0  z
mai bun (funcţia obiectiv are valoare mai mică). Noul program obţinut nu este
însă un program de bază având m+1 componente xi (i  JB) şi xk. Atunci se pune
întrebarea până la ce valoare poate creşte xk. Deoarece valoarea sa influenţează
B
xiB  xi  yijB xk , i  J B
poate creşte până la valoarea
x  x 
 l  l  min  i , yik  0 ,
ylk jJ B  yik 
deoarece altfel xiB devine negativ. Valoarea cu care scade funcţia obiectiv este
xl
( z k  ck ) şi se va alege acel indice care maximizează această descreştere.
ylk
Algoritmul simplex primal

pasul 1: Se alege o bază primal admisibilă B.


B B
pasul 2: Se calculează soluţia de bază x şi valoarea z .
pasul 3: Pentru fiecare j  JR se determină valorile:
a) yijB , i JB astfel încât a j   yijB a i ;
iJ B

b) z Bj  c j , j JR.
Algoritmul simplex primal

pasul 4 : Se cercetează semnele numerelor z j  c j , j  JR. Avem două


posibilităţi:
a) dacă toate diferenţele z j  c j  0, înseamnă că programul este optim şi
algoritmul se opreşte;
b) dacă există cel puţin un indice j  JR astfel încât z Bj  c j >0, atunci pot
să apară două situaţii:
1. există un j  JR astfel încât yij  0, oricare ar fi i  JB. În acest caz
funcţia obiectiv este nemărginită inferior pe P, problema nu are
soluţii şi algoritmul se opreşte;
2. pentru orice j  JR pentru care z Bj  c j >0, există cel puţin un
i JB astfel încât yij >0, caz în care se trece la pasul următor
(soluţia poate fi îmbunătăţită).
Algoritmul simplex primal

pasul 5: Se determină k  JR pentru care zkB  ck = max ( z Bj  c j ) (criteriul de


jJ R
intrare în baza).
pasul 6: Se stabileşte vectorul care urmează să iasă din bază (criteriul de
ieşire din baza):
a) dacă toţi yikB  0 problema are optim infinit şi opreşte aplicarea
algoritmului.
b) dacă există yikB >0 se determină l astfel încât:
xl  xi 
l   min  , yik  0 .
ylk jJ B  yik 
Algoritmul simplex primal
~
pasul 7: Se înlocuieşte în baza B vectorul al cu ak obţinând o nouă bază B şise
reiau operaţiunile pornind de la pasul 2 cu modificarea mărimilor xi , z j  c j ,
yijB după relaţiile:
~ ylj ~
B xl ~
B B xl ~
B y
xk  , y kj  , xi  xi  yik , yij  yij  yik li , i  l
ylk ylk ylk ylk
~
B B xl ~
B yij
z  z  ( zk  ck ) , x j  c j  ( z j  c j )  ( z k  ck )
ylk ylk
Elementul ylk se numeşte pivot.
O regulă simplă de calcul este următoarea:
- elementele situate pe linia pivotului ylk se împart la pivot;
- celelalte se calculează după regula dreptunghiului astfel:
~
B
-elementul yij este diferenţa produselor de pe diagonalele (l) şi
(2)împărţit la pivot:

yij (1) yik -elementul care trebuie înlocuit

ylj (2) ylk -pivot


Algoritmul simplex primal
Problemele se rezolvă într-un tabel numit tabel simplex care are
următoarea structură:
B c1 c2 ..... cl ..... cm cm+1 ...... ck ...... cn i
B cB x a1 a2 ..... al ..... am am+1 ...... ak ...... an
x1 / y1,k
a1
c1 x1 1 0 ..... 0 ..... 0 y1,m+1.... y1,k.... y1,n x2 / y2,k
a2 c2 x2 0 1 ..... 0 ..... 0 y2,m+1.... y2,k.... y2,n
.
. . . . .
.
. . . . .
.
. . . . .
x l / yl , k
al cl xl 1 0 ..... 0 ..... 0 yl,m+1.... yl,k.... yl,n
. . . . . .
. . . . .
.
. . . . .
.
am cm 1 0 ..... 0 ..... 0 ym,m+1.... ym,k.... ym,n x m / y m,k
xm

zj z c1 c2 ..... cl ..... cm zm+1 ..... zk ...... zn -


zj-cj - 0 0 ..... 0 ..... 0 zm+1- cm+1.. zk- ck .. zn- cn -
Algoritmul simplex primal

În cazul în care se urmăreşte maximizarea funcţiei z(x) se poate proceda


în două moduri:
a) se va modifica numai criteriul de intrare în bază şi anume pasul 4
- dacă toate diferenţele z j  c j 0 pentru toţi j JR , atunci programul
este optim şi algoritmul se opreşte;
- dacă există cel puţin un indice j  JR astfel încât z j  c j <0
sedetermină k  JR astfel încât:
zkB  ck = max ( z Bj  c j )
jJ R
b) se transformă funcţia obiectiv în minim ( max z = -min(-z)), se aplică
algoritmul pentru minim, după care se revine la maximizare.

S-ar putea să vă placă și