Sunteți pe pagina 1din 70

Matematici speciale

Capitolul 1
Programare liniară (II)
© Conf. dr. ing. mat. Ovidiu Blăjină
3. Metoda SIMPLEX
4. Postoptimizare
5. Optimizare parametrică
6. Programare în numere întregi

MS - Cursul 2 Cap.1. Programare liniară 2


3. Metoda SIMPLEX
3.1. Fundamente teoretice
3.2. Algoritmul simplex
3.3. Metoda coeficienţilor de penalizare

MS - Cursul 2 Cap.1. Programare liniară 3


3.1. Fundamente teoretice
Cea mai utilizată metodă pentru rezolvarea
problemelor de PL este metoda simplex datorată
matematicianului american G. B. Dantzig (1947).
Metoda simplex permite cercetarea sistematică
a mulţimii soluţiilor admisibile de bază ale unui
model de problemă de PL în forma standard. Presu-
punând cunoscută o astfel de soluţie iniţială, se
construiesc succesiv soluţii realizabile de bază din ce
în ce "mai bune" pînă la obţinerea soluţiei optime.
Metoda oferă şi un criteriu de recunoaştere a
optimului infinit.
MS - Cursul 2 Cap.1. Programare liniară 4
Prezentarea metodei simplex se va referi la
modelul de PL în forma standard de minimizare:
⎧ min c T x

⎨ Ax = b
⎪ x≥0

unde x, c ∈ Rn, b ∈ Rm, A ∈ Mm × n , cu rang A = m < n.
Fie B o bază primal admisibilă extrasă din
matricea A şi xB = B-1b soluţia de bază iniţială asociată.
Coeficienţii numerici ai problemei corespunză-
tori bazei B se înscriu în tabelul simplex asociat bazei
B, de forma:
MS - Cursul 2 Cap.1. Programare liniară 5
MS - Cursul 2 Cap.1. Programare liniară 6
Tabelul simplex conţine:
- în prima coloană, variabilele de bază (V.B.);
- în a doua coloană, valorile variabilelor de bază
(V.V.B.);
B
- în următoarele n coloane, vectorii y j , j = 1,..., n.
- pe ultima linie, valoarea funcţiei obiectiv în baza B,
B B
notată cu z ; diferenţele z j - c j , j = 1, n .
La aplicarea algoritmului metodei simplex,
fiecărei baze B îi corespunde un tabel simplex de
acest tip.

MS - Cursul 2 Cap.1. Programare liniară 7


3.2. Algoritmul simplex
Algoritmul simplex pentru problema de minimizare:
Pasul 1. Se determină o bază primal admisibilă
iniţială B.
B B B
Pasul 2. Se calculează x , , j , z j − c j , j = 1,..., n .
z B
y
B
Pasul 3. Dacă z j − c j ≤ 0 , ∀j = 1, n , atunci STOP:
este program optim; altfel se determină mulţimea
{
J + = j ∈ J z Bj − c j > 0 }
şi se trece la pasul 4.
Pasul 4. Se determină indicele k ∈ J+ cu criteriul de
intrare în bază:
MS - Cursul 2 Cap.1. Programare liniară 8
max ( z Bj − c j ) = zkB − ck
j∈ J +

Dacă ykB ≤ 0, atunci STOP: problema are optim


infinit; altfel se determină indicele l ∈ I cu criteriul
de ieşire din bază:
⎛ x iB ⎞ x lB
min ⎜⎜ B ⎟⎟ = B
i∈ I
B ⎝ yik ⎠ ylk
y ik > 0

Pasul 5. Fie baza B’ obţinută din B prin înlocuirea


coloanei A(l) cu coloana A(k) . Se trece la pasul 2,
înlocuind peste tot baza B cu baza B’ .

MS - Cursul 2 Cap.1. Programare liniară 9


Algoritmul simplex pentru problema de maximizare:
Pasul 3. Dacă z Bj − c j ≥ 0, ∀j = 1, n , atunci STOP: este
program optim; altfel se determină mulţimea (nevidă)
{
J − = j ∈ J z Bj − c j < 0 }
şi se trece la pasul 4.
Pasul 4. Se determină indicele k ∈ J- cu criteriul de
intrare în bază:
min ( z Bj − c j ) = zkB − ck
j∈ J −
B
Dacă k ≤ 0, atunci STOP: problema are optim
y
infinit; altfel se determină indicele l ∈ I cu criteriul
de ieşire din bază.
MS - Cursul 2 Cap.1. Programare liniară 10
B
Observaţie: Elementul y lk se numeşte pivot.
Formulele de schimbare a bazei sunt echiva-
lente cu următoarele reguli de transformare ale
tabelului simplex asociat bazei B:
a) elementele situate pe linia pivotului se împart la
pivot;
b) elementele situate pe coloana pivotului devin
zero, cu excepţia pivotului, care devine 1;
c) celelalte elemente ale tabelului simplex se tran-
sformă după formula dreptunghiului. Se consideră
dreptunghiul imaginar a cărui diagonală este deter-
minată de elementul de transformat şi de pivot:
MS - Cursul 2 Cap.1. Programare liniară 11
Formula dreptunghiului:
yijB ylkB − yljB yikB
yijB′ =
ylkB
MS - Cursul 2 Cap.1. Programare liniară 12
MS - Cursul 2 Cap.1. Programare liniară 13
Construieşte tabelul simplex iniţial

Cât timp există valori pozitive (negative) pe linia diferenţelor


execută

Determină coloana pivotului

Există valori pozitive în


coloana
Processpivotului ?
Da Process Nu

Determină linia pivotului Nu există


soluţieProcess
optimă finită
Calculează
noul tabel simplex STOP

Prezintă tabelul simplex final (ce conţine soluţia optimă)

MS - Cursul 2 Cap.1. Programare liniară 14


Exemplu. Să se rezolve cu algoritmul simplex
problema de PL:
⎧ min (4 x1 − 3 x2 + 5 x3 )
⎪ 3 x1 − 2 x2 + x3 ≤ 4

⎨ − 2 x1 + x2 + 2 x3 ≥ −1
⎪ 2 x1 + 4 x2 − 3 x3 ≤ 6
⎪ x ≥ 0, x ≥ 0, x ≥ 0
⎩ 1 2 3

Soluţie. Se aduce problema la forma standard. Pentru


aceasta se introduc variabilele de compensare x4 , x5 ,
x6 nenegative în cele trei restricţii. Se înmulţeşte cea
de-a doua restricţie cu -1 şi obţinem:
MS - Cursul 2 Cap.1. Programare liniară 15
⎧ min (4 x1 − 3 x2 + 5 x3 )
⎪ 3x − 2 x + x + x =4
⎪ 1 2 3 4

⎨ 2 x1 − x2 − 2 x3 + x5 =1
⎪ 2 x1 + 4 x2 − 3 x3 + x6 = 6
⎪ x ≥ 0, i = 1, 6
⎩ i
Matricea sistemului de restricţii a formei de mai
sus a problemei este:
⎡ 3 − 2 1 1 0 0⎤
A = ⎢ 2 − 1 − 2 0 1 0⎥
⎢ ⎥
⎣ 2 4 − 3 0 0 1 ⎦
cu m = 3, n = 6, rang (A) = 3 < 6.
MS - Cursul 2 Cap.1. Programare liniară 16
Se poate forma o bază, B, cu ultimele trei coloane
ale matricei A, aceasta fiind matricea unitate:
⎡1 0 0⎤
B = ⎢0 1 0 ⎥
⎢ ⎥
⎣0 0 1 ⎦
Pentru a putea aplica algoritmul simplex se
verifică, în prealabil, dacă baza B este primal
admisibilă. Într-adevăr, B fiind matrice unitate, avem
B-1 = B, iar x B = B −1b = b = [4 1 6] T > 0.
Se construiesc tabelele simplex (v. fig. urm.).
Problema admite soluţia optimă finită: x1= 0;
x2= 1,5; x3= 0; x4= 7; x 5= 2,5; x6= 0; zmin= -4,5.
MS - Cursul 2 Cap.1. Programare liniară 17
‰
MS - Cursul 2 Cap.1. Programare liniară 18
Exemplu. Să se rezolve problema de PL:
⎧ max ( x1 + 3 x2 + 2 x3 )
⎪⎪ x1 − x2 + x3 ≤ 2
⎨ − 2x + 2x − x ≤ 4
⎪ 1 2 3
⎪⎩ x1 , x2 , x3 ≥ 0
Soluţie. Se aduce problema la forma standard, prin
introducerea variabilelor de compensare x4 , x5:
⎧ max ( x1 + 3 x2 + 2 x3 )
⎪⎪ x1 − x2 + x3 + x4 =2
⎨ − 2x + 2x − x + x5 = 4
⎪ 1 2 3
⎪⎩ xi ≥ 0, i = 1, 5
MS - Cursul 2 Cap.1. Programare liniară 19
Cu ultimele două coloane din matricea siste-
mului de restricţii (ecuaţii) se poate forma baza B,
respectiv, matricea unitate.
Baza B este o bază primal admisibilă deoarece
B −1b = b = [2 4] T > 0 .
Se poate aplica algoritmul simplex. Tabelele
simplex sunt prezentate ]n figurile următoare.
În ultimul tabel se constată că există zk - ck < 0; J-
= {1, 2}, deci soluţia obţinută nu este optimă. Pe de
altă parte, toţi coeficienţii yi1 de pe coloana
variabilei x1 sunt nepozitivi. Rezultă că problema
are optim infinit (nu are soluţie optimă finită).
MS - Cursul 2 Cap.1. Programare liniară 20
‰
MS - Cursul 2 Cap.1. Programare liniară 21
3.3. Metoda coeficienţilor de penalizare
Pentru a putea începe aplicarea algoritmului
simplex este necesar a fi îndeplinite două condiţii:
¾ problema să fie în formă standard;
¾ să dispunem de o soluţie de bază iniţială.
Pentru cea de-a doua condiţie, alegerea la
întâmplare a unei baze formate din m vectori oarecare
dintre vectorii coloană ai matricei A poate conduce la
soluţii de bază nerealizabile cu care aplicarea
algoritmului simplex nu poate începe.
Determinarea unei soluţii de bază iniţială se
poate realiza cu metoda coeficienţilor de penalizare.
MS - Cursul 2 Cap.1. Programare liniară 22
Fie problema de PL de minimizare:
⎧ [min] z = c1x1 + c2 x2 + L + cn xn
⎪ a11x1 + a12 x2 + L + a1n xn ≥ b1
⎪ (3.1)
⎨ LLLLLLLLLLLLL
⎪ am1x1 + am 2 x2 + L + amn xn ≥ bm
⎪ x ,..., x ≥ 0
⎩ 1 n

Presupunem că toţi termenii liberi sunt pozitivi:


b1 ≥ 0,..., bm ≥ 0 şi că matricea A nu conţine nici un
vector coloană unitar.
Prin adăugarea variabilelor de compensare
(nenegative) cu semnul "-“ în fiecare restricţie, se
obţine sistemul de restricţii în forma standard:
MS - Cursul 2 Cap.1. Programare liniară 23
⎧ a11 x1 + a12 x2 + L + a1n xn − xn +1 = b1
⎪⎪ a21 x1 + a22 x2 + L + a2 n xn − xn + 2 = b2
⎨ LLLLLLLLLLLLLLL

⎪⎩ am1 x1 + am 2 x2 + L + amn xn − xn + m = bm
Considerând ca soluţie iniţială de bază:
x1 = x2 = ... = xn = 0, xn +1 = -b1 , xn +2 = -b2 ,...,
xn + m = = -bm
aceasta nu este realizabilă (admisibilă) şi nu satisface
condiţiile algoritmului simplex.
Pentru a obţine o soluţie admisibilă de bază se
introduce în fiecare restricţie câte o variabilă
artificială (nenegativă) xn + m +1 , xn + m + 2 , ..., xn + 2m ,
MS - Cursul 2 Cap.1. Programare liniară 24
cu semnul "+":
⎧ a11 x1 + a12 x2 + L + a1n xn − xn +1 + xn + m +1 = b1
⎪⎪ a21 x1 + a22 x2 + L + a2 n xn − xn + 2 + xn + m + 2 = b2
⎨ LLLLLLLLLLLLLLLLLLL

⎪⎩ am1 x1 + am 2 x2 + L + amn xn − xn + m + xn + 2 m = bm

Se modifică şi funcţia obiectiv a problemei iniţiale


(3.1) prin introducerea acestor variabile artificiale cu
coeficientul de penalizare +M.
Se consideră că M are o valoare pozitivă foarte
mare (practic infinit).
Rezultă problema extinsă (3.2) de mai jos:

MS - Cursul 2 Cap.1. Programare liniară 25


⎧ [min] z = c1 x1 + L + cn xn + Mxn + m +1 + L + Mxn + 2 m
⎪ a11 x1 + a12 x2 + L + a1n xn − xn +1 + xn + m +1 = b1

⎪ a21 x1 + a22 x2 + L + a2 n xn − xn + 2 + xn + m + 2 = b2 (3.2)
⎨ LLLLLLLLLLLLLLLLLLL

⎪ am1 x1 + am 2 x2 + L + amn xn − xn + m + xn + 2 m = bm
⎪⎩ x1 , x2 ,..., xn , xn +1 ,..., xn + m , xn + m +1 ,..., xn + 2 m ≥ 0
Soluţia iniţială de bază pentru problema (3.2)
poate fi: x1 = x2 = ... = xn = xn +1 = xn +m = 0, xn +m +1 =
= -b1 , xn +m +2 = -b2 , xn +2m = -bm
Soluţia conţine variabilele artificiale, dar este
convenabilă pentru aplicarea algoritmului simplex
problemei (3.2).
MS - Cursul 2 Cap.1. Programare liniară 26
Se rezolvă problema extinsă (3.2) fiind posibile
următoarele cazuri:
1) Problema (3.2) are optim infinit. Atunci şi
problema (3.1) are optim infinit.
2) Problema (3.2) are optim finit, dar în soluţia
optimă cel puţin o variabilă artificială are o valoare
nenulă (pozitivă). Atunci problema (3.1) nu are
soluţie.
3) Problema (3.2) are optim finit şi în soluţia
optimă toate variabilele artificiale au valoarea nulă.
Atunci această soluţie, din care se ignoră variabilele
artificiale, este soluţia optimă a problemei (3.1).
MS - Cursul 2 Cap.1. Programare liniară 27
Fie problema de PL de maximizare:
⎧ [max] z = c1x1 + c2 x2 + L + cn xn
⎪ a11x1 + a12 x2 + L + a1n xn = b1
⎪ (3.3)
⎨ LLLLLLLLLLLLL
⎪ am1x1 + am 2 x2 + L + amn xn = bm
⎪ x ,..., x ≥ 0
⎩ 1 n
Presupunem că toţi termenii liberi sunt pozitivi:
b1 ≥ 0,..., bm ≥ 0 şi că matricea A nu conţine nici un
vector coloană unitar.
Pentru a obţine o soluţie admisibilă de bază se
introduce în fiecare restricţie din (3.3) câte o variabilă
artificială (nenegativă), xn +1 , xn + 2 ,..., xn + m , cu
semnul "+".
MS - Cursul 2 Cap.1. Programare liniară 28
Se modifică funcţia obiectiv a problemei (3.3)
prin introducerea acestor variabile artificiale cu
coeficientul de penalizare -M.
Rezultă problema extinsă:
⎧ [max] z = c1 x1 + L + cn xn − Mxn +1 − L − Mxn + m
⎪ a11 x1 + a12 x2 + L + a1n xn + xn +1 = b1

⎪ a21x1 + a22 x2 + L + a2 n xn + xn + 2 = b2 (3.4)
⎨ LLLLLLLLLLLLLLL

⎪ am1x1 + am 2 x2 + L + amn xn + xn + m = bm
⎪⎩ x1, x2 ,..., xn , xn +1 ,..., xn + m ≥ 0
Se rezolvă problema (3.4) fiind posibile
aceleaşi cazuri ca cele prezentate la problema (3.1).
MS - Cursul 2 Cap.1. Programare liniară 29
Observaţii:
1) Indiferent de tipul problemei (minimizare sau
maximizare), dacă matricea restricţiilor nu conţine
vectori unitari, atunci numărul variabilelor artificiale
introduse va fi egal cu m.
2) Dacă, la aplicarea algoritmului simplex pentru
rezolvarea problemei extinse, o variabilă artificială
iese din bază, ea nu va mai intra niciodată în bază,
fapt care justifică eliminarea (eventuală) din calculele
ulterioare a coloanei variabilei respective.

MS - Cursul 2 Cap.1. Programare liniară 30


Exemplu. Să se rezolve problema de PL cu metoda
coeficienţilor de penalizare:
⎧ min (3x1 + 4 x2 + 7 x3 )
⎪⎪ x1 + 3 x2 − x3 ≥ 10
⎨ x +x +x ≥6
⎪ 1 2 3
⎪⎩ x1, x2 , x3 ≥ 0
Soluţie. Se aduce mai întâi problema la forma
standard prin introducerea în restricţii a variabilelor de
compensare x4 şi x5.
Se adaugă variabilele artificiale x6 şi x7; ele se
introduc în restricţii cu coeficientul 1 şi în funcţia
obiectiv cu coeficienţii de penalizare +M:
MS - Cursul 2 Cap.1. Programare liniară 31
⎧ min (3x1 + 4 x2 + 7 x3 + Mx6 + Mx7 )
⎪⎪ x1 + 3x2 − x3 − x4 + x6 = 10
⎨x +x +x − x5 + x7 = 6
⎪ 1 2 3
⎪⎩ xi ≥ 0, i = 1, 7
Soluţia iniţială de bază este x1 = x2 = x3 = x4 = x5 = 0,
x6 = 10, x7 = 6. Primul tabel simplex al problemei
extinse corespunzător acestei baze este:

MS - Cursul 2 Cap.1. Programare liniară 32


MS - Cursul 2 Cap.1. Programare liniară 33
Deoarece zk - ck ≤ 0, k = 1,..., 7 ⇒ tabelul simplex
de mai sus conţine soluţia optimă a problemei extinse,
în care variabilele artificiale x6 şi x7 au valoarea zero.
Soluţia optimă a problemei iniţiale: x1 = 4, x2 = 2,
x3 = 0. Valoarea optimă a funcţiei obiectiv zopt = 20.‰

MS - Cursul 2 Cap.1. Programare liniară 34


4. Postoptimizare

MS - Cursul 2 Cap.1. Programare liniară 35


În modelul unei probleme de PL:
⎧ min (max) c T x

⎨ Ax = b
⎪ x≥0

ce poate caracteriza activitatea unui agent economic,
intervin mai multe mărimi considerate constante în
momentul elaborării: A - matricea coeficienţilor
sistemului de restricţii; b - vectorul termenilor liberi;
c - vectorul coeficienţilor funcţiei obiectiv.
Dinamica accentuată a economiei de piaţă
implică, adeseori, schimbări ale condiţiilor care stau
la baza elaborării modelului.
MS - Cursul 2 Cap.1. Programare liniară 36
Exemple: modificarea preţurilor la resurse, a tarifelor
sau cererii la activităţile desfăşurate, a unor capacităţi
de producţie, a cantităţilor disponibile de resurse;
introducerea în fabricaţie a unor noi produse.
Din punct de vedere matematic, astfel de
schimbări implică modificări ale elementelor unei
probleme de PL:
¾ modificarea vectorului b;
¾ modificarea vectorului c;
¾ introducerea unei variabile suplimentare;
¾ introducerea unui grup de restricţii în sistemul de
restricţii iniţial;
¾ modificarea unei linii/coloane din matricea A.
MS - Cursul 2 Cap.1. Programare liniară 37
Postoptimizarea (reoptimizarea) unei probleme
de PL constă în recalcularea soluţiei optime a
problemei în cazul unor modificări de tipul menţionat.
Întrebarea care se pune este dacă soluţia optimă
îşi păstrează caracterul de optimalitate după modifică-
rile survenite. Se impune, aşadar, în primul rând, o
verificare a soluţiei în noile condiţii. Dacă soluţia nu
mai este optimă, determinarea unei noi soluţii se face,
nu refăcând calculele de la început, ci pornind de la o
soluţie de bază mai apropiată de soluţia optimă, uneori
chiar de la soluţia optimă a problemei iniţiale, pentru
micşorarea volumului de calcule necesare.
MS - Cursul 2 Cap.1. Programare liniară 38
5. Optimizare parametrică

MS - Cursul 2 Cap.1. Programare liniară 39


Problema de programare liniară în care cel
puţin unul din elementele sale - matricea coeficien-
ţilor sistemului de restricţii A, vectorul termenilor
liberi b, vectorul coeficienţilor funcţiei obiectiv c -
depinde, liniar sau neliniar, de unul sau mai mulţi
parametri reprezintă o problemă de programare
liniară parametrică.
Optimizarea parametrică studiază, ca şi postop-
timizarea, problemele de programare liniară cu
coeficienţi variabili. Dacă postoptimizarea cores-
punde variaţiei discrete a coeficienţilor, optimizarea
parametrică vizează variaţia continuă a coeficienţilor.
MS - Cursul 2 Cap.1. Programare liniară 40
Rezolvarea problemelor de programare liniară
parametrică implică parcurgerea a două etape:
1) Determinarea soluţiei optime pentru o valoare
determinată a parametrului sau a unui sistem de
valori dacă este vorba de mai mulţi parametri.
2) Studiul sensibilităţii soluţiei optime determinate
la variaţia parametrului (parametrilor).
Acest studiu constă în stabilirea intervalelor
(domeniilor) de optimalitate a unei soluţii, respectiv,
a mulţimii valorilor parametrilor pentru care soluţia
determinată îşi păstrează caracterul de optimalitate.

MS - Cursul 2 Cap.1. Programare liniară 41


6. Programare în numere întregi
6.1. Consideraţii generale
6.2. Exemple de probleme economice
6.3. Metoda branch and bound

MS - Cursul 2 Cap.1. Programare liniară 42


6.1. Consideraţii generale
În problemele de programare liniară studiate
anterior variabilele au fost supuse condiţiei de
nenegativitate, având o variaţie continuă.
O serie de situaţii din domeniul economic
impun cerinţa ca variabilele să nu poată lua decât
valori din anumite mulţimi discrete. Astfel de restricţii
de discontinuitate apar atunci când variabilele sunt
exprimate în unităţi de măsură indivizibile (număr de
bucăţi etc.).
Problemele de optimizare cu restricţii de discon-
tinuitate aparţin domeniului programării discrete.
MS - Cursul 2 Cap.1. Programare liniară 43
Marea majoritate a problemelor de programare
discretă întâlnite în practică impun ca variabilele (o
parte sau toate) să aibă valori întregi. Vorbim în
aceste cazuri de programare în numere întregi.
Problemele în care doar o parte din variabile au
valori întregi sunt denumite probleme mixte sau
parţial întregi, iar cele în care toate variabilele au
valori întregi se numesc probleme total întregi.
În cele ce urmează vom studia problemele de
programare în numere întregi, ceea ce nu reprezintă
o restrângere a generalităţii deoarece cazurile generale
discrete pot fi aduse la această formă.
MS - Cursul 2 Cap.1. Programare liniară 44
Astfel, presupunem că, într-o problemă, o variabilă
oarecare x poate lua numai un număr finit de valori:
a1, a2 ,..., ak . Variabila x se poate rescrie sub forma:
k k
x = ∑ δ i ai , cu ∑ δ i = 1 şi δi = 0 sau 1
i =1 i =1

ceea ce conduce la o problemă cu variabile întregi.


Observaţie. În orice problemă de programare discretă
funcţia obiectiv şi restricţiile, chiar dacă sunt expri-
mate prin forme liniare, datorită caracterului discon-
tinuu al variabilelor nu mai sunt, din punct de vedere
matematic, funcţii liniare. Din acest motiv, programa-
MS - Cursul 2 Cap.1. Programare liniară 45
rea discretă este tratată ca un caz special de
programare liniară.
Utilizarea variabilelor întregi conduce la o
creştere a flexibilităţii modelării fenomenelor, dar şi a
complexităţii modalităţilor specifice de rezolvare.
În acest scop, cele mai des utilizate sunt:
• metodele planului de secţiune;
• metodele de ramificare şi mărginire (tip branch
and bound).

MS - Cursul 2 Cap.1. Programare liniară 46


6.2. Exemple de probleme economice
Exemplu. Problemă de încărcare
Se consideră cazul încărcării unui camion cu n
tipuri de colete cu marfă, de masă mi (i = 1,..., n) şi
valoare vi (i = 1,..., n). Camionul admite o încărcare
maximă C.
Să se stabilească modul optim de alegere a
încărcăturii camionului astfel încât valoarea totală a
coletelor transportate să fie maximă.
Se notează cu xi numărul de colete de tipul i ce
urmează a fi încărcate în camion.
Funcţia obiectiv este valoarea totală a coletelor
MS - Cursul 2 Cap.1. Programare liniară 47
tranportate, care trebuie maximizată.
Modelul matematic al problemei are forma:
⎧ n
⎪ [max] z = ∑ vi xi
⎪ i =1
⎪ n
⎨ ∑ mi xi ≤ C
⎪ i =1
⎪ xi ≥ 0, i = 1, n

⎩ xi ∈ Z , i = 1, n
S-a obţinut un model de problemă de optimizare
total discretă, în care variabilele pot lua numai valori
întregi. ‰
MS - Cursul 2 Cap.1. Programare liniară 48
Exemplu. Problemă de investiţii
O firmă intenţionează să facă investiţii pentru
retehnologizare. Ea are posibilitatea să aleagă din n
oferte de proiecte. Fiecare proiect va aduce un profit
ci (i =1,..., n). Se mai cunosc costul investiţiei în
fiecare proiect ai (i =1,..., n) şi suma maximă dispo-
nibilă S pentru investiţii.
Să se stabilească programul optim de investiţii
care să conducă la un profit total maxim.
Se definesc variabilele bivalente:
⎧ 1, dacă proiectul i este ales
xi = ⎨
⎩ 0, altfel
MS - Cursul 2 Cap.1. Programare liniară 49
Modelul matematic al problemei are forma:
⎧ n
⎪ [max] z = ∑ ci xi
⎪ i =1
⎪ n
⎨ ∑ ai xi ≤ S
⎪ i =1
⎪ xi = 0 sau 1, i = 1, n


Modelul de problemă de optimizare obţinut poartă
numele de model de programare zero-unu. ‰

MS - Cursul 2 Cap.1. Programare liniară 50


Exemplu. Problemă de costuri
Conducerea unei firme doreşte minimizarea
cheltuielilor de fabricaţie pentru cele n tipuri de
produse ale sale. Fiecare tip de produs j (j = 1,…, n)
are un cost unitar de producţie cj (costul materialelor,
manoperei etc.) şi un cost de pregătire a fabricaţiei qj .
Pentru fiecare tip de produs j se cunosc cererea
minimă a pieţii aj şi capacitatea proprie maximă de
fabricaţie bj .
Să se stabilească programul de fabricaţie al
firmei, optim din punct de vedere al cheltuielilor sale
totale.
MS - Cursul 2 Cap.1. Programare liniară 51
Fie xj cantitatea de produs j (j = 1,..., n) ce
urmează a se fabrica.
Se mai definesc variabilele bivalente:
⎧ 1, dacă x j > 0
yj = ⎨
⎩ 0, altfel
care indică dacă produsul j intră sau nu în fabricaţie.
Funcţia obiectiv este reprezentată de cheltuielile
totale de fabricaţie ale firmei şi trebuie minimizată:
n
(
[min] z = ∑ c j x j + q j y j )
j =1

Restricţiile privind cererea pieţii:


MS - Cursul 2 Cap.1. Programare liniară 52
x j ≥ a j , j = 1, n
Restricţiile privind capacitatea de producţie:
x j ≤ b j , j = 1, n
Definiţia variabilei yj se poate reformula:
⎧ xj
⎪ yj ≥
⎨ b j , j = 1, n
⎪ y ∈ {0, 1}
⎩ j
Se obţine un model de optimizare mixt, în care o
parte din variabile au valori pozitive, iar celelalte nu
pot lua decât valori întregi (sunt variabile bivalente):
MS - Cursul 2 Cap.1. Programare liniară 53
⎧ n
(
⎪ [min] z = ∑ c j x j + q j y j )
⎪ j =1

⎨ x j ≤ b j y j , j = 1, n
⎪ x ≥ a , j = 1, n
⎪ j j
⎪⎩ y j ∈ {0, 1}, j = 1, n
‰

MS - Cursul 2 Cap.1. Programare liniară 54


Exemplu. Problema comis voiajorului
Un comis voiajor trebuie să viziteze n localităţi
L1 , ..., Ln . El va porni din localitatea L1 şi se va
reîntoarce acolo după ce va trece prin toate loca-
lităţile câte o singură dată. Se cunosc distanţele dij
dintre oricare două localităţi Li şi Lj .
Să se aleagă traseul optim de vizitare al celor n
localităţi care să minimizeze lungimea totală a
traseului parcurs de către comis voiajor.
Se definesc variabilele bivalente:
⎧ 1, dacă traseul include deplasarea din Li la L j
xij = ⎨
⎩ 0, altfel
MS - Cursul 2 Cap.1. Programare liniară 55
Funcţia obiectiv este lungimea totală a traseului
parcurs şi care trebuie minimizată:
n n
[min] z = ∑∑ dij xij
i =1 j =1
Condiţia ca traseul să se îndreapte exact spre o
singură altă localitate după plecarea din localitatea Li:
n
∑ xij = 1, i = 1, n
j =1
Condiţia ca traseul să treacă prin fiecare localitate
o singură dată este echivalentă cu faptul că în fiecare
localitate Lj se poate ajunge numai din o singură altă
localitate:
MS - Cursul 2 Cap.1. Programare liniară 56
n
∑ xij = 1, j = 1, n
i =1
O soluţie a problemei este admisibilă dacă fiecare
i (i = 1,…, n) ocupă o singură dată prima poziţie şi o
singură dată a doua poziţie, ca indice al variabilei. În
caz contrar, soluţia nu este acceptabilă deoarece se
formează două subtrasee neconectate. Pentru elimi-
narea acestora, se impune condiţia:
ui − u j + nxij ≤ n − 1, i, j = 2 , n, i ≠ j
în care intervin variabilele:
ui ≥ 0, i = 2, n , ui ∈Z
MS - Cursul 2 Cap.1. Programare liniară 57
Modelul matematic al problemei are forma:
⎧ n n
⎪ [min] z = ∑∑ dij xij
⎪ i =1 j =1
⎪ n
⎪ ∑ xij = 1, j = 1, n
⎪ i =1
⎪ n
⎨ x = 1, i = 1, n
⎪∑ ij
⎪ j =1
⎪ ui − u j + nxij ≤ n − 1, i, j = 2, n, i ≠ j
⎪ x ∈ {0, 1}, i, j = 1, n
⎪ ij
⎪⎩ ui ≥ 0, ui ∈ Z , i = 2, n ‰
MS - Cursul 2 Cap.1. Programare liniară 58
6.3. Metoda branch and bound
Procedeul acestei metode poate fi descris sub
forma unei diagrame arborescente.
Metoda generează nodurile arborelui până când
toate căile ajung în noduri terminale. Pentru fiecare
nod există două ramuri de verificat. Dacă nici una
dintre ramuri nu ajunge într-un nod terminal, atunci
metoda urmează cel mai favorabil nod, nodul de pe
cealaltă ramură, fiind considerat independent.
Se consideră problema de programare în
numere întregi mixte:

MS - Cursul 2 Cap.1. Programare liniară 59


⎧ [max] z = c T x
⎪⎪ Ax = b
⎨ x≥0

⎪⎩ x j ∈ Z, j ∈ T

Algoritmul metodei branch and bound:


Pasul 1 (Soluţia iniţială)
Se rezolvă problema de programare liniară obţinută
din problema în numere întregi iniţială, prin omiterea
condiţiilor de integritate. Dacă toate valorile soluţiei
x j ∈ Z, ∀j ∈ T, atunci avem soluţia optimă a problemei
iniţiale, STOP; altfel se trece la pasul 2.
MS - Cursul 2 Cap.1. Programare liniară 60
Pasul 2 (Selectarea variabilelor de ramificare)
Se alege din ultimul tabel simplex de la pasul 1,
dintre acele variabile xj , j ∈ T, care nu au valori
întregi, variabila de bază xl având partea fracţionară,
fl , cea mai mare, pentru generarea restricţiilor de
ramificare.
Deoarece variabila xl trebuie să aibă valori întregi,
şi xl = [ xl ] + fl ea trebuie să satisfacă fie condiţia:
xl ≤ [ xl ] (6.1)
fie
xl ≥ [ xl ] + 1 (6.2)

MS - Cursul 2 Cap.1. Programare liniară 61


Pasul 3 (Generarea unor noi noduri)
Se formează două noi probleme de programare în
numere întregi, relative la nodul considerat la pasul 2.
O problemă este formată prin adăugarea restricţiei
(7.1), iar cealaltă prin adăugarea restricţiei (6.2).
Se rezolvă fiecare problemă cu algoritmul simplex.
Pasul 4 (Testarea nodurilor terminale)
Fiecare din nodurile generate la pasul 3 poate fi un
nod terminal dacă: problema reprezentată de acel nod
nu are soluţii admisibile sau toate variabilele xj ,
j ∈ T, au valori întregi.

MS - Cursul 2 Cap.1. Programare liniară 62


În primul caz, se etichetează nodurile ca noduri
terminale şi se trece la pasul 5.
În al doilea caz, se compară, mai întâi, valorile
funcţiei obiectiv cu valoarea curentă cea mai bună.
Dacă valoarea funcţiei obiectiv pentru noul nod este
mai bună, ea devine cea mai bună valoare; se trece la
pasul 5.
Pasul 5 (Selectarea nodurilor)
a) Dacă ambele noduri de la pasul 4 sunt terminale,
atunci următorul nod considerat este următorul din
lista nodurilor independente. Dacă nodul independent
are o valoare a funcţiei obiectiv mai mare decât cea
MS - Cursul 2 Cap.1. Programare liniară 63
mai bună valoare curentă, atunci, cu acest nod, se
trece la pasul 2; altfel se verifică următorul nod din
lista celor independente. Când lista nodurilor
independente este epuizată, valoarea curentă cea mai
bună este soluţia optimă, STOP.
b) Dacă doar un nod la pasul 4 este terminal,
atunci se utilizează nodul neterminal şi se trece la
pasul 2.
c) Dacă ambele noduri la pasul 4 sunt neterminale,
atunci se alege nodul cu valoarea funcţiei obiectiv
mai mare. Celălalt nod se adaugă la lista nodurilor
independente.
MS - Cursul 2 Cap.1. Programare liniară 64
Exemplu. Să se rezolve problema de programare în
numere întregi:
⎧max (7 x1 + 3x2 )
⎪ 2 x1 + 5 x2 ≤ 30

⎨ 8 x1 + 3x2 ≤ 48
⎪ x1, x2 ≥ 0
⎪ x , x ∈Z
⎩ 1 2
Soluţie. Se rezolvă cu algoritmul simplex problema
de PL obţinută din cea iniţială prin renunţarea la
condiţiile de integritate şi se obţine tabelul simplex
final:
MS - Cursul 2 Cap.1. Programare liniară 65
Se constată că x1∉ Z, x 2 ∉ Z. Se aplică metoda
branch and bound.
Părţile fracţionare sunt: f1 = 7/17, f2 = 4/17.
Deoarece f1 > f2 , se alege ca variabilă de ramificare
x1, căreia i se aplică condiţiile: x1 ≤ 4 şi x1 ≥ 5 .

MS - Cursul 2 Cap.1. Programare liniară 66


1 x1 = 75 / 17
x2 = 72 / 17 (Tab.7.9)
z = 741 / 17

x1 ≤ 4 x1 ≥ 5

2 x1 = 4 3 x1 = 5
x2 = 22 / 5 (Tab.7.12) x2 = 8 / 3 (Tab.7.13)
z = 206 / 5 z = 43

Valoarea funcţiei obiectiv din nodul 3 este mai


mare decât cea din nodul 2 (43 > 206/5). Ca urmare,
nodul 2 se introduce în lista nodurilor independente.
În nodul 3 se aplică condiţiile: x2 ≤ 2 şi x2 ≥ 3.
MS - Cursul 2 Cap.1. Programare liniară 67
1 x1 = 75 / 17
x2 = 72 / 17 (Tab.7.9)
z = 741 / 17

x1 ≤ 4 x1 ≥ 5

2 x1 = 4 3 x1 = 5
x2 = 22 / 5 (Tab.7.12) x2 = 8 / 3 (Tab.7.13)
z = 206 / 5 z = 43

x2 ≤ 2 x2 ≥ 3

4 x1 = 21 / 4 5 Nu există
soluţie
x2 = 2 (Tab.7.16) admisibilă (Tab.7.15)
z = 171 / 4
Nod terminal

MS - Cursul 2 Cap.1. Programare liniară 68


În nodul 3, x1 are o valoare întreagă, dar, în nodul
4, x1 nu mai are valoare întreagă. În nodul 4 se aplică
condiţiile: x1 ≤ 5 şi x1 ≥ 6 şi se obţine:

MS - Cursul 2 Cap.1. Programare liniară 69


1 x1 = 75 / 17
x2 = 72 / 17 (Tab.7.9)
z = 741 / 17

x1 ≤ 4 x1 ≥ 5

2 x1 = 4 3 x1 = 5
x2 = 22 / 5 (Tab.7.12) x2 = 8 / 3 (Tab.7.13)
z = 206 / 5 z = 43

x2 ≤ 2 x2 ≥ 3

4 x1 = 21 / 4 5 Nu există
soluţie
x2 = 2 (Tab.7.16) admisibilă (Tab.7.15)
z = 171 / 4

x1 ≤ 5 x1 ≥ 6

6 x1 = 5 7 x1 = 6
x2 = 2 (Tab.7.18) x2 = 0 (Tab.7.19)
z = 41 z = 42

Soluţia optimă
‰
MS - Cursul 2 Cap.1. Programare liniară 70

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