Documente Academic
Documente Profesional
Documente Cultură
PROGRAMARE LINIARA
1.1 Exemple
f = c1 x1 + c2 x 2 +...+ cn x n
cu satisfacerea restricţiilor:
şi a condiţiilor de nenegativitate:
x1 ≥ 0 , x 2 ≥ 0 , L x n ≥ 0
................................
a x + a x + ... + a x ≥ b
m1 1 m2 2 mn n m
x1 ≥ 0, x 2 ≥ 0,..., x n ≥ 0
Este posibil ca (P) să aibe soluţii dar nici una din ele să fie admisibilă:
A = ∅. Spunem în acest caz că problema (P) este incompatibilă .Chiar dacă
A ≠ ∅, este posibil ca funcţia obiectiv să fie nemărginită pe A , adică să
existe
un şir de soluţii admisibile dealungul căruia funcţia obiectiv să tindă spre + ∞
sau -∞, după caz. În această situaţie vom spune că (P) are optim infinit.Dacă
(P) are (cel puţin) o soluţie optimă, zicem că (P) are optim finit.
Deoarece eventualele restricţii inegalităţi sunt nestricte mulţimea A
este inchisă (în topologia uzuală a spaţiului Rn), adică o dată cu un şir
convergent de puncte conţine şi limita acestuia. Această proprietate este
esenţială pentru existenţa unei soluţii optime a problemei (P)! Conform unui
rezultat clasic al analizei matematice, dacă A este mărginită, atunci f îşi
atinge efectiv extremele pe A, şi deci (P) are optim finit. În consecinţă, dacă
(P) are optim infinit, cu siguranţă A este nemărginită. Reciproca nu este în
general adevărată: este posibil ca A să fie nemărginită şi totuşi (P) să aibe
optim finit.
n
∑ aij x j ≤ bi i = 1,..., m
j =1 Ax ≤ b
x j ≥ 0 j = 1,..., n sau matricial x ≥ 0 unde:
(max) f = cx
n
(max) f = ∑ c j x j
j =1
1. Forma generală a unei probleme de programare liniară 5
a11 a12 L a1 n b1 x1
a a 22 L a 2n b x
A= b= x=
21 2 2
M M L M M M
a m1 a m2 L a mn bm x n
c = [c1 c 2 L c n ]
n
∑ a ij x j ≥ bi
j =1 Ax ≥ b
xj ≥ 0 ⇔ x≥0
(min) f = cx
n
(min) f = ∑ c j x j
j =1
Exemplul 1.3.1
6 I. PROGRAMARE LINIARA
(max) f = 2 x1 − 3x 2 + 4 x 3 (min)( − f ) = − 2 x 1 + 3 x 2 − 4 x 3
x − 3x + 5x = 3 x1 − 3x 2 + 5 x 3 ≥ 3
1 2 3
− x1 + 3x 2 − 5 x 3 ≥ − 3
3 x1 + x 2 ≥ 5 ⇒
2x + 3x1 + x 2 ≥ 5
x 3 ≤ 10
1
− 2 x1 − x 3 ≥ −10
x1 ≥ 0, x 2 ≥ 0, x 3 ≥ 0
x 1 ≥ 0 , x 2 ≥ 0, x 3 ≥ 0
Exemplul 1.4.1
(max) f = 7 x1 + 9 x 2 + 8 x 3 (max) f = 7 x1 + 9 x 2 + 8 x 3
5x + 2 x − x ≥ 4
1 2 3 5 x1 + 2 x 2 − x 3 − x 4 =4
( P ) 3 x1 + x 2 + x 3 = 5 ⇒
( FSP ) 3x1 + x 2 + x 3 =5
x1 + 2 x 2 + 3 x 3 ≤ 9 x 1 + 2 x 2 + 3x 3 + x5 = 9
x1 ≥ 0, x 2 ≥ 0, x 3 ≥ 0 x j ≥ 0, j = 1,...,5
1. Forma generală a unei probleme de programare liniară 7
Problema care apare în acest context este aceea de a explica modul în care se
obţine soluţia optimă a problemei (P) dacă se cunoaşte soluţia optimă a formei
sale standard (FSP).
Se poate arăta uşor că între mulţimile de soluţii admisibile AP ,ale problemei
(P) şi AFSP, ale problemei (FSP), există o corespondenţă bijectivă care
conservă soluţiile optime. Vom arăta cum funcţionează această corespondenţă
pe exemplul precedent.
Notând-o cu Φ, aceasta va asocia unei soluţii admisibile x = ( x1 , x 2 , x 3 )
a problemei (P) vectorul:
Φ( x ) = ( x1 , x 2 , x 3 , 5x1 + 2 x 2 − x 3 − 4, 9 − x1 − 2 x 2 − 3x 3 )
n
x n +i = bi − ∑ aij x j i = 1,...,m
j =1
n
x n +i = ∑ aij x j − bi i = 1,..., m
j =1
Să considerăm problema:
(max) f = 3x1 + 4 x 2
− 3x + 4 x ≤ 12
1 2
x1 + x 2 ≤ 6
− 2x + x ≤ 2
1 2
x1 ≥ 0 , x 2 ≥ 0
f= 22 27
f=12 B
d1
A
A
d2
x1
O D
d3
1. Forma generală a unei probleme de programare liniară 9
Figura 1.5.1
unele din ele nu pot lua decât valori nepozitive (≤ 0) în timp ce altele pot lua
orice valoare reală.
Cu această observaţie duala unei probleme de programare liniară cu m
restricţii şi n variabile se construieşte după următoarele reguli:
Exemplul 2.1.1
Problema primală Problema duală
3x1 − 2 x 2 + x 3 + 4 x 4 − x5 ≤ 6 u1 ≥ 0
2 x + 2 x 3 + 5x 4 + x 5 = 9 u2 f . r . s.
1
x1 + 6 x 2 + x 3 + 2 x 4 ≥3 u3 ≤ 0
x1 ≥ 0 3u1 + 2u2 + u3 ≥ 8
x2 ≥ 0 −2u1 + 6u3 ≥ 3
x 3 f . r . s. u1 + 2u2 + u3 = 1
x 4 f . r . s. 4u1 + 5u2 + 2u3 = 5
x5 ≤ 0 − u1 + u2 ≤7
max f = 8 x1 + 3x 2 + x 3 + 5x 4 + 7 x5 min g (u) = 6u1 + 9u2 + 3u3
min ↔ max
(restricţie) concordantă ↔ (variabilă) nenegativă
(restricţie) neconcordantă ↔ (variabilă) nepozitivă
(restricţie) egalitate ↔ (variabilă) fără restricţie de semn
termen liber al unei restricţii ↔ coeficient al funcţiei obiectiv
Ax ≤ b uA ≥ c
( P) x ≥ 0 (Q) u ≥ 0
max f ( x ) = cx min g (u) = ub
∑ n
a x = bi i = 1,..., m ↔ ui f . r . s. i = 1,..., m
j =1 ij j
m
xj ≥ 0 j = 1,..., n ↔ ∑ a ij ui ≥ c j j = 1,.., n
i =1
max f = ∑ n
cj x j
m
min g = ∑ bi ui
j =1 i =1
sau matricial:
12 I. PROGRAMARE LINIARA
Ax = b uA ≥ c
( P) x ≥ 0 ( Q )u ∈ R m ( f . r. s. )
max f ( x ) = cx min g ( u ) = ub
Ax = b uA ≤ c
( P) x ≥ 0 ( Q )u f . r. s.
min f ( x ) = cx max g( u ) = ub
(max) f ( x ) = cx (min) g ( u ) = ub
( P ) Ax ≤ b ( Q ) uA ≥ c
x≥0 u≥0
(uA − c) x = 0
(2.3.1)
u (b − Ax ) = 0
uAx − cx = 0
⇒ cx = ub ⇒ ( x , u ) este un cuplu de soluţii optime în virtutea
ub − uAx = 0
(uA − c) x + u (b − Ax ) = 0
j =1 i =1
m n
∑ ui bi − ∑ aij x j = 0
i =1 j =1
suficientă de optimalitate.
x >0 ⇒
m
∑ a ij u i = c j u >0 ⇒
n
j i ∑ aij x j = bi
i =1 j =1
n m
∑ a ij ui < bi ⇒ ui = 0 ∑ aij ui > c j ⇒ xj = 0
j =1 i =1
max f = cx min g = ub
Ax = b uA ≥ c
x≥0 u f . r . s.
Exemplul 2.3.1
16 I. PROGRAMARE LINIARA
min f = 5 x1 − 2 x 2 − x 3 max g = 6u1 + 12u2 + 4u3
6 x1 + 2 x 2 − 3x 3 ≤ 6 6u1 + u2 + 2u3 ≤ 5
( P ) x1 + 3x 2 + 2 x 3 = 12 ( Q ) 2u1 + 3u2 − u3 ≤ −2
2 x − x + 4 x ≥ 4 − 3u + 2u + 4u ≤ −1
1 2 3
1 2 3
x1 , x 2 , x 3 ≥ 0 u1 ≤ 0, u2 f . r. s., u3 ≥ 0
x = ( x1 , x 2 , x 3 ) T şi u = (u1 , u2 , u3 )
x1 = 0
2 x1 − x 2 + 4 x 3 = 4
x + 3x + 2 x = 12
1 2 3
2. Dualitatea în programarea liniară 17
Rezolvând sistemul, obţinem soluţia optimă a problemei (P):
x1* = 0 , x 2* = 20
7 , x 3* = 12
7 f max = f ( x * ) = − 527 = g (u * ) = g min
(max) f ( x ) = c1 x1 + c2 x 2 +K+ cn x n
a x + a x +K+ a x ≤ b
11 1 12 2 1n n 1
a 21 x1 + a 22 x 2 +K+ a 2 n x n ≤ b2
(P)
............................................
a m1 x1 + a m2 x 2 +K+ a mn x n ≤ bm
x1 ≥ 0, x 2 ≥ 0,K , x n ≥ 0
Să notăm atunci cu u1* , u2* ,..., um* aportul unei unităţi din resursa R1, din resursa
R2, ş.a.m.d. la formarea venitului maxim V*.În virtutea ipotezelor de liniaritate
amintite putem scrie:
Producerea unei unităţi din bunul Gj necesită a1j unităţi din resursa R1, a2j
unităţi din resursa R2 ,....., amj unităţi din resursa Rm.
Partea din venitul maxim V* corespunzătoare acestor cantităţi este:
(2.4.2)
..........................
a u * + a u * +...+ a u * ≥ c
1n 1 2n 2 mn m n
(min) g( x ) = b1 u1 + b2 u2 +...+ bm um
a u + a u +...+ a u ≥ c
11 1 21 2 m1 m 1
a12 u1 + a 22 u2 +...+ a m2 um ≥ c 2
( Q )
. ..................................
a1n u1 + a 2 n un +...+ a mn um ≥ c n
u1 ≥ 0, u2 ≥ 0,..., um ≥ 0
În consecinţă:
20 I. PROGRAMARE LINIARA
∂V *
= ui* i = 1,..., m
∂ bi
(2.4.4)
(2.4.5) arată că dacă bunul Gj intră în combinaţia optimă atunci preţul său este
egal cu partea din venitul maxim al firmei corespunzătoare resurselor
încorporate într-o unitate din el.
1 1
segmentului [ x , y] . Pentru α=
2
găsim z=
2
(x + y ) ≡ mijlocul
segmentului [ x , y] .
Formal :
{ }
S = x = ( x1 , x 2 ,..., x n ) T ax ≤ b ⇔ a1 x1 + a 2 x 2 +...+ a n x n ≤ b
{
H = x = ( x1 , x 2 ,..., x n ) T ax = b ⇔ a1 x1 + a 2 x 2 +...+ a n x n = b }
se numeşte hiperplan. Este clar că şi H este o mulţime convexă ca intersecţie a
semispaţiului S de mai sus, cu semispaţiul:
{
S ' = x ∈ R n ax ≥ b ⇔ ( − a ) x ≤ −b ⇔ − a1 x1 − a 2 x 2 −...− a n x n ≤ −b }
O intersecţie finită de semispaţii se numeşte mulţime poliedrală.
Evident, o mulţime poliedrală este convexă, reciproca nefiind în general
adevărată.
În figura 3.1.1 sunt prezentate câteva mulţimi convexe şi neconvexe în
plan. Este clar că mulţimile a) şi b) nu sunt convexe. Discul c) este o mulţime
convexă dar nu este poliedrală, fiind în fapt intersecţia infinită a tuturor
semispaţiilor care conţin discul şi sunt mărginite de tangentele la circumferinţă.
Poligonul convex d) este intersecţia a 4 semispaţii aşa cum se arată în fig.3.1.2
Notă: Toate mulţimile specificate sunt presupuse, închise adică îşi conţin
frontierele.
Figura 3.1.1
3. Structura mulţimii soluţiilor admisibile ale unei probleme de programare liniară 23
S3
S2
S1
S4
Figura 3.1.2
De exemplu mulţimea poliedrală din fig. 3.1.3 are două raze extreme w1
şi w2. Suporturile acestor vectori sunt paralele cu cele două muchii dealungul
cărora "se poate merge către infinit".
unde v 1 , v 2 ,...., v p sunt puncte din L arbitrar alese, numărul punctelor fiind
deasemeni variabil.
x+α2w2
x+α1w1
α2≥0
α1≥0
x
1
v
w1
v2
w2
Figura 3.1.3
3. Structura mulţimii soluţiilor admisibile ale unei probleme de programare liniară 25
{
X& = v1 , v 2 ,L, v p }
mulţimea vârfurilor sale. Deoarece X& ⊂ X iar X este convexă avem
conv X& ⊆ X . Se poate demonstra următorul rezultat clasic al analizei convexe:
conv L
Mulţimea finită L
Figura 3.1.4
Formal:
26 I. PROGRAMARE LINIARA
(∀ ) x ∈ X , (∃) α 1 ,α 2 ,L,α p ≥ 0 cu α 1 + α 2 +L+α p = 1 astfel încât :
x = α 1v1 + α 2 v 2 +L+α p v p
w1
X w2
v1
v3
2
v conv{v1,v2,v3}
Figura 3.1.5
secţiunea 4.1, AP are cel puţin un vârf, adică p ≥ 1. Vom enunţa şi demonstra
acum teorema centrală a programării liniare.
Demonstraţie: Fie:
f ( x ) = cx = c1x1 + c2 x2 +L+ cn xn
cw k ≤ 0 (∀ ) k = 1,L, q
{
Să presupunem prin absurd că există o rază extremă w ∈ w1 , w 2 ,L, wq astfel }
că cw > 0 . Luăm o soluţie admisibilă oarecare x 0 ( AP ≠ ∅!) .Ştim că:
x (α ) = x 0 + α w ∈ AP , (∀ ) α ≥ 0
Atunci:
f ( x (α )) = cx 0 + α cw → ∞ cînd α → ∞.
{ }
Fie acum v* ∈ v1 , v 2 ,L, v p cu proprietatea că:
{
f ( v* ) = cv * = max f ( v1 ) = cv1 , f (v 2 ) = cv 2 ,L, f ( v p ) = cv p }
Să considerăm o soluţie admisibilă oarecare x ∈ AP . Am văzut că există
scalarii:
Atunci:
28 I. PROGRAMARE LINIARA
max f = cx
( P) Ax ≤ b
x≥0
unde:
Ştim din secţiunea 1.3 că orice program liniar poate fi scris în această formă.
Forma standard a programului (P) va fi:
y1
max f = cx y
( FSP ) Ax + y = b în care: y = este vectorul variabilelor de abatere.
2
x ≥ 0 , y ≥ 0 M
ym
max f = cx
( P ) Ax = b
x≥0
implică:
∑ ( x i − x i′ ) A i = 0
i ∈I ( x )
∑ yi Ai = 0
i ∈I ( x )
n
∑ yi Ai = 0 ⇔ Ay = 0
i =1
xi xi
max − y i min − y i
λ = i∈I ( x ), yi >0 λ = i∈I ( x ), yi <0
− ∞ daca toti y ≤ 0 + ∞ daca toti y ≥ 0
i i
Avem λ < 0 < λ şi deoarece y ≠ 0, cel puţin una din extremităţile λ , λ este
finită. Astfel şi afirmaţiile 2) , 3) sunt probate.
x B
x= S
x
cu x B = [ x i ] i∈I , xS = x j [ ] j ∈J
x B
[ B, S ] S = b ⇔ Bx B + Sx S = b
x
Deoarece B este o bază a spaţiului Rm, B (ca matrice!) este nesingulară deci
inversabilă. Înmulţind la stânga cu B-1 obţinem:
x B + Sx S = b cu S = B −1 S = a ij [ ] i ∈I , j ∈J
, b = B −1 b = [ bi ] i∈I (3.5.2)
S = B −1 [ A j ] j ∈J == [ B −1 A j ] j ∈J = [ A j ] j ∈J
cu
A j = B −1 A j = a ij[ ] i ∈I
(3.5.3)
x
= c b − ( c S − c S )x S = f − c S x S
B B
(3.5.4)
unde:
36 I. PROGRAMARE LINIARA
−1
f = c b ( = c B b ) = ∑ c i bi
B B
(3.5.5)
i∈I
şi:
c S = c B S − c S ( = c B B −1 S − c S ) = c j [ ] j ∈J
în care:
c j = c B A j − c j ( = c B B −1 A j − c j ) = ∑ c i a ij − c j (3.5.6)
i ∈I
max f = f − ∑ c j x j
max f = f − c S x S j ∈J
( PB ) x B + Sx S = b ⇔ x i + ∑ a ij x j = bi i ∈ I (3.5.7)
j ∈J
x ≥ 0 ,x ≥ 0
B S
x i ≥ 0 , i ∈ I ; x j ≥ 0 , j ∈ J
Luând în (PB):
xS = 0 ⇔ xj = 0 , j ∈ J (3.5.8)
obţinem:
xB = b ⇔ x i = bi i ∈I (3.5.9)
Vectorul:
b ← x B
x= (3.5.10)
0 ← x
S
este evident o soluţie a programului (P), numită soluţia asociată bazei B. Vom
spune că B este o bază admisibilă dacă soluţia asociată (3.5.10) este
admisibilă, ceea ce revine la a spune că bi ≥ 0 , i ∈ I .
ci cr cj ck
CB B VV K Ai K Ar K Aj K Ak K
B
M M M M M M M
ci Ai bi K 1 K 0 K aij K ai K (TB)
k
M M M M M M M
cr Ar br K 0 K 1 K arj K ar K
k
M M M M M M M
f f K * K * K cj K ck K
38 I. PROGRAMARE LINIARA
Tabelul 3.5.1
4. Metoda simplex
Deoarece ştim că dacă programul în formă standard (P) are optim finit
o soluţie optimă va fi cu necesitate o soluţie de bază şi deci va fi asociată unei
baze B*, este natural să ne întrebăm cum găsim această bază optimală
B*.Traducând în termeni algebrici procedeul geometric “naiv”, descris în
finalul secţiunii 3.2, rezultă următoarea procedură:
f ( y) = f − ∑ c j y j ≤ f = f ( x )
j∈J
Inegalitatea de mai sus arată că, dintre toate soluţiile admisibile ale
programului(P),soluţia x din (3.5.10) oferă funcţiei obiectiv f cea mai mare
valoare posibilă. Dacă costurile reduse sunt pozitive şi y ≠ x atunci
inegalitatea de mai sus este strictă, fapt care probează unicitatea soluţiei
optime x .
xk = θ ≥ 0 ; xj = 0 , j ∈ J , j ≠ k (4.1.1)
Rezultă:
x i = b i − θa ik , i ∈ I (4.1.2)
40 I. PROGRAMARE LINIARA
Notăm cu x (θ) soluţia ale cărei componente sunt definite în (4.1.1) şi
(4.1.2). Condiţia enunţului face ca x (θ) ∈ A , (∀) θ ≥ 0. Evaluăm funcţia
obiectiv în soluţia x (θ) :
f ( x(θ)) = f − θ c k (4.1.3)
Rezultă imediat că: lim f ( x(θ)) = +∞ .Deci f este nemărginită superior pe A şi
θ→∞
ca urmare (P) are optim infinit.
br b
= min i (4.1.4)
a rk i∈I aik >0 a ik
A k = BA k = ∑ a ik A i + a rk A r
i∈I ,i ≠ r
a ik i 1 k
Ar = − ∑ A + A
i∈I ,i ≠ k a rk a rk
br
Pentru i = r avem x r = b r − a rk = 0 aşa că soluţia de mai sus poate fi
a rk
rescrisă astfel:
x j = 0 , j ∈ J , j ≠ k ; x r = 0
br br (4.1.6)
x i = b i − a a ik , i ∈ I, i ≠ r ; x k = a
rk rk
- dacă a ik ≤ 0 atunci xi ≥ 0;
br b b
- dacă a ik > 0 atunci b i − a ik ≥ 0 ⇔ i ≥ r care are loc
a rk a ik a rk
conform alegerii indicelui r (vezi (4.1.4)).
În al doilea rând remarcăm că x ′ este soluţia asociată bazei B'. Într-adevăr, din
(4.1.6) rezultă că în x ′ toate variabilele secundare în raport cu baza B' au
valoarea 0. Afirmaţia rezultă acum din unicitatea soluţiei asociate unei baze.
br
f ( x ′) = f − c k ≥ f = f ( x) (4.1.7)
a rk
max f = f − ∑ c ′j x j − c r′ x r
j∈J , j≠ k
x i + ∑ a ij′ x j + a ir′ x r = b i′ i ∈ I, i ≠ r
( PB' ) j∈J , j≠ k (4.1.8)
x k + ∑ a kj ′ x j + a kr
′ x r = b k′
j∈J , j≠ k
x1 , x 2 ,..., x n ≥ 0
(Vom remarca faptul că unele elemente din (4.1.8) sunt deja evaluate! Astfel,
termenii liberi, adică valorile noilor variabile bazice, sunt daţi de (4.1.6) în
timp ce constanta f ′ , care este valoarea funcţiei obiectiv în noua soluţie de
bază x ′ , a fost obţinută în (4.1.7).)
x r + ∑ a rj x j + a rk x k = b r
j≠ k
a rj a ik b
x i + ∑ ( a ij − )x j − x r = b i − r a ik , i ∈ I, i ≠ r (4.1.10)
j≠ k a rk a rk a rk
br a rj c
f = (f − ck ) − ∑ (c j − ck )x j + k x r (4.1.11)
a rk j≠ k a rk a rk
a rj i ∈ I, i ≠ r a
a ij′ = a ij − a ik ; a ir′ = − ik i ∈ I, i ≠ r
a rk j ∈J, j ≠ k a rk
a rj 1
′ =
a kj j ∈ J , j ≠ k ; a kr
′ = (4.1.12)
a rk a rk
br a rj ck
f′ = f − ck ; c ′j = c j − ck j ∈ J , j ≠ k ; c r′ = −
a rk a rk a rk
c k = min c j (4.2.1)
j∈J
Pasul 3. Dacă:
a ik ≤ 0 , i ∈ I ( ⇔ A k ≤ 0)
br b
= min i (4.2.2)
a rk i∈I aik >0 a ik
b
f ( x ′) − f ( x) = − r c k (4.2.3)
a rk
br
Cum ≥ 0 (vezi (4.2.2)) urmează că introducerea în bază a oricărei coloane
a rk
nebazice Aj cu c j < 0 îmbunătăţeşte valoarea curentă a funcţiei obiectiv.
Alegerea coloanei nebazice care va intra în baza curentă după formula (4.2.1)
asigură funcţiei obiectiv cea mai mare viteză de variaţie şi în general conduce
la terminarea algoritmului în mai puţine iteraţii.
2) Se poate arăta uşor că dacă situaţia descrisă în pasul 3 are loc atunci
vectorul w = (w1,w2,...,wn)T definit prin:
w i = − a ik , i ∈ I ; w j = 0 , j ∈ J , j ≠ k ; w k = 1 (4.2.4)
(altfel spus, orice soluţie optimă este o combinaţie convexă a soluţiilor optime
de bază)
max f = 2 x1 + x 2
( P) x1 − x 2 ≤ 4 ; 3x1 − x 2 ≤ 18 ; − x1 + 2 x 2 ≤ 6
x1 ≥ 0 , x 2 ≥ 0
x2
Figura 4.2.1
Aducem (P) la forma standard adăugând variabilele de abatere x3, x4, x5:
max f = 2 x1 + x 2
x1 − x 2 + x 3 = 4
( FSP) 3x1 − x 2 + x4 = 18
− x + 2 x + x5 = 6
1 2
x j ≥ 0 , j = 1,...,5
1 = 0 , x2 = 0 , x3 = 4 , x4 = 18 , x5 = 6
48 I. PROGRAMARE LINIARA
2 1 0 0 0
cB B VVB A1 A2 A3 A4 A5
0 A3 4 1 -1 1 0 0 x 1 - x 2 + x3 = 4
0 A4 18 3 -1 0 1 0 3x1 - x2 +x4 = 18
0 A5 6 -1 2 0 0 1 -x1+2x2 +x5 = 6
f 0 -2 -1 * * * -2x1 -x2 +f = 0
1
22 A 4 1 -1 1 0 0 x1 -x2 + x3 = 4
0 A4 6 0 2 -3 1 0 2x2 -3x3 +x4 = 6
0 A5 10 0 1 1 0 1 x 2 + x3 +x5 = 10
f 8 * -3 2 * * -3x2 +2x3 +f = 8
2 A1 7 1 0 -1/2 1/2 0 x1 - 1/2x3+1/2x4 = 7
1 A2 3 0 1 -3/2 1/2 0 x2 -3/2x3+1/2x4 = 3
0 A5 7 0 0 5/2 -1/2 1 5/2x3 - 1/2x4 +x5 = 7
f 17 * * -5/2 3/2 * -5/2x3+3/2x4 +f = 17
1
2 A 42/5 1 0 0 2/5 1/5 x1 +2/5x4 +1/2x5 =
42/5
1 A2 36/5 0 1 0 1/5 3/5 x2 +1/5x4 +3/5x5 = 36/5
0 A3 14/5 0 0 1 -1/5 2/5 x3 -1/5x4 +2/5x5 =
14/5
f 24 * * * 1 1 x4 + x5 +f = 24
Componentele
soluţiei de bază Soluţia Valoarea
Soluţia Baza generată de algoritm programului funcţiei
x1 x2 x3 x4 x5 (P) obiectiv
S0 B0 = [A3 , A4 , 0 0 4 18 6 (0 , 0) 0
A5]
S1 B = [A1 , A4 ,
1
4 0 0 6 10 (4 , 0) 8
A5]
S2 B2 = [A1 , A2 , 7 3 0 0 7 (7 , 3) 17
A5]
S3 B3 = [A1 , A2 , 42/5 36/5 14/5 0 0 (42/5 , 36/5) 24
A3]
4. Metoda simplex 49
Tabelul 4.2.5
programului (P), asociate prin corespondenţa Φ din finalul secţiunii 3.3 (vezi
tabelul 4.2.5).
Urmărind imaginea grafică (fig. 4.2.1), deducem sensul geometric al
algoritmului simplex: procedura pleacă dintr-un vârf al mulţimii soluţiilor
admisibile apoi se deplasează către un vârf “vecin” mai bun ş.a.m.d. până la
găsirea soluţiei optime.
Vom spune că programul în formă standard (P) este în formă bună dacă
matricea A conţine o submatrice unitate de ordinul m (= numărul restricţiilor)
iar termenii liberi sunt nenegativi. Dacă este aşa, (P) satisface condiţia (3.5.1)
iar soluţia asociată bazei unitare este admisibilă şi poate fi considerată ca
soluţie de start pentru aplicarea algoritmului simplex. Dacă (P) nu este în
formă bună, el se poate aduce la această formă, notată (FBP), în felul următor:
1. Forma bună are optim infinit. Atunci şi programul iniţial are optim
infinit.
2. Forma bună are optim finit dar în soluţia optimă cel puţin o
variabilă artificială are valoare nenulă. Atunci programul original este
incompatibil.
3. Forma bună are optim finit şi în soluţia optimă toate variabilele
artificiale au valoarea zero. Ignorând valorile acestor variabile se obţine
soluţia optimă a programului iniţial.
x 1 ≥ 0 , x 2 ≥ 0 x j ≥ 0 , j = 1,...,5
x j ≥ 0 , j = 1,...,7
x1 = x2 = x3 =x4 = 0 x5 = 30 , x6 = 40 , x7 = 30
După trei iteraţii (vezi tabelele 4.3.1 - 4.3.4) se obţine soluţia optimă a
programului (FBP) în care variabilele artificiale x6 , x7 au valoarea zero.
Ignorând aceste valori se obţine soluţia optimă a formei standard (FSP) şi
implicit soluţia optimă a programului original (P):
x1∗ = 10 , x 2∗ = 20 f max = 80
2 3 0 0 0 -M -M
cB B VVB A1 A2 A3 A4 A5 A6 A7
-M A6 40 2 1 -1 0 0 1 0
-M A7 30 1 3 0 -1 0 0 1
0 A5 30 1 1 0 0 1 0 0
f -70M -3M-2 -4M-3 M M * * *
-M A6 30 5/3 0 -1 1/3 0 1 -1/3
3 A2 10 1/3 1 0 -1/3 0 0 1/3
0 A5 20 2/3 0 0 1/3 1 0 -1/3
f -30M+30 -5/3M-1 * M -M/3-1 * * 4M/3+1
2 A1 18 1 0 -3/5 1///5 0 3/5 -1/5
3 A2 4 0 1 1/5 -2/5 0 -1/5 2/5
0 A5 8 0 0 2/5 1/5 1 -2/5 -1/5
f 48 * * -3/5 -4/5 * M+3/5 M+4/5
2 A1 10 1 0 -1 0 -1 1 0
3 A2 20 0 1 1 0 2 -1 0
0 A4 40 0 0 2 1 5 -2 -1
f 80 * * 1 * 4 M-1 M
x2
A
S1: x1=0 , x2=10 x1
Figura 4.3.1
unde E este matricea unitate de ordinul m = numărul restricţiilor din (P). După
cum am văzut, E se ia ca bază de start în procesul rezolvării programului (P)
1 0 − 1
B −1
= [A , A , A ] = −1
6 7 5
0 2
− 2 − 1 5
54 I. PROGRAMARE LINIARA
O calitate remarcabilă a algoritmului simplex este aceea că produce
nu numai soluţia optimă a problemei căreia i se aplică ci şi soluţia optimă a
problemei duale.
max f ( x ) = cx min g( u ) = ub
( P ) Ax = b ( Q ) uA ≥ c
x≥0 u oarecare
care este dualul programului (P) rezolvat în exemplul 4.3.1. După adăugarea
variabilelor de abatere şi a celor artificiale, din (P) s-a obţinut programul
(P1) = (FBP) al cărui dual este:
1 0 − 1
u = c B = [ 2 3 0] − 1 0
∗ B −1
2 = [ − 1 0 4]
− 2 − 1 5
adică: u1∗ = −1, u2∗ = 0, u3∗ = 4.
π j = c B A j = ∑ c i a ij j ∈J
i∈I
c j =πj - cj j=1,…,n
x1 + 14 x 4 − 8 x 5 − x 6 + 9 x 7 = 0
x2 + 12 x 4 − 12 x 5 − 12 x 6 + 3x 7 = 0
x3 + x6 =1
(max)f = 4 x − 20 x + 2 x − 6 x
3 1
4 5 6 7
B5 = [A6,A2,A3] , B6 = [A4,A2,A3]
xf y dacă x-y f 0
Prin urmare relaţia f este o relaţie de ordine totală pe Rn care extinde relaţia
de ordine naturală din R În plus ea este compatibilă cu structura liniară a
spaţiului Rn în sensul că:
• x f y ⇒ x+z f y+z
• x f y şi λ > 0 ⇒ λ x f λ y
Ax = b ≥ 0
( P) x ≥ 0
(max) f = cx
4. Metoda simplex 59
Putem presupune că problema (P) este în formă bună, altfel spus că matricea A
conţine o submatrice unitate de ordinul m, unde m este, ca de obicei, numărul
restricţiilor. Renumerotând convenabil variabilele problemei putem presupune
că primele m coloane din A sunt unitare, astfel că A are forma A = [E , S].
Atunci tabelul simplex asociat unei baze oarecare B, nu neapărat admisibilă,
are următorul conţinut:
VVB
B b B-1 B-1S
0
şi este clar că toţi q iB f 0 . Introducem vectorul q B = ( f , c ) în care f este
valoarea funcţiei obiectiv în soluţia asociată bazei B iar c este vectorul
costurilor reduse corespunzătoare (vezi secţiunea 3.5).
Definiţie Spunem că baza B' este lexicografic mai bună decât baza B
(în sensul maximizării funcţiei obiectiv f ) şi vom scrie B' f B dacă qB' f qB.
Evident B' fB este o relaţie de ordine totală în mulţimea bazelor problemei (P).
Se constată imediat că dacă B' este lexicografic mai bună decât B atunci B' este
cel puţin la fel de bună ca şi B în sensul obişnuit adică f ' ≥ f .
60 I. PROGRAMARE LINIARA
Ideea de modificare a algoritmului simplex descris în 4.2 constă în a
pleca de la o bază B0 lexicografic admisibilă şi de a genera în continuare numai
baze lexicografic admisibile B1 , B2 ,... care să fie din ce în ce mai bune în sens
lexicografic, adică:
B0 p B1 p B2 p ...
Având în vedere că în şirul de mai sus nu pot exista două baze identice şi că
numărul bazelor admisibile este finit urmează că ideea de modificare a
algoritmului simplex propusă mai sus garantează convergenţa procedurii.
1 B 1
q r = minlex qiB (4.5.2)
a rk i ,aik >0 a
ik
în care qiB , i ∈ I sunt daţi de (4.5.1) iar minimul din membrul drept este luat
în sens lexicografic. Acest minim se calculează astfel:
br b
= min i
a rk i ,aik >0 aik
1 B
Dacă I0 se reduce la un singur indice r atunci q r realizează minimul
a rk
lexicografic din (4.5.2). Prin urmare dacă minimul din (4.2.2) este unic cele
două criterii de ieşire din bază (4.2.2) şi (4.5.2) coincid.
Dacă I0 se compune din cel puţin două elemente, se determină mulţimea I1 ⊆ I0
a indicilor r cu proprietatea că:
ar1 a
= min i1
a rk i ∈I 0 a ik
a ri a
= r 'i pentru toţi i = 1,...,m
a rk a r 'k
aik B 1 B
qiB ' = qiB − qr i≠r; q kB ' = qr
a rk a rk
1 B 1 B
qiB ' = aik qi − qr f 0
aik a rk
ck B
în virtutea alegerii lui r, conform (4.5.2). În fine: q B ' = q B − q r şi deoarece
a rk
ck < 0 rezultă q B ' f q B .
62 I. PROGRAMARE LINIARA
Aplicarea în calculul manual a criteriului de ieşire din bază modificat
(4.5.2) este foarte simplă:
bi
Dacă minimul rapoartelor , aik > 0 din criteriul uzual de ieşire
aik
din bază nu este unic şi se atinge pe o submulţime de indici I0 se caută minimul
a
rapoartelor i1 , i ∈ I 0 în care numărătorii sunt luaţi din prima coloană a
aik
inversei bazei curente. Dacă nici acesta nu este unic şi se atinge pe o
a
submulţime I1 ⊆ I0 se caută minimul rapoartelor i 2 , i ∈ I 1 cu numărătorii din
aik
a doua coloană a inversei bazei ş.a.m.d. După cum am văzut acest proces se
termină într-un număr finit de paşi cu găsirea unui unic indice r. Vectorul Ar
părăseşte baza.
Consideraţiile de mai sus vor fi aplicate problemei din ex.4.5.1 (vezi tabelele
4.5.1 - 4.5.3)
La prima iteraţie intră în bază A4. Se observă că:
b b
min 1 , 2 = min{0 , 0}
a14 a 24
nu este unic. Fie I0 = {1,2}. Prima coloană a inversei bazei curente este A1 şi
ca urmare calculăm:
a a 1 0 a 21
min 11 , 21 = min , =0=
a14 a 24 1 4 1 2 a 24
Plecând cu baza unitară admisibilă E = [A3, A4, A5] , în două interaţii se ajunge
la tabelul 4.6.1:
3 4 0 0 0
CB B VVB A 1
A 2
A 3
A4
A5
3 A1 4/5 1 0 1/5 -4/5 0
4 A2 18/5 0 1 2/5 -3/5 0
0 A5 42/5 0 0 3/5 -2/5 1
f 84/5 * * 11/5 -24/5 *
Tabelul 4.6.1
x2
v1+αw1,α≥0
v1
AP
w1=(4/5,3/5)
w2=(2,1)
v2+αw2,α≥0
v2
x1
Figura 4.6.1
Exemplu 4.6.2 (Incompatibilitate) Considerăm programul:
(min) f = 6 x1 + x 2 − 2 x 3
5x − x + x ≥ 6
1 2 3
( P ) 2 x1 + x 2 + 3 x 3 ≤ 7
− 3x + x + 2 x = 2
1 2 3
x1 , x 2 , x 3 ≥ 0
(min) f = 6 x1 + x 2 − 2 x 3 + Mx 6 + Mx 7 , M ≥ 0
5 x1 − x 2 + x 3 − x 4 + x6 =6
( FBP) 2 x1 + x 2 + 3x 3 + x5 =7
− 3x + x + 2 x + x7 = 2
1 2 3
xj ≥ 0 1≤ j ≤ 7
4. Metoda simplex 65
Tabelul 4.6.2
min f = 3x1 + 2 x 2
− x1 + 2 x 2 ≥ 2
( P)
− 3 x1 + x 2 ≤ 3
x1 fara restrictii de semn, x 2 ≥ 0
3 -3 2 0 0 M
CB B VVB (A1)' (A1)'' A2 A3 A4 A5
2 A2 3/5 0 0 1 -3/5 -1/5 3/5
-3 (A1)'' 4/5 -1 1 0 1/5 2/5 -1/5
f - 6/5 0 * * - 9/5 - 8/5 9/5 - M
Tabelul 4.6.3
x1* = −4 / 5, x 2* = 3/ 5
4. Metoda simplex 67
4.7 Interpretarea economică a algoritmului simplex
max f = cx
Ax = b
x≥0
După cum se vede, lista activităţilor de bază determină în mod unic cantităţile
de bunuri ce pot fi produse şi ca atare detectarea unui program mai bun se
poate face numai studiind oportunitatea utilizării unor activităţi secundare care
68 I. PROGRAMARE LINIARA
să înlocuiască o parte din activităţile bazice curente. Pentru aceasta avem
nevoie de un criteriu care să permită compararea unei activităţi secundare j cu
grupul activităţilor de bază. Să examinăm coloana Aj a tabelului simplex
asociat bazei B. Conform (3.5.3) Aj = B-1Aj de unde Aj = B.Aj sau:
A j = a1 j A1 + a 2 j A 2 +....+ a mj A m (4.7.1)
[ ]
în ipoteza că B = A1 , A 2 ,..., A m . Sensul economic al egalităţii (4.7.1) este
următorul: din punctul de vedere al consumului de resurse producerea unei
unităţi din bunul j este echivalentă cu producerea cantităţilor a1 j , a 2 j ,..., a mj
din bunurile activităţilor de bază. În consecinţă, dacă se doreşte producerea
unei unităţi din bunul j, producţia activităţilor de bază trebuie diminuată cu
cantităţile a1 j , a 2 j ,..., a mj .Analiza oportunităţii introducerii în fabricaţie a
bunului j se va face prin compararea aportului său la creşterea venitului firmei
cu aportul valoric al cantităţilor a1 j , a 2 j ,..., a mj .Astfel, realizarea unei unităţi
din bunul j determină creşterea valorii curente a funcţiei obiectiv cu preţul său
cj în timp ce renunţarea la producerea cantităţilor a1 j , a 2 j ,..., a mj înseamnă
diminuarea aceleiaşi valori cu suma c1a1 j + c2 a 2 j +...+ cm a mj .Prin urmare dacă
diferenţa:
c j = c1a1 j + c2 a 2 j +...+ cm a mj − c j
x1 = b1 − θ a1k , x 2 = b2 − θ a 2 k ,..., x m = bm − θ a mk
4. Metoda simplex 69
Deoarece desfăşurarea unei activităţi la un nivel negativ este lipsită de sens
va trebui să avem bi − θ aik ≥ 0 i = 1,.., m de unde:
bi
θ ≤ θ 0 = min
i ,a
ik
>0 aik
(max) f = cx
( P) x ≥ 0
Ax = b
1) Costurile reduse: c j = c B B −1 A j − c j , j ∈J
Dacă testul de optimalitate nu este îndeplinit se determină k∈J astfel ca:
ck = min c j
j ∈J
k
Coloana A intră în baza curentă.
2) Componentele coloanei:
k
A = B −1 A k
Admiţând că nu are loc cazul optimului infinit se determină i∈I astfel încât:
br = min bi
a rk a ik > 0 a ik
cj=cBAj-cj , j∈J
π=cBB-1
B b B-1
f f π
cj=πAj-cj , j∈J
ck = min c j ( ck < 0 !)
j ∈J
br = min bi
a rk a ik > 0 a ik
72 I. PROGRAMARE LINIARA
(max) f = 3x1 + 4 x2 + x3 + 2 x4 + 2 x5 + x6
2 x1 − 4 x 3 + 2 x4 − 2 x6 ≤ 5
2 x1 − 4 x2 + 4 x4 − 2 x5 + 2 x6 ≥ 1
(P)
x2 + x3 =1
x4 + x5 + x6 = 1
xj ≥ 0 , 1 ≤ j ≤ 6
2 x1 − 4 x3 + 2 x4 − 2 x6 + x7 =5
2 x1 − 4 x 2 + 4 x 4 − 2 x5 + 2 x 6 − x8 + x 9 =1
x2 + x3 + x10 =1
x 4 + x5 + x 6 + x11 =1
x j ≥ 0 , j = 1,...,11
w=x9+x10+x11
pe care o minimizăm. Luăm ca bază de start B=E=[A7, A9, A10, A11] căreia îi
corespunde soluţia: x1=x2=x3=x4=x5=x6=x8=0 , x7=5 , x9=1 , x10=1 , x11=1. În
raport cu această bază cB=[0,1,1,1] astfel că π=cBB-1=[0,1,1,1], w=πb=3 .
Primul tabel simplex redus arată astfel:
A7 5 1 0 0 0
A9 1 0 1 0 0
A10 1 0 0 1 0
A11 1 0 0 0 1
w 3 0 1 1 1
74 I. PROGRAMARE LINIARA
Tabelul 4.8.1
(A4)T → 2 4 0 1 A4
A7 5 1 0 0 0 2
A9 1 0 1 0 0 4
A10 1 0 0 1 0 0
A11 1 0 0 0 1 1
w 3 0 1 1 1 5=c4
Tabelul 4.8.2
cB (A1)T → 2 2 0 0 A1
7
0 A 4 1 1 4 -6 4
2 A4 1 0 0 0 1 0
1 A3 1/4 0 1/4 1 -1 1/2
4 A2 3/4 0 -1/4 0 1 -1/2
w 0
f 21/4 0 -3/4 1 5 -9/2=c1
Tabelul 4.8.5
şi facem produsele scalare ale lui (A4)T cu liniile matricei B-1; rezultatele le
înscriem în dreapta tabelului 4.8.2. Tot în dreapta jos înscriem costul redus c4.
Parcurgând celelalte etape al algoritmului găsim că A9 părăseşte baza. Se
efectuează pivotarea tabelului 4.8.2 cu pivotul încadrat şi se obţine tabelul
(4.8.3). Tabelele 4.8.4 si 4.8.5 aparţin deasemeni fazei I.
4. Metoda simplex 75
Tabelul 4.8.6
x1* = 11
2 , x 2* = 0 , x 3* = 1 , x 4* = x5* = 0 , x 6* = 1 ; (max) f = 37
2
A6 1 0 0 0 1
A3 1 0 0 1 0
A1 11/2 1/2 0 2 1
A8 12 1 -1 4 4
f 37/2 3/2 0 7 4
Tabelul 4.8.11
***
n
∑ aij x j = bi i = 1,..., m
j =1 Ax = b
( P) x j ≥ 0 j = 1,..., n ⇔ x ≥ 0
(max) f = cx
n
(max) f = ∑ c j x j
j =1
(max) f = f − ∑ c j x j (max) f = f − c S x S
j ∈J
B
( PB ) xi + ∑ aij x j = bi ⇔ x + Sx = b
S
j ∈J
B
x ≥ 0 , x ≥ 0
S
xi ≥ 0 , i ∈ I ; x j ≥ 0 , j ∈ J
m
∑ aij ui ≥ c j j = 1,..., n uA ≥ c
i =1
(Q) ui oarecari , i = 1,..., m ⇔ u oarecare
m (min) g = ub
(min) g = ∑ bi ui
i =1
5. Algoritmul simplex dual 77
m
i∑ aij ui − v j = c j
=1 uA − v = c
( FSQ) ui oarecari , i = 1,..., m; v j ≥ 0 j = 1,..., n ⇔ u oarecare , v ≥ 0
(min) g = ub
m
(min) g = ∑ bi ui
i = 1
Partiţionând:
[
v = v B ,vS ] cu v B = [vi ]i ∈I , vS = vj [ ] j ∈J
uB − v B = c B (511
..)
[
uA − v = c ⇔ u[ B, S ] − v , v B S
] = [c B
,c S
] ⇔
uS − v = c
S S
(512
.. )
u = c B B −1 + v B B − 1 (5.1.3)
Introducem u în (5.1.2):
( c B B −1 + v B B − 1 ) S − v S = c S ⇔ v S − v B B − 1 S = c B B − 1 S − c S ⇔ v S − v B S = c S
(cu notaţiile 3.5.2-3.5.7) Folosind din nou (5.1.3) eliminăm u din funcţia
obiectiv duală:
vS − vB S = c S
(QB ) v S ≥ 0 , v B ≥ 0
(min) g = f + v b
B
78 I. PROGRAMARE LINIARA
xi + ∑ aij x j = b i i ∈ I v j − ∑ aij vi = c j j ∈ J
j ∈J i ∈I
( PB ) xi ≥ 0 , i ∈ I ; x j ≥ 0 , j ∈ J (QB ) v j ≥ 0 , j ∈ J ; vi ≥ 0 , i ∈ I
(max) f = f − j∑ cj x j (min) g = f + i∑ vi b i
∈J ∈I
c c
x B + Sx S = b vS − vB S = c S
B S
x ≥ 0 , x S ≥ 0 v ≥ 0 , v ≥ 0
B
(max) f = f − c x (min) g = f − v b
S S B
vB ≥ 0 ⇒ vS = c S
c (5.1.4)
vi=0 , i ∈ I ⇒ vj=c j , j ∈ J
u = cBB-1 (5.1.5)
c S ≥ 0 ⇔ c j ≥ 0 , j ∈ J
b ≥ 0 ⇔ bi ≥ 0 , i ∈ I
xS=0 ⇒ xB=b
c (5.1.6)
xj = 0 , j ∈J ⇒ xi = b i , i ∈ I
• Una din soluţii este primal admisibilă dacă şi numai dacă cealaltă
este dual admisibilă. Oricare din ele este optimă dacă şi numai dacă este
simultan primal şi dual admisibilă.
b r = min b i (b r < 0)
i ∈I
Coloana Ar părăseşte baza curentă.
5. Algoritmul simplex dual 81
ck = min c j
a rk arj <0 a rj
(min) f = 12 x1 + 2 x 2 + 6 x 3
− 3x − 2 x + x ≥ 3
1 2 3
( P)
4 x1 + x 2 + x 3 ≥ 4
x1 , x 2 , x 3 ≥ 0
dar dacă evaluăm costurile reduse c1 , c2 , c3 constatăm că ele verifică
criteriul de optimalitate al algoritmului simplex (bineînţeles pentru probleme
de minimizare!).Vezi tabelele 5.2.1-5.2.4.
x1* = 1
7 , x 2* = 0 , x 3* = 24
7 ; f min = 156
7
12 2 6 0 0
cB B VVB A1 A2 A3 A4 A5 A5 iese din baza curentă.
0 A4 -3 3 2 -1 1 0 min{-12/-4 , -2/-1 , -6/-1} =
0 A5 -4 -4 -1 -1 0 1 = 2 ⇒ A2 intră în baza curentă.
f 0 -12 -2 -6 * * ***
0 A4 -11 -5 0 -3 1 2 A4 iese din baza curentă.
2 A2 4 4 1 1 0 -1 min{-4/-5 , -4/-3} = 4/5 ⇒
f 8 -4 * -4 * -2 A1 intră în baza curentă.
12 A1 11/5 1 0 3//5 -1//5 -2/5 ***
2 A2 -24/5 0 1 -7/5 4/5 3/5 2
A iese din baza curentă.
f 84/5 * * -8/5 -4/5 -18/5 A3 intră în baza curentă.
12 A1 1/7 1 3/7 0 1/7 -1/7 ***
6 A3 24/7 0 -5/7 1 -4/7 -3/7 Soluţia curentă este dual şi primal
f 156/7 * -8/7 * -12/7 -30/7 admisibilă.
Ax = b
P( A, b, c) x ≥ 0
(max) f = cx
Cele trei teme sunt strâns legate între ele. În esenţă, determinarea unui
interval de stabilitate a soluţiei optime în raport cu un coeficient este o
problemă parametrică în care însuşi coeficientul respectiv este considerat ca
parametru. Deasemeni o problemă de postoptimizare poate fi privită ca un caz
particular al unei probleme mai generale, parametrice etc.
86 I. PROGRAMARE LINIARA
6.1 Analiza sensitivităţii. Studiu de caz
Tabelul 6.1.1
( P) 2 x1 + x 2 + 3x 3 ≤ 140
x ,x ,x ≥ 0
1 2 3
max f = 3x1 + 4 x 2 + 2 x 3
A 3 = BA 3 = − 13 A 2 + 23 A 5 + 53 A1
2 − ( − 13 ⋅ 4 + 23 ⋅ 0 + 53 ⋅ 3) = − 53 u. m. = − c3
Prin urmare profitul total ar scădea cu 5/3 u.m. la fiecare unitate din A3 inclusă
în programul de fabricaţie. În consecinţă A3 nu este rentabil a fi realizat dacă se
are în vedere în exclusivitate criteriul de performanţă ales. După cum vom
vedea în continuare, situaţia produsului A3 se va schimba în raport cu alte
criterii de evaluare.
130 + ∂ b1 130 ∂ b1
b' = 100 = 100 + 0 = b + ∂ b
140 + ∂ b3 140 ∂ b3
x 40 2 3 0 − 13 ∂ b
2 1
x ' B = x = B − 1b' = B − 1b + B − 1∂ b = 10 + − 13 1 − 13 0 =
x5 50 − 1 2 ∂ b
1 3 0 3 3
40 + 2 ∂ b − 1 ∂ b
3 1 3 3
= 10 − ∂ b − 1 ∂ b
1
3 1 3 3
1 2
50 − 3 ∂ b1 + 3 ∂ b3
− 2 ∂ b + 1 ∂ b ≤ 40
3 1 3 3
B
x ' ≥ 0 ⇔ 1 ∂ b + 1 ∂ b ≤ 10
3 1 3 3
1 2
3 ∂ b1 − 3 ∂ b3 ≤ 50
= 5 ∂ b + 2 ∂ b3
3 1 3
c6 = ( − 13 ) ⋅ 4 + ( − 13 ) ⋅ 0 + 2
3 ⋅ c1 − 0 = 23 ⋅ c1 − 4
3 ≥0
din care rezultă intervalul de stabilitate: 2 ≤ c1 ≤ 8. Deci atât timp cât profitul
pe unitatea de produs A1 se menţine între 2 şi 8 u.m. programul de producţie
optim rămâne neschimbat:
x1∗ = 50 x 2∗ = 40 x 3∗ = 0
x2 b1 23 0 − 13 b1 3 b1 − 3
2 140
x = B −1 ⋅ 100 = − 1 1 − 1 100 = − 1 b + 100 − 140 ≥ 0
5 3 3 3 1 3
b1 ≥ 70 , b1 ≤ 160 , b1 ≤ 280
x1∗ = 280
3 − 13 b1 x 2∗ = 23 b1 − 140
3
(max) f = 3 ⋅ ( 280
3 − 3 b1 ) + 4 ⋅ ( 3 b1 − 3 ) =
1 2 140 280
3 + 53 b1
92 I. PROGRAMARE LINIARA
Încă o dată remarcăm faptul că viteza de creştere a profitului este dată
tocmai de preţul dual optim u1∗ = 53 u.m. al resursei R1.
Fie:
Problema originală Problema modificată
Ax = b Ax = b
( P) x ≥ 0 ( P') x ≥ 0
(max) f = cx (max) f ' = c' x
unde c' = (c1' , c2' ,..., cn' ) este vectorul noilor coeficienţi ai funcţiei obiectiv. Să
presupunem că (P) a fost deja rezolvată cu ajutorul algoritmului simplex şi că
soluţia optimă x* este asociată unei baze B. Se remarcă faptul că (P) şi (P') au
aceeaşi mulţime de soluţii admisibile. În consecinţă, x* este o soluţie de bază
admisibilă pentru programul modificat (P'). Pentru a testa optimalitatea soluţiei
x* în raport cu noua funcţie obiectiv se recalculează costurile reduse:
c j′ = c' B B −1 A j − c ′j , j ∈J
Dacă toţi c'j ≥ 0 , j∈ J , x* este soluţie optimă şi pentru (P'). În caz contrar,
rezolvarea programului (P') se face cu ajutorul algoritmului simplex primal,
luând x* ca soluţie de start.
c1′ = 3 + 100
5
⋅ 3 = 315
, c 2′ = 4 − 100
10
⋅ 4 = 3,6 c 3′ = 2 + 100
5
⋅ 2 = 2,1
Tabelul 6.2.1
2 4 2 0 0 0
CB B VVB A1 A2 A3 A4 A5 A6
4 A2 40 0 1 -1/3 2/3 0 -1/3
0 A5 10 0 0 2/3 -1/3 1 -1/3
2 A1 50 1 0 5/3 -1/3 0 2/3
f 260 * * 0 2 * 0
Tabelul 6.2.2
2 4 2 0 0 0
94 I. PROGRAMARE LINIARA
CB B VVB A1 A2 A3 A4 A5 A6
4 A2 45 0 1 0 1/2 1/2 -1/2
2 A3 15 0 0 1 -1/2 3/2 -1/2
2 A1 25 1 0 0 3/2 -5/2 3/2
f 260 * * * 2 0 0
Tabelul 6.2.3
2 4 2 0 0 0
CB B VVB A1 A2 A3 A4 A5 A6
4 A2 65 1/2 1 1/2 1/2 0 0
0 A5 35 1/2 0 3/2 -1/2 1 0
0 A6 75 3/2 0 5/2 -1/2 0 1
f 260 0 * 0 2 * *
Tabelul 6.2.4
respectiv:
x1∗∗∗ = 0, x2∗∗∗ = 65, x3∗∗∗ = 0 (val. var. de abatere: x4∗∗∗ = 0, x5∗∗∗ = 35, x6∗∗∗ = 75 )
x = α 1 x ∗ + α 2 x ∗∗ + α 3 x ∗∗∗ cu α1 , α2 , α3 ≥ 0 şi α1 + α2 + α3 = 1
x1 = 50 α1 + 25 α2 x4 = 0
x2 = 40 α1 + 45 α2 + 65α3 x5 = 10 α1 + 35 α3
x3 = 15 α2 x6 = 75 α3
x1 = 35 , x2 = 46 , x3 = 3 ( x4 = 0 , x5 = 13 , x6 = 15 )
6. Analiza sensitivităţii. Postoptimizare. Programare parametrică 95
care, deşi optimă, nu este o soluţie de bază avînd cinci componente nenule,
cu două mai mult decât numărul restricţiilor!
50 ⋅ 12 + 40 ⋅ 18 = 1320 u.m.
310
În varianta construită rata profitului ar fi de ⋅ 100 = 23,5% . Se pune firesc
1320
întrebarea dacă propunerea de plan elaborată în 6.1 maximizează venitul total
al firmei, bineînţeles în ipotezele date adică mărginindu-ne numai la resursele
R1, R2, R3 şi la bunurile A1, A2, A3 ! Pentru a răspunde la întrebare, în tabelul
simplex optim 6.1.4 schimbăm coeficienţii c1 = 3, c2 = 4, c3 = 2 ai funcţiei
"profit total" f cu coeficienţii c1′ = 12 , c2′ = 18 , c3′ = 16 ai funcţiei "venit total" f'
şi recalculăm costurile reduse c 3′ , c 4′ , c 6′ .Găsim: c3′ = −2 , c4′ = 8 , c6′ = 2 .
Deoarece c3′ < 0 , soluţia care maximizează profitul total nu conduce şi la un
venit maxim: introducerea bunului A3 în combinaţia actuală ar majora venitul
actual de 1320 u.m. cu 2 u.m. pe unitatea de produs A3!
12 18 16 0 0 0
96 I. PROGRAMARE LINIARA
CB B VVB A1 A2 A3 A4 A5 A6
18 A2 40 0 1 -1/3 2/3 0 -1/3
0 A5 10 0 0 2/3 -1/3 1 -1/3
12 A1 50 1 0 5/3 -1/3 0 2/3
f' 1320 * * -2 8 * 2
18 A2 35 0 1 0 1/2 1/2 -1/2
16 A3 15 0 0 1 -1/2 3/2 -1/2
12 A1 25 1 0 0 1/2 -5/2 3/2
f' 1350 * * * 7 3 1
Deşi rata profitului a scăzut cu 23,5 - 18,1 = 5,4% noua soluţie are o
serie de calităţi: asigură o producţie diversificată întrucât se produc toate
bunurile şi utilizează integral resursele disponibile. Să observăm deasemeni că
preţurile duale optime ale celor trei resurse s-au modificat:
( )
T
unde b' = b1' , b2' ,..., bm' este noul vector de termeni liberi. Se observă uşor că
(P) şi (P') au aceleaşi baze dual admisibile. Fie B o bază optimală a
programului (P). Calculăm soluţia x' a programului modificat (P'), asociată
bazei B:
x'B=B-1b' x'S=0
Cum am remarcat deja, x' este o soluţie dual admisibilă pentru (P'). Dacă x'B ≥
0 atunci x' este şi admisibilă şi deci optimă. Altminteri, rezolvarea problemei
(P') se va face cu ajutorul algoritmului simplex dual, luând x' ca soluţie de
start.
Dacă x* = ( x1* , x2* ,..., xn* ) T este soluţia optimă a programului (P),
asociată unei baze B, atunci x ' = ( x1* , x 2* ,..., x n* ,0) T este evident o soluţie
admisibilă pentru (P') asociată aceleaşi baze B. Pentru a decide asupra
optimalităţii soluţiei x' calculăm:
98 I. PROGRAMARE LINIARA
−1 n +1
c n +1 = c B A
B
− c n +1
Dacă c n+1 ≥ 0 atunci x' este soluţie optimă pentru problema (P'): noua
activitate An+1 nu este "rentabilă" în raport cu grupul activităţilor reprezentate
*
în x .
Dacă c n+1 < 0 , aplicăm în continuare algoritmul simplex, luând x' ca soluţie de
start; la prima iteraţie, noua coloană An+1 va intra în bază.
23 0 − 13 2
c7 = c B B −1 A 7 − c7 = [4 0 3]− 13 1 − 13 3 − c7 = 4 − c7
− 13 0 23 1
Atunci:
c7 ≥ 0 ⇒ c7 ≤ 4 u.m.
În concluzie, dacă profitul estimat pentru bunul A' este inferior valorii de 4
u.m. introducerea lui în fabricaţie nu implică o creştere a profitului total.
Pentru a obţine un profit superior, conducerea firmei poate acţiona în două
direcţii: fie să crească preţul cu toate consecinţele care decurg din această
decizie în ceea ce priveşte desfacerea pe piaţă fie să reducă costurile de
producţie la acest bun. Dacă, de exemplu, profitul unitar al bunului A' ar putea
atinge valoarea c7 = 5 u.m. atunci c7 = -1 şi profitul total ar creşte cu 1
u.m. la fiecare unitate din produsul A' inclusă în programul de fabricaţie.
Pentru a obţine noua
6. Analiza sensitivităţii. Postoptimizare. Programare parametrică 99
combinaţie optimă adăugăm tabelului 6.1.4 coloana A7 = B-1A7, costul redus
c7 şi aplicăm algoritmul simplex primal.
3 4 2 0 0 0 5
CB B VVB A1 A2 A3 A4 A5 A6 A7
4 A2 40 0 1 -1/3 2/3 0 -1/3 1
0 A5 10 0 0 2/3 -1/3 1 -1/3 2
3 A1 50 1 0 5/3 -1/3 0 2/3 0
f 310 * * 5/3 5/3 * 2/3 -1
4 A2 35 0 1 -2/3 5/6 -1/2 -1/6 0
5 A7 5 0 0 1/3 -1/6 1/2 -1/6 1
3 A1 50 1 0 5/3 -1/3 0 2/3 0
f 315 * * 2 3/2 1/2 1/2 *
Se obţine soluţia :
x1 ≥ 0, x 2 ≥ 0,..., x n ≥ 0
(max) f = c1 x1 + c2 x 2 +...+ cn x n
(max) f = c1 x1 + c2 x 2 +...+ cn x n
100 I. PROGRAMARE LINIARA
Fie B baza optimă a programului (P) găsită prin aplicarea algoritmului simplex.
În consecinţă, forma explicită a problemei (P) în raport cu baza B:
xi + ∑ a ij x j = b i , i ∈ I
j ∈J
( PB ) xi ≥ 0, i ∈ I ; x j ≥ 0, j ∈ J (6.5.1)
f + j∑ cjxj = f
∈J
∑ α j x j + x n +1 = β (6.5.4.)
j ∈J
conform (6.5.2.)
Adăugând (6.5.4.) la (6.5.1) obţinem forma explicită a programului extins P' în
raport cu baza B' formată din coloanele bazei B (coloane extinse cu
coeficienţii corespunzători din restricţia suplimentară ! ) plus coloana unitară:
An+1=(0,0,...,o,1)T∈Rn+1
6. Analiza sensitivităţii. Postoptimizare. Programare parametrică 101
Soluţia asociată acestei baze:
nu este admisibilă dar verifică criteriul de optimalitate, altfel spus este dual
admisibilă. În consecinţă, pentru rezolvarea problemei extinse (P') vom aplica
algoritmul simplex dual, pornind de la soluţia (6.5.5).
2 ⋅ 50 + 2 ⋅ 40 +1⋅ 0 ≤ b4 ⇔ b4 ≥ 180
Prin urmare dacă firma reuşeşte să asigure un disponibil de cel puţin 180
unităţi din R4, programul (6.5.7) nu suferă modificări. Dacă b4 < 180, soluţia
(6.5.7) nu mai satisface restricţia suplimentară (6.5.6).Să vedem ce se întâmplă
în acest caz!
Transformăm (6.5.6) în egalitate, adăugând variabila de abatere x7:
2 x1 + 2 x 2 + x 3 + x 7 = b4 (6.5.8)
40 = x 2 − 13 x 3 + 23 x 4 − 13 x6 ⇒ x 2 = 40 + 13 x3 − 23 x4 + 13 x 6
(6.5.9)
50 = x1 + 53 x 3 − 13 x 4 + 23 x 6 ⇒ x1 = 50 − 53 x 3 + 13 x 4 − 23 x 6
102 I. PROGRAMARE LINIARA
− 53 x 3 − 23 x 4 − 23 x 6 + x 7 = b4 − 180 (6.5.10)
Tabelul 6.5.1
Tabelul 6.5.2
76 − 15 b4 ≥ 0 → b4 ≤ 380
5 b4 − 62 ≥ 0 → b4 ≥ 155
2
În concluzie, dacă b4 satisface (6.5.11) atunci soluţia din tabelul 6.5.2 adică:
x1 = 25 x2 = 45 x3 = 15
8 (12 x + 18 x + 16 x ) ↔ 6 x + 9 x − 92 x ≤ 0
16 x 3 ≥ 100 (6.5.13)
1 2 3 1 2 3
−99 x 3 − 4 x 4 − x 6 + x 7 = −660
ai cărei coeficienţi se ataşează tabelului simplex 6.1.4, după care se aplică
algoritmul simplex dual (vezi tabelele 6.5.3 - 6.5.4)
104 I. PROGRAMARE LINIARA
3 4 2 0 0 0 0
CB B VVB A1 A2 A3 A4 A5 A6 A7
4 A2 40 0 1 -1/3 2/3 0 -1/3 0
0 A5 10 0 0 2/3 -1/3 1 -1/3 0
3 A1 50 1 0 5/3 -1/3 0 2/3 0
0 A7 -660 0 0 -99 -4 0 -1 1
f 310 * * 5/3 5/3 * 2/3 *
A2 380/9
A5 50/9
A1 350/9
A3 20/3
f 2690/9
x1 = 39 x 2 = 42 x 3 = 6
6. Analiza sensitivităţii. Postoptimizare. Programare parametrică 105
x1 = 38 x 2 = 42 x 3 = 7 f ( x ) = 296 u.m.
Fie:
( P) x1 ≥ 0, x 2 ≥ 0,L , x n ≥ 0 ( P') x1 ≥ 0, x 2 ≥ 0,K , x n ≥ 0
(max) f = c x + c x +L+ c x (max) f = c ′ x + c x +K c x
1 1 2 2 n n 1 1 2 2 n n
unde:
( A1 )' = A1 + ∂ A1 , c1′ = c1 + ∂ c1
baze B. Perturbarea coloanei A1 are efect direct numai asupra costului redus al
variabilei x1 conform formulei:
Atunci:
54 1 14
7 = 2 + − 1
4 4
5 2 3 − 1 2
2 3 0 − 13 14 13
∂ A 3 = B −1 (∂ A 3 ) = − 1 3 1 − 1 3 − 1 4 = − 1 6
− 1 3 0 2 3 − 1 2 − 512
astfel că:
− 1 3 1 3 0
( A 3 )' = A 3 + ∂ A 3 = 2 3 + − 1 6 = 1 2
5 3 − 512 5 4
Cu formula 6.6.1 calculăm costul redus asociat bunului A3:
13
c3 ' = c3 + ∂ c3 = 5 3 + [4 0 3] − 1 6 − ∂ c3 = 5 3 + 112 − ∂ c3 = 7 4 − ∂ c3
− 12
5
c3 ' ≥ 0 ⇔ ∂ c3 ≤ 7 4
3 4 4 0 0 0
CB B VVB A1 A2 A3 A4 A5 A6
4 A2 40 0 1 0 2/3 0 -1/3
0 A5 10 0 0 1/2 -1/3 1 -1/3
3 A1 50 1 0 5/4 -1/3 0 2/3
f 310 * * -1/4 5/3 * 2/3
4 A2 40 0 1 0 2/3 0 -1/3
4 A3 20 0 0 1 -2/3 2 -2/3
3 A1 25 1 0 0 1/2 5/2 3/2
f 315 * * * 3/2 1/2 1/2
A 1 x 1 + A 2 x 2 + K + A n x n + ( ∂ A 1 ) x n +1 = b
( P1 ) x1 ≥ 0 , x 2 ≥ 0 , K x n ≥ 0 , x n +1 ≥ 0 (6.6.3)
(max) f = c x + c x + K c x + (∂ c ) x
1 1 2 2 n n 1 n +1
x1 = xn+1 (6.6.4)
x 1 ≤ x n +1 x 1 − x n +1 ≤ 0
x1 = x n + 1 ⇔ ⇔
x 1 ≥ x n +1 − x 1 + x n +1 ≤ 0
2 3 / 2 2 −1 / 2
A = 1 → ( A )' = 1 = A + ∂ A = 1 + 0
2 2 2 2
c 2′ = c 2 + ∂ c 2 = 4 + ∂c 2
x1 + 23 x 2 + x 3 + x 4 = 130
x1 + x 2 + 2 x 3 + x5 = 100
( P') 2 x1 + 4 x 2 + 3x 3
3
+ x 6 = 140
xj ≥ 0
(max) f = 3x1 + (4 + ∂ c2 ) x 2 + 2 x 3
x1 + 2 x 2 + x 3 − 21 x 7 + x 4 = 130
x1 + x 2 + 2 x 3 + x5 = 100
( P1 ) 2 x1 + x 2 + 3x 3 − 41 x 7 + x 6 = 140
xj ≥ 0
(max) f = 3x1 + 4 x 2 + 2 x 3 + (∂ c2 ) x 7
După cum se vede programul (P1) se deduce din (P) adăugând activitatea
A7 ≡ ∂A2 cu coeficientul c7 ≡ ∂c2 în funcţia obiectiv f. Calculăm costul redus
c7 asociat noii activităţi:
2 3 0 − 1 3 − 1 2 − 1 4
A 7 = ∂ A 2 = B −1 (∂ A 2 ) = − 1 3 1 − 1 3 0 = 1 4
− 1 3 0 2 3 − 1 4 0
110 I. PROGRAMARE LINIARA
− 1 4
c7 = c A − c7 = [4 0 3] 1 4 − ∂ c2 = −1 − ∂ c2
B 7
0
1) c7 ≥ 0 ⇔ ∂ c2 ≤ −1 ⇔ c2′ ≤ 3
3 4 2 0 0 0 ∂c2
CB B VVB A1 A2 A3 A4 A5 A6 A7
4 A2 40 0 1 -1/3 2/3 0 -1/3 -1/4
0 A5 10 0 0 2/3 -1/3 1 -1/3 1/4
3 A1 50 1 0 5/3 -1/3 0 2/3 0
f 310 * * 5/3 5/3 * 2/3 -1-∂c2
Tabelul 6.6.3
Trecem la rezolvarea programului modificat (P') completând (P1) cu restricţia:
x2 − x7 ≤ 0 x 2 − x 7 + x8 = 0
x2 = x7 ⇔ ⇒ (6.6.5)
− x 2 + x 7 ≤ 0 − x 2 + x 7 + x 9 = 0
Eliminăm din (6.6.5) variabila bazică x2. Din tabelul 6.6.3 obţinem:
x 2 − 13 x 3 + 23 x 4 − 13 x 6 − 41 x 7 = 40 ⇒ x 2 = 40 + 13 x 3 − 23 x 4 + 13 x 6 + 41 x 7
3 4 2 0 0 0 ∂c2 0 0
CB B VVB A1 A2 A3 A4 A5 A6 A7 A8 A9
4 A2 40 0 1 -1/3 2/3 0 -1/3 -1/4 0 0
0 A5 10 0 0 2/3 -1/3 1 -1/3 1/4 0 0
3 A1 50 1 0 5/3 -1/3 0 2/3 0 0 0
0 A8 -40 0 0 1/3 -2/3 0 1/3 -3/4 1 0
0 A9 40 0 0 -1/3 2/3 0 -1/3 3/4 0 1
f 310 * * 5/3 5/3 * 2/3 -1-∂c2 * *
Tabelul 6.6.4
Tabelul 6.6.4 oferă o soluţie dual admisibilă pentru programul (P'). Coloana A8
va ieşi din baza curentă. Pentru a găsi coloana care intră în bază evaluăm
rapoartele:
5/ 3 −1 − ∂ c 2 4
= 5/ 2 = ( −1 − ∂ c 2 )
−2 / 3 −3 / 4 3
1.1) 5
2 ≤ 4 3 ( −1 − ∂ c2 ) ⇔ ∂ c2 ≤ − 23 8 ⇔ c2′ ≤ 9 8
Coloana A4 intră în bază. Într-o singură iteraţie (cu pivotul încadrat -2/3 ),
algoritmul simplex dual produce următoarea soluţie optimă pentru programul
modificat (P'): x1** = 70 x 2** = x 3** = 0 (max) f = 210 u.m.
1.2) 5
2 > 4 3 ( −1 − ∂ c2 ) ⇔ − 23 8 < ∂ c2 ≤ −1 ⇔ 9
8 < c2′ ≤ 3
3 4 2 0 0 0 ∂c2
CB B VVB A1 A2 A3 A4 A5 A6 A7
4 A2 50 0 1 1/3 1/3 1 -2/3 0
∂c2 A7 40 0 0 8/3 -4/3 4 -4/3 1
3 A1 50 1 0 5/3 -1/3 0 2/3 0
f 350+400∂c2 * * 13/3+(8/3)∂c2 1/3 -(4/3)∂c2 4+4∂c2 -2/3-(4/3)∂c2 *
Tabelul 6.6.5
Costurile reduse c3 , c4 , c5 , c6 sunt expresii liniare în ∂c2. Determinăm ,
în următorul tabel, semnul valorilor acestora.
Tabelul 6.6.6
2.2) Dacă ∂ c2 > − 1 2 ⇔ c2′ > 7 2 tabelul 6.6.6 arată că c6 < 0 astfel
că soluţia din tabelul simplex 6.6.5 nu mai este optimă. Efectuăm o pivotare cu
pivotul încadrat; rezultă tabelul simplex:
6. Analiza sensitivităţii. Postoptimizare. Programare parametrică 113
3 4 2 0 0 0 ∂c2
CB B VVB A1 A2 A3 A4 A5 A6 A7
4 A2 100 1 1 2 0 1 0 0
∂c2 A7 140 2 0 6 -2 4 0 1
0 A6 75 3/2 0 5/2 -1/2 0 1 0
f 400+140∂c2 1+2∂c2 * 6+6∂c2 -2∂c2 4+4∂c2 * *
Tabelul 6.6.7
Cercetând semnele costurilor reduse din tabelul 6.6.7 şi raţionând ca mai sus se
conchide că:
2.2.2) Dacă ∂c2 > 0 ⇔ c'2 > 4 din tabelul simplex 6.6.7 rezultă că
programul intermediar (P1) are optim infinit, astfel că el nu mai poate fi folosit
la rezolvarea prin postoptimizare a programului modificat (P')! Suntem nevoiţi
să reluăm (P') de la capăt deoarece, dacă revedem tabelele simplex 6.1.2 - 6.1.4
(întocmite pentru rezolvarea problemei originale (P)), constatăm că în prima
iteraţie a intrat în bază chiar coloana modificată!
3 4+∂c2 2 0 0 0
CB B VVB A1 A2 A3 A4 A5 A6
0 A4 130 1 3/2 1 1 0 0
0 A5 100 1 1 2 0 1 0
0 A6 140 2 3/4 3 0 0 1
f 0 -3 -4-∂c2 -2 * * *
4+∂c2 A2 260/3 2/3 1 2/3 2/3 0 0
0 A5 40/3 1/3 0 4/3 -2/3 1 0
0 A6 75 3/2 0 5/2 1/2 0 1
f (1040/3)+ -(1/3)+ * (2/3) (8/3) * *
(260/3) ∂c2 (2/3)∂c2 +(2/3)∂c2 +(2/3)∂c2
2.2.2.1) Dacă: c1 = − 1 3 + 2 3 ∂ c2 ≥ 0 ⇔ ∂ c2 ≥ 1
2 ⇔ c2′ ≥ 9 2
114 I. PROGRAMARE LINIARA
soluţia din tabelul 6.6.9 nu mai este optimă. După pivotarea tabelului 6.6.9 cu
pivotul încadrat 1/3 se obţine:
3 4+∂c2 2 0 0 0
CB B VVB A1 A2 A3 A4 A5 A6
2
4+∂c2 A 60 0 1 -2 2 -2 0
3 A1 40 1 0 4 -2 3 0
0 A6 15 0 0 -7/2 5/2 -9/2 1
f 360+60∂c2 * * 2-2∂c2 2+2∂c2 1-2∂c2 *
Tabelul 6.6.10
Ipoteza implică nenegativitatea tuturor costurilor reduse şi ca urmare soluţia
otimă a problemei modificate (P') este în acest caz:
Tabelul 6.6.11
(max) f
(260/3)c2’
120 +60c2’
156 +48 c2’
390
210
300
210
c2’
9/8 3 9/2
Fig.6.6.1
Sa se determine functia:
ϕ ( λ ) = {max cx Ax = b( λ ) , x ≥ 0} , λ ∈ R
Pb ( λ )
unde:
b( λ ) = b 0 + λ b 1 ⇔ b ( λ ) = b 0 + λ b 1 , i = 1,L , m
i i i
Ax = b
Pc (0) x ≥ 0
(max) f = c 0 x
6. Analiza sensitivităţii. Postoptimizare. Programare parametrică 117
Fie B baza optimă a acestui program. Componentele bazice ale soluţiei
optime x* reunite în vectorul b = B-1b nu depind de λ şi ca urmare x* este o
soluţie de bază admisibilă pentru oricare dintre programele Pc(λ) , λ ∈ R .
[ ] [ ]
c j ( λ ) = c B ( λ ) B −1 A j − c j ( λ ) = ( c 0 ) B B −1 A j − c 0j + λ ( c1 ) B B −1 A j − c 1j =
= c j0 + λ c j1
c j ( λ ) ≥ 0 ⇔ c j0 + λ c j1 ≥ 0 j ∈J (6.7.1)
4) Pentru λ <λ cel puţin una din inecuaţiile (6.7.1) este violată.
Presupunând λ "foarte aproape" de λ se găseşte ck ( λ ) = min c j ( λ ) . ck va fi
cu siguranţă < 0. Se actualizează B şi x* introducând în bază coloana Ak după
care se repetă operaţiile 2) şi 3) determinându-se un alt interval de optimalitate
de forma [ λ' , λ ].
x1 + x 2 + x 3 ≤ 7
x1 + 2 x 2 + 2 x 3 = 13
( Pc ( λ ) 3x1 − x 2 + x 3 ≥ 5 λ∈R
x j ≥ 0 j = 1,2,3
ϕ ( λ ) = max{ f = (2 + 3λ ) x1 + (3 + 2λ ) x 2 + (5 + λ ) x 3 }
x1 + x 2 + x 3 + x 4 = 7
x1 + 2 x 2 + 2 x 3 + x6 = 13
3 x1 − x 2 + x 3 − x5 + x7 = 5 λ ∈ R
x j ≥ 0 j = 1,K ,7
(max) f = (2 + 3λ ) x1 + (3 + 2λ ) x 2 + (5 + λ ) x 3 − Mx 6 − Mx 7
2 3 5 0 0 -M -M
CB B VVB A1 A2 A3 A4 A5 A6 A7
0 A4 1/2 1/2 0 0 1 0 -1/2 0
0 A5 3/2 -5/2 2 0 0 1 1/2 -1
5 A3 13/2 1/2 1 1 0 0 1/2 0
f 65/2 1/2 2 * * * M+1/2 M
Tabelul 6.7.1
6. Analiza sensitivităţii. Postoptimizare. Programare parametrică 119
4 5 3
din care extragem baza optimă [ A , A , A ].
În continuare facem abstracţie de coloanele "artificiale" A6 şi A7 deoarece în
fapt lucrăm cu forma standard a programului Pc(λ) .Recalculăm costurile
reduse c1 şi c2 în funcţie de coeficienţii "parametrizaţi" din funcţia obiectiv:
c1 ( λ ) = 0 ⋅ 1 2 + 0 ⋅ ( − 5 2 ) + (5 + λ ) ⋅ 1 2 − (2 + 3λ ) = 1
2 − 52 ⋅ λ
c2 ( λ ) = 0 ⋅ 0 + 0 ⋅ 2 + (5 + λ ) ⋅ 1 − (3 + 2λ ) = 2 − λ
λ -∞ 1/5 2 +∞
c1(λ) + + + + + + + 0- - - - - - - - - - - - - - - --------
-
c2(λ) + + + + + + + + + + + + + 0 - - - - - - - - -------
Tabelul 6.7.2
În concluzie, pentru orice λ ∈ (-∞ , 1/5] soluţia asociată bazei [A4, A5, A3] este
optimă. Ea are componentele:
x1∗ = 0 , x 2∗ = 0 , x 3∗ = 13 2
λ 1/5 2 +∞
c2(λ) + + + + + + + 0 - - - - - - - - - - - - - ---------
c4(λ) 0+ + + + + + + + + + + + + + + + + + +++++
Tabelul 6.7.5
Deducem că pentru toţi λ ∈ [1/5 , 2], soluţia asociată bazei [A1, A5, A3]
x1∗ = 1 , x 2∗ = 0 , x 3∗ = 6
Pentru λ > 2 (şi foarte aproape de 2 deşi nu mai este necesar ...) constatăm că
c2(λ) < 0 deci soluţia de mai sus nu mai este optimă. În tabelul simplex 6.7.4
vom introduce coloana A2 în baza curentă:
Tabelul 6.7.6
x1∗ = 1 , x 2∗ = 2 , x 3∗ = 4
1/5 2
-∞ +∞
⇓ ⇓ ⇓
Soluţia optimă Soluţia optimă Soluţia optimă
x1 = 0 x1 = 1 x1 = 1
x2 = 0 x2 =0 x2 = 2
x3 = 13/2 x3 = 6 x3 = 4
Figura 6.7.1
ϕ(λ )
50
169/5
λ
1/5 2
Figura 6.7.2
Ax = b 0
Pb (0) x ≥ 0
(max) f = cx
xi ( λ ) ≥ 0 ⇔ bi 0 + λ bi 1 ≥ 0 i ∈ I (6.7.3)
4) În situaţia în care λ ≠ -∞, fie λ < λ . Cel puţin una din inecuaţiile
(6.7.3) nu va mai fi satisfăcută şi ca urmare soluţia asociată bazei B nu mai este
admisibilă. Presupunând λ "foarte aproape" de λ se determină:
Pe fiecare din aceste intervale există o singură bază optimă sau nici una
(a doua posibilitate nu poate avea loc decât în cazul primului şi ultimului
interval !) iar maximul funcţiei obiectiv, adică funcţia ϕ(λ), este liniară pe
intervalul respectiv. De exemplu, pe intervalul [λ ,λ ], ϕ(λ) are expresia:
ϕ ( λ ) = ∑ ci xi ( λ ) = ∑ cibi 0 + λ ∑ cibi 1
i ∈I i ∈I i ∈I
x1 + x2 + x3 ≤ 7 + 2λ
x1 + 2 x2 + 2 x3 = 13 + λ
Pb (λ ) 3x1 − x2 + x3 ≥ 5 + 2λ λ ∈R
x j ≥ 0 j = 1,,2,3
(max) f = 2 x1 + 3x2 + 5x3
7 + 2λ 7 2 12
b( λ ) = 13 + λ = b 0 + λ b1 = 13 + λ 1 ; b 0 = B −1 b 0 = x B ( 0 ) = 3 2
5 + 2λ 5 1 13 2
1 − 1 2 0 2 3 2
b 1 = [ B −1 = [ A 4 , A 6 , A 7 ]]b1 = 0 1 2 − 1 1 = − 3 2
0 1 2 0 2 1 2
astfel că:
x4 ( λ ) 12 32 12 + 32 λ
x B (λ ) = x5 (λ ) = b 0 + λ b 1 = 3 2 + λ − 3 2 = 3 2 − 3 2 λ
x3 (λ ) 13 2 1 2 13 2 + 1 2 λ
λ -∞ -13 -(1/3) 1 +∞
x4(λ) - - - - - - - - - - 0 + + + + + + + + +
x5(λ) + + + + + + + + + + + + +0 - - - - - -
x3λ) - - - - - 0 + + + + + + + + + + + + +
Tabelul 6.7.7
6. Analiza sensitivităţii. Postoptimizare. Programare parametrică 125
din care rezultă că:
Dacă λ este < - (1/3) şi foarte aproape de - (1/3) din tabelul 6.7.7 rezultă că
2 3 5 0 0
CB B VVB A1 A2 A3 A4 A5
0 A4 (1/2)+(3/2) λ 1/2 0 0 1 0
0 A5 (3/2) - (3/2) λ -5/2 2 0 0 1
5 A3 (13/2) + (1/2) λ 1/2 1 1 0 0
f (65/2) + (5/2) λ 1/2 2 * * *
Tabelul 6.7.8
numai x4(λ) este < 0; soluţia asociată bazei [ A4, A5, A3] nu mai este
admisibilă dar rămâne dual admisibilă, aşa cum se vede din tabelul
simplex 6.7.8; se mai constată că în linia "A4" a acestui tabel nu există nici o
valoare negativă.
Presupunem acum că λ > 1. Din tabelul 6.7.7 rezultă că x5(λ) < 0 şi din
nou soluţia asociată bazei [ A4, A5, A3] nu mai este admisibilă fiind în
continuare dual admisibilă. Examinând tabelul simplex 6.7.8 se constată că se
poate efectua o iteraţie a algoritmului simplex dual. Obţinem:
2 3 5 0 0
CB B VVB A1 A2 A3 A4 A5
0 A4 (4/5) +(6/5) λ 0 2/5 0 1 1/5
2 A1 -(3/5) + (3/5) λ 1 -4/5 0 0 -2/5
5 A3 (34/5) + (1/5) λ 0 7/5 1 0 1/5
f (164/5) +(11/5) λ * 12/5 * * 1/5
Tabelul 6.7.9
Se vede imediat că dacă λ ≥ 1 soluţia asociată bazei [A4, A1, A3] este
admisibilă. În concluzie:
126 I. PROGRAMARE LINIARA
-(1/3) 1
-∞ +∞
⇓ ⇓ ⇓
Programul Pb(λ) Soluţia optimă: Soluţia optimă
este incompatibil x1 = 0 x1 = -(3/5) +(3/5) λ
x2 = 0 x2 = 0
x3 = (13/2) +(1/2) λ x3 = (34/5) +(1/5) λ
ϕ (λ ) = (max) f = 65 2 + 1 2 λ (λ ) ( )f 164 11 λ
Figura 6.7.3
126 I. PROGRAMARE LINIARA
televiziune sau radio cu diferite reclame. Aici suporţii sunt spaţiile publicitare
iar reperele sunt reclamele, toate diferenţiate printr-o singură dimensiune -
timpul.
r (a ) = L − l1a1 − l2 a 2 −K− lm a m
Din punct de vedere practic, importante sunt reţetele din al căror rest nu se mai
pot croi alte repere; aceste reţete se vor numi maximale. Este clar că reţeta a va
fi maximală numai dacă :
În continuare vom avea în vedere numai reţetele maximale. Fie A1, A2, ..., An
lista lor, ordonată într-un fel oarecare, de exemplu lexicografic, unde:
A j = (a1 j , a 2 j ,K , a mj ) T
n n
∑ A xj ≥ b ⇔ ∑ aij x j ≥ bi i = 1,..., m
j
(7.1.2)
j =1 j =1
n
f = ∑ xj (7.1.3)
j =1
nenegative (acest lucru ar avea loc dacă am considera toate reţetele, maximale
şi nemaximale!). Iată de ce, pentru a asigura compatibilitatea programului (C),
suntem nevoiţi să admitem că anumite repere pot fi croite “în exces”.
După cum vom vedea în exemplul 7.1.1 cele două funcţii obiectiv (7.1.3) şi
(7.1.4) pot conduce la soluţii optime diferite.
Reţeta A A2 A A A A6 A7 A A A10
1 3 4 5 8 9
l1 = 22 3 2 2 1 1 1 0 0 0 0
l2 = 20 0 1 0 2 1 0 3 2 1 0
l3 = 12 0 0 2 0 2 4 0 2 4 5
Rest inutilizabil 4 6 2 8 4 0 10 6 2 10
Tabelul 7.1.1
7. Aplicaţie la programarea în numere întregi 131
3x1 + 2 x 2 + 2 x 3 + x 4 + x 5 + x 6 ≥ 100
x2 + 2x 4 + x5 + 3x 7 + 2 x 8 + x 9 ≥ 125
(7.1.5)
2x3 + 2x5 + 4x6 + 2 x 8 + 4 x 9 + 5x10 ≥ 80
x j ≥ 0 j = 1,....,10 intregi
4 6 2 8 4 0 10 6 2 10 0 0 0
CB B VVB A1 A2 A3 A4 A5 A6 A7 A8 A9 A10 A11 A12 A13
0 A13 820 12 12 6 12 6 0 12 6 0 -5 -4 -4 1
2 A9 125 0 1 0 2 1 0 3 2 1 0 0 -1 0
0 A6 100 3 2 2 1 1 1 0 0 0 0 -1 0 0
f 250 -4 -4 -2 -4 -2 * -4 -2 * * 0 -1 *
Tabelul 7.1.2
x 60 = 100 , x 90 = 125 , x130 = 820 , x 0j = 0 j = 1,K ,13 j ≠ 6,9,13 (min) f ' = 250
f = x1 + x 2 + x 3 + x 4 + x5 + x 6 + x 7 + x8 + x 9 + x10
1 1 1 1 1 1 1 1 1 1 1 1 1
CB B VVB A1 A2 A3 A4 A5 A6 A7 A8 A9 A10 A11 A12 A13
1 A7 55/3 -1/2 0 -1/2 1/2 0 -1/2 1 1/2 0 -5/12 1/6 -1/3 1/12
1 A9 20 0 0 1/2 0 1/2 1 0 1/2 1 5/4 0 0 -1/4
1 A2 50 3/2 1 1 1/2 1/ 2 1/2 0 0 0 0 -1/2 0 0
f 265/3 0 * 0 0 0 0 * 0 * -1/6 -1/6 -1/3 -1/6
Tabelul 7.1.3
Tabelul 7.1.4
n
(max) f = ∑ c j x j
j =1
cu restricţiile:
134 I. PROGRAMARE LINIARA
n
∑a
j =1
ij x j ≤ bi i = 1,..., m
x j ∈ {0,1} j = 1,...,n
x1 + x 2 + x 3 ≤ 1 (respectiv x1 + x 2 + x 3 = 1 )
S = restul de plată;
n = numărul total al tipurilor valorice de monezi disponibile pentru
plată;
Obţinem programul:
n n
∑
j =1 a j x j = S ; 0 ≤ x j ≤ m j y j ; ∑ yj ≤ p
j =1
x j ≥ 0 intregi y j ∈{0,1}
n
(min) f = ∑ x j
j =1
n
∑ aij x j = bi i = 1,..., m
j =1
x j ≥ 0 j = 1,..., n
n
(min) f = ∑ c j x j
j =1
în care x1, x2,..., xn reprezintă nivelele unor activităţi productive iar c1, c2,..., cn
costuri unitare acestor activităţi. Ipoteza uzuală de liniaritate presupune
proporţionalitatea directă între costul unei activităţi şi nivelul la care se
operează activitatea respectivă. Există situaţii în care demararea unei activităţi
necesită un cost de pregătire, independent de nivelul la care se va opera ea.
Costul activităţii j va avea deci forma:
0 daca x j = 0
cj (x j ) =
q j + c j x j daca x j > 0
Rezultă programul:
n
∑ aij x j = bi i = 1,..., m
j =1
x j ≤ m j y j j = 1,..., n
x j ≥ 0 , y j ∈ {0,1}
n n
(min) f = ∑ q j y j + ∑ c j x j
j =1 j =1
7. Aplicaţie la programarea în numere întregi 137
Ax = b
( P) x ≥ 0 , x intreg
(max) f = cx
Ax = b
( PL) x ≥ 0
( min) f = cx
despre care vom presupune că are optim finit. Fie x ∗ = ( x1∗ , x 2∗ ,K , x n∗ ) T soluţia
sa optimă. Dacă x* are toate componentele întregi atunci x* este şi o soluţie
optimă a programului (P). Altminteri, soluţia optimă întreagă x 0 se va afla
undeva în interiorul mulţimii soluţiilor admisibile ale relaxatei (PL) şi pentru a
o pune în evidenţă prin algoritmul simplex vom “sparge” această mulţime în
“bucăţi” din ce în ce mai “mici” până când x 0 devine vârf pentru unul din
“cioburi”. Desigur, fiecare “bucată” va fi mulţimea soluţiilor admisibile a unui
anumit program liniar.
( PL) ( PL)
( PL1 ) ≡ ( PL2 ) ≡
x ≤ x1 x ≥ x1 + 1
∗ ∗
A1 ∩ A 2 = ∅ şi A = A1 ∪ A 2
( PL1 ) ( PL1 )
( PL11 ) ≡ ( PL12 ) ≡
x 2 ≤ x 2 x 2 ≥ x 2 + 1
∗1 ∗1
Dacă A11 , A12 sunt mulţimile de soluţii admisibile întregi ale celor două
probleme rezultate prin ramificare atunci:
soluţii optime întregi. Fiecare nod are un unic "predecesor" şi - dacă nu este
nod terminal - doi "succesori".
PL1 PL2
∗1
x2 ≤ x 2 ∗1
x2 ≥ x 2 +1
PL11 PL12
Figura 7.4.1
zCMB ≤ f( x 0 ) ≤ zα
140 I. PROGRAMARE LINIARA
marginea superioară definită mai sus. Dacă (PLα) este incompatibilă vom
punezα = - ∞. Sunt posibile mai multe situaţii:
x1 + 2 x 2 + x 3 ≤ 130
x1 + x 2 + 2 x 3 ≤ 100
2 x1 + x 2 + 3x 3 ≤ 140
( P)
6 x1 + 9 x 2 − 92 x 3 ≤ 0
x j ≥ 0 , j = 1,2,3 intregi
(max) f = 3x1 + 4 x 2 + 2 x 3
Iteraţia 2. Deoarece z1 > zCMB, ramificăm (PL1) după variabila x2.
Adăugăm la (PL1) restricţia x2 ≤ 42 şi rezolvăm prin postoptimizare problema
(PL11) astfel construită. Se găseşte soluţia:
Iteraţia 3. Din nou z11 > zCMB; ramificăm (PL11) după x3, singura
variabilă cu valoare fracţionară în soluţia optimă curentă. Adăugăm la (PL11)
restricţia x3 ≤ 7 şi rezolvăm problema extinsă (PL111). Obţinem prima soluţie
admisibilă întreagă a problemei originale (P):
x1 = 38 x2 = 42 x3 = 7 (max)f = 296
Actualizăm:
x1 = 37 x2 = 42 x3 = 8 (max)f = 295
144 I. PROGRAMARE LINIARA
dar mai “slabă“ decât cea mai bună soluţie întreagă găsită pînă acum şi
“depozitată“ în xCMB. Abandonăm nodul (PL112) şi ne întoarcem în
predecesorul (PL11). Deoarece ambele probleme rezultate din ramificarea lui
(PL11), după variabila x3, au fost rezolvate ne întoarcem în nodul (PL1) -
predecesorul lui (PL11). Adăugăm la (PL1) restricţia x2 ≥ 43 şi rezolvăm
problema (PL12) astfel obţinută. Se găseşte soluţia fracţionară:
Iteraţia 4. Avem z12 = 297 > 296 = zCMB; s-ar putea ca (PL12) să aibe
o soluţie admisibilă întreagă mai bună decît xCMB. Ramificăm (PL12) după
variabila x3. Mai întâi rezolvăm problema (PL121) dedusă din (PL12) prin
adăugarea restricţiei x3 ≤ 6. Rezultă soluţia fracţionară:
x1 = 37 x2 = 43 x3 = 7 (max)f = 297
Iteraţia 5. Întrucât z2 = 298 > 297 = zCMB ramificăm (PL2) după
variabila x3. Problema (PL21), obţinută din (PL2) prin completare cu restricţia
x3 ≤ 6 are soluţia fracţionară:
Abandonăm nodul corespunzător (PL21) deoarece z21 = 272 < 297 = zCMB.
Adăugând la (PL2) restricţia x3 ≥ 7 şi rezolvând problema (PL22) astfel
construită obţinem o soluţie admisibilă întreagă mai slabă decît xCMB:
x1 = 39 x2 = 41 x3 = 7 (max)f = 295
PL
f=298,889
x1 =38,889
x2 = 42,22
x3 = 6,667
x1 ≤ 38 x1 ≥ 39
PL1 PL2
f =298,000 f =298,445
x1 = 38,000 x1 = 39,000
x2 = 42,400 x2 = 42,034
x3 = 7,200 x3 = 6,655
146 I. PROGRAMARE LINIARA
8. Programarea scop 147
8. Programarea scop
n
∑ aij x j = bi i = 1,..., m (8.1.1)
j =1
148 PROGRAMARE LINIARA
unde xj ≥ 0 j=1,…,n
n
∑ aij x j + yi = bi i = 1,..., m (8.1.2)
j =1
n
yi = bi − ∑ a ij x j
j =1
n
- dacă yi < 0 atunci ∑ aij x j > bi ; spunem în acest caz că x
j =1
n
- dacă yi > 0 atunci ∑ aij x j < bi ; în acest caz vom zice că x “nu
j =1
De multe ori, atât depăşirea unui ţel prestabilit cât şi neatingerea lui pot
fi “păgubitoare” dar cu semnificaţii şi consecinţe diferite: ca urmare,
penalizarea pentru depăşire poate să difere de cea corespunzătoare neatingerii.
Introducerea acestor noi elemente necesită descompunerea:
în care yi+ , yi− sunt partea pozitivă respectiv partea negativă a variabilei yi,
mărimi definite prin:
Din (8.1.4) rezultă că yi+ ≥ 0 , yi− ≥ 0 şi că yi+ , yi− nu pot fi simultan nule
decât în cazul când yi = 0.
Fie pi+ penalizarea pentru depăşirea ţelului bi fixat pentru obiectivul i şi
pi− penalizarea pentru neatingerea acestuia.
m m
w = ∑ pi+ yi+ + ∑ pi− yi− (8.1.5)
i =1 i =1
cu satisfacerea restricţiilor:
n
∑ aij x j + yi+ − yi− = bi (8.1.6)
j =1
şi a condiţiilor de nenegativitate:
Contribuţii unitare
Obiectiv Produse Ţel Unitate Penalizări
1 2 3
Profit 12 9 15 ≥ 125 mil. $ 5 (-)
Forţa de muncă 5 3 4 = 40 sută de angajaţi 2 (+) , 4 (-)
Investiţii 5 7 8 ≤ 55 mil. $ 3 (+)
Tabelul 8.1.1
12 x 1 + 9 x 2 + 15x 3 + y 1+ − y 1− = 125
+ −
5x 1 + 3x 2 + 4 x 3 + y 2 − y 2 = 40
+ −
5x 1 + 7 x 2 + 8x 3 + y 3 − y 3 = 55
x ≥ 0 j = 1,2,3 ; y + ≥ 0 , y − ≥ 0 i = 1,2,3 ;
j i i
(min) w = 5y + + 4 y + + 2 y − + 3y −
1 2 2 3
x 1∗ = 25 3 x ∗2 = 0 x ∗3 = 5
3
Tabelul 8.2.1
Într-o primă etapă vom considera numai obiectivele cu prioritatea unu; modelul
matematic corespunzător va fi:
5x1 + 3x 2 + 4 x 3 + y 2+ − y 2− = 40
+ −
5x1 + 7 x 2 + 8 x 3 + y 3 − y 3 = 55
+ −
x j ≥ 0 j = 1,2,3 ; y i ≥ 0 , y i ≥ 0 i = 1,2 ;
(min)w1 = 2 y 2− + 3 y 3−
+ −
1 2 x1 + 9 x 2 + 1 5 x 3 + y1 − y1 = 1 2 5
5x + 3x + 4 x + y + = 40
1 2 3 2
5x + 7x + 8x + y + = 55
1 2 3 3
x ≥ 0 j = 1, 2 , 3 ; y + ≥ 0 i = 1 , 2 , 3 ; y − ≥ 0
j i 2
+ +
(m in ) w = 5 y + 4 y
2 1 2
a) cel puţin o sursă poate aproviziona mai multe destinaţii şi cel puţin o
destinaţie poate primi unităţi de flux de la mai multe surse.
Rutele de legătură pot avea şi alte puncte comune în afara surselor şi
destinaţiilor, numite puncte intermediare sau de tranzit. Nu sunt excluse
legăturile directe între surse sau între destinaţii. În principiu, orice rută poate fi
parcursă în ambele sensuri, dar pot exista şi rute cu sens unic.
c11
C1 × 50 300 Î 1 2
100 Î F1 c12
c13
C2 3
c21
× 120
⇓
c22 100
300 Î F2 c23
C3 4 5
× 230
⇓
Î : sursă (furnizor) 400 200
× : destinaţie (consumator)
a) b)
Figura 1.1.1
156 II. PROBLEME DE OPTIMIZARE IN RETELE DE TRANSPORT SI DISTRIBUTIE
condiţiile de nenegativitate:
∑n x = a i = 1,..., m (1.2.6)
j =1 ij i
m
∑ x ij = b j j = 1,..., n (1.2.7)
( PTE)i =1
x ij ≥ 0
m n
(min) f = ∑ ∑ c x
i =1 j =1
ij ij
Tabelul 1.1.1
x u
t
z v
a) b)
Figura 1.3.1
Graful G se va numi simplu dacă nu are bucle şi oricare două noduri sunt
extremităţi pentru cel mult o muchie. Vom spune că G este finit dacă vârfurile
şi muchiile sale sunt în număr finit.
⇒
z t z t
Figura 1.3.2
Se constată uşor că dacă G este (total) neorientat, numărul arcelor permise este
de două ori mai mare decât numărul muchiilor din G.
Un lanţ în graful G este o succesiune de noduri λ = (x0, x1, ... , xp -1, xp)
cu proprietatea că {x0, x1}, {x1, x2}, ..., {xp -1, xp } sunt muchii în G. Vom spune
că x0 şi xp sunt extremităţile lanţului λ şi că λ “trece” prin nodurile
intermediare x1, ... , xp -1. Lanţul λ se zice simplu dacă nu trece de două ori prin
162 II. PROBLEME DE OPTIMIZARE IN RETELE DE TRANSPORT SI DISTRIBUTIE
acelaşi nod. Prin definiţie lungimea lanţului λ este dată de numărul muchiilor
componente. Astfel, lanţurile de lungime unu se identifică cu muchiile grafului
G; un lanţ de lungime doi este constituit din două muchii adiacente.
Un drum în graful G este o succesiune de noduri δ = (x0, x1, ... , xp -1, xp)
cu proprietatea că (x0, x1), (x1, x2), ..., (xp -1, xp) sunt arce permise.Nodul x0 este
extremitatea iniţială a drumului δ iar xp extremitatea finală. Un circuit este un
drum ale cărui extremităţi coincid. Este clar că orice drum este un lanţ,
reciproca nefiind adevărată întotdeauna. În figura 1.3.2, δ = (z, t, x) este un
drum de lungime 2 iar µ = (x, y, t, x) este un circuit de lungime 3; în acelaşi
graf, λ = (z, x, y) este un lanţ care nu este un drum deoarece arcul (z, x) este
blocat.
*
adaugă →
* ⇒ *
**
** **
Figura 1.3.6
scoate →
Figura 1.3.7
164 II. PROBLEME DE OPTIMIZARE IN RETELE DE TRANSPORT SI DISTRIBUTIE
Figura 1.3.8
Are loc următoarea teoremă: Între soluţiile de bază ale PTE - toate
presupuse nedegenerate - şi arborii maximali ai grafului G există o
corespondenţă bijectivă.
1. Modelarea problemelor de transport şi distribuţie 165
C1 C2 C3 C4 Disponibil
F1 3 3 1 4 15
F2 3 4 3 6 17
F3 4 3 6 2 18
Necesar 10 12 9 19 50
Tabelul 1.4.1
Modelul matematic:
C1
Propunem cititorului să arate că
următoarea soluţie este bazică: F1
Arborele maximal, C2
corespunzător acestei
10 5 F2
soluţii este format din
7 9 1
muchiile pline.
18 C3
F3
C4
C3 x 33 + x 34 = 18 x 13 = 5 10 5
x11 = 0 ⇒ x 22 = 12 ⇒ 12
x = 12 x 24 = 5
22 4 14
F3 x13 + x 33 = 9 x 33 = 4
C4 x + x = 19 x 34 = 14
24 34
2. Adaptarea metodei simplex la rezolvarea PTE 167
Etapa k , k ≥ 1.
a ik ← a ik − xik jk
b jk ← b jk − xik jk
10 (1)
5 (2)
Atenţie:
7 (3)
9 (4)
1 (5)
numerele înscrise în paranteze
18 (6)
indică ordinea alocărilor!
Tabelul 2.1.1
6 (4)
9 (1)
10 (3)
6 (5)
1 (6)
Costul asociat: f = 123 u.m.
18 (2)
Tabelul 2.1.2
5 (6)
9 (1)
1 (3)
10 (4)
7 (5)
Costul asociat: f = 122 u.m.
18 (2)
Tabelul 2.1.3
cu restricţiile:
ui + v j ≤ cij i = 1,K , m ; j = 1,K , n (2.2.1)
ui + v j = cij ( ∀) (i , j ) ∈ I (2.2.3)
unde k este un parametru iar (u0, v0) = (u10 ,K , um0 , v10 ,K , v n0 ) este o soluţie
particulară a sistemului (2.2.3). Rezultă că valorile expresiilor:
∆ ij = ui + v j − cij (2.2.5)
Dacă toţi ∆ij calculaţi sunt ≤ 0, atunci (u,v ) este o soluţie a dualei
(Q) care împreună cux satisface condiţiile de ecart complementar (2.2.2) şi,
în consecinţă,x este o soluţie optimă a PTE.
v2 = 3 u2 = 1 v1 = 2
u1 = 0 v3 = 1
v4 = 4 u3 = -2
Figura 2.2.1
C1 v1 = 2
F1
u1 = 0
C2 v2 = 3
F2
u2 = 1
C3 v3 = 1
F3
u3 = -2
C4 v4 = 4
Fig. 2.2.2
v1 = 2 v2 = 3 v3 =1 v4 =4
u1 = 0 -1 * * *
u2 = 1 * * -1 -1
u3 =-2 -4 -2 -7 *
Tabelul 2.2.3
Adăugăm muchia {F i0 }
, C j0 la arborele H corespunzător soluţiei
x .Conform unei proprietăţi a arborilor se va forma un unic ciclu. Deoarece
arborele H împreună cu muchia adăugată fac parte din graful asociat PTE care
este bipartit, ciclul format are un număr par de muchii. Să parcurgem muchiile
ciclului într-unul din cele două sensuri posibile, plecând de exemplu din
nodul Fi0 :
x~i0 j0 = θ , ~
xi1 j0 = xi1 j0 − θ , ~
xi1 j1 = xi1 j1 + θ ,K , ~
x i p j p = xi p j p + θ , ~
xi0 j p = xi0 j p − θ
~
xij = xij in rest (2.3.2)
∆f = f ( ~
x ) − f ( x ) = θ (ci0 j0 − ci1 j0 + ci1 j1 − ci2 j1 +K+ ci p j p − ci0 j p ) =
θ [ci0 j0 − (ui1 + v j0 ) + (ui1 + v j1 ) − (ui2 + v j1 ) +K+ (ui p + v j p ) − (ui0 + v j p )] =
θ (ci0 j0 − ui0 − v j0 ) = −θ ⋅ ∆ i0 j0 < 0 de unde:
f (~
x ) = f ( x ) − θ ∆ i0 j0 (2.3.3)
Relaţia (2.3.3) arată că ~x implică un cost total de transport mai mic decât
soluţia curentă x ,diferenţa fiind cu atât mai mare cu cât θ sau ∆ i0 j0 este mai
mare.
Pentru a menţine admisibilitatea soluţiei (2.3.2) este necesar ca:
{ }
θ 0 = min xi1 j0 , xi2 j1 ,K , xi0 j p = xis js −1 (2.3.4)
v1 = 4 v2 = 4 v3 = 3 v4 = 6
u1 = -1 * * 1 1
Rutele "ocupate au fost
u2 = 0 1 * * *
u3 = -4 -4 -3 -7 *
marcate cu asteriscuri!
Tabelul 2.3.3
x12 = 5 - θ
C1 F1 C2
F1 Rezultă ciclul:
C2 x22 = 7 + θ x13 = θ
F2 F2 x23 = 9 - θ C3
C3
10 5-θ - + θ
7+θ + - 9-θ 1
18
Tabelul 2.3.4
f (~
x ) = f ( x ) − θ ∆ 13 = 143 − 1 ⋅ θ
Pentru determinarea comodă a lui θ0 din (2.3.4) putem proceda astfel: marcăm
succesiv colţurile conturului poligonal cu + şi - începând cu + în celula (1,3).
Atunci θ0 este exact minimul componentelor soluţiei x care sunt situate în
celulele marcate cu - : θ 0 = x12 = 5 . Noua soluţie x ′ apare în tabelul (2.3.5):
176 II. PROBLEME DE OPTIMIZARE IN RETELE DE TRANSPORT SI DISTRIBUTIE
C1
F1
10 5 şi corespunde arborelui H
C2
12 4 1 dedus din H∪ {F1,C3}
18 eliminând muchia {F1,C2}: F2
C3
Tabelul 2.3.5
F3
C4
f ( x ′) = f ( x ) − θ 0 ⋅ ∆ i0 j0 (2.4.1)
2.5 Degenerare
C1 C2 C3 C4 Disponib
il
F1 4 2 5 4 100
F2 6 7 3 8 100
F3 3 5 4 5 100
Necesar 11 90 50 50 300
0
Tabelul 2.5.1
În tabelul 2.5.2 este dată soluţia generată prin metoda diferenţelor maxime:
(4) (1)
10 90
(2) (5)
50 50
100 (3)
Tabelul 2.5.2
Actualizăm:
b1 ← ε a1 ← 0
10 (4) 90 (1)
(2) (6)
ε (5) 50 50
100 (3)
Tabelul 2.5.3
v1 = 0 v2 = -2 v3 = -3 v4 = 2
u1 =4 * * -4 2 _ +
10 90
u2 =6 * -3 * * ⇒ + _
ε 50
50
u3=3 * -4 -4 0 100
Tabelul 2.5.6
Noua soluţie, notată x , este optimă. Deoarece ∆34 = 0, problema mai are o
soluţie optimă de bază x ′ care se obţine folosind conturul poligonal asociat în
tabelul 2.5.7 celulei (3,4):
90 10
50 50
60 40
Tabelul 2.5.9
x = α x + β x′ 90 10
unde α + β = 1 10α +50β 50 40α
α≥0,β≥0 100α +60β 40β
Tabelul 2.5.10
C1 C2 C3 C4 Disponib
il
F1 4 2 5 4 110
F2 6 7 3 8 80
F3 3 5 4 5 90
Necesar 120 90 50 20 280
Tabelul 2.5.11
v1 = 0 v2 = -2 v3 = -3 v4 = 0
ε 90 20 u1 = 4 * * -4 *
30 50 ⇒ u2 = 6 * -3 * -2
90 u3 = 3 * -4 -4 -2
m n
∑ a > ∑b
i =1
i
j =i
j
m n
bn +1 = ∑ ai − ∑ b j
i =1 j =1
Dacă totalul cantităţilor disponibile este mai mic decât cererea totală:
m n
∑ ai < ∑ b j
i =1 j =i
n m
a m +1 = ∑ b j − ∑ a i
j =1 i =1
b1′ b2′ b′
= =K = n
b1 b2 bn
b1′, b2′ ,..., bn′ fiind cantităţile ce urmează a fi primite în situaţia de criză. Noile
b ′j
cantităţi se pot deduce uşor, observând că fiecare raport este egal cu:
bj
b1′ + b2′ +L+bn′ a ′ + a 2′ +L a m′ Q′
= 1 =
b1 + b2 +L+bn a1 + a 2 +L+ a m Q
3. Variante ale problemei de transport 185
de unde:
Q′
b ′j = bj j = 1,K , n .
Q
C1 C2 C3 C4 Disponibil
F1 3 2 1 5 120
F2 4 3 7 2 180
F3 3 3 5 6 200
Necesar 100 110 140 150 500
Tabelul 3.1.1
Tabelul 3.1.2
C1 C2 C3 C4 Disponibil
F1 3 2 1 5 100
F2 4 3 7 2 120
F3 3 3 5 6 130
F4 0 0 0 0 150
Necesar 100 110 140 150 500
Tabelul 3.1.3
C1 C2 C3 C4 F1 F2 F3
100
F1 100
F2 120 ⇒ 20
110
120
F3 20 110
F4 80 40 30 C1 C2 C3 C4
Tabelul 3.1.4
C1 C2 C3 C4 F1 F2 F3
100
F1 100
F2 120 ⇒ 100
30
120
F3 100 30
F4 80 40 30 C1 C2 C3 C4
Tabelul 3.1.5
2 98 F1 98 F2 F3
15
15 105 ⇒ 2 60
70 105
70 60
C1 C2 C3 C4
Noul personal este recrutat din 3 oraşe mari aflate în zonă, prin intermediul
unor agenţii specializate. Contactând aceste agenţii, firma a găsit convenabile
următoarele oferte:
Fabricile sunt situate într-o zonă rurală aşa că, în discuţiile cu sindicatele
interesate, firma a convenit să suporte cheltuielile zilnice de întoarcere de la
locul de muncă la oraş, la toţi angajaţii noi, cheltuieli evaluate la 12 u.m. pe
persoană × km. Distanţele în km dintre fabrici şi oraşe sunt indicate în
următorul tabel:
Pentru început conducerea firmei este
I II III IV V
interesată în a cunoaşte câte persoane ar
A 6 2 2 6 3 putea fi angajate astfel încât cheltuielile
B 14 9 4 5 3 totale de transport să fie cât mai mici cu
C 10 4 11 3 4 putinţă.
I II III IV V VI Disponibil
A 6 2 2 6 3 0 120
188 II. PROBLEME DE OPTIMIZARE IN RETELE DE TRANSPORT SI DISTRIBUTIE
B 14 9 4 5 3 0 100
C 10 4 11 3 4 0 154
Cerere 45 74 50 82 63 60 374
Tabelul 3.1.6
I II III IV V VI
A 45 62 13
B 37 63
C 12 82 60
45 74 50 82 63
Tabelul 3.1.7
Tabelul 3.1.8
87 % pentru C.
a1 a a a1 + a 2 + a 3 314
= 2 = 3 = =
120 100 154 120 + 100 + 154 374
Tabelul 3.1.9
v1= 3 v2 =3 v3 =5 v4 =2
u1=λ - 5 120 λ -5 λ -4 * λ -8
u2 = 0 30 150 ⇒ -1 * -2 *
u3 = 0 100 80 20 * * * -4
Dacă c13 depăşeşte "cu puţin" 4 din tabelul 3.2.5 rezultă ∆12 > 0 şi
soluţia din tabelul alăturat nu mai este optimă. Folosind conturul poligonal
asociat rutei (1,2) - indicat în tabel - rezultă soluţia din tabelul 3.2.6
Tabelul 3.2.6
F1 F2 F3
40 80 30
30 150 ⇒ 40 60
80
140 150
C1 C2 C3 C4
192 II. PROBLEME DE OPTIMIZARE IN RETELE DE TRANSPORT SI DISTRIBUTIE
60 140
Tabelul 3.2.8
Se observă că pe măsură ce costul unitar c13 creşte, ruta (F1,C3) este folosită din
ce în ce mai puţin până când este abandonată.
Tabelul 3.3.1
După cum se vede, în luna Martie, când cererea este mai mare şi
costurile de producţie sunt mai mari, ca urmare a unor tendinţe inflaţioniste ce
pot fi previzionate din vreme: creşteri planificate ale salariilor sau creşterea
preţurilor la materiile prime.
Deoarece costurile de producţie nu sunt constante, firma va fi
interesată în a produce mai mult în lunile în care costurile sunt mai mici
formând astfel un stoc de produse finite din care să acopere, cel puţin în parte,
cererea din lunile în care costurile sunt mai mari. Pentru fiecare generator
3. Variante ale problemei de transport 193
expediat în altă lună decât cea în care a fost produs, există un cost suplimentar
de stocare de 10 u.m. pe lună.
Tabelul 3.3.2
Deoarece oferta totală întrece cererea totală (34 > 26) este necesar să
echilibrăm problema introducând un “consumator “fictiv care să preia diferenţa
34 - 26 = 8 buc.
Ianuarie
n
max ri ≤ S ≤ ∑ ri (3.3.1 )
1≤i ≤ n
i =1
S + r1 + r2 +L+ rn −1 ≥ r1 + r2 +L+ rn −1 + rn ⇔ S ≥ rn
Dacă S = rn (care are loc numai dacă rn = max ri ), problema este din start
1≤i ≤ n
echilibrată; dacă S > rn , vom introduce o destinaţie suplimentară C0 cu cererea
S - rn. Situaţia şervetelor cu “destinaţia” C0 se interpretează diferit: acelea care
“provin” de la sursa F0 reprezintă şervete pe care patronul intenţiona să le
cumpere dar a renunţat deoarece nu mai avea nevoie de ele; cele care provin
de
la oricare din sursele F1, F2,..., Fn-1 reprezintă şervete murdare care nu mai sunt
trimise la spălat fiind aruncate la deşeuri.
n = 5 zile
ziua i 1 2 3 4 5
cererea ri 60 50 80 40 60
C1 C2 C3 C4 C5 C0 Disponibil
F0 5 5 5 5 5 0 S
F1 M 2 1 1 1 0 60
F2 M M 2 1 1 0 50
F3 M M M 2 1 0 80
F4 M M M M 2 0 40
Necesar 60 50 80 40 50 S - 50 S + 230
Tabelul 3.3.3
C1 C2 C3 C4 C5 C0
F0 60 20 S - 80
F1 30 30
F2 50
F3 40 40
F4 10 30
Tabelul 3.3.4
30 40
30 50 40 10
20
Figura 3.3.2
4. Problema de transfer 197
4. Problema de transfer
sau:
n
∑x
k =1
ik −~
xii = a i i = 1,...,n (4.1.1)
k ≠i
∑x
k =1
ki −~
xii = bi i − 1,...,n (4.1.2)
k ≠i
Variabilele xij , i ≠ j, şi ~
xii nu pot lua decât valori nenegative:
xij ≥ 0 , ~
xii ≥ 0 (4.1.3)
transfer. Este uşor de văzut că problema astfel definită este compatibilă dacă
şi numai dacă totalul L al cantităţilor expediate din surse este egal cu totalul
cantităţilor ajunse în destinaţii, adică:
n n
∑ ai = ∑ b j = L
i =1 j =i
(4.1.5)
Tabelul 4.1.1
200 II. PROBLEME DE OPTIMIZARE IN RETELE DE TRANSPORT SI DISTRIBUTIE
Substituind:
~
xii = L - xii (4.2.1)
n
∑ xik = L + ai i = 1,..., n
k =1
n
∑ x ki = L + bi i = 1,..., n
k =1 (4.2.2)
xij ≥ 0 i , j = 1,..., n
n n
1 2 3 4 5 Disp. L + ai
1 0 9 M M M 800
2 9 0 2 M 4 500
3 3 2 0 4 5 500
4 2 M 4 0 12 500
5 M 4 5 12 0 700
Nec. L + bj 500 500 600 900 500 3000
Tabelul 4.2.1
~
x22 = 300
x12 = 300
1 2
1 2 3 4 5
x23 = 300
1 300
2 300 300 3
~
x33 = 400
3 400 400 x54 = 200
4 x34 = 400
5 200
4 5
Tabelul 4.2.4 Figura 4.2.2