Sunteți pe pagina 1din 11

Algoritmul simplex

Unitatea de învăţare nr. 12


Algoritmul simplex.

Cuprins Pagina

Obiectivele unităţii de învăţare nr. 12 2


12.1 Algoritmul simplex primal 2
12.2 Metoda celor două faze 5
12.3 Lucrare de laborator 8
Lucrare de verificare – unitatea de învăţare nr. 12 10
Răspunsuri şi comentarii la întrebările din testele de autoevaluare 10
Bibliografie – unitatea de învăţare nr. 12 11

1
METODE NUMERICE – Curs şi aplicaţii
Algoritmul simplex

OBIECTIVELE unităţii de învăţare nr. 12


Principalele obiective ale Unităţii de învăţare nr. 12 sunt:
• Determinarea unei baze admisibile
• Aplicarea algoritmului simplex pentru determinarea programului
optim de bază şi a optimului funcţiei obiectiv şi verificarea
rezultatelor
• Interpretarea rezultatelor din punct de vedere economic şi luarea
deciziei optime în plan economic

12.1 Algoritmul simplex primal

Pentru rezolvarea problemelor de programare liniară s-a impus algoritmul simplex datorat
matematicianului american G.B. DANTZIG (1951). Metoda simplex garantează convergenţa
procesului iterativ în sensul că o bază admisibilă cercetată la un moment dat nu mai revine în iteraţiile
ulterioare. Cum numărul bazelor este finit, urmează ca într-un număr finit de paşi să ajungem fie la
soluţia optimă fie la concluzia că programul are optim infinit.
Metoda permite explorarea sistematică a mulţimii programelor prin trecerea de la un program
de bază la alt program de bază vecin care este cel puţin la fel de bun ca programul iniţial şi pentru
aceasta trebuie să parcurgem etapele:

max(min) ( =
z cT ⋅ x )

1- Trecem problema de programare liniară în forma standard: A⋅ x =b , unde
x ≥ 0

 b1   c1 
   
b  c2  ∈ R n ⇒ cT =
A ∈ M m ,n ( R ) , A = (aij )1≤i ≤ m =, b  2  ∈ Rm , c= ( c1 c2 ... cn ) , =
z cT ⋅ x ,
1≤ j ≤ n  ...   ... 
   
 bm   cn 
 x1 
 
x
=x  2  ∈ Rn .
 ... 
 
 xn 

2- Se determina B-baza primal admisibilă


B este o baza a lui A formată din m coloane ale lui =
A, A (a1a 2 ...a n=
) ⇒ B (a i1 a i2 ...a im ) cu
det B ≠ 0=
,B {i / a ∈ B=
i
} , S {i / a ∈ S} ,
i
A = ( BS ) şi B −1b ≥ 0 (primal admisibilă).
Observaţie: Iniţial se pleacă cu baza formată din vectori unitari, B = I m , şi în acest pas coordonatele
−1 B
vectorilor a j coincid cu componentele lor pe coloanele A şi ,în plus,=
x B= b b.

3- Se formează tabelul simplex în care se trec:

2
METODE NUMERICE – Curs şi aplicaţii
Algoritmul simplex

Variabilele Val. var. din c1 c2 c3 ....... cn


B
cB din baza x B baza x x1 x2 x3 ....... xn
c1 xi1
c2 xi2
. B
x = B −1b y1B y2B y3B ....... ynB
.
.
xim
c im

z
B
z1B − c1 z2B − c2 z3B − c3 ....... znB − cn

B
a) x = B −1b - soluţia sistemului în care am făcut x S = 0 (ceea ce nu face parte din bază);
∑c x
B B B
b)=
z c=
T
Bx i i ;
i∈B

c) y Bj B −1a j , j ∈ B ∪ S, iar când B = I m , y Bj sunt chiar coeficienţii din sistem;


=
 z Bj −= c j ∑ ci yijB − c j , j ∈ S

d)  i∈Β = cBT y Bj − c j , j = 1, n .
 z Bj − c=j 0, j ∈ Β

4- TESTUL DE OPTIMALITATE

Daca z Bj − c j ≥ 0 în problema de max, respectiv ≤ 0 în problema de min, pentru orice

( B
)
j = 1, n , atunci problema are optim finit. Soluţia optimă este x = B −1b, 0 , iar valoarea optimă a
B B
funcţiei obiectiv este z = cBT x . În caz contrar se continuă algoritmul.

5- TESTUL PENTRU INFINITITUDINEA SOLUŢIEI

Dacă există j pentru care z Bj − c j < 0 în problema de max, respectiv > 0 în problema de
min, şi yij ≤ 0, ( ∀ ) i ∈ Β , atunci problema are optim infinit. În caz contrar se continuă algoritmul.

6- CRITERIUL DE ÎMBUNĂTĂŢIRE A SOLUŢIEI

Dacă există j astfel încât z Bj − c j < 0 în problema de max, respectiv > 0 în problema de
min, şi yij > 0 , atunci soluţia se îmbunătăţeşte astfel:

a) CRITERIUL DE INTRARE ÎN BAZĂ

3
METODE NUMERICE – Curs şi aplicaţii
Algoritmul simplex

Intră în bază a k , cu k stabilit astfel încât zkB −=


ck min( z Bj − c j ) pentru problema de max,
j

respectiv zkB −
= ck max( z Bj − c j ) pentru problema de min.
j

b) CRITERIUL DE IEŞIRE DIN BAZĂ

B B
xl x
Iese din bază a , cu l stabilit astfel încât
l
B
= min i B indiferent dacă este o cerinţă de
ylk iy∈Β>0 yik
ik

max sau de min.

( )
7. - Se construieşte o nouă baza B = B \ {a l }  {a k } şi reluăm algoritmul corespunzător noii baze cu
un nou tabel simplex. Trecerea la noua bază se face astfel:
a) Linia pivotului se împarte la pivot ( ylkB );
b) Coloana pivotului se completează cu 0, doar pe locul pivotului rămânând valoarea 1;
a ... p
c) Toate celelalte elemente se determina cu regula dreptunghiului . .,
x ... b
xp − ab ab
x→ =
x− .
p p

Observaţii: i) Orice coloană a tabelului care conţine 0 pe linia pivotului rămâne neschimbată;
ii) Orice linie a tabelului care conţine 0 pe coloana pivotului rămâne neschimbată.

max(3 x1 + 4 x2 )
 x + 4 x ≤ 28
 1 2

Exemplu: 3 x1 + x2 ≤ 21 .
 x + x ≤ 10
 1 2
 x1 , x2 ≥ 0
max(3 x1 + 4 x2 )

 x1 + 4 x2 + x3 =28

Aducem problema la forma standard: 3 x1 + x2 + x4 = 21 , x3 , x4 , x5 variabile ecart. Scriem matricea
x + x + x = 10
 1 2 5
 xi ≥ 0, i =
1,5
1 4 1 0 0 1 0 0  28 
     
sistemului, A =  3 1 0 1 0  de unde avem: B= I=
3 0 1 0 şi cum=b  21  > 0 ,
1 1 0 0 1 0 0 1  10 
     
B −1b= b > 0 , deci avem bază primal admisibilă.

4
METODE NUMERICE – Curs şi aplicaţii
Algoritmul simplex

Se formează tabelul simplex :


cB x B x B 3 4 0 0 0 Fiind o problemă de max, din testul de optim 4,
x1 x2 ↓ x3 x4 x5 toate valorile de pe ultima linie trebuie să fie ≥ 0 ,
alegem min{-3,-4}=-4 ceea ce înseamnă că x2
0 x3 28 1 4 1 0 0 intră în bază. Indiferent de cerinţa problemei, se
← alege min{28/4;21/3;10/1}=7, adică x3 iese din
0 x4 21 3 1 0 1 0 bază şi obţinem pivotul 4. Aplicăm cele trei
0 x5 10 1 1 0 0 1 reguli ale etapei 7 şi obţinem noul tabel.
În ultima linie a tabelului doi vedem că mai există
0 -3 -4 0 0 0
o valoare care nu respectă testul de optim 4 şi
4 x2 7 1/4 1 1/4 0 0
trebuie să repetăm etapele. -2 fiind singura
0 x4 14 11/4 0 -1/4 1 0 valoare negativă, x1 intră în noua bază şi
0 x5 3 3/4 0 -1/4 0 1 7 14 3
min{ , , }=4, adică x5 iese din
28 -2 0 1 0 0 1/ 4 11/ 4 3 / 4
x2 6 0 1 1/3 0 -1/3 bază, obţinându-se noul pivot 3/4. Aplicăm din
nou cele trei reguli ale pivotului şi obţinem
x4 3 0 0 2/3 1 -11/3
următorul tabel.
x1 4 1 0 -1/3 0 4/3 Se observă din ultima linie a tabelului că
36 0 0 1/3 0 8/3 toate valorile respectă testul de optim 4, deci
valoarea maximă este 36 şi se obţine pentru
(4,6,0,3,0).

12.2 Metoda celor două faze

Determinarea unei baze primal admisibile la etapa 2 a algoritmului simplex constituie uneori o
parte importantă a rezolvării modelului, pentru care există metode speciale ca metoda celor doua faze
sau metoda bazei artificiale.
Nu se aleg la întâmplare m coloane din cele n ale matricei A, pentru că ele ar putea fi liniar
dependente sau soluţia de bază corespunzătoare ar putea fi neadmisibilă. În cazul în care nu există o
bază iniţială se construieşte o problemă auxiliară derivată din problema dată şi care va furniza o bază
de început pentru problema dată.
max(min)cT x

Fie problema de programare liniară în forma standard (PPL1)  Ax = b .
 x≥0

- presupunem b ≥ 0 , în caz contrar se înmulţeşte cu -1 ecuaţia al cărei termen liber este negativ;
- scriem coloanele matricei A şi se pun în evidenţă vectorii unitate ei = (0,...,1,...0)T care se
găsesc printre coloanele ei;
- dacă există toţi cei m vectori unitari ei , i = 1, m , atunci aceştia formează o baza B = I m care este
şi primal admisibilă pentru că B −1b= b ≥ 0 ;
- dacă nu există toţi cei m vectori unitari, vom introduce unele variabile suplimentare numite şi
variabile artificiale, totdeauna cu coeficientul 1, în anumite restricţii, convenabil alese, până
5
METODE NUMERICE – Curs şi aplicaţii
Algoritmul simplex

când matricea sistemului de restricţii conţine m vectori unitari, obţinându-se astfel un model
extins.

Observaţie: Pentru a putea extrage din soluţia modelului extins o soluţie pentru modelul dat trebuie
ca, în această soluţie, variabilele artificiale să ia valoarea zero. Astfel, vom căuta să forţăm
anularea variabilelor artificiale într-o prima fază de rezolvare în care considerăm drept funcţie
obiectiv, suma tuturor variabilelor artificiale, care trebuie să devină minimă: (PPL2)
min( xna+1 + xna+ 2 + ...xna+ m )

 Ax + x =
a
b

 x ≥ 0, x a ≥ 0

unde xna+i , i = 1, m sunt variabile artificiale.


- se aplică algoritmul simplex primal modelului extins, luând x= 0, x a= b ≥ 0 , iar dacă se ajunge
la o soluţie optimă a modelului extins, fără ca toate variabilele artificiale să aibă valori nule în
aceasta soluţie, atunci prima problema este imposibilă.
Concluzie:
cazul I: min( xna+1 + xna+ 2 + ...xna+ m ) >0 , atunci (PPL1) nu are soluţie;
cazul II: min( xna+1 + xna+ 2 + ...xna+ m ) =0, adică după prima fază valoarea funcţiei obiectiv este nulă,
atunci ultima bază (cea optimă pentru PPL2) se va folosi ca bază de început pentru PPL1.
Putem avea una din situaţiile:
a) În baza există variabile artificiale (evident cu valoarea zero), atunci:
i) ele pot fi eliminate printr-o noua iteraţie luând pivot orice element nenul de pe linia
corespunzătoare acelei variabile artificiale;
ii) nu pot fi eliminate neavând pivot, atunci se suprimă liniile din tabel corespunzătoare
acestor variabile artificiale.
b) Nu există variabile artificiale în baza optimă şi atunci se trece la faza a doua, şi anume, la
rezolvarea PPL1 pornind de la ultimul tabel simplex în care se modifică coeficienţii funcţiei
obiectiv.
Observaţii:
1) Deoarece valorile variabilelor artificiale trebuie să fie nule, orice variabilă artificială care a ieşit
din bază nu va mai fi cercetată pentru o eventuală introducere în bază;
2) După un număr de iteraţii şi încheierea fazei întâi se vor calcula elementele liniei z Bj − c j
corespunzătoare funcţiei obiectiv a fazei a doua ,deci pentru PPL1, după care se continuă cu
iteraţiile.
max(5 x1 + 5 x2 + 4 x3 )

 x1 + x2 + x3 + x4 = 60

Exemplu: 2 x1 + x2 + 3 x3 − x5 =90 ,
x + 2x − x = 40
 2 3 6

 xi ≥ 0, i =1, 6

6
METODE NUMERICE – Curs şi aplicaţii
Algoritmul simplex

 x1 x2 x3 x4 x5 x6 
1 1 1 1 0 0 
= A  2 1 3 0 −1 0 
 
 0 1 2 0 0 −1
 
Avem una din coloanele matricei unitate, deci trebuie să le construim pe celelalte două, introducând
două variabile artificiale x7a , x8a . Trecem la faza întâi cu problema de minim:
min( x7a + x8a )
  x1 x2 x3 x4 x5 x6 x7 x8 
a a

 x1 + x2 + x3 + x4 = 60 1 1 1 1 0 0 0 0
  2 1 3 0 −1 0 1 0 
Faza I) 2 x1 + x2 + 3 x3 − x5 + x7 =
a
=
90 , A
 
  0 1 2 0 0 −1 0 1 
 x2 + 2 x3 − x6 + x8 =
a
40
x =  
 i ≥ 0, i 1, 6, x7 , x8 ≥ 0
a a

Se observă coloanele matricei unitate de ordin trei deci putem să trecem la aplicarea algoritmului
simplex pentru aceasta primă faza, în cazul problemei de minim.
cB xB xB 5 5 4 0 0 0 0 0
0 0 0 0 0 0 1 1
a
x1 x2 x3 x4 x5 x6 x7 x8a
0 x4 60 1 1 1 1 0 0 0 0
1 x7a 90 2 1 3 0 -1 0 1 0
1 x8a 40 0 1 2 0 0 -1 0 1
130 2 2 5 0 -1 -1 0 0
0 x4 40 1 1/2 0 1 0 1/2 0 -1/2
1 x7a 30 2 -1/2 0 0 -1 3/2 1 -3/2
0 x3 20 0 1/2 1 0 0 -1/2 0 1/2
30 2 -1/2 0 0 -1 3/2 0 -5/2
0 0 x4 25 0 3/4 0 1 1/2 -1/4 -1/2 1/4
5 0 x1 15 1 -1/4 0 0 -1/2 3/4 1/2 -3/4
4 0 x3 20 0 1/2 1 0 0 -1/2 0 1/2
0 0 0 0 0 0 0 -1 -2
FAZA 155 0 -17/4 0 0 -5/2 7/4 - -
II
5 x2 100/3 0 1 0 4/3 2/3 -1/3 - -
5 x1 70/3 1 0 0 1/3 -1/3 2/3 - -
4 x3 10/3 0 0 1 -2/3 -1/3 -1/3 - -
890/3 0 0 0 17/3 1/3 1/3 - -

7
METODE NUMERICE – Curs şi aplicaţii
Algoritmul simplex

12.3 Lucrare de laborator

Pentru rezolvarea problemelor de programare liniară cu ajutorului Matlab-ului folosim comanda


[x,fval]=linprog(f,A,b), unde f este un vector linie ce conţine coeficienţii funcţiei obiectiv, A este
matricea coeficienţilor variabilelor, iar b este vectorul coloană a termenilor liberi. Comanda rezolvă
min ( f = C ⋅ x )

doar problemele de tipul  A ⋅ x ≤ b .
x ≥ 0

max(3 x1 + 4 x2 )
 x + 4 x ≤ 28
 1 2

Exemplu: 3 x1 + x2 ≤ 21 .
 x + x ≤ 10
 1 2
 x1 , x2 ≥ 0
Determinăm min(− 3x1 + 4 x2 ) .
>> f=[-3; -4]
f=
-3
-4
>> a=[1 4;3 1; 1 1]
a=
1 4
3 1
1 1
>> b=[28;21;10]
b=
28
21
10
>>lb=zeros(2,1)
lb=
0
0
>> [x,fval]=linprog(f,a,b,lb)
Optimization terminated.
x=
4.0000
6.0000
fval =
-36.0000.
Astfel s-a obţinut soluţia x1 = 4 , x2 = 6 şi max f = 36 .
min ( f = C ⋅ x )
A ⋅ x ≤ b

Pentru problemele de tipul  , folosim comanda: [x,fval]=linprog(f,A,b,Aeq,beq,lb,ub).
 Aeq ⋅ x = beq
lb ≤ x ≤ ub

8
METODE NUMERICE – Curs şi aplicaţii
Algoritmul simplex

Exemplu: max(x1 + 3x2 − 2 x3 )


2 x1 + 2 x2 − x3 = 3

 x1 + 3 x2 − 2 x3 ≤ 5
 .
− x1 + 4 x2 + 3 x3 ≥ 7
 x1 ≥ 0, x2 ≥ 0, x3 ≥ 0
Rescriem problema astfel încât să putem extrage vectorii şi matricele necesare comenzii:
min (− x1 − 3 x2 + 2 x3 )
2 x1 + 2 x2 − x3 = 3

 x1 + 3x2 − 2 x3 ≤ 5
 .
 x1 − 4 x2 − 3x3 ≤ −7
 x1 ≥ 0, x2 ≥ 0, x3 ≥ 0
>> f=[-1; -3; 2]
f=
-1
-3
2
>> a=[1 3 -2;1 -4 -3]
a=
1 3 -2
1 -4 -3
>> b=[5;-7]
b=
5
-7
>> aeq=[2 2 -1]
aeq =
2 2 -1
>> beq=[3]
beq =
3
>> lb=zeros(3,1)
lb =
0
0
0
>> [x,fval]=linprog(f,a,b,aeq,beq,lb)
Optimization terminated.
x=
0.0000
1.6000
0.2000
fval =
-4.4000.
Soluţia obţinută este: x1 = 0 , x2 = 1.6 , x3 = 0.2 şi max f = 4.4

9
METODE NUMERICE – Curs şi aplicaţii
Algoritmul simplex

De reţinut!
Etapele celor două metode.

Test de autoevaluare
Să se rezolve problemele:
a) max(x2 − x1 ) b) min(3x1 − x2 + x3 )
3 x1 = x2 + 5 5 x1 − x2 + x3 ≥ 5
 
 x1 + x2 ≤ 2  x1 + 2 x2 + 3 x3 ≤ 7
 x ≥ 0, x ≥ 0  x ≥ 0, x ≥ 0, x ≥ 0
 1 2  1 2 3

Lucrare de verificare la Unitatea de învăţare nr. 12


Să se problema de programare liniară:
max(2 x1 + 5 x2 − 3 x3 )
2 x1 + x2 − x3 ≥ 3

 x1 + 3 x2 − 2 x3 ≤ 5

− x1 + 4 x2 + 3 x3 ≤ 7
 x1 ≥ 0, x2 ≥ 0, x3 ≥ 0

Răspunsuri şi comentarii la întrebările din testele de


autoevaluare
7 1 3
a) x1 = , x2 = , max f = −
4 4 2
17 30 21
b) x1 = , x2 = , x3 = 0 , min f =
11 11 11

Recapitulare
1. Trecem problema de programare liniară în forma standard
2. Se determina B-baza primal admisibilă
3. Se formează tabelul simplex
4. Testul de optimalitate
5. Testul pentru infinitudinea soluţiei
6. Criteriul de îmbunătăţire a soluţiei
7. Se construieşte o nouă bază şi reluăm algoritmul corespunzător
noii baze cu un nou tabel simplex

10
METODE NUMERICE – Curs şi aplicaţii
Algoritmul simplex

Concluzii
Pentru rezolvarea modelelor liniare, au apărut, începând cu 1948, mai multe
metode, dintre care amintim: metoda simplex cu variantele sale, metoda
Kantorovici, metoda relaxării. Dintre toate metodele apărute în literatura de
specialitate, cea mai răspândită este cea elaborată de G. B. Dantzig.
Algoritmul propus de Dantzig permite determinarea unei soluţii admisibile
de bază optime, dacă există, prin examinarea parţială dirijată a mulţimii
soluţiilor admisibile de bază; mai precis, vor fi testate o parte din soluţiile
admisibile de bază. În mod empiric, pe baza unor experienţe de calcul efectuate
timp de 10 ani, s-a stabilit că soluţia optimă, dacă există, se obţine după cel
mult 3m iteraţii (m = rangA). Fiecare dintre aceste noi iteraţii constă în găsirea
unei noi soluţii admisibile de bază căreia îi corespunde o valoare mai bună a
funcţiei obiectiv decât în situaţia precedentă.

Bibliografie

1. Constantinescu Eliodor, Mihai Bogdan, Matlab. Caiet de laborator, Editura


Crizon, Constanţa, 2008
2. Pelican Elena, Analiză numerică. Complemente, exerciţii şi probleme.
Programe de calcul, Editura MatrixRom, Bucureşti, 2006

11
METODE NUMERICE – Curs şi aplicaţii

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