Sunteți pe pagina 1din 19

Bazele cercetrii operaionale

PROGRAMAREA LINIAR
ALGORITMUL SIMPLEX
Reamintim c presupunem c problema este la forma standard de maxim i c dispunem de
o soluie de baz admisibil.
Pasul 1. Se construiete tabelul simplex corespunztor bazei de care dispunem n ordinea
urmtoare:
1. pe linia a doua se trec toate variabilele ntr-o ordine oarecare;
2. pe prima linie se trec coeficienii funciei obiectiv, fiecare deasupra
variabilei corespunztoare;
3. se construiete matricea A, fiecare coloan fiind format din
coeficienii unei variabile din toate ecuaiile (ordinea n care se parcurg ecuaiile
trebuie s fie aceeai pentru toate variabilele), avnd grij ca, coloanele s fie trecute
n ordinea n care au fost trecute variabilele pe linia 2;
4. se construiete baza B, ordinea coloanelor fiind cea n care apar ele n
matricea A;
5. se calculeaz B
-1
;
6. se calculeaz B
-1
A i se trece n partea central a tabelului;
7. se trec variabilele principale n a doua coloan, n aa fel nct, la
intersecia liniei i coloanei corespunztoare acestei variabile, s se afle valoarea 1.
8. se trec n prima coloan coeficienii corespunztori variabilelor
principale din funcia obiectiv, fiecare n dreptul variabilei corespunztoare;
9. se calculeaz soluia de baz cu formula B
-1
b, avnd grij ca ordinea
n care au fost trecui termenii liberi n vectorul b s fie aceeai cu ordinea n care au
fost parcurse ecuaiile la formarea matricii A;
10. se trec n a treia coloan valorile variabilelor principale din soluia de
baz, fiecare n dreptul variabilei corespunztoare;
11. se calculeaz f(x
B
) nmulind dou cte dou componentele coloanei 1
cu cele din coloana 3 aflate pe aceeai linie i adunnd toate produsele ntre ele
(adic facem produsul scalar dintre c
B
i x
B
);
12. se calculeaz pe rnd fiecare z
j
j = 1,...,n un z
j
obinndu-se nmulind
scalar c
B
cu coloana j din B
-1
A aflat n centrul tabelului (aceast linie se calculeaz
i se trece doar n primul tabel, scopul ei fiind calcularea lui );
13. se calculeaz pe rnd fiecare
j
j = 1,...,n scznd din linia lui z linia
lui c (
j
= z
j
- c
j
)
Pasul 2. Se analizeaz valorile
j
corespunztoare variabilelor secundare (e uor de vzut c
ntotdeauna, cei corespunztori variabilelor principale sunt toi 0, deci neinteresani).
dac toi sunt mai mari sau egali cu 0 atunci soluia actual este cea
optim. Dac exist
j
= 0 n afara bazei, atunci pot aprea dou cazuri:
1) toate elementele din coloana a
j
din B
-1
A sunt mai mici sau
egale cu 0. Atunci toate soluiile de forma x
B
- a
j
sunt soluii optime,
unde > 0 oarecare;
2) exist o component a
ij
a coloanei a
j
strict pozitiv. Atunci
introducnd variabila x
j
n baz n locul variabilei principal x
i
obinem alt
soluie de baz optim.
Dac apar numai cazuri de tipul 2), obinem toate soluiile de baz optime, mulimea
21
Programarea liniar
tuturor soluiilor optime fiind format din toate combinaiile convexe ale acestora.
Dac apare i cazul 1) atunci mulimea soluiilor optime este nemrginit fiind
format din combinaiile convexe ale soluiilor de forma x
B
- a
j
unde x
B
sunt
toate soluiile optime de baz.
dac exist
j
< 0 atunci l alegem pe cel mai negativ:
k
=
j
0
n j 1 m
j
min
<
+
. Variabila x
j
va fi cea care intr n noua baz. Dac minimul este
multiplu atunci alegem, la ntmplare, unul dintre acetia (cei minimi).
Pasul 3. Se analizeaz elementele coloanei a
j
din B
-1
A, corespunztoare variabilei alese la pasul 2.
Dac toate sunt mai mici sau egale cu 0 atunci problema are optim
infinit i algoritmul ia sfrit;
Dac exist componente strict pozitive, pentru acestea se calculeaz
rapoartele
s
=
sj
s
a
x
. Variabila x
i
corespunztoare raportului minim este cea care
va iei din baz. Dac acest minim este multiplu sunt posibile dou cazuri:
1) minimul este strict pozitiv. n acest caz se alege unul dintre
acetia la ntmplare;
2) minimul este 0. Atunci x
i
corespunztori sunt 0, deci soluia
este degenerat i noua soluie este la fel de bun. Aceast situaie poate
duce la ciclarea algoritmului i alegerea la ntmplare nu mai este
suficient, fiind nevoie de o regul de alegere suplimentar care s evite
ciclarea. O metod de alegere se bazeaz pe faptul c, aa cum vom
vedea, ntotdeauna prima baz este matricea unitate i n dreptul ei, n
toate tabelele simplex, se va afla inversa bazei corespunztor fiecruia. n
acest caz, pentru poziiile n care s-a obinut minimul mprim prima
coloan a lui B
-1
la coloana a
j
i alegem minimul dintre aceste rapoarte.
Dac minimul dintre acetia este tot multiplu continum procedeul, pentru
poziiile ce dau noul minim, cu coloana a doua din B
-1
i aa mai departe,
pn minimul rmne unic. Nu este posibil s se epuizeze toate coloanele
lui B
-1
i minimul s rmn multiplu, deoarece, n acest caz, am avea:
j i
j i
j i
j i
2
k 2
1
k 1
a
b
a
b

, pentru toi indicii j


k
ai coloanelor lui B
-1
, i
1
i i
2
fiind doi
din indicii care dau acelai minim pn la sfrit sau altfel scris
j i
j i
j i
j i
2
1
k 2
k 1
a
a
b
b

pentru orice j
k
liniile i
1
i i
2
din B
-1
sunt proporionale, fapt
ce contrazice faptul c B
-1
este inversabil.
Pasul 4. Se calculeaz componentele tabelului simplex corespunztor noii baze pe baza tabelului
actual i folosind urmtoarele reguli:
1. se ncadreaz elementul a
ij
, aflat la intersecia coloanei variabilei care
intr n baz cu linia variabilei care iese din baz, care a fost numit de Danzig
pivot, ntr-un dreptunghi
2. coloana pivotului va avea 1 n dreptul pivotului i 0 n rest (inclusiv

j
);
3. linia pivotului este linia actual mprit la pivot (inclusiv n soluia
de baz);
4. restul elementelor se calculeaz cu regula dreptunghiului (inclusiv
soluia de baz, i f(x
B
)). Regula dreptunghiului se bazeaz pe observaia c n
toate formulele prin care se calculeaz acestea nu apare dect valoarea lor actual,
22
Bazele cercetrii operaionale
pivotul i cele dou elemente care ar completa dreptunghiul ce are poziia de
calculat i pivotul pe diagonal. Regula dreptunghiului se enun literar astfel:
"noua valoare = produsul dintre elementele de pe diagonala pivotului minus
produsul dintre cele aflate pe cealalt diagonal totul mprit la pivot". (pentru
scurtarea timpului de lucru se poate observa c elementele unei linii care are 0 pe
coloana pivotului rmn aceleai i de asemenea elementele unei coloane care are
0 pe linia pivotului)
Operaia de calculare a noului tabel prin regulile de mai sus poart denumirea de
pivotare.
Pasul 5. Se reia algoritmul de la pasul 2.
Exemplu: Fie problema de programare liniar:
( )

'


+ + + + +
+ + + + +
+ + + + +
+ + + + +
1, .. ., 6 i , 0 x
1 1 x 2 x x 2 x 2 x 3x
15 x 2 x 3 x x 3 x 2 2x
8 x x 3 x x x 2 x
x 5 x 3 x 4 x x 2 x 3 m ax
i
6 5 4 3 2 1
6 5 4 3 2 1
6 5 4 3 2 1
6 5 4 3 2 1
f
pentru care tim c baza format din coloanele a
1
, a
2
, a
3
este admisibil. Pentru rezolvare vom aduce
problema la forma standard de maxim introducnd variabilele de abatere x
7
, x
8
, x
9
obinnd:
( )

'


+ + + + + +
+ + + + + +
+ + + + + +
+ + + + +
1 , . . . , 9 i , 0 x
1 1 x x 2 x x 2 x 2 x 3 x
1 5 x x 2 x 3 x x 3 x 2 2 x
8 x x x 3 x x x 2 x
x 5 x 3 x 4 x x 2 x 3 m a x
i
9 6 5 4 3 2 1
8 6 5 4 3 2 1
7 6 5 4 3 2 1
6 5 4 3 2 1
f
Vom aeza n tabelul simplex variabilele n ordinea indicilor i vom avea:
c =

,
_

0
0
0
5
3
4
1
2
3
, A =

,
_

1 0 0 2 1 2 2 1 3
0 1 0 2 3 1 3 2 2
0 0 1 1 3 1 1 2 1
, B =

,
_

2 1 3
3 2 2
1 2 1
, c
B
=

,
_

1
2
3
vom calcula matricea B
-1
=

,
_

7
2
7
5
7
4
7
1
7
1
7
5
7
4
7
3
7
1
i pe baza acesteia soluia de baz x
B
= B
-1
b =
23
Programarea liniar

,
_

3
2
1
i matricea B
-1
A =

,
_




7
2
7
5
7
4
7
2
7
1
7
3
1 0 0
7
1
7
1
7
5
7
1
7
11
7
2
0 1 0
7
4
7
3
7
1
7
3
7
2
7
6
0 0 1
care se trec n tabelul
simplex:
3 2 1 4 3 5 0 0 0
c
B
x
B
x
B
x
1
x
2
x
3
x
4
x
5
x
6
x
7
x
8
x
9
3
2
1
x
1
x
2
x
3
1
2
3
7
2
7
5
7
4
7
2
7
1
7
3
1 0 0
7
1
7
1
7
5
7
1
7
11
7
2
0 1 0
7
4
7
3
7
1
7
3
7
2
7
6
0 0 1



i n final se vor calcula valoarea funciei obiectiv n aceast soluie, z
j
i
j
:
3 2 1 4 3 5 0 0 0
c
B
x
B
x
B
x
1
x
2
x
3
x
4
x
5
x
6
x
7
x
8
x
9
3
2
1
x
1
x
2
x
3
1
2
3
7
2
7
5
7
4
7
2
7
1
7
3
1 0 0
7
1
7
1
7
5
7
1
7
11
7
2
0 1 0
7
4
7
3
7
1
7
3
7
2
7
6
0 0 1



10
7
8
7
6
7
9
7
13
7
17
7
19
1 2 3
7
8
7
6
7
9
7
22
7
4
7
9
0 0 0
Din tabel se observ c exist
j
< 0, acetia fiind
4
,
5
,
6
,
8
iar minimul lor este

6
.
Observaie Dac vom cuta acel
j
care d cea mai bun mbuntire vom avea de gsit
acel
j
dintre cei negativi pentru care se obine

,
_


>

<

ij
i
0 a
3 i 1
j
0
9 j 4
a
min max
ij
j
x
i deci de calculat:
i4
i
0 a
3 i 1
4
a
min
i4
x
>


=

,
_

7
2
7
6
2
,
1
min
7
9
=
2
3
i5
i
0 a
3 i 1
5
a
min
i5
x
>


=

,
_

7
1
7
11
3
,
2
min
7
4
=
11
8
i6
i
0 a
3 i 1
6
a
min
i6
x
>


=

,
_

7
2
7
1
7
3
3
,
2
,
1
min
7
22
=
3
22
24
Bazele cercetrii operaionale
i8
i
0 a
3 i 1
8
a
min
i8
x
>


=

,
_

7
5
3
min
7
6
=
5
18
i n final max (
2
3
,
11
8
,
3
22
,
5
18
) =
3
22
i corespunde tot lui
6
.
n concluzie, soluia actual nu este optim i soluia cea mai bun dintre cele posibile ca
succesoare va avea variabila x
6
printre cele principale.
Analiznd coloana a
6
observm c exist componente strict pozitive (de fapt, n acest caz
sunt chiar toate) i calculm pentru acestea rapoartele
i
obinnd:

1
=
7
3
1
=
3
7
,
2
=
7
1
2
= 14,
3
=
7
2
3
=
2
21

deci minimul corespunde variabilei x
1
i aceasta este cea care va iei din baz. n cest moment
cunoatem noua baz i vom construi tabelul simplex pe baza regulilor de calcul de la pasul 4:
1. pivotul este a
16
=
7
3
4. de exemplu, pentru elementul de pe poziia a
34
avem dreptunghiul:
i noua valoare de pe aceast poziie va fi:
7
3
7
2
7
6
7
3
7
3

,
_


= 1
n final, tabelul corespunztor noii baze va fi:
3 2 1 4 3 5 0 0 0
c
B
x
B
x
B
x
1
x
2
x
3
x
4
x
5
x
6
x
7
x
8
x
9
5
2
1
x
6
x
2
x
3
3
7
3
5
3
7
3
2
1
3
2
0
3
1
1 1 0
3
2
3
1
0
3
2
0
3
5
0 0 1
3
1
3
4
1
3
1
1
3
2
2 0 0
3
7



3
52
3
16
4
3
7
0
3
8
5 0 0
3
22

Continund algoritmul vom gsi tabelele:
3 2 1 4 3 5 0 0 0
c
B
x
B
x
B
x
1
x
2
x
3
x
4
x
5
x
6
x
7
x
8
x
9
25
7
6
7
3

7
3
7
2
Programarea liniar
5
2
0
x
6
x
2
x
8
3
14
3
5
3
7
3
2
1
3
2
0
3
1
1 1 0
3
2
3
1
0
3
2
0
3
5
0 0 1
3
1
3
2
0
3
1
1
3
1
1 1 0
3
5



3
80
3
8
0
3
1
0
3
4
1 4 0
3
14

3 2 1 4 3 5 0 0 0
c
B
x
B
x
B
x
1
x
2
x
3
x
4
x
5
x
6
x
7
x
8
x
9
5
3
0
x
6
x
5
x
8
5
1
2
5
3
1
5
4
0 0 1 1
5
1
5
3
5
1
0
5
2
0 1 0 0
5
3
5
1
5
3
0
5
1
1 0 1 1
5
1
5
8

28
5
2
0
5
1
0 0 1 4
5
4
5
22
Ultimul tabel conine soluia optim, deoarece toi
j
0. Deoarece nu mai exist nici un

j
= 0 n afara celor din baz rezult c soluia optim este unic.
Determinarea unei soluii de baz admisibile de start
Presupunem nc odat c problema este la forma standard.
Algoritmul simplex necesit, pentru pornire, o soluie admisibil de baz. Gsirea acesteia
pur i simplu prin ncercri nu este deloc o sarcin uoar, gndindu-ne c aceasta presupune
gsirea unui minor principal, inversarea acestuia i calcularea soluiei, abia n acest moment putnd
vedea dac aceasta are toate componentele pozitive, aceast cutare putnd dura foarte mult.
Rezolvarea problemei pleac de la observaia c singura baz pentru care calculul de mai sus
se poate face imediat este matricea unitate, caz n care soluia de baz corespunztoare este chiar
vectorul termenilor liberi. Aceasta presupune ca problema s aib toi termenii liberi mai mari sau
egali cu 0 i n matricea A s existe toate coloanele matricii unitate.
Dac toi termenii liberi pot fi fcui mai mari sau egali cu 0 foarte simplu, prin nmulirea
eventual cu 1 a restriciei respective, existena tuturor coloanelor matricii unitate este evident c
este foarte puin probabil i mai greu de obinut.
n acest sens plecm de la observaia c existena unui vector din coloana unitate printre
coloanele matricii A este echivalent cu existena unei variabile care apare doar n ecuaia
corespunztoare lui 1 din acel vector, cu coeficientul 1. Acest lucru poate fi obinut n dou
moduri:
a) ncepnd de la prima ecuaie, cutm o variabil care are coeficientul de
acelai semn cu termenul liber, o scoatem din aceast ecuaie n funcie de celelalte
variabile, o nlocuim n celelalte i repetm procedeul pornind de la a doua ecuaie. Pot
aprea trei cazuri:
1) la un moment dat obinem o ecuaie n care toi coeficienii
variabilelor au semn contrar termenului liber, mcar unul dintre toi fiind diferit de
26
Bazele cercetrii operaionale
0. n acest caz ecuaia nu are evident soluie admisibil(pozitiv) i deci problema
nu are soluie;
2) toi coeficienii variabilelor i termenul liber sunt 0. n acest caz
rezult c aceast ecuaie rezult din cele anterioare i ea va fi eliminat, trecndu-
se la urmtoarea;
3) se epuizeaz toate ecuaiile. n acest moment, variabilele care au fost
scoase din fiecare ecuaie formeaz baza dorit.
Procedeul de mai sus poate prea atractiv, dar presupune introducerea unui algoritm
diferit de simplex, cu efect asupra omogenitii calculelor i a vitezei de lucru. De
asemenea, prin efectuarea calculelor de mai sus, datele problemei nu mai au semnificaia
economic iniial, ne mai putndu-se face interpretri economice.
b) Pentru toi vectorii coloan introducem n ecuaiile corespunztoare cte o
variabil cu coeficientul 1. Vom obine evident un nou sistem de restricii i rmne de
vzut ce legtur este ntre soluiile acestuia i cel iniial. Cele dou sisteme au forma:
A x = b i A x + y = b
Este evident c o soluie a primului sistem este soluie i a celui de-al doilea (lum y = 0)
iar o soluie a celui de-al doilea este soluie i pentru primul doar dac y = 0. Scopul
nostru va fi deci, ca pornind de la soluia iniial a celei de-a doua probleme s ajungem
la o soluie a acesteia n care y = 0. innd cont c n soluiile de baz, variabilele
secundare sunt toate egale cu 0, vom ncerca s scoatem din baz variabilele y. Scopul
algoritmului simplex este ns maximizarea funciei obiectiv, nu scoaterea a uneia sau
alteia din variabile din baz. Pentru a echivala cele dou scopuri putem proceda n dou
feluri:
1) Alegem o nou funcie obiectiv care s-i ating extremul printre
soluiile pozitive chiar pentru y = 0 i n momentul cnd am obinut soluia
respectiv pornim cu aceasta ca soluie iniial algoritmul simplex pentru fosta
problem.
2) Adugm la fosta funcie obiectiv noile variabile cu nite coeficieni
de asemenea natur alei nct aportul variabilelor y la valoarea funciei s fie
contrar scopului dorit (foarte mari pozitivi ntr-o problem de minim i foarte mari
negativi ntr-o problem de maxim).
Vom detalia n continuare cele dou metode:
Algoritmul simplex n dou faze
Dat problema de programare liniar la forma standard de maxim:
( )

'



0 x
b x A
x c max
T
f
n care am aranjat deja ca toi termenii liberi s fie pozitivi (b 0).
Faza 1 Construim problema:
( )

'

0 y x,
b y x A
y min g
pe care o rezolvm cu algoritmul simplex pornind rezolvarea de la baza matrice unitate, putnd
ajunge la dou situaii:
27
Programarea liniar
1) minimul funciei g este strict pozitiv. Aceasta este echivalent cu faptul c
egalitatea Ax + y = b se poate obine doar pentru y > 0 sau altfel spus Ax > b pentru
orice x 0, deci sistemul Ax = b nu are soluii admisibile i n concluzie problema
iniial nu are soluie.
2) minimul funciei g este 0. n acest caz, soluia optim obinut are y = 0,
deci verific Ax = b fiind n concluzie o soluie admisibil de baz a primei probleme.
Faza 2 ncepnd de la soluia gsit la faza 1 se rezolv problema iniial cu algoritmul simplex.
Dezavantajul metodei const n faptul c tabelul simplex final de la faza 1 trebuie modificat
pentru a obine tabelul simplex iniial de la faza 2 (vectorii x, c, c
B
, z, , f(x
B
), se elimin coloanele
corespunztoare lui y) i n plus nu vom mai avea n tabelele simplex ale problemei iniiale inversa
bazei (care se gsea n dreptul coloanelor matricii unitate din prima faz) necesar n anumite
variante ale algoritmului simplex.
Metoda bazei artificiale (metoda penalizrii)
Dat problema de programare liniar la forma standard de maxim:
( )

'



0 x
b x A
x c max
T
f
n care am aranjat deja ca toi termenii liberi s fie pozitivi (b 0).
Construim problema:
( )

'

+

0 y x,
b y x A
My x c max
T
g
n care M este o constant presupus foarte mare (mai mare dect orice constant care ar putea
apare n rezolvarea problemei). Rezolvm problema cu algoritmul simplex pornind rezolvarea de la
baza matrice unitate, putnd ajunge la trei situaii:
1) problema are optim infinit. n acest caz, problema iniial are optim infinit.
2) problema are optim finit i n soluia de baz avem cel puin o variabil din
vectorul y. n acest caz problema iniial nu are soluii admisibile.
3) problema are optim finit i n soluia de baz nu avem nici o variabil din
vectorul y. n acest caz problema iniial are optim finit, soluia optim i maximul
funciei fiind aceleai cu cele ale problemei modificate.
n final vom remarca faptul c variabilele y nu corespund unor mrimi economice ca
celelalte, ele fiind introduse doar ca un artificiu de calcul pentru a putea porni algoritmul simplex.
Din acest motiv ele se numesc variabile artificiale.
28
Bazele cercetrii operaionale
Exemplu Fie problema de programare liniar:
( )

'

+
+
+
0 x , x
2 x 4 x
10 x x 3
x 3 x 2 max
2 1
2 1
2 1
2 1
f
Forma standard a problemei va fi:
( )

'

+
+ +
+
0 x , x , x , x
2 x x 4 x
10 x x x 3
x 3 x 2 max
4 3 2 1
4 2 1
3 2 1
2 1
f
Avem deja termenii liberi i o coloan a matricii unitate
,
_

0
1
corespunztoare variabilei x
3
.
Pentru a obine i a doua coloan
,
_

1
0
vom introduce variabila x
5
cu coeficientul 1 n a doua ecuaie
i n final vom avea de rezolvat problema:
Algoritmul simplex n dou faze Metoda bazei artificiale
( )

'

+ +
+ +

0 x , x , x , x , x
2 x x x 4 x
1 0 x x x 3
x m i n
5 4 3 2 1
5 4 2 1
3 2 1
5
g ( )

'

+ +
+ +
+
0 x , x , x , x , x
2 x x x 4 x
10 x x x 3
Mx x 3 x 2 max
5 4 3 2 1
5 4 2 1
3 2 1
5 2 1
f
Aplicnd algoritmul simplex n dou faze vom obine n prima faz succesiunea de tabele:
0 0 0 0 1
c
B
x
B
x
B
x
1
x
2
x
3
x
4
x
5
0 x
3
10 3 1 1 0 0
1 x
5
2 1 4 0 -1 1
2 1 4 0 -1 1
1 4 0 -1 0
0 0 0 0 1
c
B
x
B
x
B
x
1
x
2
x
3
x
4
x
5
0 x
3
2
19
4
11
0 1
4
1
4
1

0 x
2
2
1
4
1
1 0
4
1

4
1
0 0 0 0 0 -1
Am obinut optimul egal cu 0 n soluia de baz (x
3
,x
2
) care va fi soluia iniial pentru
algoritmul simplex aplicat problemei iniiale n a doua faz. Eliminm din tabel coloana lui x
5
,
nlocuim valorile coeficienilor funciei obiectiv i deci i valoarea acesteia, valorile i obinem
tabelul:
29
Programarea liniar
2 3 0 0
c
B
x
B
x
B
x
1
x
2
x
3
x
4
0 x
3
2
19
4
11
0 1
4
1
3 x
2
2
1
4
1
1 0
4
1

2
3
4
5

0 0
4
3


2 3 0 0
c
B
x
B
x
B
x
1
x
2
x
3
x
4
0 x
3
4 0 -11 1 3
2 x
1
2 1 4 0 -1
4 0 5 0 -2
2 3 0 0
c
B
x
B
x
B
x
1
x
2
x
3
x
4
0 x
4
3
4
0
3
11

3
1
1
2 x
1
3
10
1
3
1
3
1
0
3
20
0
3
7

3
2
0
2 3 0 0
c
B
x
B
x
B
x
1
x
2
x
3
x
4
0 x
4
38 11 0 4 1
3 x
2
10 3 1 1 0
30 7 0 3 0
Soluia optim a primei probleme este deci x
1
= 0 i x
2
= 10 care d un maxim al funciei
egal cu 30. Dac aplicm a doua metod vom obine succesiv tabele:
2 3 0 0 -M
c
B
x
B
x
B
x
1
x
2
x
3
x
4
x
5
0 x
3
10 3 1 1 0 0
-M x
5
2 1 4 0 -1 1
-2M -M -4M 0 M -M
-M-2 -4M-3 0 M 0
2 3 0 0 -M
c
B
x
B
x
B
x
1
x
2
x
3
x
4
x
5
0 x
3
2
19
4
11
0 1
4
1
4
1

3 x
2
2
1
4
1
1 0
4
1

4
1
2
3
4
5

0 0 4
3

M+
4
3

30
Bazele cercetrii operaionale
2 3 0 0 -M
c
B
x
B
x
B
x
1
x
2
x
3
x
4
x
5
0 x
3
4 0 -11 1 3 -3
2 x
1
2 1 4 0 -1 1
4 0 5 0 -2 2+M
2 3 0 0 -M
c
B
x
B
x
B
x
1
x
2
x
3
x
4
x
5
0 x
4
3
4
0
3
11

3
1
1 -1
2 x
1
3
10
1
3
1
3
1
0 0
3
20
0
3
7

3
2
0 M
2 3 0 0 -M
c
B
x
B
x
B
x
1
x
2
x
3
x
4
x
5
0 x
4
38 11 0 4 1 -1
3 x
2
10 3 1 1 0 0
30 7 0 3 0 M
Rezultatul final este evident acelai.
VARIANTE ALE ALGORITMULUI SIMPLEX
1. Algoritmul simplex dual
Pentru expunerea acestui algoritm trebuie introduse noiunile de baz dual admisibil i
soluie dual admisibil de baz. Prin definiie numim:
soluie de baz dual admisibil =
soluie de baz pentru care toi
j

0
baz dual admisibil = baz corespunztoare unei soluii de
baz dual admisibile
Ca i n cazul algoritmului simplex, pentru a putea rezolva problema cu algoritmul simplex
dual trebuie s dispunem deja de o baz iniial dual admisibil. Aceast soluie poate exista ca
urmare a unor calcule anterioare (vezi capitolul cu reoptimizarea) sau, ca i n cazul algoritmului
simplex, poate fi aplicat o procedur prin care s gsim aceast baz. Prezentarea acesteia este mai
complicat dect cea de la algoritmul simplex astfel nct:
dac dispunem de o baz dual admisibil vom rezolva problema cu algoritmul simplex
dual
dac nu dispunem de o baz dual admisibil vom rezolva problema cu algoritmul
simplex.
Pentru a evita orice confuzie, vom numi n continuare algoritmul simplex obinuit algoritm
simplex primal i o baz admisibil baz primal admisibil.
Se observ c o soluie dual admisibil nu este n general primal admisibil i reciproc, iar o
soluie care este simultan primal i dual admisibil este o soluie optim i reciproc.
Presupunem c am adus problema la forma standard de maxim i dispunem de o baz dual
admisibil i dispunem deja de de o baz dual admisibil. Algoritmul simplex dual const n
31
Programarea liniar
urmtorii pai:
Pasul 1. Se construiete tabelul simplex asociat acestei baze, la fel ca i la algoritmul simplex
primal;
Pasul 2. Se analizeaz componentele soluiei:
Dac toate componentele sunt mai mari sau egale cu 0 atunci
soluia este i primal admisibil, deci optim.
Dac exist componente strict negative, variabila corespunztoare
celei mai negative (x
i
= k
m k 1
x min

) este cea care iese din baz. Dac minimul este
multiplu se ia una la ntmplare.
Pasul 3. Se analizeaz linia l
i
corespunztoare variabilei x
i
aleas la pasul 2:
Dac toate componentele a
ij
j = 1,...,n sunt mai mari sau egale cu 0,
atunci am avea o ecuaie cu toi coeficienii necunoscutelor pozitivi i termenul
liber strict negativ, deci problema nu are soluii primal admisibile.
Dac exist componente strict negative, atunci pentru acestea se
gsete acel indice pentru care se obine
ij
j
0 a
a
min
ij

<
(prin

am notat modulul
numrului ). Dac minimul este multiplu alegem unul dintre acetia la
ntmplare. Variabila corespunztoare acestuia este cea care intr n baz.
Pasul 4. Se construiete tabelul corespunztor noii baze aplicnd aceleai reguli ca la algoritmul
simplex primal;
Pasul 5. Se reia algoritmul de la pasul 2
2. Forma secundar
Este evident c modul de organizare al datelor n tabelul simplex nu este unicul mod de a
organiza datele ntr-un tabel. Forma secundar este tocmai o astfel de alternativ. Presupunem i n
acest caz c problema este la forma standard de maxim, c problema este la forma standard i c
dispunem de o soluie iniial de baz care este primal sau dual admisibil.
Pasul 1. Datele problemei vor fi organizate ntr-un tabel de forma:
c
S
c x f x
S
f(x
B
)

S
c
B
x
B
x
B
= B
-
1
b
B
-1
S
c
S
x
S
0 I
n-m
Se observ c singura diferena este c la coloana variabilelor bazei din stnga se adaug
i cele secundare, pe orizontal se las doar variabilele secundare iar n loc de matricea
unitate n dreptul variabilelor principale vom avea matricea unitate n dreptul celor
secundare (dar cu minus), fiind calculat la fel, neglijndu-se cei din dreptul
variabilelor principale, care oricum erau 0.
Pasul 2. + Pasul 3. Se gsesc variabila care iese din baz i cea care intr n baz cu aceleai
reguli ca la algoritmul simplex primal sau, dup caz, ca la cel dual.
32
Bazele cercetrii operaionale
Pasul 4. Se construiete tabelul asociat noii baze aplicnd regulile:
1) Pivotul este acelai ca la tabelul simplex;
2) Linia pivotului are 1 n dreptul pivotului i 0 n rest;
3) Coloana pivotului se mparte la pivotul cu semn schimbat
4) Celelalte elemente se calculeaz cu regula dreptunghiului
Pasul 5. Se reia algoritmul de la pasul 2.
Exemplu Fie problema de programare liniar rezolvat mai sus:
( )

'

+
+
+
0 x , x
2 x 4 x
10 x x 3
x 3 x 2 max
2 1
2 1
2 1
2 1
f
Forma standard a problemei va fi:
( )

'

+
+ +
+
0 x , x , x , x
2 x x 4 x
10 x x x 3
x 3 x 2 max
4 3 2 1
4 2 1
3 2 1
2 1
f
iar dup introducerea variabilelor artificiale obinem:
( )

'

+ +
+ +
+
0 x , x , x , x , x
2 x x x 4 x
10 x x x 3
Mx x 3 x 2 max
5 4 3 2 1
5 4 2 1
3 2 1
5 2 1
f
Tabelul corespunztor va fi:
2 3 0
c
B
x
B
x
B
x
1
x
2
x
4
-2M -M-2 -4M-3 M
2 x
1
0 -1 0 0
3 x
2
0 0 -1 0
0 x
3
10 3 1 0
0 x
4
0 0 0 -1
-M x
5
2 1 4 -1
Aplicm simplex primal i obinem cel mai negativ
j
corespunztor lui x
2
i
i
minim
corespunztor lui x
5
. n acest moment avem o soluie de baz a problemei iniiale i putem elimina
variabila x
5
. Obinem:
2 -M 0 2 0
c
B
x
B
x
B
x
1
x
5
x
4
c
B
x
B
x
B
x
1
x
4
2
3
4
5

M+ -
2
3
4
5

-
2 x
1
0 -1 0 0 2 x
1
0 -1 0
3 x
2
-

3 x
2
-
0 x
3
2
19

4
11
- 0 x
3
2
19

4
11

33
Programarea liniar
0 x
4
0 0 0 -1 0 x
4
0 0 -1
-M x
5
0 0 -1 0
i n continuare:
34
Bazele cercetrii operaionale
3 0 3 0
c
B
x
B
x
B
x
2
x
4
c
B
x
B
x
B
x
2
x
3
4 5 -2
3
20
3
7

3
2
2 x
1
2 4 -1 2 x
1
3
10
3
1
3
1

3 x
2
0 -1 0

3 x
2
0 -1 0
0 x
3
4 -11 3 0 x
3
0 0 -1
0 x
4
0 0 -1 0 x
4
3
4
3
11

3
1
2 0
c
B
x
B
x
B
x
1
x
3
30 7 3

2 x
1
0 -1 0
3 x
2
10 3 1
0 x
3
0 0 -1
0 x
4
38 11 4
Din rezolvarea de mai sus se observ c aceast metod este mai eficient doar dac
numrul variabilelor secundare este mai mic dect numrul variabilelor principale. Totui, motivul
principal pentru care a fost introdus aceast variant, este existena unor probleme n care, pe
parcursul rezolvrii, se adaug foarte multe restricii (de exemplu rezolvarea problemelor n numere
ntregi), pentru o restricie n plus tabelul simplex mrindu-se cu o linie i o coloan (cum se va
vedea la capitolul de reoptimizare) iar tabelul corespunztor formei secundare doar cu o linie.
3. Forma revizuit a algoritmului simplex
O problem mare (de exemplu cu 1000 variabile i 100 restricii) necesit n algoritmul
simplex introducerea, memorarea i lucrul cu un tabel cu 100.000 componente, adic un numr
imens de date. Din acest motiv, i remarcnd faptul c n algoritmul simplex doar o parte din
acestea contribuie efectiv la luarea deciziilor, s-a construit un algoritm care s in cont de
observaiile de mai sus, numit "forma revizuit a algoritmului simplex", n care se lucreaz cu
minimul necesar din datele tabelului simplex. Astfel, pentru testarea soluiei actuale i trecerea
eventual la o nou baz avem nevoie doar de urmtoarele elemente:
(1) inversa bazei curente B
-1
(2) componentele vectorului pentru a face testul de optim i a gsi variabila
care intr n baz (dac soluia nu e optim)
(3) coloana a
k
din B
-1
A corespunztoare celui mai negativ
j
(dac exist strict
negativi) pentru a face testul de optim infinit
(4) soluia curent pentru a gsi variabila care iese din baz (dac mai e cazul)
Aceste elemente se aeaz ntr-un tabel de forma:
c
B
x
B
x
B
= B
-1
b B
-1
35
Programarea liniar
f(x
B
)
=
T
B
c B
-1
numit tabelul simplex redus.
Operaiile ce se efectueaz n cadrul algoritmului simplex revizuit sunt (presupunem c
problema este la forma standard de maxim i deinem o soluie admisibil de baz i inversa bazei
corespunztoare):
Pasul 1. Se calculeaz
j
corespunztori variabilelor secundare cu formula cunoscut:

j
=
T
B
c B
-1
P
j
- c
j
= P
j
- c
j
unde P
j
este coloana corespunztoare variabilei x
j
din matricea iniial.
Pasul 2. Se analizeaz
j
calculai:
dac toi sunt mai mari sau egali cu 0 soluia curent este optim. STOP
dac exist
j
strict negativi se alege minimul dintre acetia
k
, variabila x
k
va intra n baz i se trece la pasul 3.
Pasul 3. Se calculeaz a
k
= B
-1
P
k
care se ataeaz ca nou coloan la tabel:
c
B
x
B
x
B
= B
-1
b B
-1
a
k
= B
-1
P
k
f(x
B
)
=
T
B
c B
-1

k
Pasul 4. Se analizeaz componentele coloanei a
k
:
dac toate sunt mai mici sau egale cu 0 problema are optim infinit. STOP
dac exist a
ik
strict pozitivi se alege cel pentru care se obine:
a
rk
=
ik
i
0 a
m i 1
a
min
ik
x
>

i variabila x
r
va iei din baz apoi se trece la pasul 5.
Pasul 5. Se pivoteaz ntregul tabel simplex i se elimin ultima coloan.
Pasul 6. Se reia algoritmul de la pasul 2.
Exemplu Fie problema de programare liniar rezolvat mai sus:
( )

'

+
+
+
0 x , x
2 x 4 x
10 x x 3
x 3 x 2 max
2 1
2 1
2 1
2 1
f
36
Bazele cercetrii operaionale
Forma standard a problemei va fi:
( )

'

+
+ +
+
0 x , x , x , x
2 x x 4 x
10 x x x 3
x 3 x 2 max
4 3 2 1
4 2 1
3 2 1
2 1
f
iar dup introducerea variabilelor artificiale obinem:
( )

'

+ +
+ +
+
0 x , x , x , x , x
2 x x x 4 x
10 x x x 3
Mx x 3 x 2 max
5 4 3 2 1
5 4 2 1
3 2 1
5 2 1
f
Iteraia 1. Prima baz este B = I
2
= B
-1
corespunztoare variabilelor x
3
i x
5
de unde rezult x
B
=

,
_

2
10
i = (0,-M) I
2
= (0,-M). Primul tabel redus va fi:
0
-M
x
3
x
5
10
2
1
0
0
1
-2M 0 -M
Se calculeaz
S
= S c
S
= (0,-M)
,
_

1 4 1
0 1 3

( ) 0 3 2
=
( ) M 3 M 4 2 M
de unde rezult c cel mai negativ este
2
i vom calcula coloana a
2
=
I
2

,
_

4
1
=
,
_

4
1
care se adaug la tabelul anterior rezultnd:
0
-M
x
3
x
5
10
2
1
0
0
1
1
4
-2M 0 -M -4M-3

i
minim este cel corespunztor lui x
5
i deci variabila x
2
va intra n locul variabilei x
5
.
Dup pivotare i eliminarea ultimei coloane obinem:
0
3
x
3
x
2
2
19

1
0
-

2
3
0
Deoarece variabila artificial x
5
a ieit din baz ea va fi eliminat din problem.
Iteraia 2.
S
= S c
S
= (0,)
,
_

1 1
0 3

( ) 0 2
= (
4
3
4
5
)
cel mai negativ este
1
i vom calcula coloana a
1
=

,
_


4
1
4
1
0
1

,
_

1
3
=

,
_

4
1
4
1 1
care se
adaug la tabelul anterior rezultnd:
0
3
x
3
x
2
2
19

1
0
-

4
11

37
Programarea liniar
2
3
0
4
5

i
minim este cel corespunztor lui x
2
i deci variabila x
1
va intra n locul variabilei x
2
.
Dup pivotare i eliminarea ultimei coloane obinem:
0
2
x
3
x
1
4
2
1
0
-3
1
4 0 2
Iteraia 3.
S
= S c
S
= (0,2)
,
_

1 4
0 1

( ) 0 3
= (
2 8
)
cel mai negativ este
4
i vom calcula coloana a
4
=
,
_


1 0
3 1

,
_

1
0
=
,
_

1
3
care se
adaug la tabelul anterior rezultnd:
0
2
x
3
x
1
4
2
1
0
-3
1
3
-1
4 0 2 -2

i
minim este cel corespunztor lui x
3
i deci variabila x
4
va intra n locul variabilei x
3
.
Dup pivotare i eliminarea ultimei coloane obinem:
0
2
x
4
x
1
3
4
3
10
3
1
3
1
-1
0
3
2 0
3
2
0
Iteraia 4.
S
= S c
S
= (
3
2
,0)
,
_

0 4
1 1

( ) 0 3
= ( 0
3
7
)
cel mai negativ este
2
i vom calcula coloana a
2
=

,
_


0
1
3
1
3
1

,
_

4
1
=

,
_


3
1
3
1 1
care se
adaug la tabelul anterior rezultnd:
0
2
x
4
x
1
3
4
3
10
3
1
3
1
-1
0
3
1 1

3
1
3
2 0
3
2
0
3
7

i
minim este cel corespunztor lui x
1
i deci variabila x
2
va intra n locul variabilei x
1
.
Dup pivotare i eliminarea ultimei coloane obinem:
38
Bazele cercetrii operaionale
0
3
x
4
x
2
38
10
4
1
-1
0
30 3 0
Iteraia 5.
S
= S c
S
= (3,0)
,
_

0 1
1 3

( ) 0 2
= (
3 7
) >0 deci soluia este optim (i
unic) STOP
Chiar dac la prima vedere calculele par mai mprtiate i deci mai lente, pentru probleme
mari, pe calculator se economisete foarte mult memorie i se mrete foarte mult viteza de calcul.
Totui, marele avantaj al acestei metode este acela c, la fiecare iteraie, se folosesc datele
problemei iniiale, ceea ce face ca erorile inerente de rotunjire s nu se propage, rmnnd n limite
acceptabile.
39