Sunteți pe pagina 1din 209

CAPITOLUL I

PROGRAMARE LINIARA

1. Forma generală a unei probleme de programare liniară

Problemele de maxim şi de minim apar frecvent în cele mai diferite


domenii ale matematicilor pure sau aplicate.În domeniul economic, asemenea
probleme sunt foarte naturale. Astfel, firmele încearcă să maximizeze
profiturile sau să minimizeze costurile. Experţii în planificare macroeconomică
se preocupă de maximizarea bunăstării unei comunităţi economico-sociale.
Consumatorii doresc să cheltuiască venitul lor într-un mod care să le
maximizeze satisfacţia (de natură materială dar şi spirituală etc.)

Programarea liniară se ocupă de o clasă specială de probleme de


optimizare care apar deseori în aplicaţiile economice. Aceste probleme constau
în maximizarea sau minimizarea unei funcţii liniare, numită funcţie obiectiv,
ale cărei variabile trebuie să satisfacă:

• un sistem de relaţii date sub forma unor ecuaţii şi / sau inecuaţii


liniare nestricte, denumite generic restricţii;
• cerinţa de a lua numai valori numerice nenegative (≥0).

1.1 Exemple

1) Problema firmei. Considerăm un sistem de producţie, de exemplu o


firmă, care produce n bunuri G1,G2,...,Gn utilizând pentru aceasta m categorii
de resurse R1,R2,...,Rm (materii prime, forţă de muncă, capacităţi de producţie,
combustibili şi energie etc.). Adoptăm ipoteza că tehnologia de transformare a
resurselor în bunuri este liniară în sensul că:

• Pentru fiecare bun, consumul dintr-o anumită resursă este direct


proporţional cu cantitatea produsă.
• Consumurile dintr-o resursă sau alta nu se condiţionează reciproc.
Fie atunci aij cantitatea din resursa i utilizată pentru producerea unei unităţi din
bunul Gj. Fie deasemeni bi cantitatea disponibilă din resursa Ri şi cj preţul (sau
profitul) unitar al bunului Gj.
2 I. PROGRAMARE LINIARA

• Preţul unui bun nu depinde de cantitatea produsă şi nici de situaţia


vânzărilor celorlalte bunuri.

Problema constă în determinarea unui program de fabricaţie care să


maximizeze venitul (sau profitul) firmei.

Să notăm cu xj cantitatea din bunul Gj care urmează a fi produsă.


Problema enunţată mai înainte devine:

Să se găsească valorile numerice x1,x2,...,xn care maximizează funcţia:

f = c1 x1 + c2 x 2 +...+ cn x n

cu satisfacerea restricţiilor:

 a11 x1 + a12 x 2 + L + a1n x n ≤ b1


a x +a x +L+ a x ≤ b
 21 1 22 2 2n n 2

 LLLLLL
a m1 x1 + a m2 x 2 + L + a mn x n ≤ bm

şi a condiţiilor de nenegativitate:

x1 ≥ 0 , x 2 ≥ 0 , L x n ≥ 0

Observaţie: Ipotezele de liniaritate făcute nu sunt verificate


întotdeauna în practică. Raţiunea lor este dublă:

• conduc la modele matematice în general simple;


• pe baza modelelor liniare se pot formula concluzii calitative şi
legităţi economice care îşi menţin valabilitatea - în anumite limite - şi într-un
context neliniar.

2) Problema dietei a devenit o ilustrare clasică a programării liniare,


fiind întâlnită în mai toate textele de specialitate. Ea se ocupă cu hrănirea unei
colectivităţi, să zicem un grup de militari, în cel mai economic mod cu condiţia
satisfacerii anumitor cerinţe de nutriţie. Mai concret, este vorba de a prepara un
aliment complex pornind de la n sortimente de hrană F1,F2,...,Fn. Un număr de
elemente sau principii nutritive N1,N2,...,Nm - proteine, glucide, grăsimi
1. Forma generală a unei probleme de programare liniară 3
calciu,etc. sunt avute în vedere în sensul că alimentul combinat trebuie

conţină cel puţin b1,b2,...,bm unităţi specifice din fiecare. Să presupunem


cunoscute următoarele:

• cantitatea aij din principiul nutritiv Ni conţinută într-o unitate din


tipul de hrană Fj;
• preţul unitar cj al tipului de hrană Fj.

Notăm cu x1,x2,...,xn cantităţile din felurile de hrană F1,F2,...,Fn care


trebuie cumpărate în vederea elaborării dietei. Formal, x1,x2,...,xn vor trebui
determinate astfel încât:

• costul f = c1 x1 + c2 x 2 +...+ cn x n al alimentelor cumpărate să fie


minim.
• amestecul să conţină principiile nutritive N1,N2,...,Nm în cantităţi cel
puţin egale cu b1,b2,...,bm, adică:

 a11 x1 + a12 x 2 + ... + a1n x n ≥ b1


 a x + a x + ... + a x ≥ b
 21 1 22 2 2n n 2

................................
a x + a x + ... + a x ≥ b
 m1 1 m2 2 mn n m

 x1 ≥ 0, x 2 ≥ 0,..., x n ≥ 0

Din nou au fost tacit utilizate ipotezele de liniaritate întâlnite şi în modelul


precedent.

1.2 Soluţii admisibile ale unei probleme de programare liniară

Considerăm o problemă de programare liniară (P) cu m restricţii


egalităţi şi/sau inegalităţi nestricte , n variabile şi cu funcţia obiectiv f. Un
ansamblu de n valori numerice care satisfac restricţiile se va numi soluţie a
programului (P). Dacă în plus sunt verificate şi condiţiile de nenegativitate,
ansamblul se numeşte soluţie admisibilă. O soluţie admisibilă care
maximizează sau minimizează - după caz - funcţia obiectiv se va numi soluţie
optimă. Notând cu A mulţimea soluţiilor admisibile , problema (P) se scrie:
4 I. PROGRAMARE LINIARA
* *
Să se determine x ∈ A cu proprietatea: f(x ) = max sau min f ( x )
x∈A

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.

1.3 Forma canonică a unei probleme de programare liniară

O restricţie a unei probleme (P) de programare liniară se zice


concordantă dacă este o inegalitate de tipul "≤" când funcţia obiectiv se
maximizează şi de tipul "≥" când funcţia obiectiv se minimizează.O restricţie
inegalitate care nu este concordantă se va numi neconcordantă. Restricţiile
egalităţi nu fac obiectul acestei clasificări.
Spunem că o problemă de programare liniară este în formă canonică
dacă toate restricţiile ei sunt inegalităţi concordante.
În consecinţă, o problemă în formă canonică de maximizare arată astfel:

 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 ]

O problemă în formă canonică de minimizare se va scrie:

 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

De exemplu, problema firmei (1.1, exemplul 1)) este o formă canonică de


maximizare în timp ce problema dietei (1.1, exemplul 2)) este o formă
canonică de minimizare.

Orice problemă de programare liniară se poate pune sub o formă


canonică de maximizare sau minimizare, fără modificarea mulţimii soluţiilor
admisibile, observând că:
• o egalitate se poate înlocui cu două inegalităţi de sens contrar;
• o restricţie neconcordantă devine concordantă prin înmulţire cu -1;
• putem schimba sensul optimizării funcţiei obiectiv, graţie formulei
generale:

min f ( x ) = − max [ − f ( x )] (1.3.1)


x∈A x∈A

În consecinţă, putem face anumite raţionamente teoretice pe o formă canonică,


ca de exemplu în teoria dualităţii liniare, fără ca prin aceasta să restrângem
generalitatea.

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

Programul (P) Forma canonică de minimizare


a programului (P)

1.4 Forma standard a unei probleme de programare liniară

Spunem că o problemă de programare liniară este în formă standard


dacă toate restricţiile ei sunt egalităţi. Importanţa acestei forme particulare
rezultă din faptul că metoda de rezolvare a problemelor de programare liniară
care va fi expusă mai departe cere ca problema să fie în această prezentare.
În consecinţă, o problemă (P) care are şi restricţii inegalităţi va fi
înlocuită - în vederea rezolvării ei - cu o alta în care toate restricţiile sunt
egalităţi. Noua problemă, numită forma standard a problemei (P) şi notată
(FSP), se construieşte astfel:

• O restricţie inegalitate din problema originală (P) de tipul "≤"


(respectiv de tipul "≥") se transformă în egalitate prin adăugarea (respectiv
prin scăderea) unei variabile nenegative din membrul său stâng.
• Restricţiile inegalităţi nu se modifică.
• Noile variabile introduse nu apar în funcţia obiectiv a problemei
originale (alternativ, spunem că ele apar cu coeficienţi nuli)

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 )

care prin construcţie se dovedeşte a fi o soluţie admisibilă a problemei (FSP).


Reciproc, unei soluţii admisibile x~ = ( x~1 , x~2 , x~3 , x~4 , x~5 ) a problemei (FSP)
corespondenţa inversă Φ-1 îi asociază vectorul ( x~1 , x~2 , x~3 ) care satisface în mod
clar restricţiile problemei originale (P). Dacă x este soluţia optimă a
problemei (P) atunci Φ( x ) este soluţia optimă a problemei (FSP) şi reciproc,
dacă cunoaştem soluţia optimă x~ a problemei (FSP) , Φ −1 ( x~) reprezintă
soluţia optimă a problemei (P).

În problemele concrete, variabilele de abatere au interpretări


economice precise aşa că în analiza soluţiei optime valorile lor vor fi luate în
considerare laolaltă cu valorile variabilelor originale. Astfel, în problema
firmei (1.1, exemplul1)) variabilele de abatere xn+1, xn+2,...,xn+m definite prin:

n
x n +i = bi − ∑ aij x j i = 1,...,m
j =1

reprezintă cantităţi de resurse neconsumate şi prin urmare cunoaşterea


valorilor lor în soluţia optimă oferă indicaţii utile în analiza modului în care
sunt utilizate resursele firmei: materii prime, capacităţi de producţie, forţă de
muncă, etc.
În problema dietei (1.1,exemplul 2)) variabilele de abatere:

n
x n +i = ∑ aij x j − bi i = 1,..., m
j =1

reprezintă cantităţile de principii nutritive cu care sunt depăşite nivelele


minimale specificate în reţetă.
8 I. PROGRAMARE LINIARA

1.5 Rezolvarea grafică a problemelor de programare liniară

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

Identificăm x1 , x2 cu abscisa, respectiv ordonata unui punct din planul raportat


la un sistem ortogonal de axe. Este cunoscut faptul că mulţimea punctelor din
plan ale căror coordonate satisfac prima restricţie coincide cu unul din
semiplanele determinate de dreapta d1 de ecuaţie -3x1+4x2=12. Mai precis,este
vorba de semiplanul care conţine originea (0,0) , deoarece coordonatele
acesteia satisfac evident prima restricţie. În mod analog, următoarele restricţii
sunt verificate în semiplanele determinate de dreapta d2 de ecuaţie x1+x2=6 şi
respectiv d3 de ecuaţie -2x1+x2=2 şi care conţin originea. În fine, condiţia x1≥0
are loc în semiplanul “din dreapta” axei verticale, în timp ce condiţia x2≥0 are
loc “deasupra” axei orizontale.
Soluţiile admisibile ale problemei se identifică cu punctele comune
celor cinci semiplane. Acestea formează interiorul şi frontiera poligonului
OABCD din figura 1.5.1.
x2 f=24

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

Funcţia obiectiv determină - pentru f variabil - o mulţime de drepte


paralele care intersectează sau nu mulţimea A. Astfel punctele situate pe
dreapta 3x1+4x2=12 reprezintă diferite combinaţii ale mărimilor x1, x2 care dau
funcţiei obiectiv f aceeaşi valoare 12. Întrucât această dreaptă taie A, rezultă
că problema are soluţii admisibile - chiar o infinitate - care oferă funcţiei
obiectiv valoarea 12. Dreapta 3x1+4x2=24 nu mai taie A şi deci nici o soluţie
admisibilă a problemei nu este capabilă să asigure funcţiei obiectiv valoarea
24. Conchidem că maximul funcţiei f este “undeva” între 12 şi 24. Se observă
uşor că acest maxim se atinge în vârful C al frontierei lui A. Punctul C
este

intersecţia dreptelor d1 şi d2 şi deci coordonatele sale, care reprezintă soluţia


optimă a problemei, se determină rezolvând sistemul format din ecuaţiile celor
două drepte. Se găseşte x1* = 127 , x 2* = 307 maximul lui f fiind 22 27 . Soluţia
optimă satisface cu egalitate primele două restricţii şi cu inegalitate strictă pe
ceea de a treia.
În mod asemănător se arată că dacă funcţia de maximizat ar fi fost
f = - x1+x2 atunci optimul ar fi fost atins în vârful B de coordonate x1=4/5,
x2=18/5 .

Examinând acest exemplu putem trage următoarele concluzii:

1. Mulţimea A este convexă, adică o dată cu două puncte conţine şi


segmentul care le uneşte. O consecinţă intuitivă a acestei proprietăţi este că
soluţia optimă, dacă există, se găseşte “undeva” pe frontiera lui A .
2. Frontiera lui A este un contur poligonal cu un număr finit de
vârfuri şi o soluţie optimă se găseşte neapărat într-unul din ele.

Aceste concluzii, care se confirmă pe orice altă problemă în două sau


trei variabile (mulţimea soluţiilor admisibile putând fi “vizualizată“ în planul
R2 sau spaţiul R3) au constituit sursa întregii teorii a programării liniare.
2. Dualitatea în programarea liniară 9

2. Dualitatea în programarea liniară

În principiu, oricărei probleme de programare liniară i se asociază o


alta, numită duala sa şi în esenţă teoria dualităţii constă în studiul relaţiilor
dintre cele două probleme. Fireşte, construcţia problemei duale depinde
nemijlocit de structura problemei iniţiale denumită şi problema primală.
Întotdeauna sensul optimizării în cele două probleme este diferit: dacă în
primală funcţia obiectiv se maximizează (se minimizează) în duală funcţia
obiectiv se minimizează (se maximizează). Studiul şi interpretarea economică a
problemei duale aduc informaţii suplimentare în analiza proceselor economice
şi în fundamentarea deciziilor.

2.1 Reguli de construire a problemei duale

Pentru a conferi construcţiei problemei duale maxima generalitate vom


slăbi condiţia de nenegativitate impusă tuturor variabilelor , admiţând că

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:

1) Dacă în primală funcţia obiectiv se maximizează (respectiv se


minimizează) în problema duală funcţia obiectiv se minimizează (respectiv se
maximizează).
2) Restricţiei de rang i , i=1,...,m din primală îi corespunde în duală o
variabilă ui; dacă restricţia primală este o inegalitate concordantă (respectiv
neconcordantă, respectiv o egalitate) variabila duală asociată este nenegativă
(≥0), ( respectiv nepozitivă (≤0), respectiv fără restricţie de semn).
3) Variabilei xj , j=1,...,n din problema primală îi corespunde în duală
restricţia de rang j. Membrul stâng al acestei restricţii este o combinaţie
liniară a variabilelor duale ui realizată cu coeficienţii variabilei xj din toate
restricţiile primalei (aceştia sunt aij, i=1,...,m). Termenul său liber este
coeficientul cj al lui xj din funcţia obiectiv primală. În fine, dacă variabila
primală xj este nenegativă (respectiv nepozitivă, respectiv fără restricţie de
semn) restricţia duală asociată va fi o inegalitate concordantă (respectiv
neconcordantă, respectiv o egalitate).
4) Coeficienţii funcţiei obiectiv ai problemei duale sunt termenii liberi
bi ai restricţiilor problemei primale.
10 I. PROGRAMARE LINIARA

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 

Observaţii: 1) Problema duală are atâtea variabile (respectiv restricţii)


câte restricţii (respectiv variabile) are problema primală.

2) Regulile 1) - 4) pun în evidenţă următoarele corespondenţe de


termeni prin trecere la duală:

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

3) Din construcţia de mai sus rezultă următoarea concluzie:

Duala dualei este problema primală.

Spunem că dualitatea în programarea liniară are un caracter involutiv.

În consecinţă, fiind dată o problemă de programare liniară (P) şi duala


sa (Q), vom vorbi despre cuplul de probleme în dualitate (P,Q), fără a mai
specifica în mod expres care din probleme este primala şi care duala.
2. Dualitatea în programarea liniară 11
2.2 Dualele unor forme particulare de probleme de programare
liniară

1) Duala unei forme canonice de maximizare este o formă canonică de


minimizare şi reciproc.

a11 x1 + a12 x 2 +K+ a1n x n ≤ b1 u1 ≥ 0 


a x + a x +K+ a x ≤ b u2 ≥ 0 
 21 1 22 2 2n n 2 
.............................................. . .......... 
 
a m1 x1 + a m2 x 2 +K+ a mn x n ≤ bm um ≥ 0 
 x1 ≥ 0 a11u1 + a 21u2 +K + a m1um ≥ c1 
 x2 ≥ 0 a12 u1 + a 22 u2 +K + a m2 um ≥ c2 
 
 M .............................................
 xn ≥ 0 a1n u1 + a 2 n u2 +K+ a mn um ≥ cn 
 
max f = c1 x1 + c2 x 2 +K+ cn x n min g = b1u1 + b2 u2 +K+bm um 

Cu notaţiile matriciale introduse în (1.3) la care se adaugă: u = [u1 , u2 ,..., um ]

cuplul format din cele două probleme de mai sus devine:

 Ax ≤ b uA ≥ c
 
( P)  x ≥ 0 (Q) u ≥ 0
max f ( x ) = cx min g (u) = ub
 

2) Conservarea formei de prezentare se pierde atunci când se


consideră duala unei probleme în formă standard.

∑ 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
 

(f.r.s.≡ fără restricţie de semn!)

În mod analog se construieşte duala formei standard în care funcţia


obiectiv se minimizează:

 Ax = b uA ≤ c
 
( P)  x ≥ 0 ( Q )u f . r. s.
min f ( x ) = cx max g( u ) = ub
 

Observaţie: De reţinut este faptul că dualele a două probleme de


programare liniară echivalente sunt ele însele echivalente adică au aceeaşi
mulţime de soluţii admisibile şi aceleaşi soluţii optime.

2.3 Teoreme de dualitate

Cu notaţiile matriciale din (2.2) să considerăm cuplul de probleme în


dualitate în formă canonică:

(max) f ( x ) = cx (min) g ( u ) = ub
 
( P ) Ax ≤ b ( Q ) uA ≥ c
 x≥0  u≥0
 

Teorema 2.3.1 Fie x = [ x1 , x 2 ,..., x n ]


T
o soluţie admisibilă a
problemei (P) şi u = [u1 , u2 ,..., um ] o soluţie admisibilă a problemei (Q).
Atunci:
1) f ( x ) ≤ g (u )
2) Dacă f ( x ) = g (u ) atunci x este o soluţie optimă a problemei (P)
iar u este o soluţie optimă a problemei (Q).
2. Dualitatea în programarea liniară 13
Demonstraţie:1)Prin ipoteză Ax ≤ b , x ≥ 0 şi uA ≥ c ,
u ≥ 0 .Deducem că uAx ≤ ub şi uAx ≥ cx (nenegativitatea vectorilor x şi
u este esenţială!) de unde:
f ( x ) = cx ≤ uAx ≤ ub = g (u )

2) Dacă f ( x ) = g (u ) şi dacă x nu ar fi soluţie optimă a problemei (P)


ar exista o soluţie admisibilă x' mai bună, adică f ( x ') > f ( x ) .Rezultă
inegalitatea f ( x ') > g (u ) contrară celor demonstrate la punctul precedent. „

Clasificarea cuplurilor de probleme de programare liniară în dualitate


este făcută de următoarea teoremă:

Teorema 2.3.2 (Teorema fundamentală a dualităţii) Pentru un cuplu


de probleme în dualitate una şi numai una din următoarele situaţii este
posibilă:
1) Ambele probleme au soluţii admisibile; atunci ambele au soluţii
optime şi valorile optime ale funcţiilor obiectiv coincid.
2) Numai una din probleme are soluţii admisibile, iar cealaltă nu are;
atunci problema compatibilă are optim infinit.
3) Nici una din probleme nu are soluţii admisibile.

Simetria teoremei 2.3.2 nu constituie totuşi un răspuns pentru reciproca


teoremei 2.3.1 Specificăm acest lucru în mod expres pentru că în programarea
neliniară el nu are loc.

Teorema 2.3.3 Dacă una din problemele unui cuplu de probleme în


dualitate au soluţie optimă atunci şi cealaltă are şi valorile optime ale
funcţiilor obiectiv coincid.

Nu dăm demonstraţia teoremei 2.3.2 deoarece pregătirile necesare depăşesc


cadrul impus acestei lucrări. Vom demonstra însă teorema 2.3.3 după ce vom
prezenta metoda generală de rezolvare a problemelor de programare liniară.

Teorema 2.3.4 (Teorema ecarturilor complementare) Fie (P,Q) un


cuplu de probleme canonice în dualitate:
14 I. PROGRAMARE LINIARA
 Ax ≤ b uA ≥ c
 
( P)  x ≥ 0 Q u ≥ 0
min f ( x ) = cx min g (u) = ub
 

Un cuplu de soluţii admisibile ( x , u ) este un cuplu de soluţii optime


dacă şi numai dacă:

(uA − c) x = 0
 (2.3.1)
u (b − Ax ) = 0

Demonstraţie: Să presupunem relaţiile (2.3.1) verificate de


cuplul ( x , u ):

uAx − cx = 0 
 ⇒ cx = ub ⇒ ( x , u ) este un cuplu de soluţii optime în virtutea
ub − uAx = 0

teoremei 2.3.1.Reciproc, să presupunem că ( x , u ) constituie un cuplu de


soluţii optime. Atunci cx = ub ,în virtutea teoremei fundamentale a dualităţii şi
prin urmare:

(uA − c) x + u (b − Ax ) = 0

Deoarece x , u sunt soluţii admisibile avem: (uA − c) x ≥ 0, u (b − Ax ) ≥ 0 şi


deci (uA − c) x = 0, u (b − Ax ) = 0 relaţii care arată că x , u verifică (2.3.1).„

În notaţiile secţiunii (2.2) relaţiile matriciale (2.3.1) se pot scrie:

∑  ∑ aij ui − c j  x j = 0


n m

j =1 i =1

m  n 
∑ ui  bi − ∑ aij x j  = 0
i =1  j =1 

Aceste relaţii - modulo admisibilitatea soluţiilor celor două probleme - sunt


echivalente cu:
2. Dualitatea în programarea liniară 15
 ∑ a u − c  x = 0
m
j = 1,..., n
 i =1 ij i j
 j
 n 
ui  bi − ∑ aij x j  = 0 i = 1,..., m
 j =1 

Verificarea acestor egalităţi de către un cuplu de soluţii admisibile


x = [ x1 , x 2 ,..., x n ] şi u = [u1 , u2 ,K , um ] reprezintă deci o condiţie necesară şi
T

suficientă de optimalitate.

Pe lîngă formularea precedentă, teorema 2.3.4. mai are următoarea


interpretare:

Cuplul ( x , u ) de soluţii admisibile este un cuplu de soluţii optime dacă şi


numai dacă verifică seturile de implicaţii:

 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

Observaţie. Deşi prezentată pe un cuplu de probleme canonice,


teorema 2.3.4. este valabilă pentru orice cuplu de probleme în dualitate. Astfel
pentru cuplul:

max f = cx min g = ub
 
 Ax = b  uA ≥ c
 x≥0  u f . r . s.
 

ele se reduc la: (uA − c) x = 0 ⇔  ∑ aij ui − c j  u j = 0


m
j = 1,... , n.
 i =1 

Şi mai concret, considerăm cuplul din:

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

Conform teoremei ecarturilor complementare, condiţia necesară şi suficientă


pentru ca două soluţii admisibile ale celor două probleme:

x = ( x1 , x 2 , x 3 ) T şi u = (u1 , u2 , u3 )

să fie optime este satisfacerea relaţiilor:

( 5 − 6u1 − u2 − 2u3 ) x1 = 0 (1)


( −2 − 2u1 − 3u2 + u3 ) x 2 = 0 ( 2)
( −1 + 3u1 − 2u2 − 4u3 ) x 3 = 0 (3)
( 6 − 6 x1 − 2 x 2 + 3x 3 )u1 = 0 ( 4)
( 2 x1 − x 2 + 4 x 3 − 4 ) u 3 = 0 (5)

O consecinţă importantă a teoremei ecarturilor complementare este


faptul că rezolvarea unei probleme de programare liniară este echivalentă cu
rezolvarea dualei sale în sensul că dacă se cunoaşte soluţia optimă a uneia din
ele putem deduce relativ simplu soluţia optimă a celeilalte.Pentru ilustrare vom

determina soluţia optimă a problemei (P) din exemplul precedent ştiind că


duala (Q) are soluţia optimă u* de componente: u1* = 0 , u2* = − 149 , u3* = 141 .
Înlocuind u* în (1) - (5) se constată că relaţiile (2),(3),(4) sunt satisfăcute de
orice valori numerice acordate variabilelor x1 , x2 , x3. În schimb din (1) şi (5)
obţinem relaţiile: x1=0 şi 2x1 - x2 + 4x3 - 4 = 0 care împreună cu restricţia
egalitate din (P) constituie un sistem liniar:

 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

Echivalenţa amintită mai înainte este folositoare în rezolvarea efectivă


a problemelor de programare liniară ştiut fiind că efortul de calcul este relativ
mai mic dacă numărul restricţiilor este mai mic. În consecinţă, pentru o
problemă cu multe restricţii şi un număr restrâns de variabile, va fi mai comod
să rezolvăm duala sa.

2.4 Interpretarea economică a dualităţii

Reluăm problema firmei din secţiunea 1.1 exemplul 1).Considerăm o


întreprindere care produce bunurile G1,G2,...,Gm la preţurile c1,c2,...,cn folosind
pentru aceasta mai multe resurse R1,R2,...,Rm disponibile în cantităţile limitate
b1,b2,...,bm. Consumurile specifice de resurse pentru unul sau altul din bunurile
realizabile de către firmă sunt specificate în matricea:

 a11 a12 K a1n 


 a 21 a 22 K a2n 
A= 
M M K M 
a m1 a m2 K a mn 

Obiectivul firmei este maximizarea veniturilor rezultate din vânzarea


bunurilor produse. În ipotezele de liniaritate uzuale, programul liniar pentru
determinarea combinaţiei optime de bunuri este:

(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 cu x* = ( x1* , x 2* ,..., x n* ) combinaţia de bunuri care aduce firmei


venitul maxim:
18 I. PROGRAMARE LINIARA
V * = max f = f ( x*) = c x + c2 x +...+ cn x n*
*
1 1
*
2

Dacă admitem că singura posibilitate a firmei de a obţine venitul V* constă în


transformarea resurselor disponibile în bunuri conform programului x* şi
vânzarea acestora este natural să ne întrebăm care este contribuţia fiecărei
resurse în parte la formarea acestui venit.
La baza discuţiei vom pune aceleaşi ipoteze de liniaritate care ne-au
condus la modelul matematic (P) şi anume:

• contribuţia unei resurse la venitul maxim al firmei este - pînă la o


anumită limită - direct proporţională cu cantitatea disponibilă;
• nivelul contribuţiei unei resurse nu este condiţionat de celelalte
resurse , ci numai de cantitatea în care ea se află disponibilă.

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:

V * = b1u1* + b2 u2* +...+bm um* (2.4.1)

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:

a1 j u1* + a 2 j u2* +...+ a mj um*

Această mărime trebuie să acopere preţul pe care firma îl încasează prin


vânzare de vreme ce ea nu are alte resurse de formare a venitului în afara

transformării resurselor în bunuri. Se conchide că sistemul


u* = (u1* , u2* ,..., um* ) trebuie să satisfacă relaţiile:

a11 u1* + a 21u2* +...+ a m1 um* ≥ c1



a12 u1 + a 22 u2 +...+ a m2 um ≥ c 2
* * *

 (2.4.2)
 ..........................
a u * + a u * +...+ a u * ≥ c
 1n 1 2n 2 mn m n

şi deasemeni condiţiile de nenegativitate:


2. Dualitatea în programarea liniară 19
u ≥ 0, u ≥ 0,..., u ≥ 0
*
1
*
2
*
m (2.4.3)

Sunt suficiente relaţiile (2.4.1) - (2.4.3) pentru determinarea efectivă a valorilor


u1* , u2* ,..., um* ? Teoria dualităţii dă un răspuns afirmativ pe baza următoarelor
observaţii:

1) Relaţiile (2.4.2) şi (2.4.3) arată că u* = (u1* , u2* ,..., um* ) constituie o


soluţie admisibilă a dualei (Q) asociată problemei (P):

 (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

2) Relaţia (2.4.1) rescrisă în forma f(x*) = g(u*), coroborată cu teorema


de dualitate 2.3.1, ne arată că u* este chiar soluţia optimă a problemei duale Q.

Astfel, am găsit un conţinut economic coerent variabilelor duale u1, u2,..., um


din problema duală (Q). Ele reprezintă nişte valori băneşti asociate la câte o
unitate din fiecare resursă disponibilă a firmei şi exprimă aportul unitar al
fiecărei resurse la formarea venitului maxim. Strict dimensional, variabilele u1,
u2,..., um au semnificaţia unor preţuri ataşate resurselor. Totuşi aceste preţuri nu
au nimic comun cu valoarea intrinsecă a resurselor ci - aşa cum a rezultat din
interpretarea dată - reflectă numai măsura participării lor la formarea venitului

maxim. Tocmai pentru a preveni identificarea lor cu preţurile reale ale


resurselor, în literatura de specialitate, aceste entităţi au fost denumite preţuri
umbră (shadow prices). A rezultat deasemeni şi o modalitate de calcul a
acestor mărimi : se rezolvă problema duală (Q).

Teoria dualităţii arată că venitul maxim V* al firmei - privit ca funcţie


de cantităţile disponibile de resurse - depinde liniar de aceste disponibile prin
intermediul preţurilor duale optime - vezi relaţia (2.4.1)

În consecinţă:
20 I. PROGRAMARE LINIARA
∂V *
= ui* i = 1,..., m
∂ bi
(2.4.4)

Prin urmare preţurile duale optime ne arată cu cât se modifică venitul


maxim V* al firmei la o variaţie cu o unitate a disponibilului unei resurse.

Este important de reţinut faptul că aceste concluzii rămîn valabile numai în


situaţia în care componentele vectorului b variază între anumite limite! În cazul
general, atunci când se iau în considerare toate valorile posibile ale lui b, adică
b ∈ R+m , funcţia V*(b) este subaditivă şi pozitiv omogenă.Aceasta înseamnă:

V * ( b + b' ) ≤ V * ( b) + V * ( b' ) ( ∀ ) b, b' ∈ R+m


V * ( tb ) = tV * ( b ) ( ∀ ) t ≥ 0 , b ∈ R+m

Reamintim că în baza teoremei ecarturilor complementare soluţiile optime x*,


u* al problemelor (P) şi (Q) satisfac relaţiile:

x *j > 0 ⇒ a1 j u1* + a 2 j u2* +...+ a mj um* = c j (2.4.5)


a x + ai 2 x +...+ ain x < bi ⇒ u = 0
*
i1 1
*
2
*
n
*
i (2.4.5' )
ui* > 0 ⇒ ai1 x1* + ai 2 x 2* +...+ ain x n* = bi (2.4.6)
a1 j u1* + a 2 j u2* +...+ a mj um* > c j ⇒ x *j = 0 (2.4.6')

(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.

(2.4.5') arată că dacă o resursă nu este prevăzută a se consuma în întregime -


spunem că este excedentară - preţul său dual este 0. Această concluzie
reprezintă versiunea liniară a legii cererii şi ofertei - preţul unei mărfi pentru
care oferta este mai mare decât cererea trebuie să scadă.
(2.4.6) arată că o resursă cu preţ dual semnificativ trebuie consumată în
întregime; creşterea cu o unitate a disponibilului aducând o creştere a venitului
maxim conform (2.4.4).
(2.4.6') arată că dacă pentru un bun valoarea resurselor încorporate într-o
unitate - valoare măsurată în preţurile duale optime - depăşeşte preţul său
m
atunci acesta nu intră în combinaţia optimală. Diferenţa ∑ aij u *j − c j reprezintă
i =1
2. Dualitatea în programarea liniară 21

pierderea potenţială de venit pe care firma o va înregistra dacă totuşi decide


realizarea unei unităţi din bunul j.

Condiţiile (2.4.5),(2.4.5'),(2.4.6),(2.4.6') date de teorema ecarturilor


complementare se mai numesc şi condiţii de echilibru de unde şi numele de
preţuri de echilibru dat uneori preţurilor duale optime.
3. Structura mulţimii soluţiilor admisibile ale unei probleme de programare liniară 21

3. Structura mulţimii soluţiilor admisibile ale unei probleme de


programare liniară

În această secţiune ne vom opri asupra principalelor proprietăţi


geometrice pe care le posedă mulţimea soluţiilor unui sistem de ecuaţii şi
inecuaţii liniare. Aceste proprietăţi sunt determinante în înţelegerea
mecanismului metodei simplex de rezolvare a programelor liniare.
Parcurgerea acestei secţiuni necesită câteva rudimente de calcul
matricial şi algebră liniară. Vectorii cu care se va opera vor fi subînţeleşi, după
caz, fie linii fie coloane. De regulă,scrierea în text a unui vector se va face în
linie ca de exemplu v = ( a1 , a 2 ,..., a m ) ; dacă este necesar ca v să fie considerat
vector coloană se va folosi operatorul de transpunere: v = ( a1 , a 2 ,..., a m ) T.

3.1 Câteva elemente de analiză convexă liniară

Fiind date două puncte x , y∈R n mulţimea:


[ x , y] = {z = (1 − α ) x + α y , 0 ≤ α ≤ 1}
se numeşte segment (închis) cu extremităţile x şi y. Se ştie că în R2 sau în R3
acest concept se suprapune peste conceptul geometric uzual. Pentru α = 0 ,
respectiv α = 1 ,avem z ≡ x , respectiv z ≡ y . Punctele z = (1 − α ) x + αy
corespunzătoare valorilor α ∈( 0 ,1 ) se numesc puncte interioare ale

1 1
segmentului [ x , y] . Pentru α=
2
găsim z=
2
(x + y ) ≡ mijlocul

segmentului [ x , y] .

O mulţime X ⊆ R n se zice convexă dacă o dată cu două puncte


conţine şi segmentul care le uneşte.

Formal :

X convexă ⇔ (∀) x , y ∈ X ,(∀) α ∈[0,1] , z = (1 − α ) x + α y ∈ X

Se verifică imediat că intersecţia mai multor mulţimi convexe este o mulţime


convexă.
22 I. PROGRAMARE LINIARA

Fie a = ( a1 , a 2 ,..., a n ) un vector nenul şi b un scalar.Este uşor de văzut


că mulţimea:

{ }
S = x = ( x1 , x 2 ,..., x n ) T ax ≤ b ⇔ a1 x1 + a 2 x 2 +...+ a n x n ≤ b

este convexă. Ea se numeşte semispaţiu, în timp ce mulţimea:

{
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

a)poligon concav b)coroană circulară c)disc

d)poligon convex e)mulţime poliedrală nemărginită

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

Din cele de mai sus rezultă că orice mulţime poliedrală în R n se


identifică cu mulţimea soluţiilor unui sistem de ecuaţii şi/sau inecuaţii liniare
în n variabile. În particular:

Mulţimea A P a soluţiilor admisibile ale unui program liniar (P) este o


mulţime convexă, poliedrală şi închisă. Frontiera sa se compune din toate
punctele ale căror coordonate satisfac cu egalitate cel puţin una din restricţii.

Se numeşte vârf al unei mulţimi convexe X ⊆ R n un punct v ∈ X cu


proprietatea că nu există un segment [x,y] ⊂ X care să conţină pe v ca punct
interior. În R 2 sau R 3 regăsim conceptul geometric uzual.

O mulţime poliedrală are întotdeauna un număr finit de vârfuri (posibil


nici unul); de exemplu, poligonul d) din fig. 3.1.1 are patru vârfuri în timp ce
un semispaţiu nu are vârfuri. Discul c) are o infinitate de vârfuri: orice punct de
pe circumferinţă are această calitate.

Mulţimile d) şi e) din fig.3.1.1 sunt amândouă poliedrale dar e) este


nemărginită. Pentru a caracteriza această proprietate avem nevoie de un nou
concept.
24 I. PROGRAMARE LINIARA
Un vector w ∈ R se numeşte rază extremă pentru mulţimea convexă
n

X ⊆ R dacă pentru orice x ∈ X şi α ≥ 0 rezultă x + α ⋅ w ∈ X ,iar w nu poate


n

fi scris sub forma w=w1+w2,w1 şi w2 având aceeaşi proprietate ca şi w.

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".

De reţinut că o mulţine convexă este nemărginită dacă şi numai dacă


are cel puţin o rază extremă iar o mulţime poliedrală are un număr finit de
raze extreme.

Să considerăm acum o mulţime oarecare L de puncte din R n , finită sau


infinită. O combinaţie convexă de puncte din L este un punct (vector) de
forma:

x = α1 v 1 + α 2 v 2 +....+α p v p cu α1 , α 2 ,...., α p ≥ 0 şi α1 + α 2 +....+α p = 1

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

Se poate arăta fără dificultate că mulţimea tuturor combinaţiilor convexe de


puncte din L este o mulţime convexă şi mai precis este cea mai mică mulţime
convexă (în sensul incluziunii) care conţine mulţimea L.Ea se notează conv L
şi se numeşte anvelopa (sau acoperirea) convexă a mulţimii L.

Dacă L este o mulţime finită atunci conv L este o mulţime poliedrală


mărginită. Acest fapt este ilustrat în figura 3.1.4.

Să considerăm o mulţime poliedrală X ⊆ R n .Fie:

{
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

Dacă X este o mulţime poliedrală mărginită atunci conv X& = X , adică


orice punct din X este o combinaţie convexă a vârfurilor mulţimii X.

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

De reţinut faptul că scalarii α 1,α 2,L,α p nu sunt unici.

Dacă mulţimea poliedrală X nu este mărginită atunci conv X& ≠ X .


Acest fapt este ilustrat în figura 3.1.5 unde mulţimea dublu haşurată este
acoperirea convexă a vârfurilor mulţimii poliedrale nemărginite X. Se poate
arăta că dacă v1 , v 2 ,L, v p sunt vârfurile mulţimii poliedrale nemărginite X
iar w1 , w 2 ,L, wq sunt razele sale extreme atunci pentru orice x ∈ X există
scalarii α 1,α 2,L,α p ≥ 0 cu α 1+ α 2 +L+α p = 1 şi µ 1, µ 2,L, µ q ≥ 0 astfel
încât:

x = α 1v1 + α 2 v 2 +L+α p v p + µ 1w1 + µ 2 w 2 +L+ µ q wq

w1
X w2
v1

v3
2
v conv{v1,v2,v3}

Figura 3.1.5

3.2 Teorema centrală a programării liniare

Să considerăm acum un program liniar (P) în care funcţia obiectiv se


maximizează şi să ne situăm în cazul în care programul (P) este compatibil
adică mulţimea soluţiilor sale admisibile AP este nevidă. Am văzut că AP este
o mulţime poliedrală şi convexă având un număr finit de vârfuri
v 1 , v 2 ,....., v p şi (posibil) un număr finit de raze extreme w1 , w 2 ,L, w q . Aşa
cum va rezulta din
3. Structura mulţimii soluţiilor admisibile ale unei probleme de programare liniară 27

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.

TEOREMA . Dacă programul (P) are optim finit, atunci o soluţie


optimă se găseşte într-unul din vârfurile mulţimii soluţiilor admisibile AP .

Demonstraţie: Fie:

f ( x ) = cx = c1x1 + c2 x2 +L+ cn xn

funcţia obiectiv a programului (P). Pentru început să arătăm că:

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 α → ∞.

Ar rezulta că (P) are optim infinit contrar ipotezei.

{ }
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:

α 1,α 2,L,α p ≥ 0 cu α 1+ α 2 +L+ α p = 1 şi µ 1 , µ 2 ,..., µ q ≥ 0 astfel încât:

x = α 1v1 + α 2 v 2 +L+α p v p + µ 1w1 + µ 2 w 2 +L+ µ q wq

Atunci:
28 I. PROGRAMARE LINIARA

f ( x ) = cx = α 1 cv 1 + α 2 cv 2 +K+α p cv p + µ 1cw1 + µ 2 cw 2 +K+ µ q cw q ≤


≤ α 1 cv 1 + α 2 cv 2 +K+α p cv p ≤ (α 1 + α 2 +K+α p ) cv* = f (v*)

În consecinţă v * este o soluţie optimă a programului (P). „

Importanţa acestei teoreme este covârşitoare: ea reduce problema


găsirii unei soluţii optime x * din mulţimea, în general infinită, AP a tuturor
soluţiilor admisibile ale programului (P), la identificarea acestei soluţii în
mulţimea finită a vârfurilor lui AP.

Recapitulând modul în care diferitele proprietăţi discutate au fost


implicate în obţinerea acestui rezultat fundamental să reţinem că:

• Convexitatea mulţimii soluţiilor admisibile AP situează soluţiile


optime, dacă acestea există, pe frontiera lui AP;
• Deoarece AP este poliedrală, iar funcţia obiectiv este liniară, cel
puţin una din soluţiile optime este un vârf al lui AP.

Teorema furnizează următorul procedeu "naiv" de rezolvare a unui


program liniar (P):

• se "generează" lista (finită) a vârfurilor mulţimii AP;


• prin înlocuire succesivă în funcţia obiectiv se reţine vârful care oferă
acesteia valoarea maximă.

Procedeul ridică la rândul său următoarele probleme principiale:

1) Cum recunoaştem compatibilitatea programului (P) ?


2) Cum "calculăm" un vârf al mulţimii AP sau mai corect spus cum se
caracterizează "algebric" un vârf ?
3) Pentru obţinerea soluţiei optime este necesar să generăm toate
vârfurile mulţimii AP? Întrebarea este serioasă deoarece şi pentru programe
liniare de dimensiuni reduse (adică cu un număr relativ mic de restricţii şi
variabile) numărul vârfurilor este foarte mare.
4) Chiar dacă reuşim, prin enumerarea explicită a tuturor vârfurilor, să
găsim pe acela care maximizează funcţia obiectiv, aceasta nu înseamnă
obligatoriu că am rezolvat programul dat ! Este posibil ca programul respectiv
să aibe optim infinit! Cum se recunoaşte acest fapt?
3. Structura mulţimii soluţiilor admisibile ale unei probleme de programare liniară 29

Vom răspunde progresiv la toate chestiunile menţionate în secţiunile


următoare.

3.3 Corespondenţa AP ~AFSP

Considerăm o problemă de programare liniară (P) care conţine cel puţin


o restricţie inegalitate şi fie (FSP) forma sa standard.(vezi secţiunea 1.4) Pentru
simplificarea notaţiilor, vom presupune că (P) este în formă canonică de
maximizare:

max f = cx

( P)  Ax ≤ b
 x≥0

unde:

 a11 a12 L a1n   b1   x1 


a a 22 L a2 n  b  x 
A=  b=  2 x= 
21 2

 M M M  M M (3.3.1)


     
a m1 a m2 L a mn  bm  xn 
c = [c1 c2 L c n ]

Ş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 

Între mulţimile de soluţii admisibile AP ⊂ Rn şi AFSP ⊂ Rn+m există o


corespondenţă bijectivă Φ(x) = (x , y), unde y = b - Ax, a cărei inversă este
proiecţia Φ-1(x,y) = x. Am remarcat deja în secţiunea 1.4 că prin
corespondenţa
30 I. PROGRAMARE LINIARA

Φ, soluţiile optime ale celor două probleme se corespund. În fapt, Φ are


următoarea proprietate mai generală.

Teorema 3.3.1 Dacă x este un vârf al mulţimii AP atunci Φ(x) = (x,y)


cu y = b - Ax este un vârf al mulţimii AFSP . Reciproc, dacă (x,y) este un vârf
al mulţimii AFSP atunci Φ-1(x,y) = x este un vârf al mulţimii AP .

Demonstraţie: Concluzia decurge nemijlocit din definiţia vârfului


(secţiunea 3.1) observând că Φ şi Φ-1 conservă combinaţiile convexe ale
punctelor din AP şi AFSP .
Într-adevăr, fie x1 , x2 ∈ AP ,α∈[0 , 1] şi x = (1-α )x1 +αx2. Fie mai departe:
Φ(x) = (x,y) , Φ(x1) = (x1,y1) , Φ(x2) = (x2,y2) unde: y = b - Ax , y1=b – Ax1 ,
y2 = b - Ax2 .Deoarece:
y = b - A((1 - α )x1 +α x2 )= (1 - α )(b - A x1 ) + α (b - A x2 ) = (1 - α )y1 +α y2
avem:
(x,y) = (1 - α )(x1 ,y1 ) + α (x2 ,y2 ), adică Φ(x) = (1 - α )Φ(x1) +α Φ(x2) . „

În baza acestei teoreme precum şi a teoremei centrale a programării liniare


(secţiunea 3.2), pentru a rezolva problema (P) este suficient să căutăm soluţia
optimă a formei sale standard (FSP) printre vârfurile mulţimii AFSP .

Vom vedea în secţiunea următoare cum se caracterizează “algebric” vârfurile


mulţimii soluţiilor admisibile ale unui program liniar în formă standard. Tot
acolo vom arăta că dacă un program (P) este compatibil atunci AP are cel puţin
un vârf şi în orice caz un număr finit de asemenea elemente. Pe baza acestor
rezultate, vom putea descrie în paragraful 4 o metodă efectivă de rezolvare a
unei probleme de programare liniară.

3.4 Soluţii de bază ale unui program liniar

Să considerăm acum un program liniar (P) în formă standard:

max f = cx

( P ) Ax = b
 x≥0

în care masivele A,b,c,x au semnificaţiile din (3.3.1). Vom pune în evidenţă


coloanele matricii A:
3. Structura mulţimii soluţiilor admisibile ale unei probleme de programare liniară 31
A = [A1 , A2 , … , An ]

Definiţie Soluţia x = ( x1 , x 2 ,..., x n )T a problemei în formă standard


(P), nu neapărat admisibilă, se numeşte soluţie de bază dacă mulţimea
coloanelor Ai corespunzătoare componentelor x i ≠ 0 este liniar independentă.

Fie I( x ) mulţimea indicilor i ∈ {1,2,…,m} cu proprietatea că x i ≠ 0.

Lema 1 Dacă x şi x ′ sunt soluţii de bază ale programului (P) şi


I( x ′ ) ⊆ I( x ) atunci x = x ′ (şi deci I( x ) = I( x ′ )).

Demonstraţie: Este clar că x i = x i′ = 0 pentru indicii i∉ I( x ). Atunci


egalităţile:
∑ x i A i = ∑ x i′A i = b
i ∈I ( x ) i ∈I ( x ′ )

implică:
∑ ( x i − x i′ ) A i = 0
i ∈I ( x )

de unde rezultă x i = x i′ pentru toţi i∈ I( x ), deoarece prin ipoteză coloanele


Ai , i∈ I( x ) sunt liniar independente. „

Lema 2 Fie x = ( x1 , x 2 ,..., x n )T o soluţie admisibilă a problemei (P)


care nu este soluţie de bază. Atunci există un vector y∈ Rn şi un interval
[ λ , λ ]⊂ Rn ∪ {-∞ , +∞} astfel încât:
1) Ay = 0;
2) [ λ , λ ] conţine pe 0 şi nu se reduce la acest punct; λ şi λ nu sunt
simultan infinite;
3) pentru orice λ ∈[ λ , λ ] vectorul x(λ) = x + λy este o soluţie
admisibilă a problemei (P);
4) Dacă de exemplu, λ este finit şi x ′ = x( λ ) atunci I( x ′ ) ⊆ I( x )
dar I( x ′ ) ≤ I( x ) - 1 adică x ′ are mai puţine componente nenule decât x .

Demonstraţie: Din ipoteză rezultă că mulţimea coloanelor Ai , i∈ I( x )


este liniar independentă. Există prin urmare scalarii yi , i∈ I( x ) nu toţi nuli
astfel încât:
32 I. PROGRAMARE LINIARA

∑ yi Ai = 0
i ∈I ( x )

Punând yi = 0 pentru i∉ I( x ) obţinem un vector y = (y1 ,y2 ,…,yn) ∈ Rn cu


proprietatea că:

n
∑ yi Ai = 0 ⇔ Ay = 0
i =1

Afirmaţia 1) este demonstrată.

Pentru orice λ ∈ R vectorul x(λ) = x + λy este o soluţie a problemei (P)


deoarece Ax(λ) = A x + λAy =b.
Impunând condiţia de admisibilitate x(λ)≥ 0 obţinem pentru λ intervalul de
valori permise [ λ , λ ] în care:

  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.

Să presupunem, în final că λ este finit. Atunci va exista un indice


x
r∈ I( x ) astfel că:yr < 0 şi λ = - r y .Dacă x ′ = x( λ ) este clar că I( x ′ ) ⊆
r
I( x ) şi cum x r′ = x r + λ y r = 0 iar x r > 0 urmează că I( x ′ ) < I( x ) şi
ultima afirmaţie este dovedită. „

Teorema 3.4.1 O soluţie admisibilă x = ( x1 , x 2 ,..., x n )T a problemei (P)


este un vârf al mulţimii AP dacă şi numai dacă x este o soluţie de bază.

Demonstraţie: Să presupunem că x este vârf dar nu este soluţie de


bază. Conform lemei 2 există y ∈ Rn cu Ay = 0 şi intervalul [ λ , λ ] care
conţine pe 0 şi nu se reduce la acesta, astfel încât x(λ) = x + λy să fie o soluţie
3. Structura mulţimii soluţiilor admisibile ale unei probleme de programare liniară 33
a programului (P) oricare ar fi λ ∈ [ λ , λ ]. Alegem ε > 0 suficient de mic
astfel încât [-ε ,+ε ] ⊂ [ λ , λ ] şi punem: x1 = x -εy, x2 = x +εy . Atunci x1,x2∈
AP , x1≠ x2 şi x = 12 ( x 1 + x 2 ) în contradicţie cu ipoteza că x este vârf al
mulţimii AP .

Pentru reciprocă să presupunem că x este o soluţie de bază fără a fi


vârf. Atunci există x1,x2∈ AP, x1≠ x2 şi α∈ (0,1) astfel încât x = (1-α )x1 + αx2.
Pentru i∉I( x ) avem (1 − α ) x 1i + αx 2i = 0 şi cum x 1i ≥ 0 , x 2i ≥ 0 rezultă
x 1i = x 2i = 0 . În consecinţă, I(x1) ⊆ I( x ), I(x2) ⊆ I( x ) şi în virtutea lemei 1
rezultă x1 = x2 = x , în contradicţie cu ipoteza făcută.
„

Teorema 3.4.2 Dacă programul în formă standard (P) este compatibil


atunci mulţimea soluţiilor sale admisibile AP are cel puţin o soluţie de bază,
deci un vârf.

Demonstraţie Fie x = ( x1 , x 2 ,..., x n ) T o soluţie admisibilă a


problemei (P). Vom proceda prin inducţie după numărul k al componentelor
x i > 0 .Dacă k = 0 atunci x = (0,0,...,0) este o soluţie de bază întrucât o
mulţime vidă de vectori este, prin convenţie,liniar independentă. Dacă k > 0
există două situaţii de examinat:
1) Coloanele Ai, i ∈ I( x ) sunt liniar independente. Atunci x este o
soluţie de bază.

2) Coloanele Ai, i ∈ I( x ) sunt liniar dependente. Conform lemei 2 va


exista o soluţie admisibilă x ′ cu I( x ′ ) ⊂ I( x ) dar cu mai puţine componente
nenule decât x . Repetând raţionamentul, este clar că într-un număr finit de
paşi se ajunge la situaţia 1) adică la o soluţie de bază.
„

Consecinţă Mulţimea AP a soluţiilor admisibile ale unui program


liniar compatibil are cel puţin un vârf.

Demonstraţie: Să presupunem că (P) nu este în formă standard,


altminteri avem teorema 3.4.2. Fie (FSP) forma standard a programului (P).
Deoarece avem corespondenţa bijectivă Φ : AP ≅ AFSP deducem că AFSP ≠ ∅
pentru că prin ipoteză AP ≠ ∅. Prin teorema 3.4.2 mulţimea AFSP are cel puţin
un vârf; acesta, prin proiecţia Φ-1 va fi un vârf al mulţimii AP , graţie
teoremei 3.3.1. „
34 I. PROGRAMARE LINIARA
Având în vedere caracterizarea algebrică a vârfurilor dată în teorema
3.4.1, teorema centrală a programării liniare poate fi formulată şi în următorii
termeni.

Teorema 3.4.3 Dacă un program liniar în formă standard are optim


finit, cel puţin una din soluţiile sale optime este o soluţie de bază.

Mai rămâne de arătat că mulţimea soluţiilor admisibile ale unui


program liniar are un număr finit de vârfuri. În virtutea teoremelor 3.3.1 şi
3.4.1, aceasta revine la a arăta că un program liniar în formă standard (P) are
un număr finit de soluţii admisibile de bază. Faptul rezultă nemijlocit din aceea
că numărul sistemelor liniar independente ce pot fi extrase dintr-o mulţime
finită de vectori este finit. Vom preciza acest lucru sub forma unei teoreme în
secţiunea următoare, în care vom introduce un concept uşor diferit de cel de
soluţie de bază, acela de soluţie asociată unei baze a programului (P). Noul
concept are avantajul de a fi mai uşor de manipulat în practică.

3.5 Baze ale unui program liniar în formă standard. Soluţia


asociată unei baze

În notaţiile secţiunii precedente facem ipoteza:

rangA = m < n (3.5.1)

Ipoteza ne asigură că ecuaţiile ce compun sistemul liniar Ax = b al restricţiilor


sunt independente şi că acest sistem are o infinitate de soluţii. Să notăm că
ipoteza nu implică în mod necesar şi existenţa soluţiilor admisibile (adică cu
toate componentele nenegative) pentru sistemul considerat. După cum vom
vedea în secţiunea 4.6 ipoteza făcută nu este deloc restrictivă.

Deoarece rangA = m, în matricea A va exista cel puţin un grup de m


coloane liniar independente, constituind deci o bază a spaţiului Rm. Un
asemenea grup se va numi bază a programului (P) şi numărul acestora este
n!
finit , nedepăşind Cnm = .
m !( n − m )!

Fie B o bază a programului (P), I mulţimea indicilor coloanelor din B şi


J mulţimea indicilor coloanelor din A care nu sunt în B. Renumerotând
convenabil variabilele programului vom scrie matricea A în forma:
3. Structura mulţimii soluţiilor admisibile ale unei probleme de programare liniară 35
i j
A = [B , S] cu B = [A ]i ∈ I , S = [A ]j ∈ J

Partiţionăm corespunzător vectorul (coloană) x al variabilelor:

x B 
x= S
x 
cu x B = [ x i ] i∈I , xS = x j [ ] j ∈J

ca şi vectorul (linie) al coeficienţilor funcţiei obiectiv:

c = [cB,cS] cu cB = [ci]i ∈ I , cS = [cj]j ∈ J

În raport cu baza B aleasă, variabilele xi , i ∈ I se vor numi variabile bazice, iar


toate celelalte nebazice sau secundare.
Scriem sistemul Ax = b în forma:

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)

Va fi util să punem în evidenţă coloanele matricii S:

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)

Utilizăm (3.5.2) pentru a elimina din expresia funcţiei obiectiv variabilele


bazice:
x B 
f = [ c , c ] S  = c B x B + c S x S = c B ( b − Sx S ) + c S x S =
B S

 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

Astfel, în raport cu baza B, programul (P) poate fi adus la următoarea formă


echivalentă, conform (3.5.2) şi (3.5.4):

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

(PB) se numeşte forma explicită a programului (P) în raport cu baza B.


Comparând (PB) cu (P) constatăm că efectul înmulţirii cu B -1 a sistemului
Ax = b este explicitarea variabilelor bazice xi , i ∈ I în funcţie de cele
nebazice xj , 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 .

Prin construcţie, soluţia asociată unei baze a programului (P) este o


soluţie de bază în sensul definiţiei din secţiunea precedentă. Reciproca nu este
în general adevărată. Astfel, dacă x = ( x1 , x 2 ,..., x n ) T este o soluţie de bază a
programului (P), numărul componentelor nenule este ≤ m. Dacă acest număr
este exact m atunci x este soluţia asociată bazei formate din coloanele matricii
3. Structura mulţimii soluţiilor admisibile ale unei probleme de programare liniară 37
A corespunzătoare celor m componente nenule. Spunem în acest caz că x
este o soluţie de bază nedegenerată. Dacă numărul componentelor nenule este
< m,

coloanele corespunzătoare acestor componente pot fi completate până la o bază


în mai multe moduri, astfel că x se asociază la mai multe baze! Dacă se
întâmplă aşa spunem că x este o soluţie degenerată.

Deoarece (P) are un număr finit de baze, el va avea şi un număr finit


de soluţii asociate acestor baze şi de aici un număr finit de soluţii de bază.

În baza relaţiilor (3.5.8), (3.5.9) constanta f din (3.5.5) reprezintă


valoarea funcţiei obiectiv a programului (P) în soluţia (3.5.10) asociată bazei
B. Componentele c j , j ∈ J (definite în (3.5.6)) ale vectorului c S din (3.5.4)
vor juca un rol esenţial în caracterizarea optimalităţii unei soluţii admisibile de
bază. Ele se numesc costuri reduse şi sunt întotdeauna asociate variabilelor
nebazice. Coeficienţii numerici ai formei explicite (3.5.7) se trec într-un tabel
(TB) al cărui format este indicat în tabelul 3.5.1. Tabelul (TB) se numeşte
tabelul simplex asociat bazei B. Coloana “B” conţine vectorii bazei B, coloana
“CB” conţine coeficienţii din funcţia obiectiv ai variabilelor bazice iar în
coloana “VVB” apar valorile variabilelor bazice. În ultima linie a tabelului,
numită şi linia test, apar valoarea f a funcţiei obiectiv în soluţia asociată bazei
B precum şi costurile reduse c j , j ∈ J corespunzătoare coloanelor nebazice.
Formula (3.5.5) arată că f este produsul scalar al coloanelor “CB” şi “VVB”
în timp ce relaţia (3.5.6) arată că c j se obţine din produsul scalar al coloanelor
“CB” şi “Aj” scăzând costul cj scris deasupra coloanei “Aj”.

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

Extindem definiţia costului redus şi la coloanele “Ai”,


i∈I: c i = c i − c i = 0 .Aceste costuri reduse au fost notate în linia test cu
asteriscuri (*) spre a le deosebi de eventualele costuri reduse nule c j , j ∈ J
care, după cum vom vedea în secţiunea 4.2, indică - “la optim” - prezenţa mai
multor soluţii optime de bază.
38 I. PROGRAMARE LINIARA

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ă:

• se generează toate bazele programului (P) şi se calculează soluţiile


asociate acestora;
• se elimină soluţiile de bază neadmisibile şi dintre cele admisibile se
reţine acea soluţie care oferă funcţiei obiectiv valoarea maximă.

Nu mai insistăm asupra dezavantajelor şi lipsurilor acestei scheme deoarece ele


au fost deja menţionate în secţiunea 3.2. “Metoda” descrisă are o alternativă
care, din fericire, s-a dovedit a fi deosebit de eficientă din punct de vedere
practic. Este vorba de metoda simplex datorată matematicianului american
G.B. Dantzig (1947).
Această metodă este un procedeu de cercetare sistematică a soluţiilor
admisibile de bază ale unui program liniar în formă standard (P). Ea presupune
cunoscută o asemenea soluţie, numită soluţie iniţială sau de start şi în
continuare construieşte un şir de soluţii admisibile de bază dealungul căruia

valoarea funcţiei obiectiv creşte progresiv. Metoda simplex oferă un test


simplu de recunoaştere a optimalităţii unei soluţii de bază şi deasemeni un test
de recunoaştere a optimului infinit. Practica numerică a arătat că numărul
soluţiilor admisibile de bază efectiv generate este de regulă mult mai mic decât
numărul total al acestora.
Cu anumite precauţii, uşor de îndeplinit, metoda simplex garantează
convergenţa procesului iterativ în sensul că o bază admisibilă cercetată la un
moment dat nu mai revine în iteraţiile ulterioare (vezi secţiunea 4.5). Cum
numărul bazelor este finit, urmează că într-un număr finit de paşi se ajunge fie
la soluţia optimă fie la concluzia că programul are optim infinit.
Fireşte, în această descriere succintă, am plecat de la ipoteza cunoaşterii
unei soluţii admisibile de bază iniţiale, adică de la premiza că (P) este un
program compatibil. În secţiunea 4.3 vom vedea cum se face recunoaşterea
incompatibilităţii unui program liniar.
4. Metoda simplex 39
4.1 Teoremele fundamentale ale metodei simplex

În prezentarea fundamentelor teoretice ale metodei simplex vom folosi


notaţiile introduse în secţiunea 3.5. În mod constant vom presupune că soluţia
(3.5.10), asociată bazei B, este admisibilă, adică bi ≥ 0 , i ∈ I .

Teorema A. Dacă toţi c j ≥ 0 , j ∈ J atunci soluţia (3.5.10) asociată


bazei B este optimă. Dacă în plus c j > 0 , j ∈ J ,atunci ea este şi unica soluţie
optimă a programului (P).

Demonstraţie: Fie y = (y1,y2,...,yn)T ∈ A o soluţie admisibilă arbitrar


aleasă. Deoarece y1 ≥ 0, y2 ≥ 0, ...,yn ≥ 0 vom avea:

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 . „

Teorema B. Presupunem că există indicele k∈J astfel că c k < 0 şi toţi


a ik ≤ 0 , i ∈ I (⇔ A k ≤ 0) .Atunci programul (P) are optim infinit.

Demonstraţie: Pornind de la soluţia x din (3.5.10) construim o soluţie


admisibilă variabilă după cum urmează. Înlocuim în (3.5.7):

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. „

Teorema C Presupunem că există k∈ J astfel încât c k < 0 dar există şi


indici i∈ I cu a ik > 0 . Fie r∈ I indicele determinat prin formula:

br b 
= min  i  (4.1.4)
a rk i∈I aik >0  a ik 

Atunci grupul de coloane B' obţinut din B înlocuind coloana Ar cu coloana Ak


este o bază admisibilă a programului (P) şi soluţia x ′ asociată ei este cel
puţin la fel de bună ca şi soluţia x asociată bazei B, adică f( x ′ ) ≥ f( x ).

Demonstraţie: Din (4.1.4) rezultă că a rk > 0 . Din Ak = B-1Ak avem:

A k = BA k = ∑ a ik A i + a rk A r
i∈I ,i ≠ r

Deoarece a rk ≠ 0 putem exprima Ar în funcţie de Ai , i ≠ r şi Ak:

a ik i 1 k
Ar = − ∑ A + A
i∈I ,i ≠ k a rk a rk

Din teorema substituţiei rezultă că sistemul B', format din coloanele Ai , i ≠ r


şi Ak, este o bază a problemei (P).

Să luăm în soluţia variabilă x (θ) construită în demonstraţia teoremei B:


b
θ= r (4.1.5)
a rk
Din formulele (4.1.1) , (4.1.2) rezultă:
4. Metoda simplex 41
 br
x k = ; x j = 0 , j ∈J, j ≠ k
 a rk

x = b − b r a , i ∈ I
 i i
a rk
ik

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

Notăm cu x ′ soluţia ale cărei componente sunt definite în (4.1.6). Vom


observa mai întâi că x ′ este soluţie admisibilă a problemei (P), adică are toate
componentele nenegative. Într-adevăr:

- 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.

Utilizând formulele (4.1.3) şi (4.1.5) obţinem:

br
f ( x ′) = f − c k ≥ f = f ( x) (4.1.7)
a rk

În concluzie, x′ este cel puţin la fel de bună ca şi x.


„

Observaţii: 1) Bazele B şi B' apărute în enunţul teoremei C diferă una


de alta printr-o singură coloană a matricii A. Două baze ale programului (P) cu
această proprietate se vor numi în continuare baze vecine şi tot vecine se vor
numi şi soluţiile asociate.
42 I. PROGRAMARE LINIARA

2) Teoremele B şi C afirmă că dacă o soluţie de bază admisibilă x nu


satisface criteriul de optimalitate al teoremei A atunci sau (P) are optim infinit
sau, printre soluţiile vecine cu x există cel puţin una la fel de bună ca şi x
dacă nu chiar mai bună.

Recapitulând materialul expus în această secţiune constatăm că testarea


optimalităţii soluţiei x asociate bazei B presupune cunoaşterea formei
explicite (3.5.7) a problemei iniţiale în raport cu baza B. Mai mult, dacă x nu
verifică criteriul de optimalitate al teoremei A, construcţia soluţiei de bază mai
bune x ′ se face cu ajutorul elementelor aceleiaşi forme (3.5.7). În consecinţă,
testarea optimalităţii soluţiei x ′ asociată bazei vecine B' va necesita
cunoaşterea formei explicite a problemei iniţiale în raport cu noua bază B':

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).)

Fireşte, (4.1.8) se poate obţine ca şi (3.5.7) prin înmulţirea la stânga a


sistemului original de restricţii Ax = b cu matricea inversă (B')-1. Putem deduce
(4.1.8) direct din (3.5.7) cu ajutorul următoarelor operaţii:

Din ecuaţia r a sistemului (3.5.7):

x r + ∑ a rj x j + a rk x k = b r
j≠ k

explicităm xk, împărţind relaţia cu a rk :


4. Metoda simplex 43
a rj 1 b
xk + ∑ xj + xr = r (4.1.9)
j≠ k a rk a rk a rk

Substituim xk dat de (4.1.9) în celelalte ecuaţii ale sistemului din (3.5.7).


Obţinem:

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

Ecuaţiile (4.1.9) , (4.1.10) reprezintă sistemul Ax = b explicitat în noile


variabile bazice xi i ∈ I,i ≠ r şi xk.

Mai departe substituim acelaşi xk şi în expresia funcţiei obiectiv din (3.5.7).


Găsim:

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

Astfel, am exprimat funcţia obiectiv cu ajutorul noilor variabile nebazice xj


j ∈ J,j ≠ k şi xr.

Prin urmare (4.1.9) , (4.1.10) , (4.1.11) constituie forma explicită a


problemei originale în raport cu noua bază B'. Identificând coeficienţii din
aceste ecuaţii cu coeficienţii corespunzători din (4.1.8) rezultă formulele:

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

cunoscute şi sub numele de formule de schimbare a bazei.


44 I. PROGRAMARE LINIARA

4.2 Algoritmul simplex

Rezolvarea efectivă a unui program liniar în formă standard (P) se face


cu ajutorul algoritmului simplex. Acesta este un pachet invariabil de
instrucţiuni logice şi de calcul care, aplicate unei soluţii admisibile de bază a
programului (P), stabileşte dacă soluţia respectivă este optimă şi, în caz
contrar, pune în evidenţă situaţia de optim infinit sau construieşte efectiv o
soluţie admisibilă de bază mai bună decât cea curentă.

Să considerăm o bază admisibilă B precum şi forma explicită (PB) a


programului (P) în raport cu această bază. (vezi notaţiile secţiunii 3.5)
În raport cu aceste date de intrare, conţinutul unei iteraţii simplex este
următorul:

Pasul 1. (Test de optimalitate) Dacă toţi c j ≥ 0 , j ∈ J soluţia de bază


curentă (adică soluţia (3.5.10), asociată bazei B) este optimă: STOP.
Altminteri:

Pasul 2. Se alege indicele nebazic k ∈ J astfel ca:

c k = min c j (4.2.1)
j∈J

Pasul 3. Dacă:
a ik ≤ 0 , i ∈ I ( ⇔ A k ≤ 0)

programul (P) are optim infinit:STOP. Altminteri:

Pasul 4. Se determină indicele bazic r ∈ I cu formula:

br b 
= min  i  (4.2.2)
a rk i∈I aik >0  a ik 

Pasul 5. Se construieşte forma explicită a programului (P) în raport cu


baza B' dedusă din B prin înlocuirea coloanei Ar cu coloana Ak. Se revine la
pasul 1 în cadrul unei noi iteraţii.
4. Metoda simplex 45
Observaţii 1) La pasul 2 avem cu necesitate c k < 0 . Despre coloana
nebazică Ak vom spune că intră în baza curentă. În demonstraţia teoremei C
s-a arătat că variaţia valorii funcţiei obiectiv la schimbarea coloanei bazice Ar
cu coloana Ak este dată de formula:

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)

este o rază extremă a mulţimii poliedrale AP.

3) Despre coloana bazică Ar al cărei indice se determină cu formula


(4.4.2) vom spune că părăseşte baza curentă. Alegerea ei după formula
amintită asigură admisibilitatea soluţiei asociate noii baze B'.

4) Elementul a rk , unde k este indicele coloanei care intră în bază iar r


este indicele coloanei care iese din bază se numeşte pivot şi operaţia de
calculare a elementelor formei explicite în raport cu baza B' din elementele
formei explicite în raport cu baza veche B prin aplicarea formulelor de
schimbare a bazei (4.1.12) poartă numele de pivotare gaussiană.

5) În principiu, problemele de minimizare se reduc la cele de


maximizare în baza relaţiei (1.3.1). Algoritmul simplex descris mai sus este
aplicabil şi problemelor de minimizare cu următoarele mici modificări:

• în pasul 1: soluţia curentă este optimă dacă c j ≤ 0 , j ∈ J ;


46 I. PROGRAMARE LINIARA
• în pasul 2: pentru determinarea indicelui coloanei nebazice care
intră în baza curentă se va utiliza formula
c k = max c j
j∈J
De această dată vom avea c k > 0.

6) Să presupunem că baza curentă B este optimală (adică soluţia


asociată ei verifică testul de optimalitate) şi că există indici nebazici j∈J cu
c j = 0 . Formula (4.2.3) arată că introducerea în baza curentă a oricărei coloane
Ak pentru care c k = 0 conduce la soluţii de bază la fel de bune ca şi cea
curentă, deci optime. Se poate arăta că dacă x 1 , x 2 ,..., x p , p ≥ 2 sunt toate
soluţiile de bază optime ale programului (P) atunci acesta are o infinitate de
soluţii optime care au forma:

x = α 1 x 1 + α 2 x 2 +...+α p x p cu α 1 , α 2 ,..., α p ≥ 0 si α 1 + α 2 +...+α p = 1

(altfel spus, orice soluţie optimă este o combinaţie convexă a soluţiilor optime
de bază)

7) În rezolvarea manuală a programelor liniare (fireşte de mici


dimensiuni) se utilizează tabelele simplex (3.5.1) asociate diferitelor baze
cercetate. Aceste tabele se deduc unul din altul prin pivotare gaussiană.

În continuare vom aplica algoritmul simplex pe o problemă simplă, în


două variabile, pentru a putea ilustra grafic modul în care acţionează
procedura.
4. Metoda simplex 47

Exemplul 4.2.1 Considerăm programul:

 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

a cărui mulţime de soluţii admisibile AP este vizualizată în figura 4.2.1.

x2

S3: x1=42/5, x2=36/5

S2: x1=7, x2=3


A
S1: x1=4, x2=0
x1

S0: x1=0, x2=0

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

Se observă că matricea A a coeficienţilor formei standard (FSP) conţine baza


unitară E = [ A3,A4,A5] a cărei soluţie asociată:

1 = 0 , x2 = 0 , x3 = 4 , x4 = 18 , x5 = 6
48 I. PROGRAMARE LINIARA

este admisibilă. În continuare sunt date tabelele rezultate prin aplicarea


algoritmului simplex (tabelele 4.2.1 - 4.2.4). În partea dreaptă am indicat
formele explicite ale problemei (FSP) în raport cu bazele cercetate. În trei
iteraţii s-a obţinut soluţia optimă x1∗ = 42
5
, x ∗2 = 36
5
, valoarea maximă a
funcţiei obiectiv fiind 24; variabilele de abatere au în soluţia optimă valorile
x 3∗ = 145 , x 4∗ = x 5∗ = 0 .

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

Tabelele 4.2.1 - 4.2.4

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

Este util să recapitulăm într-un tabel soluţiile admisibile de bază ale


programului (FSP) , efectiv generate de algoritm , împreună cu soluţiile

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.

4.3 Determinarea unei soluţii admisibile de start

După cum s-a specificat, aplicarea algoritmului simplex necesită


cunoaşterea unei baze admisibile de start precum şi a formei explicite asociate
acesteia, celelalte forme explicite deducându-se una din alta prin pivotare
gaussiană. Chiar şi pentru probleme de dimensiuni mici, găsirea unei asemenea
baze de start prin simpla inspectare a coloanelor matricii A, se dovedeşte a fi o
treabă complicată, ne mai vorbind de faptul că este posibil ca problema să nu
aibe soluţii admisibile. În plus, să nu uităm că teoria metodei simplex s-a bazat
esenţial pe ipoteza că restricţiile problemei sunt liniar independente, lucru
iarăşi greu de verificat în practică. Pentru obţinerea formei explicite iniţiale
avem nevoie de câteva pregătiri.

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:

• În caz că unele restricţii ale programului iniţial au termeni liberi


negativi înmulţim aceste restricţii cu -1; în acest fel toţi termenii liberi ai
restricţiilor problemei de rezolvat vor fi ≥ 0.
• Se aduce problema la forma standard adăugând variabile de
abatere în restricţiile inegalităţi.
• Dacă matricea programului rezultat nu conţine toate coloanele
matricii unitate de ordinul m, în anumite restricţii se vor adăuga noi variabile
nenegative pentru crearea coloanelor lipsă; aceste noi variabile se numesc
50 I. PROGRAMARE LINIARA
variabile artificiale şi, spre deosebire de cele de abatere, apar şi în funcţia
obiectiv cu un coeficient comun, foarte mare în valoare absolută. Coeficientul
va fi negativ dacă funcţia obiectiv se maximizează şi pozitiv în caz contrar.

Se observă imediat că dacă programul iniţial (P) este compatibil,


soluţiile sale admisibile se identifică cu acele soluţii ale formei bune în care
variabilele artificiale au valoarea zero. Prin faptul că variabilele artificiale sunt
însoţite în expresia funcţiei obiectiv de nişte “penalizări” foarte mari, metoda
simplex este “instruită” să caute tocmai asemenea soluţii! Şi astfel, rezolvarea
formei bune ne conduce la unul din următoarele cazuri:

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.

Exemplul 4.3.1 Considerăm următorul program împreună cu forma sa


standard:
(max) f = 2 x 1 + 3 x 2 (max) f = 2x1 + 3x 2
 
 2 x 1 + x 2 ≥ 4 0  2 x1 + x 2 − x 3 = 40

( P ) x 1 + 3 x 2 ≥ 30 ⇒ ( FSP ) x1 + 3x 2 − x4 = 30
 x + x ≤ 30  x + x + x 5 = 30
 1 2
 1 2

 x 1 ≥ 0 , x 2 ≥ 0  x j ≥ 0 , j = 1,...,5

Se constată că (FSP) nu este în forma bună neconţinând decât un singur vector


al matricii unitare de ordinul 3. Vom creea o asemenea matrice introducând în
primele două restricţii variabilele artificiale x6 şi x7. Obţinem programul:
4. Metoda simplex 51
(max) f = 2 x1 + 3x 2 − Mx 6 − Mx 7

 2 x1 + x 2 − x 3 + x6 = 40

( FBP ) x1 + 3x 2 − x4 + x 7 = 30 , M >> 0
 x + x + x5 = 30
 1 2

 x j ≥ 0 , j = 1,...,7

Putem aplica algoritmul simplex programului (FBP) plecând de la baza unitară


E = [A6, A7, A5] şi de la soluţia asociată acesteia:

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

varibilele de abatere având valorile: x 3∗ = 0 , x 4∗ = 40 , x 5∗ = 0.

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

Tabelele 4.3.1 - 4.3.4


52 I. PROGRAMARE LINIARA
Punctele din R2 corespunzătoare celor patru soluţii generate de algoritm sunt
S0 = (0,0) , S1 = (0,10) , S2 = (18,4) , S3 = (10,20).

x2

S3: x1=10 , x2=20

A
S1: x1=0 , x2=10 x1

S0: x1=0 , x2=0

S2: x1=18 , x2=4

Figura 4.3.1

Urmărind fig. 4.3.1 se constată că punctele S0 şi S1, ce corespund unor


soluţii ale programului (FBP) în care cel puţin o variabilă artificială are valoare
nenulă, sunt în afara mulţimii AP în timp ce S2 şi S3, corespunzătoare unor
soluţii în care x6 = x7 = 0, sunt vârfuri ale acestei mulţimi.

Pentru determinarea unei soluţii admisibile de bază de start, în situaţia


în care programul iniţial (P) nu este în formă bună, se poate aplica şi aşa
numita metodă a celor două faze:

• se introduc în restricţii variabile artificiale, bineînţeles acolo unde


este cazul, în scopul formării unei baze unitare de start (termenii liberi ai
restricţiilor se presupun a fi nenegativi);
• în faza I se minimizează suma w a variabilelor artificiale introduse.
Deoarece şi aceste variabile sunt supuse condiţiei de nenegativitate, urmează
că (min)w ≥ 0. În caz că (min)w > 0 este clar că programul iniţial (P) este
incompatibil; dacă (min)w = 0 se trece la:
4. Metoda simplex 53
• faza a II-a, în care se optimizează funcţia obiectiv a programului
iniţial (P) plecând de la soluţia de bază rezultată la finele fazei I. (Atenţie, la
începutul acestei faze, vom avea grijă să recalculăm costurile reduse c j în
raport cu coeficienţii funcţiei obiectiv din (P)!)

4.4. Inversa bazei curente. Soluţia optimă a problemei duale

Să considerăm un program liniar (P) în formă bună. Renumerotând


convenabil variabilele programului, matricea coeficienţilor sistemului de
restricţii are forma:
A = [A’ , E]

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)

prin algoritmul simplex. Dacă B este o bază cercetată de algoritm, atunci


matricea formei explicite asociată bazei B va fi:

B-1A = [B-1A’ , B-1]

Cum matricea B-1A apare în “corpul mare” al tabelului simplex corespunzător


bazei B, deducem următoarea concluzie importantă:

La fiecare iteraţie, algoritmul simplex pune în evidenţă inversa B-1 a


bazei curente. Ea este formată din coloaneleAj corespunzătoare coloanelor
unitare Aj care au format baza de start.

Exemplul 4.4.1 Ne referim la programul (P) rezolvat în exemplul


4.3.1. Deoarece baza de start a fost matricea unitate E = [A6,A7,A5], inversa
bazei optime B = [A1,A2,A4] se “citeşte” din ultimul tabel simplex:

 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.

Să considerăm un cuplu de probleme în dualitate în care una este în formă


standard (vezi secţiunea 2.2):

max f ( x ) = cx min g( u ) = ub
 
( P ) Ax = b ( Q ) uA ≥ c
 x≥0 u oarecare
 

Cu notaţiile secţiunii 3.5 avem următoarea;

Teorema 4.4.1 Presupunem că (P) are o soluţie optimă x* asociată


unei baze B. Atunci:
u* = cBB-1 (4.4.1)

este o soluţie optimă a problemei duale (Q).

Demonstraţie: Vom arăta că u* satisface restricţiile uAj ≥ cj , j =


1,…,n ale problemei duale (Q). Într-adevăr u*Aj - cj =cBB-1Aj -cj = c j , conform
(3.5.6). Avem c j ≥ 0 , j = 1,…,n, deoarece x* este prin ipoteză soluţia optimă a
programului (P), astfel că u* este o soluţie a dualei (Q). Mai departe f(x*) =
g(u*) = cBB-1b. Concluzia teoremei decurge acum din teorema 2.3.1. „

Practic, pentru determinarea soluţiei optime duale se procedează astfel.


Am arătat că rezolvarea unei probleme în formă standard se reduce la
rezolvarea unei probleme de acelaşi tip a cărei matrice conţine o submatrice
unitate având ordinul egal cu numărul restricţiilor.

Atunci inversa bazei optimale B-1 se citeşte în tabelul simplex asociat


acestei baze pe coloanele Aj corespunzătoare vectorilor care au format baza
unitară de start!

Extrăgând B-1 din tabel se poate aplica formula (4.4.1).

Procedeul descris este valabil şi pentru un cuplu general de probleme în


dualitate (P,Q). Într-adevăr, după cum am văzut deja, aducerea problemei (P) la
o formă (P1) convenabilă aplicării algoritmului simplex se face prin adăugare
4. Metoda simplex 55
de variabile: de abatere şi/sau artificiale. În consecinţă, duala (Q1) a
problemei (P1) va avea aceleaşi variabile şi aceeaşi funcţie obiectiv ca şi duala
(Q) a problemei iniţiale(P), diferenţa constând în numărul restricţiilor şi în
condiţiile impuse variabilelor. Se poate arăta fără dificultate că această
“diferenţă” nu înseamnă altceva decât două modalităţi de scriere a uneia şi
aceleiaşi probleme, altfel spus (Q) şi (Q1), în esenţă, coincid! În acest fel,
teorema de dualitate 2.3.3 este probată.

Exemplul 4.4.2 Ilustrăm cele de mai sus, determinând soluţia optimă a


programului liniar:

 min g( u ) = 40u1 + 30u2 + 30u3



( Q )2u1 + u2 + u3 ≥ 2 ; u1 + 3u2 + u3 ≥ 3
 u1 ≤ 0 , u2 ≤ 0 , u3 ≥ 0

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:

min g( u ) = 40u1 + 30u2 + 30u3



 2u1 + u2 + u3 ≥ 2
 u1 + 3u2 + u3 ≥ 3

 − u1 ≥0

( Q1 ) − u2 ≥0
 u3 ≥ 0

 u1 ≥ −M

 u2 ≥ −M
 u1 , u2 , u3 f.r.s.
56 I. PROGRAMARE LINIARA
Restricţia u3 ≥ 0 este de fapt condiţia de nenegativitate impusă variabilei u3
în (Q) iar -u1 ≥ 0 , -u2 ≥ 0 înseamnă u1 ≤ 0 , u2 ≤ 0. Ultimele două restricţii din
(Q1) sunt superflue pentru că M este prin definiţie >>0. Prin urmare (Q) şi (Q1)
coincid. Din tabelul simplex 4.3.4 extragem inversa bazei optimale comune B
= [ A1,A2,A4] a programelor (P) şi (P1) - vezi exemplul precedent - astfel că
soluţia optimă a probl;emei duale (Q) 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.

Observaţie: Folosind notaţiile din 3.5 punem în evidenţă


componentele vectorului linie cBB-1 :

π j = c B A j = ∑ c i a ij j ∈J
i∈I

Pentru coloanele unitare Ai corespunzătoare vectorilor Ai din baza curentă


punem:
πi = ci i ∈ I

Din (3.5.6) rezultă atunci că:

c j =πj - cj j=1,…,n

şi deci mărimile πj sunt efectiv calculate în procesul evaluării coeficienţilor


c j ! Acesta este şi motivul pentru care de multe ori mărimile πj sunt puse în
evidenţă într-o linie separată plasată în tabelul simplex deasupra liniei test. Cu
aceste pregătiri, formula (4.4.1) arată că:

Soluţia optimă a problemei duale este dată de coeficienţii πj din tabelul


simplex al problemei primale, corespunzători coloanelor unitare care au
format baza de start.

4.5 Convergenţa algoritmului simplex


4. Metoda simplex 57
Se arată uşor că dacă minimul din (4.2.2) nu este unic atunci noua
soluţie de bază x ′ este degenerată, adică are un număr de componente nenule
< m. Această situaţie este delicată prin faptul că poate implica neconvergenţa
algoritmului. Mai precis, este posibil ca algoritmul să genereze un şir de soluţii
de bază neoptimale x 1 , x 2 ,..., x p , dealungul căruia valoarea funcţiei obiectiv
staţionează, adică f ( x 1 ) = f ( x 2 ) = L = f ( x p ) , astfel încât x p = x 1 !!
Fenomenul descris, numit ciclare, deşi teoretic posibil, nu a fost întâlnit în nici
o aplicaţie practică, existenţa lui fiind probată doar prin câteva exemple
“artificial” construite.

Exemplul 4.5.1 [Beale] Se consideră programul liniar:

 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

O bază admisibilă de start este B0 = E = [A1,A2,A3] a cărei soluţie asociată x0


este degenerată. Într-adevăr, variabilele bazice au valorile:

x1 = 0 , x2 = 0 , x3 = 1 (toate celelalte variabile fiind nule)

Propunem cititorului să arate că succesiunea de baze admisibile:

B1 = [A4,A2,A3] , B2 = [A4,A5,A3] , B3 = [A6,A5,A3] , B4 = [A6,A7,A3]

B5 = [A6,A2,A3] , B6 = [A4,A2,A3]

poate fi dedusă din B0 prin aplicarea regulilor algoritmului simplex. Se


constată fără dificultate că valoarea funcţiei obiectiv în soluţiile de bază
asociate este zero şi că nici una din aceste soluţii, toate degenerate, nu verifică
criteriul de optimalitate. Pe de altă parte observăm că baza B6 este identică cu
baza B1 şi deci algoritmul intră într-un ciclu infinit fără a putea determina
soluţia optimă (care există şi este unică după cum vom vedea).
Pentru problemele ale căror soluţii de bază admisibile sunt toate
nedegenerate convergenţa algoritmului este asigurată de următoarea :

Teorema 4.5.1 Dacă programul în formă standard (P) este compatibil


şi toate soluţiile sale admisibile de bază sunt nedegenerate atunci aplicarea
algoritmului simplex descris în 4.2 se termină într-un număr finit de iteraţii, fie
cu găsirea soluţiei optime, fie cu concluzia că programul are optim infinit.
58 I. PROGRAMARE LINIARA

Demonstraţie: Fie x 0 , x 1 , x 2 ,... soluţiile cercetate în cursul aplicării


algoritmului , x 0 fiind soluţia iniţială. Avem f ( x 0 ) ≤ f ( x 1 ) ≤ f ( x 2 ) ≤....
Ipoteza nedegenerării precum şi formula (4.2.3) arată că de fapt
f ( x 0 ) < f ( x 1 ) < f ( x 2 ) ... şi deci nici o soluţie admisibilă de bază nu va fi
cercetată de două ori. Concluzia teoremei rezultă acum din faptul că numărul
soluţiilor de bază este finit (vezi secţiunea 3.5). „

Din fericire, există proceduri de evitare a ciclării care constau într-o


mică modificare a regulii (4.2.2). Ele sunt încorporate în orice pachet de
programe destinat rezolvării problemelor de programare liniară. O asemenea
metodă va fi descrisă în cele ce urmează. Sunt necesare câteva pregătiri.

Definiţie Spunem că vectorul x = (x1,x2,...,xn) este lexicografic pozitiv şi


scriem xf 0 dacă x ≠ 0 şi prima componentă nenulă a lui x este pozitivă.

În mulţimea vectorilor din Rn introducem relaţia binară:

xf y dacă x-y f 0

Se verifică uşor afirmaţiile:

• Dacă x f y şi y f z atunci x f z (tranzitivitate).


• Oricare ar fi x , y ∈ Rn una şi numai una din următoarele relaţii are
loc: x = y , x f y , y f x.

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

Să considerăm acum problema de programare liniară în formă standard:

 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

Fie I mulţimea indicilor vectorilor Ai care formează baza B. Pentru fiecare i∈ I


notăm:
[
qiB = bi , ai1 , ai 2 ,..., aim ] (4.5.1)

unde ai1 , ai 2 ,..., aim sunt componentele liniei i a matricii B-1.

Definiţie Vom spune că baza B este lexicografic admisibilă dacă


q f 0 pentru orice i∈ I.
i
B

Este clar că dacă B este lexicografic admisibilă atunci B este admisibilă în


sensul de până acum adică bi ≥ 0 , i ∈ I . Reciproc, dacă B este admisibilă şi
soluţia asociată este nedegenerată, adică bi > 0 , i ∈ I atunci evident, B este
lexicografic admisibilă.

Baza de start B0 = E este lexicografic admisibilă. Într-adevăr:

qiB = [bi ,0,...,1,...0]


0
i = 1,...,m

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.

Trecem acum la concretizarea ideii de modificare. Fie B o bază


lexicografic admisibilă care nu verifică criteriul de optimalitate al algoritmului
simplex. Determinăm cu criteriul (4.2.1) coloana Ak care intră în bază şi
presupunem că Ak are şi componente pozitive (cu alte cuvinte nu suntem în
cazul optimului infinit). Pentru determinarea indicelui coloanei Ar care
părăseşte baza curentă B, în locul criteriului (4.2.2) vom folosi formula:

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:

• se determină mulţimea I0 a indicilor r ∈ I astfel încât:

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

Dacă nici I1 nu se reduce la un singur element, se determină în continuare sub


mulţimea I2 ⊆ I1 formată din indicii r pentru care:
4. Metoda simplex 61
ar 2 a
= min i 2
a rk i ∈I1 a ik
ş.a.m.d.
Se generează astfel un şir de submulţimi:
I0 ⊇ I1 ⊇ I2 ⊇ ...
ultima din ele având cu siguranţă un singur element ce defineşte minimul
lexicografic din (4.5.2). Într-adevăr, dacă ultima mulţime generată ar conţine
cel puţin doi indici diferiţi r şi r', aceasta va fi Im şi în consecinţă:

a ri a
= r 'i pentru toţi i = 1,...,m
a rk a r 'k

ceeace ar implica proporţionalitatea a două linii din matricea B-1, fapt


imposibil. Prin urmare, minimul din (4.5.2) este unic.
Să arătăm acum că noua bază B' dedusă din B înlocuind Ak cu Ar:

• este lexicografic admisibilă, adică:

qiB ' f 0 , i ∈ I , i ≠ r si q kB ' f 0 ;

• este lexicografic mai bună decît B, adică qB' f qB .

În baza formulelor de schimbare a bazei (4.1.12) putem scrie relaţiile:

aik B 1 B
qiB ' = qiB − qr i≠r; q kB ' = qr
a rk a rk

Deoarece prin ipoteză q rB f 0 si a rk > 0 rezultă q kB' f 0 .Fie i ≠ r. Dacă aik ≤ 0


atunci în mod clar qiB' f 0 . Dacă aik > 0 atunci:

 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

În consecinţă vectorul A2 părăseşte baza ş.a.m.d.


0 0 0 3/4 -20 1/2 -6
cB B VVB A1 A2 A3 A4 A5 A6 A7
0 A1 0 1 0 0 1/4 -8 -1 9
0 A2 0 0 1 0 1/2 -12 -1/2 3
0 A3 1 0 0 1 0 0 1 0
f 0 * * * -3/4 20 -1/2 6
0 A1 0 1 -1/2 0 0 -2 -3/4 15/2
3/4 A4 0 0 2 0 1 -24 -1 6
0 A3 1 0 0 1 0 0 1 0
f 0 * 3/2 * * 2 -5/4 9/2
0 A1 3/4 1 -1/2 3/4 0 -2 0 15/2
3/4 A4 1 0 2 1 1 -24 0 6
1/2 A6 1 0 0 1 1 0 1 0
4. Metoda simplex 63
f 5/4 * 3/2 5/4 * 2 * 9/2

Tabelele 4.5.1 - 4.5.3

4.6 Alte exemple numerice

Aceste exemple au rolul de a ilustra diferitele fapte teoretice prezentate


în secţiunile anterioare.

Exemplul 4.6.1 (Optim infinit, raze extreme).

Vom considera programul (P) împreună cu forma sa standard (FSP):

(max) f = 3x1 + 4 x 2 (max) f = 3x1 + 4 x 2


 − 3x + 4 x ≤ 12 
 − 3 x1 + 4 x 2 + x 3 = 12
 1 2

( P)  − 2 x1 + x 2 ≤ 2 ⇒ ( FSP)  − 2 x1 + x 2 + x4 = 2
 x1 − 2 x 2 ≤ 2  x1 − 2 x 2 + x5 = 2
 
 x1 ≥ 0, x 2 ≥ 0  x j ≥ 0 , j = 1,...,5

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

Conform pasului 3 al algoritmului simplex programul (P) are optim infinit


deoarece:
4
c 4 < 0 iar A ≤ 0

Vectorul w1=(4/5, 3/5, 0, 1, 2/5)T este o rază extremă a mulţimii AFSP a


soluţiilor admisibile ale formei standard (FSP), vezi (4.2.4). Prin "proiecţie",
vectorul w1=(4/5, 3/5) este o rază extremă a mulţimii AP a soluţiilor admisibile
ale programului iniţial (P). Din fig. 4.6.1 rezultă că AP mai are o rază extremă
w2=(2,1)T. Această rază se poate determina tot cu ajutorul algoritmului simplex
64 I. PROGRAMARE LINIARA
cu condiţia ca la prima interaţie, în bază, să fie introdusă coloana A1.
Propunem cititorulului să efectueze calculele necesare.

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

După introducerea variabilelor de abatere x4, x5 şi a variabilelor artificiale x6 şi


x7 (în prima şi respectiv a treia restricţie) se obţine programul în formă bună:

(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

(Deoarece funcţia obiectiv se minimizează, variabilele artificiale au fost


incluse în funcţia obiectiv cu un coeficient pozitiv M foarte mare!)

Pornind de la baza unitară E=[ A6, A5, A7 ], în două iteraţii algoritmul


simplex produce tabelul 4.6.2, ce conţine soluţia optimă a programului (FBP).
6 1 -2 0 0 M
cB B VVB A1 A2 A3 A4 A5 A6 A7
M A6 1 0 -1 0 -1 -1 1 1
6 A1 8/13 1 -1/13 0 0 2/13 0 -3/13
-2 A3 25/13 0 5/13 1 0 3/13 0 2/13
f M - 2/13 * - M - 29/13 * - M -M + 6/13 * - 22/13

Tabelul 4.6.2

Deoarece în această soluţie variabila artificială x6 are valoare nenulă,


programul în forma standard şi implicit programul original nu au soluţii
admisibile.

Exemplul 4.6.3 (Programe liniare cu variabile fără restricţie de semn)

Condiţia de nenegativitate impusă variabilelor unui program liniar (P)


nu este deloc restrictivă. Într-adevăr să presupunem că în (P) ar exista o

variabilă xj ce poate lua orice valoare reală. Înlocuim xj cu diferenţa a două


variabile nenegative:

x j = x 'j − x ''j cu x 'j ≥ 0, x ''j ≥ 0

În consecinţă, în locul coloanei Aj a coeficienţilor variaţiei xj vor apare două


coloane:

(Aj)'=Aj (Aj)'' = -Aj

iar în funcţia obiectiv coeficientul cj se înlocuieşte cu : c 'j = c j si c ''j = − c j


Deoarece (Aj)'+(Aj)'' = 0, coloanele (Aj)' şi (Aj)'' sunt liniar dependente şi prin
urmare nu vor putea apare simultan în nici o bază a programului transformat.
După rezolvarea programului transformat, valoarea variabilei originale xj în
( ) − (x ) .
* '' *
soluţia optimă va fi x *j = x 'j j Cum x 'j si x 'j' nu pot fi simultan
variabile bazice vom avea: x *j = ( x 'j ) * ≥ 0 sau x *j = − ( x ''j ) * ≤ 0 după cum, în
66 I. PROGRAMARE LINIARA
soluţia optimă a programului transformat x , respectiv x ''j ,a fost variabilă
'
j

bazică. Pentru ilustrare să considerăm problema:

 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

Înlocuim: x1 = x1' − x1'' , adăugăm variabilele de abatere x3, x4 precum şi


variabila artificială x5 în scopul obţinerii unei baze unitare de start. Rezultă
următorul program transformat:

min f = 3x1′ − 3x1′′+ 2x 2 + Mx 5 , M >> 0


 − x ′ + x ′′+ 2x − x + x5 = 2
 1 1 2 3
( P ' )
 − 3x1′ + 3x1′′+ x 2 + x4 =3
 x1′ , x1′′, x 2 , x 3 , x 4 , x 5 ≥ 0

În continuare dăm elementele ultimului tabel simplex:

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

Soluţia optimă a programului (P') este deci:

( x1' ) * = 0, ( x1'' ) * = 4 / 5, x 2* = 3 / 5 f min = −6 / 5

Urmează că soluţia optimă a programului original va fi :

x1* = −4 / 5, x 2* = 3/ 5
4. Metoda simplex 67
4.7 Interpretarea economică a algoritmului simplex

Să considerăm cazul în care problema de maximizare în formă


standard:

max f = cx

 Ax = b
 x≥0

reprezintă modelul de optimizare a activităţii unei firme (secţiunea 1.1,


exemplul 1). Se cere determinarea combinaţiei de bunuri ce urmează a fi
realizate precum şi a cantităţilor în care acestea vor fi produse astfel încât
venitul firmei să fie maxim cu condiţia consumării integrale a resurselor
disponibile. Ultima cerinţă nu este deloc restrictivă întrucât în lista activităţilor
productive putem include la nevoie un număr de activităţi fictive ale căror
nivele să reprezinte resursele neconsumate (aceste activităţi fictive corespund
variabilelor de abatere).

O primă concluzie care se desprinde din teoria metodei simplex este


aceea că în orice soluţie optimă a modelului numărul bunurilor ce vor fi
efectiv realizate este cel mult egal cu numărul resurselor folosite.

Aceasta rezultă din faptul că în orice soluţie de bază numărul componentelor


nenule nu depăşeşte numărul restricţiilor. În consecinţă, realizarea unor bunuri
ce nu sunt incluse în "lista optimă" implică adăugarea unor noi restricţii în
model, fapt care duce la diminuarea optimului iniţial.

Să considerăm acum un program de producţie "de bază", adică o soluţie


admisibilă de bază, asociată unei baze B. Activităţile i corespunzătoare
coloanelor Ai din B vor fi numite în continuare activităţi de bază, iar celelalte
activităţi secundare. Conform definiţiei, acest program nu prevede folosirea
activităţilor secundare iar cantităţile de bunuri realizate în activităţile de bază
trebuie astfel dimensionate încât să se asigure consumarea întregului stoc de
resurse. În notaţiile secţiunii 3.5 :

BxB = b , xS = 0 de unde xB = B-1b =b

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

este ≥ 0 realizarea bunului j nu este rentabilă deoarece nu duce la creşterea


valorii producţiei asigurate prin programul curent. Dacă cj ≥ 0 pentru toate
activităţile secundare, programul de fabricaţie curent este optim. Am regăsit
astfel criteriul de optimalitate din teorema A secţiunea 4.1. Dacă cj < 0,
utilizarea activităţii secundare j duce la o sporire a venitului realizabil prin
programul curent, viteza de creştere fiind -cj . Interpretarea criteriului de
intrare în bază (4.2.1) este acum clară: dacă mai multe activităţi secundare sunt
rentabile în raport cu grupul activităţilor de bază este preferată activitatea care
asigură cea mai ridicată viteză de creştere a valorii curente a producţiei.Fie k
această activitate. Ultima problemă constă în stabilirea cantităţii din bunul k ce
poate fi realizată în condiţiile date. Conform celor de mai sus producerea unei
cantităţi θ din acest bun implică micşorarea producţiei din bunurile activităţilor
de bază cu cantităţile θ a1k ,θ a 2 k ,...,θ a mk :

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

(excludem cazul optimului infinit, nesemnificativ din punct de vedere


b
economic). Dacă θ 0 = r a şi θ = θ 0 obţinem creşterea maximă a valorii
rk
curente a producţiei prin utilizarea activităţii k. În acest caz activitatea k nu mai
b
este folosită întrucât x r = br − θ 0 a rk = br − r a rk = 0 . Am obţinut din nou
a rk
criteriul de ieşire din bază (4.2.2).

4.8 Versiunea revizuită a algoritmului simplex

Reluăm programul liniar în formă standard (P):

(max) f = cx

( P)  x ≥ 0
 Ax = b

cu notaţiile şi terminologia introduse în secţiunile 3.4 - 3.5. Considerăm o


iteraţie oarecare a algoritmului simplex în care se cercetează soluţia asociată
unei baze B. Pentru efectuarea iteraţiei sunt necesar următoarele elemente:

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

3) Valorile variabilelor bazice curente xi , i∈I reunite în vectorul:


70 I. PROGRAMARE LINIARA
−1
b=B b

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

Coloana Ak părăseşte baza curentă.

După efectuarea operaţiilor necesare evaluării elementelor amintite, tabelul


simplex curent se pivotează cu pivotul ark..

Se observă că aceste mărimi numerice se pot calcula direct din datele


iniţiale A, b, c ale programului (P) cunoscând inversa B-1 a bazei curente.

Dacă avem în vedere soluţionarea problemelor practice de programare


liniară caracterizate în primul rând prin numărul mare de restricţii şi variabile
următoarele probleme trebuie să ne dea de gândit:

• Din mulţimea de coloane calculate Aj=B-1Aj , j∈J doar una este


efectiv folosită la aflarea pivotului şi anume Ak ; toate celelalte servesc la
calculul costurilor reduse conform formulei:

cj=cBAj-cj , j∈J

Cum în practică problemele au multe variabile, astfel spus matricea A are


multe coloane, evaluarea coloanelor Aj necesită timp şi efort de calcul.
• Exceptând primul tabel simplex, celelalte se deduc unul din altul
prin pivotare gaussiană, facilitând propagarea şi amplificarea erorilor de
rotunjire inerente calculului cu numere reale. Este posibil ca în final
aceste erori să
compromită grav rezultatele (de exemplu o problemă compatibilă să fie
declarată incompatibilă).
• Chiar dacă matricea iniţială A este rară (adică densitatea
elementelor nenule este mică), densitatea elementelor nenule în tabelele
simplex generate creşte vertiginos, cu efecte negative asupra vitezei de calcul.

Este de la sine înţeles că aceste neajunsuri nu sunt vizibile în calculul


manual. Aceste probleme apar în contextul rezolvării programelor de
dimensiuni mari când utilizarea calculatorului este inevitabilă!
4. Metoda simplex 71
Versiunea revizuită a algoritmului simplex elimină în mare parte
aceste neajunsuri. În esenţă, această versiune propune calcularea mărimilor
amintite mai înainte într-o altă ordine şi apelarea la datele iniţiale ale
problemei. La fiecare iteraţie este necesară cunoaşterea inversei bazei curente.

Fie B o bază a programului (P). Componentele vectorului (linie):

π=cBB-1

se numesc multiplicatori simplex asociaţi bazei B (vezi observaţia din finalul


secţiunii 4.4)

Inserăm elementele B-1, π, b=B-1b şi f=cBb=πb într-un tabel:

B b B-1
f f π

numit tabel simplex redus.

Să presupunem cunoscută o soluţie admisibilă de bază a programului


(P) şi tabelul simplex redus al acesteia. Cu aceste pregătiri, conţinutul unei
iteraţii în versiunea revizuită este următorul:

Pasul 1. Se calculează costurile reduse:

cj=πAj-cj , j∈J

Dacă toţi cj ≥ 0 soluţia curentă este optimă. Altminteri:

Pasul 2. Se determină indicele nebazic k∈J cu proprietatea :

ck = min c j ( ck < 0 !)
j ∈J

Coloana Ak intră în baza curentă. Se calculează Ak=B-1Ak

Pasul 3. Dacă Ak ≤ 0 programul dat are optim infinit. Altminteri:

Pasul 4. Se determină indicele bazei r∈I cu proprietatea:

br = min bi
a rk a ik > 0 a ik
72 I. PROGRAMARE LINIARA

Coloana Ar părăseşte baza curentă.

Pasul 5. Se pivotează tabelul simplex redus curent cu pivotul ark > 0


(se presupune că la tabelul simplex redus curent au fost "ataşate" coloana Ak
şi costul redus ck)

Faţă de algoritmul simplex standard, versiunea revizuită are o serie de


avantaje:

• utilizarea la fiecare iteraţie a datelor iniţiale ale problemei (pentru


calcularea costurilor reduse cj şi a coloanei Ak ) asigură un control mai bun
asupra propagării erorilor de rotunjire ca şi o viteză de calcul mai mare dacă
se are în vedere faptul că densitatea elementelor nenule în matricea A este de
regulă mică (este ştiut faptul că o operaţie de înmulţire se efectuează în
calculator numai dacă ambii operanzi sunt nenuli)

• volumul de calcule este în general mai mic, mai cu seamă în situaţia


în care numărul variabilelor este cu mult mai mare decât cel al restricţiilor.
Este evident faptul că aceste avantaje depind de "calitatea" inversei B-1 a bazei
curente. Într-adevăr, inversele diferitelor baze cercetate de algoritmul revizuit
se calculează ca şi în algoritmul standard "una din alta" prin pivotare. Am
amintit deja "riscurile numerice" care decurg din această situaţie ce nu poate
fi evitată: pe de o parte propagarea şi amplificarea erorilor de rotunjire cu
impact negativ asupra acurateţii evaluării diferitelor mărimi necesare

efectuării unei iteraţii şi pe de alta creşterea timpului de calcul ca urmare a


"îndesirii" elementelor nenule din B-1.În principiu, atenuarea acestor
neajunsuri se face prin reinversarea periodică a bazei curente şi "stocarea"
inversei B-1 sub forma unui produs de matrici foarte simple ca structură.

Pentru determinarea unei soluţii admisibile de bază de start, în situaţia


în care programul iniţial (P) nu este în formă bună, se aplică metoda celor
două faze (vezi secţiunea 4.3), cu observaţia că la începutul fazei II, vor trebui
recalculaţi multiplicatorii simplex ce compun vectorul π=cBB-1 în raport cu
coeficienţii funcţiei obiectiv din (P)!

Următorul exemplu are menirea de a ilustra diferenţele de organizare a


calculelor introduse algoritmul simplex revizuit şi nu de a pune în evidenţă
avantajele de ordin "numeric" în raport cu algoritmul standard; este şi
4. Metoda simplex 73
imposibil de făcut acest lucru deoarece în calculul manual se lucrează
"exact". Oricum, în rezolvarea manuală a programelor liniare de dimensiuni
mici se recomandă versiunea standard.

Exemplu 4.8.1 Se consideră programul:

(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

Introducem variabilele de abatere x7, x8 în primele două restricţii obţinând


forma standard după care introducem variabilele artificiale x9, x10, x11 în
restricţiile 2, 3 şi 4 în scopul formării bazei unitare de start. Obţinem sistemul
liniar:

 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

Faza I. Ataşăm sistemului de mai sus funcţia obiectiv:

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

Calculăm costurile reduse cj=πAj-cj. Costurile reduse corespunzătoare


diferitelor iteraţii ale fazei I sunt date în tabelul 4.8.6; de fiecare dată un cost
încadrat arată coloana care intră în baza curentă.

(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

(A2)T → 0 -4 1 0 A2 (A3)T → -4 0 1 0 A3


A7 9/2 1 -1/2 0 0 2 A7
3 1 0 0 -2 -4
A4 1/4 0 1/4 0 0 -1 A4 1 0 0 0 1 0
A10 1 0 0 1 0 1 A10 1/4 0 1/4 1 -1 1
A11 3/4 0 -1/4 0 1 1 A2 3/4 0 -1/4 0 1 0
w 7/4 0 -1/4 1 1 2=c2 w 1/4 0 1/4 1 -1 1=c3

Tabelul 4.8.3 Tabelul 4.8.4

La prima iteraţie intră în bază A4. Calculăm A4=B-1A4; pentru aceasta


(vezi tabelul 4.8.2 care coincide cu 4.8.1) scriem A4 în linie, deasupra tabelului

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

Coef. funcţiei ob. f 3 4 1 2 2 1 0 0


Coef. funcţiei ob. w 0 0 0 0 0 0 0 0 1 1 1
1
A A2 A3 A 4
A 5
A 6
A7 A 8 9
A A 10
A11
Matricea A → 2 0 -4 2 0 -2 1 0 0 0 0
2 -4 0 4 -2 2 0 -1 1 0 0
Costuri reduse 0 1 1 0 0 0 0 0 0 1 0
la iteraţia ↓ 0 0 0 1 1 1 0 0 0 0 1
1 2 -3 1 5 -1 3 * -1 * * *
FAZA I 2 -1/2 2 1 * 3/2 1/2 * 1/4 -5/4 * *
3 1/2 * 1 * -3/2 -1/2 * -1/4 -3/4 * -2
1 -9/2 * * * 9/2 5/2 * 3/4
2 * * 9 * -9 -2 * -3/2
FAZA II 3 * * -9 * * -13/2 9/4 3/4
4 * * * 9/2 * 1/4 9/8 -3/8
5 * 3 * 3 * -2 3/2 *
6 * 3 * 3 2 * 3/2 *

Tabelul 4.8.6

La iteraţia 3 (tabelul 4.8.5) s-a obţinut w = 0, ceea ce înseamnă


obţinerea unei soluţii admisibile de bază pentru forma standard a programului
(P). Nu s-au mai calculat multiplicatorii simplex relativi la funcţia obiectiv w şi
ca urmare nu s-a mai urmărit verificarea testului de optimalitate în raport cu
această funcţie! În schimb s-a "actualizat" cB=[ 0, 2, 1, 4 ], în raport cu funcţia
obiectiv originală f şi s-au calculat multiplicatorii simplex în raport cu această
funcţie.

În alte cinci iteraţii se obţine soluţia optimă a programului dat:

x1* = 11
2 , x 2* = 0 , x 3* = 1 , x 4* = x5* = 0 , x 6* = 1 ; (max) f = 37
2

În continuare se dau tabelele simplex reduse ale fazei a II-a.

(A5)T → 0 -2 0 1 A5 (A3) → -4 0 1 0 (A3)

A7 2 1 -1 -4 2 4 A5 1/2 1/4 -1/4 -1 1/2 -2


A4 1 0 0 0 1 1 A4 1/2 -1/4 1/4 1 1/2 2
A1 1/2 0 1/2 2 -2 -3 A1 2 3/4 -1/4 -1 -1/2 -4
A2 1 0 0 1 0 0 A2 1 0 0 1 0 1
f 15/2 0 3/2 10 -4 -9=c5 f 12 9/4 -3/4 1 1/2 -9=c3
76 I. PROGRAMARE LINIARA

Tabelul 4.8.7 Tabelul 4.8.8

(A8)T → 0 -1 0 0 A8 (A6)T → -2 2 0 1 A6


A5 1 0 0 0 1 0 A5 1 0 0 0 1 1
A3 1/4 -1/8 1/8 1/2 1/4 -1/8 A3 1 0 0 1 0 0
A1 3 1/4 1/4 1 1/2 -1/4 A1 9/2 1/2 0 2 0 -1
2
A 3/4 1/8 -1/8 1/2 -1/4 1/8 A2 6 1 -1 4 -2 -6
f 57/4 9/8 3/8 11/2 11/4 -3/8 =c8 f 33/2 3/2 0 7 2 -2 =c6

Tabelul 4.8.9 Tabelul 4.8.10

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 consideraţiile de până acum am avut în vedere în exclusivitate


numai aspectele teoretice legate de rezolvarea unui program liniar. Rezolvarea
efectivă, mai cu seamă a programelor de dimensiuni mari ( rezultate, de
exemplu, din modelarea unor situaţii economice reale), de neconceput fără
utilizarea unui calculator , pune însă şi alte probleme, de natură numerică cum
ar fi controlul propagării erorilor de rotunjire (inerente calculului cu numere
reale) , volumul de memorie necesar stocării diferitelor informaţii numerice
utilizate în procesul rezolvării, timpul de rulare până la obţinerea rezultatului
final etc.
Reamintim cu acest prilej că, nu de puţine ori, o metodă de optimizare
bine fundamentată teoretic s-a dovedit a fi total ineficientă în practică din
cauza ignorării dificultăţilor numerice semnalate mai sus.
De regulă creşterea performanţelor numerice ale unei metode teoretice se face
prin :

• Reorganizarea procesului de calcul de aşa manieră încât să se


asigure diminuarea efectelor nefaste ale propagării erorilor de rotunjire ca şi o
viteză de calcul crescută. În acest fel s-a ajuns, de exemplu, la versiunea
revizuită a algoritmului simplex, versiune care stă la baza celor mai multe
pachete de programe utilizate în rezolvarea programelor liniare.
4. Metoda simplex 77
• Exploatarea structurii problemei de rezolvat care, în cazul unor
dimensiuni apreciabile are de obicei anumite proprietăţi "speciale". Un

exemplu edificator în acest sens îl constituie diferitele metode de


descompunere sau de relaxare din programarea liniară. În principiu, aceste
metode reduc rezolvarea unei probleme de dimensiuni mari, cu structură
specială la rezolvarea mai multor probleme mai mici şi implicit mai uşor de
manevrat.

Referindu-ne la eficacitatea practică a algoritmului simplex, după o


jumătate de veac de experimente numerice şi perfecţionări teoretice, se poate
spune că acesta s-a dovedit a fi o procedură foarte robustă fiind capabilă să
rezolve programe liniare de dimensiuni impresionante conţinînd sute de
restricţii şi mii de variabile.
Este de la sine înţeles că aceste performanţe n-ar fi fost posibile fără
utilizarea unor calculatoare din ce în ce mai puternice.
76 I. PROGRAMARE LINIARA

5.Algoritmul simplex dual

Există situaţii în care pentru rezolvarea unui program liniar, dispunem


de o soluţie de bază care nu este admisibilă. Următoarele consideraţii au drept
scop să pună în evidenţă o altă clasă de soluţii de bază cu care se poate opera
într-o manieră asemănătoare celei în care lucrează algoritmul simplex descris
în paragraful 4.

5.1 Admisibilitate primală şi duală

Fie (P) un program liniar în formă standard:

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

(vezi notaţiile matriciale(3.3.1)) Fie B o bază a programului (P), I mulţimea


indicilor coloanelor din B, J mulţimea indicilor coloanelor din A care nu sunt
în B. În secţiunea 3.5 am scris (P) în forma:

(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

(vezi notaţiile (3.5.2-3.5.7)), numită forma explicită a programului (P) în raport


cu baza B.
Să considerăm acum dualul programului (P):

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

(vezi notaţiile din 2.2) Aducem sistemul de inegalităţi uA ≥ c la forma standard


introducând variabilele de abatere v1, v2, ..., vn reunite în vectorul linie v.

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

sistemul liniar din (FSQ) devine succesiv:

 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
.. )

Deoarece B este nesingulară din (5.1.1) rezultă:

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ă:

g (u) = (c B B −1 + v B B −1 )b = c B B −1b + v B B −1b = f + v B b

In acest fel, am adus (FSQ) la forma echivalentă:

 vS − vB S = c S

(QB )  v S ≥ 0 , v B ≥ 0

(min) g = f + v b
B
78 I. PROGRAMARE LINIARA

variabilele originale ui , i=1,...,m fiind legate de variabilele vj , j=1,...,n prin


relaţia (5.1.3).

Programul (QB) se va numi forma explicită a dualului (Q) în raport cu baza B.

Pentru a sublinia simetria existentă între problemele (PB) şi (QB) le vom


scrie alăturat atât scalar cât şi matricial:

 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

Observaţie: Cu ajutorul relaţiei (5.1.3) am rescris dualul (Q) în alte


variabile care sunt supuse condiţiei de nenegativitate ca şi variabilele
programului primal (P). Putem vorbi acum de soluţii şi soluţii admisibile
pentru programul (Q) şi când facem acest lucru ne referim la forma echivalentă
(QB).

Prin analogie cu conceptul de soluţie a primalei (P) asociată bazei B


introducem termenul de soluţie a dualei (Q) asociată bazei B anulând în
sistemul restricţiilor lui (QB) variabilele "secundare" vi , i∈ I :

vB ≥ 0 ⇒ vS = c S
c (5.1.4)
vi=0 , i ∈ I ⇒ vj=c j , j ∈ J

Rezultă imediat că valoarea funcţiei obiectiv duale în soluţia construită este


constanta f .
Folosind (5.1.3), soluţia dualei (Q), corespunzătoare soluţiei (5.1.4) este:
5. Algoritmul simplex dual 79

u = cBB-1 (5.1.5)

Soluţia (5.1.4) va fi o soluţie admisibilă pentru duala (Q) dacă:

c S ≥ 0 ⇔ c j ≥ 0 , j ∈ J

Mai departe, exact ca în demonstraţia teoremei A a metodei simplex ( vezi


secţiunea 4.1 ) soluţia (5.1.4), presupusă admisibilă, va fi optimă dacă:

b ≥ 0 ⇔ bi ≥ 0 , i ∈ I

Reamintim că soluţia primalei (P) asociată bazei B este:

xS=0 ⇒ xB=b
c (5.1.6)
xj = 0 , j ∈J ⇒ xi = b i , i ∈ I

Această soluţie este admisibilă dacă b ≥ 0 ⇔ b i ≥ 0 , i ∈ I şi în plus optimă


dacă c S ≥ 0 ⇔ c j ≥ 0 , j ∈ J. Obţinem următoarele concluzii remarcabile:

• Soluţia (5.1.6) a primalei (P) asociată bazei B este admisibilă


(respectiv satisface criteriul de optimalitate al algoritmului simplex) dacă şi
numai dacă soluţia (5.1.4) a dualei (Q) asociată aceleiaşi baze satisface
criteriul de optimalitate (respectiv este admisibilă).
• Valorile funcţiilor obiectiv primală şi duală în cele două soluţii
evidenţiate coincid (cu constanta f )
• Soluţia (5.1.6) este o soluţie optimă a programului (PB) ≡ (P) dacă şi
numai dacă soluţia (5.1.4) este optimă pentru programul (QB), ceeace
echivalează cu a spune că soluţia (5.1.5) este optimă pentru programul dual
(Q).

În rezumat, pornind de la problema originală (P) şi de la o bază B a sa


am construit două probleme în dualitate (PB) şi (QB) şi am pus în evidenţă două
soluţii ale acestora, pe care le-am numit soluţii asociate bazei B. Cuplul de
soluţii evidenţiat are proprietăţile:

i)Una din soluţii este admisibilă (verifică criteriul de optimalitate al


algoritmului simplex) dacă şi numai dacă cealaltă verifică criteriul de
80 I. PROGRAMARE LINIARA
optimalitate (respectiv este admisibilă) În particular una este optimă dacă şi
numai dacă cealaltă este optimă.
ii)Valorile funcţiilor obiectiv în cele două soluţii coincid.

Contextul astfel creat sugerează următoarea schimbare de terminologie:

• O soluţie de bază a programului (P) se va numi primal admisibilă


dacă este admisibilă în sensul de până acum adică are toate componentele
nenegative.
• O soluţie de bază a programului (P) se va zice dual admisibilă dacă
verifică criteriul de optimalitate al algoritmului simplex. O bază a
programului (P) se va numi dual admisibilă dacă soluţia asociată este dual
admisibilă.

În terminologia introdusă, proprietatea i) de mai sus se reformulează astfel:

• 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ă.

5.2 Algoritmul simplex dual

Consideraţiile precedente sugerează posibilitatea rezolvării programului


original (P) utilizând clasa soluţiilor dual admisibile. Următorul algoritm,
numit algoritmul simplex dual, rezultă nemijlocit din aplicarea teoremelor A,
B, C ale metodei simplex la problema (QB).

Presupunem cunoscută o soluţie de bază dual admisibilă a programului


(P) şi tabelul simplex (uzual) asociat. În notaţiile deja utilizate, o iteraţie a
algoritmului simplex dual se compune din următorii paşi:

Pasul 1. (Test de optimalitate) Dacă toţi b i ≥ 0 , i ∈ I STOP : soluţia


de bază dual admisibilă curentă este optimă. În caz contrar:

Pasul 2. Se determină indicele bazic r∈I cu proprietatea:

b r = min b i (b r < 0)
i ∈I
Coloana Ar părăseşte baza curentă.
5. Algoritmul simplex dual 81

Pasul 3. Dacă pentru toţi j∈J avem a rj ≥ 0 STOP: problema primală


nu are soluţii admisibile. Altminteri:

Pasul 4. Se determină indicele nebazic k∈ J cu proprietatea:

ck = min c j
a rk arj <0 a rj

Coloana Ak intră în baza curentă.

Pasul 5. Se pivotează tabelul simplex curent cu pivotul ark <o. În


acest fel se obţine forma explicită a programului (P) în raport cu baza B'
dedusă din B prin înlocuirea coloanei Ar cu coloana Ak. Se revine la pasul 1 în
cadrul unei noi iteraţii.

Observaţii: 1) Consideraţiile expuse în această secţiune sunt valabile


cu mici modificări şi în cazul în care funcţia obiectiv din programul original
(P) se minimizează. Cititorul va verifica imediat că algoritmul prezentat mai
sus rămîne valabil şi pentru asemenea probleme.

2) Concluzia din pasul 3 este consecinţa teoremei fundamentale a


dualităţii. Într-adevăr, dacă arj ≥ 0 , j∈J atunci programul dual (Q) are optim
infinit şi în consecinţă programul (P) este incompatibil.

3) Nu insistăm asupra modalităţii de determinare a unei soluţii de bază


dual admisibile de start deoarece algoritmul va fi aplicat numai în situaţii în
care o asemenea soluţie este disponibilă.

Exemplu 5.2.1 Considerăm programul:

(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

Introducem variabilele de abatere x4 şi x5 după care înmulţim cu -1 egalităţile


rezultate:
82 I. PROGRAMARE LINIARA
3 x1 + 2 x 2 − x 3 + x 4 = −3
− 4 x1 − x 2 − x 3 + x 5 = −4

Soluţia asociată bazei unitare E=[ A4 , A5 ] nu este admisibilă:

x1=x2=x3=0 x4= -3 , x5= -4

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.

Se constată că soluţia optimă a programului dat are componentele :

x1* = 1
7 , x 2* = 0 , x 3* = 24
7 ; f min = 156
7

Observaţie finală. Pentru simetrie, algoritmul descris în secţiunea 4.2


se va numi algoritmul simplex primal. Recapitulând teoria se constată fără
dificultate că maximul (minimul) unei funcţii obiectiv se atinge prin valori
crescătoare (descrescătoare) în simplexul primal şi prin valori descrescătoare
(crescătoare) în simplexul dual.

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ă.

Tabelele 5.2.1 - 5.2.4


84 I. PROGRAMARE LINIARA

6. Analiza sensitivităţii. Postoptimizare. Programare parametrică

Orice program liniar în formă standard în care funcţia obiectiv se


maximizează este perfect determinat de cunoaşterea următoarelor trei masive:

A ≡ matricea coeficienţilor sistemului de restricţii


b ≡ vectorul (coloană) al termenilor liberi
c ≡ vectorul (linie) al coeficienţilor funcţiei obiectiv

drept care va fi identificat în continuare prin sigla P(A,b,c):

 Ax = b

P( A, b, c)  x ≥ 0
(max) f = cx

Pînă acum, elementele masivelor A, b, c au fost presupuse a fi


cunoscute cu exactitate şi fixate, de unde şi numele de constante atribuit lor. În
situaţiile practice, suntem obligaţi să privim aceste "constante" şi din alte
unghiuri de vedere. Să presupunem că P(A,b,c) modelează activitatea unei
firme. Atunci elementele aij ale matricii A au semnificaţia de consumuri de
resurse, componentele bi ale vectorului b reprezintă plafoanele resurselor
disponibile iar componentele cj ale vectorului c pot fi după caz, preţuri sau
profituri unitare.
Se poate întâmpla ca unele dintre aceste elemente să nu fie cunoscute
cu exactitate, ele oscilând în jurul unor valori "probabile", ca în următoarele
exemple:
"experţii firmei estimează că pentru luna următoare preţul bunului ... va
fi în jur de 18 u.m." sau:
"directorul executiv apreciază că pentru luna următoare disponibilul
resursei ... va fi cam de 130 unităţi"
În asemenea situaţii suntem interesaţi să ştim dacă la variaţii "mici" ale
unor constante corespund variaţii "mici" ale soluţiei modelului, altfel spus,
dacă soluţia modelului depinde "continuu" de aceste constante. Dacă este aşa,
vom spune că soluţia modelului este stabilă.
Studiul stabilităţii este important din punct de vedere economic
deoarece este posibil ca variaţii mici ale unor constante să antreneze modificări
majore în soluţia optimă şi în acest caz este necesar să ştim cauzele şi
proporţiile instabilităţii pentru a putea lua decizia adecvată.
6. Analiza sensitivităţii. Postoptimizare. Programare parametrică 85

În acest context, analiza sensitivităţii are ca obiect studiul stabilităţii


soluţiei optime a unei probleme de optimizare. În cazul liniar, pentru fiecare
constantă se poate determina un interval de variaţie cu proprietatea că baza
optimală sau chiar soluţia asociată rămân neschimbate. Acest interval se
numeşte interval de stabilitate al soluţiei optime în raport cu coeficientul
considerat.

Reluând problema firmei sunt situaţii în care constantele modelului sunt


cunoscute cu exactitate şi fixate doar pe o anumită perioadă, o parte din ele
suferind modificări de mai mică sau mai mare amplitudine prin trecerea la o
nouă perioadă. Ce efect au aceste schimbări asupra soluţiei optime este o altă
chestiune cu serioase motivaţii economice. De exemplu, suntem interesaţi în a
afla dacă optimalitatea unei combinaţii de bunuri se mai menţine când profitul
unui bun rentabil scade. Mai departe, ne putem întreba ce se întâmplă dacă
disponibilul de resurse suferă unele ajustări. Deasemeni este interesant de
văzut ce efect are introducerea unei noi activităţi productive, considerarea
unei noi resurse al cărei disponibil limitat face inoperant programul de
producţie actual sau modificarea tehnologiei de transformare a resurselor în
bunuri.
Evident, la toate aceste întrebări se poate răspunde rezolvând de sine
stătător problema modificată. În continuare, vom arăta cum se obţine soluţia
problemei modificate plecând de la soluţia problemei originale. Subiectul în
discuţie este tentant din start, deoarece este din nou de aşteptat ca, la mici
modificări ale datelor iniţiale, să rezulte schimbări de mică amploare în soluţia
optimă originală, schimbări ce se pot determina cu un efort de calcul relativ
mic, oricum mai mic decât în cazul în care problema modificată ar fi rezolvată
"de la capăt".
Problematica relevată este cunoscută sub numele de postoptimizare.

În fine, programarea parametrică se ocupă de studiul comportării


soluţiei unei probleme de optimizare atunci când una sau mai multe constante
ale problemei depind de un sistem de parametri.(Ne vom mărgini aici numai la
cazul dependenţei liniare de un singur parametru.)

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

Conducerea firmei X, specializată în producerea de aparatură


electronică a iniţiat un ambiţios program de îmbunătăţire a activităţii sale. Ea
doreşte în primul rând să ştie care este cel mai bun mod de utilizare a
resurselor sale interne: capacităţi de producţie, forţă de muncă, spaţii de
depozitare, etc. urmând ca în funcţie de rezultate să-şi definitiveze programul
de aprovizionare cu materii prime şi componente semifabricate precum şi
programul de producţie pe următoarele luni. Directorul executiv a apelat la o
echipă de Cercetare Operaţională care a propus programarea liniară ca mijloc
de investigare şi analiză. Pentru exemplificare, au fost alese trei resurse mai
importante R1, R2, R3 şi trei produse reprezentative A1, A2, A3 .Din analiza
situaţiei curente a rezultat că pe durata unei luni activităţile având drept scop
producerea celor trei bunuri pot fi considerate ca fiind liniare. În tabelul 6.1.1
sunt date cantităţile din resursele considerate, disponibile la nivelul unei luni şi
consumurile specifice pentru fiecare bun în parte.

Produse → Consumuri specifice


Resurse ↓ A1 A2 A3 Disponibil
R1 1 2 1 130
R2 1 1 2 100
R3 2 1 3 140

Tabelul 6.1.1

Desigur, în compararea diferitelor moduri de utilizare a resurselor trebuie avut


în vedere un criteriu de performanţă cum ar fi maximizarea profitului total sau
a venitului total sau a ratei profitului, minimizarea costului producţiei etc. Se
poate pune chiar problema elaborării unui program de fabricaţie acceptabil din
punctul de vedere al mai multor criterii ca în cadrul analizei multicriteriale,
dar acest subiect nu va fi tratat în lucrare.

Pentru început, directorul executiv a cerut echipei să elaboreze o


propunere de program de producţie care, plecând de la resursele sus amintite,
să maximizeze profitul total al firmei relativ la bunurile A1,A2,A3.

Profiturile pe unitatea de produs sunt estimate în momentul de faţă la 3,


4 respectiv 2 unităţi monetare (u.m.). Notând cu x1, x2, x3 cantităţile în care
bunurile A1, A2, A3 vor fi realizate şi ţinînd seama de ipoteza de liniaritate
rezultă următorul model matematic:
6. Analiza sensitivităţii. Postoptimizare. Programare parametrică 87
 x1 + 2 x 2 + x 3 ≤ 130
 x + x + 2 x ≤ 100
 1 2 3

( P) 2 x1 + x 2 + 3x 3 ≤ 140
 x ,x ,x ≥ 0
 1 2 3

max f = 3x1 + 4 x 2 + 2 x 3

Aducem problema (P) la forma standard prin introducerea variabilelor de


abatere x4, x5, x6 . Reamintim conţinutul economic al noilor variabile. Deoarece
expresia x1 + 2x2 + x3 din membrul stâng al primei restricţii reprezintă
cantitatea din resursa R1 necesară pentru realizarea combinaţiei de bunuri (x1,
x2, x3) iar termenul liber 130 este cantitatea disponibilă din aceeaşi resursă,
urmează că diferenţa 130 - (x1 + 2x2 + x3), ce defineşte valoarea varibilei de
abatere x4, va semnifica tocmai cantitatea din R1 nefolosită. Analog, x5 şi x6 vor
reprezenta cantităţile din R2 şi R3 neutilizate.

Aplicăm algoritmul simplex plecînd de la baza unitară de start


E = [A4,A5,A6]:
3 4 2 0 0 0
CB B VVB A1 A2 A3 A4 A6 A6
0 A4 130 1 2 1 1 0 0
0 A5 100 1 1 2 0 1 0
0 A6 140 2 1 3 0 0 1
f 0 -3 -4 -2 * * *
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 -1 * 0 2 * *
4 A2 40 0 1 -1/3 2/3 0 -1/3
0 A5 10 0 0 2/3 -1/3 1 -1/3
3 A1 50 1 0 5/3 -1/3 0 2/3
f 310 * * 5/3 5/3 * 2/3

Tabelele 6.1.2 - 6.1.4

Pe baza informaţiilor numerice cuprinse în tabelul 6.1.4 al soluţiei optime


echipa C.O. a formulat următoarele concluzii:

• Profitul maxim pe care firma îl poate obţine luând în calcul numai


datele prezentate este de 310 u.m. Această valoare reprezintă limita superioară
a posibilităţilor actuale şi s-ar obţine dacă nu ar exista nici un fel de probleme
88 I. PROGRAMARE LINIARA
în legătură cu procurarea altor resurse, cu situaţia vânzărilor şi în general cu
tot ce ţine de actul complex al aprovizionării, producţiei şi desfacerii. Marja de
manevră a conducerii este limitată nu numai de plafoanele resurselor
considerate ci şi de o mulţime de alţi factori (unii controlabili alţii nu) astfel că
în realitate profitul este mai mic. Totuşi cifra obţinută trebuie considerată ca o
valoare de referinţă în raport cu care este necesar să fie evaluate toate celelalte
decizii privind producţia.

• În contextul dat, combinaţia optimă de bunuri se compune din:

x1* = 50 unităţi din A1 şi x2* = 40 unităţi din A2

Din punct de vedere economic, neincluderea produsului A3 in combinaţia


optimă se justifică astfel (vezi raţionamentul din secţiunea.7):
Notând cu B baza optimă [A2,A5,A1] din tabelul 6.1.4 rezultă:

A 3 = BA 3 = − 13 A 2 + 23 A 5 + 53 A1

Se conchide că producerea unei unităţi din A3 ar implica creşterea producţiei


din A2 cu 1/3 unităţi şi diminuarea producţiei din A1 cu 5/3 unităţi. Variaţia
profitului are expresia:

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.

• Resursele R1 şi R3 sunt prevăzute a se consuma în întregime


deoarece în soluţia optimă x 4∗ = x 6∗ = 0 . Din resursa R2 rămîn nefolosite
x5∗ = 10 unităţi. Cum aceste consideraţii premerg definitivarea programului de
fabricaţie, analiza modului de utilizare a resursei R2 poate fi continuată în mai
multe direcţii. Astfel, conducerea firmei ar putea decide utilizarea celor 10
unităţi în alte activităţi productive care nu au fost luate în considerare.
Alternativ, se poate impune condiţia utilizării integrale a resursei R2 (vezi
secţiunea următoare). În fine, o a treia cale ar fi suplimentarea disponibilelor
din R1 şi R3 în scopul utilizării mai bune a resursei R2, fireşte în ipoteza că
acest lucru este posibil şi că structura sortimentală de producţie găsită este în
6. Analiza sensitivităţii. Postoptimizare. Programare parametrică 89
concordanţă cu opţiunile firmei. Analiza acestui scenariu ne va prilejui o
interesantă aplicare a teoriei dualităţii. Într-adevăr, preţurile duale optime ale
celor trei resurse sunt u1∗ = 53 , u2∗ = 0 , u3∗ = 23 (vezi exemplul 4.4.2) şi ele arată
cu cât creşte profitul maxim la o suplimentare cu o unitate a disponibilului
acestora. Aşa stând lucrurile, conducerea firmei ar fi mai interesată să mărească
disponibilul din R1 decât pe cel din R3 dar nici o creştere combinată nu poate fi
exclusă din start. Să notăm cu ∂b1 şi ∂b3 cantităţile suplimentare din resursele
R1, R3 pe care firma ar putea să le direcţioneze către producerea bunurilor A1,
A2, A3. Noul vector al disponibilului ar fi:

130 + ∂ b1  130 ∂ b1 
     
b' =  100  = 100 +  0  = b + ∂ b
140 + ∂ b3  140 ∂ b3 

astfel că soluţia asociată bazei B devine:

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 

Menţinerea structurii sortimentale optime actuale înseamnă:

− 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

Variaţia valorii (optime) a funcţiei obiectiv la modificările survenite este dată


de formula:
90 I. PROGRAMARE LINIARA
∂ f = c B x' B − c B x B = c B ( B − 1b + B − 1∂ b) − c B B − 1b = c B B − 1∂ b = u∗∂ b =

= 5 ∂ b + 2 ∂ b3
3 1 3

Maximizând ∂f pe domeniul determinat de inegalităţile precedente se găseşte


(fie grafic fie cu ajutorul algoritmului simplex):

( ∂b1)* = 30 ( ∂b3)* = 0 → (max)∂f = 50

Recapitulând, dacă vectorul disponibilului ar fi:

130 + 30 160


b =  100  = 100
 
 140 + 0  140

atunci resursele ar fi în intregime consumate, combinaţia optimă de bunuri ar


fi:

x1∗ = 50 − 13 ⋅ 30 = 40 unităţi din A1 , x 2∗ = 40 + 23 ⋅ 30 = 60 unităţi din A2 , x 3∗ = 0

iar profitul maxim ar avea valoarea 310 + 50 =360 u.m.

• Să presupunem acum că firma hotărăşte să păstreze pentru mai multe


perioade (luni) viitoare actuala structură sortimentală în cadrul căreia produce
numai bunurile A1 şi A2. Pe parcurs însă pot interveni modificări ale
profiturilor unitare sau schimbări de la o lună la alta în disponibilele resurselor
(urmare a unor modificări în structura costurilor de producţie, scăderi şi/sau
creşteri de preţuri pe piaţa de desfacere, schimbări în structura programelor de
aprovizionare cauzate de modificarea preţurilor materiilor prime la furnizori
etc.)
În această situaţie conducerea este interesată în a şti între ce limite
poate varia profitul unui produs sau disponibilul unei resurse astfel încât
actuala structură a producţiei să se menţină.

Să considerăm profitul unitar al bunului A1 a cărui valoare luată în


calculele anterioare este 3u.m. Recalculăm costurile reduse c3 ,c4 şi c6
înlocuind 3 cu profitul variabil c1 (vezi tabelul 6.1.4) şi impunem condiţia de
optimalitate cj ≥ 0. Obţinem:
6. Analiza sensitivităţii. Postoptimizare. Programare parametrică 91
c3 = ( − ) ⋅ 4 +
1
3
2
3 ⋅0 + 5
3 ⋅ c1 − 2 = ⋅ c1 −
5
3
10
3 ≥0
c4 = 2
3 ⋅ 4 + ( − ) ⋅ 0 + ( − ) ⋅ c1 − 0 = − ⋅ c1 ≥ 0
1
3
1
3
8
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

numai profitul total maxim variază: max f = 50 ⋅ c1 +4 ⋅ 40 = 160 + 50 ⋅ c1.

Pentru profiturile unitare ale bunurilor A2 şi A3 intervalele de stabilitate


corespunzătoare sunt 23 ≤ c2 ≤ 6 , c3 ≤ 113 .

Recalculăm valorile variabilelor bazice x2, x5 şi x1 reunite în vectorul


xB, înlocuind disponibilul actual al resursei R1 de 130 unităţi cu disponibilul
variabil b1. Condiţia de optimalitate xB ≥ 0 conduce la inegalităţile:

 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 

 x1  140 − 13 0 23  140  − 13 b1 + 280


3


b1 ≥ 70 , b1 ≤ 160 , b1 ≤ 280

din care rezultă intervalul de stabilitate: 70 ≤ b1 ≤ 160. În concluzie, dacă firma


menţine disponibilul resursei R1 între 70 şi 160 unităţi în combinaţia optimă
vor intra numai bunurile A1 şi A2 dar în cantităţile variabile:

x1∗ = 280
3 − 13 b1 x 2∗ = 23 b1 − 140
3

profitul maxim fiind şi el variabil:

(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.

Pentru resursele R2 şi R3 intervalele de stabilitate corespunzătoare sunt


b2 ≥ 90 respectiv 65 ≤ b3 ≤ 170.

6.2 Postoptimizare: cazul în care se modifică unii coeficienţi din


funcţia obiectiv

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.

Exemplul 6.2.1 În studiul, de caz din secţiunea 6.1 am determinat


intervalele de stabilitate ale soluţiei optime x* în raport cu fiecare din
coeficienţii c1, c2, c3 ai funcţiei obiectiv. Deoarece valorile actuale 3, 4, 2 u.m.
ale acestor coeficienţi sunt situate în interiorul intervalelor de stabilitate
corespunzătoare, conchidem că soluţia x* este stabilă în raport cu fiecare din ei
şi chiar cu ansamblul lor: variaţii "mici" (de câteva procente, să zicem) ale
profiturilor unitare în jurul valorilor actuale nu modifică soluţia optimă găsită
şi implică doar o variaţie "mică" a profitului total.
6. Analiza sensitivităţii. Postoptimizare. Programare parametrică 93
Pentru exemplificare, să presupunem că profiturile bunurilor A1 şi A3
cresc cu 5% iar profitul bunului A2 scade cu 10%:

c1′ = 3 + 100
5
⋅ 3 = 315
, c 2′ = 4 − 100
10
⋅ 4 = 3,6 c 3′ = 2 + 100
5
⋅ 2 = 2,1

Înlocuind în tabelul 6.1.4 coeficienţii c1 = 3 , c2 = 4 , c3 = 2 cu coeficienţii de


mai sus şi recalculând costurile reduse rezultă tabelul:

3,15 3,6 2,1 0 0 0


CB B VVB A1 A2 A3 A4 A5 A6
3,6 A2 40 0 1 -1/3 2/3 0 -1/3
0 A5 10 0 0 2/3 -1/3 1 -1/3
3,15 A1 50 1 0 5/3 -1/3 0 2/3
f 301,5 * * 1,95 1,35 * 0,9

Tabelul 6.2.1

Prin urmare efectul combinat al schimbărilor survenite în structura vectorului


profiturilor unitare se materializează doar într-o reducere a profitului total cu
310 - 301,5 = 8,5 u.m. ceeace reprezintă 2,74% din valoarea iniţială!

Altfel stau lucrurile dacă, de exemplu, profitul unitar al bunului A1 ar fi


de 2 u.m. în loc de 3 u.m. Ne reamintim că 2 este extremitatea stângă a
intervalului de stabilitate al soluţiei x* în raport cu c1 = 3! Introducem aceste
modificări în tabelul 6.1.4 obţinînd tabelul 6.2.2.

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

Se observă că c3 = 0 , c6 = 0 de unde tragem concluzia că problema are mai


multe soluţii optime de bază (vezi secţiunea 4.2). Acestea se obţin introducând
succesiv în baza curentă coloanele A3 şi A6 (vezi tabelele 6.2.3 - 6.2.4).

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

Celelalte două soluţii optime de bază au componentele:

x1∗∗ = 25 , x2∗∗ = 45 , x3∗∗ = 15 (val. var. de abatere: x4∗∗ = x5∗∗ = x6∗∗ = 0 )

respectiv:

x1∗∗∗ = 0, x2∗∗∗ = 65, x3∗∗∗ = 0 (val. var. de abatere: x4∗∗∗ = 0, x5∗∗∗ = 35, x6∗∗∗ = 75 )

Ne reamintim că în această situaţie există o infinitate de soluţii optime de


forma:

x = α 1 x ∗ + α 2 x ∗∗ + α 3 x ∗∗∗ cu α1 , α2 , α3 ≥ 0 şi α1 + α2 + α3 = 1

(combinaţii convexe ale soluţiilor optime de bază),în care:

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

Dacă se ia de exemplu: α1 = 3/5 , α2 = 1/5 , α3 = 1/5 se găseşte soluţia:

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!

Să ne întoarcem la problema stabilităţii soluţiei x* în situaţia micşorării


profitului bunului A1 la 2 u.m.
Urmărind datele din tabelele 6.2.3 - 6.2.4 se constată că o nouă scădere oricât
de mică a profitului bunului A1 face ca soluţiile x** şi x** să nu mai fie
optime! Soluţia care maximizează profitul este x*** şi ea prevede producerea
în exclusivitate a bunului A2 spre deosebire de soluţiile x* şi x** care au o
structură sortimentală mai largă! Astfel o mică scădere a profitului bunului A1
sub valoarea actuală de 2 u.m. antrenează schimbări chiar în structura
sortimentală a programului de producţie! În consecinţă, soluţia x* este
instabilă în raport cu eventualele oscilaţii ale profitului bunului A1 în jurul
valorii de 2 u.m.

Exemplul 6.2.2 În studiul de caz din secţiunea 6.1 a fost avansată o


propunere de program de producţie care urmărea maximizarea profitului total.
În prezent, firma vinde produsele A1, A2, A3 la preţurile 12,18 respectiv
16 u.m. astfel că profitul maxim de 310 u.m. ar corespunde unui venit total de:

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!

Aplicând algoritmul simplex primal, într-o singură iteraţie se obţine


soluţia care maximizează venitul total (vezi tabelele 6.2.5 - 6.2.6):

x1∗∗ = 25 u. din A1 , x 2∗∗ = 35 u. din A2 , x 3∗∗ = 15 u. din 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

Tabelele 6.2.5 - 6.2.6

La un venit maxim de 1350 u.m. profitul firmei ar fi de: 25 ⋅ 3 + 35 ⋅ 4


+ 15 ⋅ 2 = 245 u.m. iar rata profitului ar fi în acest caz de numai 18,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:

u1∗∗ = 7 , u2∗∗ = 3 , u3∗∗ = 1 faţă de u1∗ = 53 , u2∗ = 0 , u3∗ = 2


3

Se justifică astfel afirmaţia din secţiunea 2.4 potrivit căreia preţurile


duale nu reflectă valoarea intrinsecă a resurselor ci arată măsura implicării
acestora în procesul de optimizare a obiectivului urmărit.

Exemplul 6.2.3 Am văzut că în soluţia care maximiza profitul, resursa


R2 nu era folosită în întregime. Se poate pune problema determinării unei
soluţii care să maximizeze profitul cu condiţia utilizării integrale a acestei
resurse. Pentru a obţine un răspuns prin reoptimizare, transformăm variabila de
abatere x5 în variabilă artificială înlocuind în funcţia obiectiv coeficientul său
c5 = 0 cu o constantă negativă -M << 0. Introducem acest coeficient în tabelul
6.1.4 şi aplicăm algoritmul simplex primal. Invităm cititorul să facă calculele
necesare anunţându-l că va trebui să obţină soluţia care maximizează venitul
firmei.
6. Analiza sensitivităţii. Postoptimizare. Programare parametrică 97
6.3 Postoptimizare: cazul în care modificările se produc în
vectorul termenilor liberi

Problema originală Problema modificată


 Ax = b  Ax = b'
 
( P )x ≥ 0 ( P')  x ≥ 0
(max) f = cx (max) f = cx
 

( )
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.

6.4 Postoptimizare: introducerea unei noi activităţi în model

Problema originală Problema modificată


 n
 n j
 ∑ A xj = b
j
 ∑ A x j + A n +1 ⋅ x n +1 = b
 j =1  j =1

( P ) xj ≥ 0 ( P' ) x j ≥ 0, 1 ≤ j ≤ n ; x n +1 ≥ 0
 n  n
(max) f = ∑ c x (max) f ' = ∑ c j x j + c n +1 x n +1
 j j  j =1
j =1

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ă.

Exemplul 6.4.1 Considerăm problema maximizării profitului firmei X


din secţiunea 6.1; firma doreşte să introducă în fabricaţie şi produsul A' ale
cărui consumuri specifice din resursele R1, R2, R3 sunt 2 , 3 respectiv 1 unităţi.
Remarcăm faptul că A' realizează un consum superior din resursa R2 şi este de
aşteptat ca includerea sa în programul de fabricaţie să conducă la o utilizare
mai bună a acestei resurse (ne reamintim că în soluţia care maximiza profitul
total resursa R2 era excedentară!). Deocamdată preţul produsului A' nu este
fixat şi ca urmare nici profitul unitar nu este cunoscut. În ce condiţii ar putea fi
inclus A' în combinaţia care maximizează profitul?

Notăm cu A7 coloana consumurilor specifice relative la bunul A' şi fie


c7 profitul unitar al acestui bun. Din teoria generală rezultă că A' nu este inclus
în combinaţia optimă atât timp cât costul său redus în raport cu baza optimală
B = [A2, A5 ,A1] este nenegativ. Calculăm c7 folosind datele din tabelul 6.1.4:

 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 *

Tabelele 6.4.1 - 6.4.2

Se obţine soluţia :

x1∗∗ = 50 x 2∗∗ = 35 x 7∗∗ = 5 (max) f = 315 u.m.

Propunem cititorului să interpreteze rezultatul şi să elaboreze o analiză


succintă a acestuia inspirându-se din comentariile din întreg paragraful 6 (dacă
nu cumva are idei mai bune...)

6.5 Postoptimizare: adăugarea unei restricţii

Problema originală Problema modificată

a11 x1 + a12 x 2 +...+ a1n x n = b1


a11 x1 + a12 x 2 +...+ a1n x n = b1 
 a 21 x1 + a 22 x 2 +...+ a 2 n x n = b2
a 21 x1 + a 22 x 2 +...+ a 2 n x n = b2 .........................................
........................................ 
( P)  ( P' ) a m1 x1 + a m2 x 2 +...+ a mn x n = bm
a m1 x1 + a m2 x 2 +...+ a mn x n = bm  α x + α x +...+ α x ≤ β
 x1 ≥ 0, x 2 ≥ 0,..., x n ≥ 0  1 1 2 2 n n

  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

este disponibilă, constantele alcătuitoare formând tabelul simplex optim. Dacă


* *
soluţia optimă x a programului (P) verifică restricţia suplimentară atunci x
este soluţia optimă şi a problemei extinse. În caz contrar, adică atunci când :

α 1 x1* + α 2 x 2* +...+α n x n* > β (6.5.2)

procedăm după cum urmează:

• Transformăm inegalitatea suplimentară în egalitate adăugând


variabila de abatere xn+1:

α 1x1 + α 2 x2 +...+α n xn + xn +1 = β (6.5.3)

• Folosind forma explicită (6.5.1.) eliminăm din (6.5.3.) variabilele


bazice xi , i∈I (în caz că apar). Obţinem o egalitate de forma:

∑ α j x j + x n +1 = β (6.5.4.)
j ∈J

Se constată imediat că β este negativ deoarece :


n
β = β − ∑ α j x*j < 0
j =1

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:

xi=bi ,i∈I ; xn+1=β<0 ; xj=0 , j∈J (6.5.5)

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).

Exemplul 6.5.1 În studiul de caz din secţiunea 6.1, la elaborarea


programului de producţie care maximizează profitul total, au fost avute în
vedere numai resursele R1, R2, R3 . Dacă în procesul de producţie sunt folosite
şi alte resurse, se naşte întrebarea dacă nu cumva soluţia găsită implică
consumuri ce depăşesc disponibilul din acestea. Pentru exemplificare, să
considerăm o a patra resursă R4 al cărei stoc disponibil b4 nu este deocamdată
stabilit. Pentru cele trei bunuri A1, A2, A3 consumurile specifice din R4 sunt de
2, 2 respectiv 1 unităţi. Condiţia de încadrare a consumului din R4 în disponibil
conduce la inegalitatea:
2 x1 + 2 x 2 + x 3 ≤ b4 (6.5.6)
Pentru ca soluţia care maximizează profitul total:
x1∗ = 50 x 2∗ = 40 x 3∗ = 0 (6.5.7)
să satisfacă restricţia de mai sus este necesar ca:

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)

Exprimăm variabilele bazice x1 , x2 în funcţie de cele nebazice folosind datele


din tabelul 6.1.4:

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

Eliminând x1 , x2 din (6.5.8) se găseşte în final:

− 53 x 3 − 23 x 4 − 23 x 6 + x 7 = b4 − 180 (6.5.10)

Introducem coeficienţii egalităţii (6.5.10) în tabelul simplex 6.1.4:


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 b4 - 180 0 0 -5/3 -2/3 0 -2/3 1
f 310 * * 5/3 5/3 * 2/3 *

Tabelul 6.5.1

Conform instrucţiunilor algoritmului simplex dual, A7 părăseşte baza curentă.


Raportând costurile reduse cj la elementele corespunzătoare, dar negative din
linia "A7" a tabelului 6.5.1 găsim că A3 sau A6 trebuie să intre în bază pentru a
asigura dual admisibilitatea noii soluţii (adică satisfacerea testului de
optimalitate). Din punct de vedere economic,se impune introducerea lui A3
pentru că aceasta ar însemna includerea bunului A3 în programul de
fabricaţie, bineînţeles în ipoteza că noua soluţie ar fi şi primal admisibilă!

Înlocuind A7 cu A3 în baza curentă obţinem soluţia dual admisibilă din


tabelul 6.5.2 (pivotul transformării este deja marcat în tabelul 6.5.1):

CB B VVB A1 A2 A3 A4 A5 A6 A7


4 A2 76 - (1/5)b4 0 1 0 4/5 0 -1/5 -1/5
0 A5 (2/5)b4 - 62 0 0 0 -3/5 1 -3/5 2/5
3 A1 b4 - 180 1 0 0 -1 0 0 1
2 A3 108 -(3/5)b4 0 0 1 2/5 0 2/5 -3/5
f 130 + b4 * * * 1 * 0 1

Tabelul 6.5.2

Condiţia de admisibilitate primală conduce la inegalităţile:


6. Analiza sensitivităţii. Postoptimizare. Programare parametrică 103

76 − 15 b4 ≥ 0 → b4 ≤ 380 

5 b4 − 62 ≥ 0 → b4 ≥ 155
2

 ⇒ 155 ≤ b4 ≤ 180 (6.5.11)


b4 − 130 ≥ 0 → b4 ≥ 130 
108 − 53 b4 ≥ 0 → b4 ≤ 180 

În concluzie, dacă b4 satisface (6.5.11) atunci soluţia din tabelul 6.5.2 adică:

x1 = b4 − 130 x 2 = 76 − 15 b4 x 3 = 108 − 53 b4 (6.5.12)

este optimă, aducând firmei, în caz de realizare un profit de 130 + b4 u.m.


Toate resursele sunt prevăzute a fi utilizate integral cu excepţia lui R2 din care
rămîn x5 = 25 b4 − 62 unităţi.
Observăm că dacă b4 = 155 unităţi din R4, toate resursele sunt folosite,
programul de fabricaţie (6.5.12) va avea componentele :

x1 = 25 x2 = 45 x3 = 15

şi profitul corespunzător ar fi de 130 +155 = 285 u.m.


Pe măsură ce b4 se apropie de valoarea maximă 180 creşte şi profitul
către valoarea 130 + 180 = 310 u.m. În acelaşi timp cantitatea nefolosit ă din
R2 se măreşte apropiindu-se de valoarea 10 iar producţia bunului A3 tinde către
0. Pentru b4 = 180 regăsim soluţia (6.5.7).

Exemplul 6.5.2 Reluăm problema maximizării profitului firmei X.


Care va fi programul de producţie dacă se impune cerinţa ca cel puţin 8% din
venitul firmei să fie realizat din desfacerea bunului A3?
Folosind preţurile anunţate în exemplul 6.2.2 noua condiţie se formalizează
prin inegalitatea:

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

Introducem variabila de abatere x7 şi eliminăm variabilele bazice x1, x2 folosind


relaţiile (6.5.9). Rezultă egalitatea:

−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

Într-o singură iteraţie se obţine programul optim:

x1** = 38 89 x 2** = 42 29 x 3** = 6 23 (max) f = 298 89 (6.5.14)

(valorile variabilelor de abatere: x 4** = x 6** = 0 , x5** = 5 49 )

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

Tabelele 6.5.3 - 6.5.4

Acest exemplu ne oferă ocazia de a semnala şi discuta un aspect nou,


care nu a fost avut în vedere în consideraţiile teoretice dezvoltate până acum.
Deoarece firma X produce aparatură electronică este de presupus că bunurile
A1, A2, A3 se măsoară în unităţi indivizibile ca de exemplu în bucăţi. Dacă
bunul A1 este în fapt un calculator, a produce o fracţie din el este lipsit de
sens; ori se fabrică un întreg calculator ori nu. Prin urmare în orice soluţie
admisibilă valorile variabilelor x1, x2, x3 trebuie să fie nu numai nenegative
dar şi întegi! Iată de ce soluţia (6.5.14) nu poate fi însuşită.

Vom proceda la rotunjirea componentelor fracţionare în ideea că soluţia


optimă întreagă se află în "apropierea" soluţiei optime "fracţionare". Operaţia
de rotunjire trebuie astfel făcută încât rezultatul să fie o soluţie admisibilă adică
să verifice restricţiile problemei. Este firesc să acceptăm soluţia obţinută în
acest mod cel puţin ca soluţie suboptimală - în unele contexte practice acest
lucru este perfect justificat de faptul că valorile permise variabilelor sunt
suficient de mari astfel încât efectul rotunjirii să fie neglijabil.

Rotunjind superior x1** şi inferior x 2** , x 3** se găseşte combinaţia:

x1 = 39 x 2 = 42 x 3 = 6
6. Analiza sensitivităţii. Postoptimizare. Programare parametrică 105

care se încadrează în disponibilele date dar nu verifică restricţia suplimentară


(6.5.13), deoarece valoarea producţiei din A3 reprezintă numai 7,3% din
valoarea întregii producţii.
Rotunjind inferior x1** , x 2** şi superior x 3** se obţine o soluţie admisibilă
întreagă:

x1 = 38 x 2 = 42 x 3 = 7 f ( x ) = 296 u.m.

care nu este optimă. Cea mai bună soluţie întreagă este:

x10 = 37 x 20 = 43 x 30 = 7 f ( x 0 ) = 297 u.m. (6.5.15)

În cadrul acestui program, valoarea producţiei din bunul A3 reprezintă 8,4%


din valoarea întregii producţii.
Soluţia (6.5.15) va fi obţinută în paragraful următor prin aplicarea unei
proceduri care constă într-o suită de postoptimizări cu adăugare de restricţii.

6.6 Postoptimizare: modificarea unei coloane din matricea


coeficienţilor

Fie:

Problema originală Problema modificată


 A x1 + A 2 x 2 +L+ A n x n = b
1
( A )' x1 + A 2 x 2 +L+ A n x n = b
1

 
( 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

După cum se observă, modificările apar în prima coloană a matricii A şi ele


sunt incluse în vectorul ∂A1. A fost prevăzută şi o modificare ∂c1 coeficientului
variabilei x1 în funcţia obiectiv şi aceasta din raţiuni economice: de regulă,
schimbarea tehnologiei de realizare a unui bun duce la modificarea costurilor
de producţie, cu efect nemijlocit asupra preţului şi profitului. Formal, cazul
strict indicat în titlul secţiunii se obţine pentru ∂c1 = 0.
106 I. PROGRAMARE LINIARA

Presupunem ca şi pînă acum că problema originală (P) a fost rezolvată


cu ajutorul algoritmului simplex primal; se cunoaşte deci soluţia sa optimă x*
şi baza B căreia îi este asociată. Două situaţii sunt posibile:

1) Coloana A1 care se modifică, nu face parte din baza B. Atunci în


soluţia optimă x* vom avea x1∗ = 0 astfel că x* va fi o soluţie admisibilă a
problemei modificate (P') şi chiar o soluţie de bază fiind asociată aceleeaşi

baze B. Perturbarea coloanei A1 are efect direct numai asupra costului redus al
variabilei x1 conform formulei:

c1′ = c B B −1 ( A1 )'− c1′ = ( c B B −1 A1 − c1 ) + ( c B B −1∂ A1 − ∂ c1 ) = c1 + ∂ c1 (6.6.1)

Atunci:

• dacă c1′ ≥ 0 atunci x* este soluţie optimă şi pentru (P');


• dacă c1′ < 0 , pentru rezolvarea problemei (P') vom aplica în
continuare algoritmul simplex primal luând x* ca soluţie de start. Bineînţeles,
în tabelul simplex asociat soluţiei x* vom înlocui A 1 = B −1 A1 cu :

( A1 )' = B −1 ( A1 )' = B −1 A1 + B −1 (∂ A1 ) = A 1 + ∂ A 1 (6.6.2)

şi c1 cu c1′ calculat în (6.6.1).


După cum se vede modul de tratare al acestui caz este foarte asemănător cu cel
prezentat în secţiunea 6.4 la adăugarea unei noi activităţi în model.

Exemplul 6.6.1 Reluăm problema maximizării profitului firmei X din


secţiunea 6.1. Ne reamintim că în raport cu criteriul de performanţă amintit,
bunul A3 nu era inclus în combinaţia optimă. Departamentul de cercetare al
firmei a realizat însă o nouă tehnologie de fabricare a acestui bun care necesită
consumurile unitare 5/4 , 7/4 , 5/2 din resursele R1 , R2 , R3.Costurile de
producţie fiind altele, conducerea firmei doreşte să cunoască în ce condiţii
bunul A3 - realizat după noua tehnologie - ar putea deveni rentabil.

Suntem în condiţiile cazului tratat mai sus. Plecând de la:


6. Analiza sensitivităţii. Postoptimizare. Programare parametrică 107
( A )' = A
3 3
+ ∂A 3

54  1  14 
 7  = 2  +  − 1 
 4    4
 5 2   3 − 1 2 

şi folosind elementele tabelului simplex 6.1.4, evaluăm:

 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

Bunul A3 rămîne în afara combinaţiei optime atâta timp cât:

c3 ' ≥ 0 ⇔ ∂ c3 ≤ 7 4

Dacă de exemplu ∂c3 = 2 ⇔ c3' = c3 + ∂c3 =2 + 2 = 4 u.m. atunci c3′ = -1/4 şi


A3 devine rentabil aşa cum rezultă din tabelele simplex 6.6.1 - 6.6.2:

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

Tabelele 6.6.1 - 6.6.2


108 I. PROGRAMARE LINIARA
A rezultat programul optim
x1 = 25 x 2 = 40 x 3 = 20 max f = 315 u.m.
** ** **

Se obţine o creştere a valorii funcţiei obiectiv: ∆f = x 3** ⋅ ( − c3′) = 20 ⋅ (1 / 4) = 5


unităţi monetare,conform formulei (4.2.3).

2) Coloana A1 care se modifică face parte din baza optimă B. Plecând


de la problema originală (P) vom rezolva problema intermediară :

 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

urmărind instrucţiunile date în secţiunea 6.4 (adăugarea unei noi activităţi în


model). Este clar atunci că problema modificată (P') se deduce din (P1) prin
adăugarea restricţiei egalitate:

x1 = xn+1 (6.6.4)

Pentru a putea folosi instrucţiunile secţiunii 6.5 (adăugarea unei restricţii)


transformăm (6.6.4) în două inegalităţi de tip " ≤ ":

 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

Observaţie: Este posibil ca programul intermediar (P1) să aibe optim


infinit. În această situaţie revenim în rezolvarea problemei originale (P) şi mai
precis la iteraţia în care coloana A1 (care se modifică) a intrat în baza
curentă B. Acolo, înlocuim coloana A1 cu ( A1 ) ′ = B −1 ( A1 ) ′ , recalculăm
costul redusc1 şi reluăm aplicarea algoritmului simplex.

Exemplul 6.6.2 Ne plasăm din nou în cadrul studiului de caz din


secţiunea 6.1. Am văzut că bunul A2 intră în combinaţia care asigură profitul
maxim. Să presupunem că tehnologia de fabricaţie a acestui bun se modifică
astfel:
6. Analiza sensitivităţii. Postoptimizare. Programare parametrică 109

2  3 / 2  2   −1 / 2 
A = 1 → ( A )' =  1  = A + ∂ A = 1 +  0 
2   2   2 2

1 3 / 4 1 −1 / 4

Lăsăm variabil profitul bunului A2:

c 2′ = c 2 + ∂ c 2 = 4 + ∂c 2

propunându-ne să studiem toate situaţiile posibile. Obţinem următoarea


problemă modificată:

 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

(am inclus deja şi variabilele de abatere x4 , x5 , x6 ) Programul intermediar (P1)


din (6.6.3) are următoarea formă:

 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 

Avem de examinat două situaţii:

1) c7 ≥ 0 ⇔ ∂ c2 ≤ −1 ⇔ c2′ ≤ 3

Soluţia optimă a programului (P1) se obţine din soluţia optimă x* a


programului original (P) adăugând x7 = 0. Tabelul simplex optim pentru
programul (P1) se obţine formal din tabelul simplex optim (6.1.4) al
programului (P) adăugând A7 şi c7 calculate mai sus:

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

Înlocuind în (6.6.5) rezultă ecuaţiile:


1
3 x 3 − 23 x 4 + 13 x 6 − 43 x 7 + x8 = −40
− 13 x 3 + 23 x 4 − 13 x 6 + 43 x 7 + x 9 = 40

ai căror coeficienţi îi ataşăm la tabelul 6.6.3.


6. Analiza sensitivităţii. Postoptimizare. Programare parametrică 111

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

(prin ipoteză -1-∂c2 ≥ 0 ! )

Există două cazuri de examinat.

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

Coloana A7 intră în bază. Aplicăm algoritmul simplex dual pivotând tabelul


6.6.4 cu pivotul încadrat -3/4. În două iteraţii se obţine următoarea soluţie
optimă pentru problema modificată (P'):

x1** = 52 x 2** = 48 x 3** = 0 (max) f = 348 + 48 ⋅ ∂ c2

2) c7 < 0 ⇔ ∂ c2 > −1 ⇔ c2′ > 3 u.m.


112 I. PROGRAMARE LINIARA
Tabelul simplex 6.6.3 arată că soluţia optimă a problemei originale (P)
completată cu x7 = 0 nu mai este optimă şi pentru programul intermediar (P1).
Pivotăm 6.6.3 cu pivotul încadrat 1/4 obţinând tabelul:

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.

∂c2 -1 -1/2 1/4 +∞


c3 = (13/3)+(8/3) ∂c2 + + + + + + + + + + + + + + + +
c4 = (1/3)-(4/3) ∂c2 + + + + + + + + + + 0- - - - - -
c5 = 4+4 ∂c2 0 + + + + + + + + + + + + + + +
c6 = -(2/3)-(4/3) ∂c2 + + + + + 0 - - - - - - - - - - - -

Tabelul 6.6.6

2.1) Din tabelul 6.6.6 rezultă că pentru:

−1 < ∂ c2 ≤ − 1 2 ⇔ 3 < c2′ ≤ 7 2

tabelul 6.6.5 oferă soluţia optimă a problemei intermediare (P1).Procedând în


continuare exact ca în cazul 1) trecem la rezolvarea prin postoptimizare a
problemei modificate (P').Se obţine soluţia:

x1** = 40 x 2** = 60 x 3** = 0 (max) f = 360 + 60 ⋅ ∂ c2

Invităm cititorul să facă calculele necesare.

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.1) Dacă − 1 2 < ∂ c2 ≤ 0 ⇔ 7 2 < c2′ ≤ 4 soluţia optimă a


programului modificat (P') coincide cu cea obţinută în cazul 2.1).

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

Tabelele 6.6.8 - 6.6.9

Deoarece ∂c2 > 0 costurile reduse c3 şi c4 sunt pozitive.

2.2.2.1) Dacă: c1 = − 1 3 + 2 3 ∂ c2 ≥ 0 ⇔ ∂ c2 ≥ 1
2 ⇔ c2′ ≥ 9 2
114 I. PROGRAMARE LINIARA

criteriul de optimalitate este satisfăcut şi soluţia optimă a problemei modificate


este:
x1** = 0 x 2** = 260 3 x 3** = 0 (max) f = 1040 3 + 260 3 ∂ c2

2.2.2.2) Dacă: c1 < 0 ⇔ 0 < ∂ c2 < 1


2 ⇔ 4 < c2′ < 9 2

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:

x1** = 40 x 2** = 60 x 3** = 0 (max) f = 360 + 60∂ c2

Rezultatele acestui studiu, mai precis dependenţa soluţiei optime şi a valorii


maxime a funcţiei obiectiv de parametrul ∂c2, sunt sintetizate în următorul
tabel:

∂c2 c2′ =4+∂c2 Soluţia optimă Valoarea maximă


a funcţiei obiectiv
-4 ≤ ∂c2 ≤ -(23/8) 0≤ c2′ ≤ (9/8) x1 =70 , x2 = o ,x3 = 0 210
-(23/8) ≤ ∂c2 ≤ -1 (9/8) ≤ c2′ ≤ 3 x1 = 52 , x2 = 48 , x3 = 0 348+48∂c2
-1 ≤ ∂c2 ≤ (1/2) 3 ≤ c2′ ≤ (9/2) x1= 40 , x2 = 60 , x3 = 0 360+60∂c2
∂c2 ≥ (1/2) c2′ ≥ (9/2) x1= 0, x2= (260/3), x3 = 0 (1040/3)+(260/3)∂c2

Tabelul 6.6.11

Este util de asemenea să vizualizăm dependenţa maximului funcţiei obiectiv de


costul c2′ . Pentru aceasta, în expresiile din ultima coloană a tabelului 6.6.11
înlocuim ∂c2 = c2′ - 4. Rezultatul este o funcţie convexă, liniară pe porţiuni:
6. Analiza sensitivităţii. Postoptimizare. Programare parametrică 115

(max) f
(260/3)c2’

120 +60c2’
156 +48 c2’
390
210
300
210

c2’
9/8 3 9/2

Fig.6.6.1

6.7 Programare parametrică

După cum s-a specificat deja în introducere, programarea parametrică


are ca obiectiv studiul comportării optimului unui program liniar atunci când
unele din elementele sale constitutive depind de un set de parametri.
Secţiunea nu introduce ceva esenţialmente nou în raport cu
problematica discutată anterior; într-adevăr, determinarea intervalelor de
stabilitate ca şi alte probleme în care anumite constante erau lăsate "libere",
constituie exemple de analiză parametrică. O deosebire există totuşi:
postoptimizarea oferă o imagine "locală" asupra dependenţei dintre soluţia
optimă a unui program liniar şi elementele sale constitutive în timp ce
programarea parametrică îşi propune să dea o imagine "globală" asupra acestei
dependenţe.
Obiectul precis al programării parametrice va fi prezentat în
următoarele două cazuri relativ simple dar cu multe aplicaţii economice:

1) Vectorul c al coeficienţilor funcţiei obiectiv depinde liniar de un


parametru:
116 I. PROGRAMARE LINIARA
 Sa se determine functia:

{ }
 ϕ ( λ ) = max c( λ ) x Ax = b , x ≥ 0 , λ ∈ R
Pc ( λ ) 
unde:
 c( λ ) = c 0 + λ c 1 ⇔ c ( λ ) = c 0 + λ c 1 , j = 1, L , n
 j j j

2)Vectorul b al termenilor liberi depinde liniar de un parametru:

 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

Indiferent de situaţie, domeniul valorilor admisibile ale parametrului λ poate fi


mai mic decât R , funcţie de specificul problemei. Atât Pc(λ) cât şi Pb(λ) cu λ
variabil în R se identifică cu nişte familii de programe liniare uzuale, câte unul
pentru fiecare valoare a lui λ. Toate programele din Pc(λ) au aceeaşi mulţime
de soluţii admisibile, numai funcţia obiectiv se modifică "continuu", în timp ce
programele din Pb(λ) au aceeaşi funcţie obiectiv, mulţimea soluţiilor admisibile

deformându-se "continuu". Vom presupune că există cel puţin o valoare


admisibilă λ0 pentru care programele corespunzătoare au optim finit; fără a
restrânge generalitatea, putem considera că λ0 = 0.

6.7.1 Parametrizarea vectorului coeficienţilor funcţiei obiectiv

În principiu, un program parametric de tipul Pc(λ) , λ ∈ R se studiază


astfel:

1)Cu ajutorul algoritmului simplex se rezolvă programul corespunzător


valorii particulare λ0 = 0:

 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 .

2) Recalculăm costurile reduse asociate soluţiei x*, privită ca soluţie de


bază a programului "generic" Pc(λ) :

[ ] [ ]
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

unde j ∈ J ≡ mulţimea indicilor coloanelor Aj care nu sunt în baza B.Ştim din 1)


că aceste costuri sunt nenegative pentru λ0 = 0. Cercetăm dacă există şi valori
λ ≠ 0 pentru care ele rămân nenegative deci pentru care soluţia x* este optimă.
Pentru aceasta:

3) Se rezolvă sistemul de inecuaţii liniare:

c j ( λ ) ≥ 0 ⇔ c j0 + λ c j1 ≥ 0 j ∈J (6.7.1)

Mulţimea soluţiilor acestui sistem este un interval [λ ,λ ] care va conţine cu


siguranţă valoarea λ0 = 0. Se conchide că pentru orice λ ∈ [λ ,λ ] baza B şi
soluţia x* asociată sunt optime pentru programul Pc(λ) corespunzător.

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 [ λ' , λ ].

5) Se repetă operaţia 4) - urmată de operaţiile 2) şi 3) - pînă la


epuizarea "spre stânga" a domeniului valorilor admisibile ale parametrului λ,
după care se iau în studiu, în manieră analoagă, valorile λ > λ.

În final, domeniul valorilor admisibile ale lui λ este partiţionat într-un


număr finit de intervale printr-o secvenţă de puncte:

.....< λ' < λ <λ < λ' < .....


118 I. PROGRAMARE LINIARA
numite puncte critice, pe fiecare interval existând o singură bază
optimă.Funcţia ϕ (λ) = max c(λ).x se dovedeşte a fi o funcţie convexă, liniară
pe porţiuni; De exemplu pe intervalul [λ ,λ ] avem:

ϕ ( λ ) = ∑ ci (λ )bi = ∑ ci0bi + λ ∑ ci1bi


i ∈I i ∈I i ∈I

mulţimea I fiind ca de obicei mulţimea indicilor coloanelor bazice.

Exemplul 6.7.1 Considerăm programul parametric:

 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 }

Aducem problema la forma bună introducând variabilele de abatere x4 , x5 şi


variabilele artificiale x6 , x7. Rezultă programul:

 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

Rezolvăm problema corespunzătoare valorii λ = 0. Plecând cu baza


[ A4, A6, A7 ],în trei iteraţii se obţine tabelul simplex:

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 − λ

Variaţia semnului celor două mărimi poate fi urmărită în tabelul următor:

λ -∞ 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

iar valoarea maximă a funcţiei obiectiv este:


ϕ ( λ ) = ( max) f = (5 + λ ) ⋅ 3 2 = 65 2 + 13 2 ⋅ λ
Presupunem acum că λ > 1/5 şi "foarte aproape" de 1/5. Din tabelul 6.7.2
rezultă că c1(λ) < 0 astfel că soluţia asociată bazei [A4, A5, A3] nu mai este
optimă. Introducem coloana A1 în baza curentă şi efectuăm o iteraţie simplex:

2+3λ 3+2λ 5+λ 0 0


CB B VVB A1 A2 A3 A4 A5
0 A4 1/2 1/2 0 0 4 0
0 A5 3/2 -5/2 2 0 0 1
5+λ A3 13/2 1/2 1 1 0 0
f (65/2)+(3/2)λ (1/2)-(5/2)λ 2-λ * * *
2+3λ A1 1 1 0 0 2 0
0 A5 4 0 2 0 5 1
5+λ A3 6 0 1 1 -1 0
f 32+9λ * 2-λ * -1+5λ *
Tabelele 6.7.3 - 6.7.4
120 I. PROGRAMARE LINIARA

În următorul tabel este dată variaţia semnului costurilor reduse c2(λ) =2 - λ şi


c4(λ) = -1 + 5λ corespunzătoare bazei [A1, A5, A3]:

λ 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

este soluţia optimă a programului Pc(λ) ,iar ϕ ( λ ) = 32 + 9λ .

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ă:

2+3λ 3+2λ 5+λ 0 0


CB B VVB A1 A2 A3 A4 A5
2+3λ A1 1 1 0 0 2 0
3+2λ A2 2 0 1 0 5/2 1/2
5+λ A3 4 0 0 1 -7/2 -1/2
f 28+11λ * * * -6+(15/2)λ -1+(1/2)λ

Tabelul 6.7.6

Se vede imediat că pentru λ ≥ 2 costurile reduse c4(λ) = -6 + (15/2)λ şi


c5(λ) = -1+ (1/2)λ sunt nenegative.

În concluzie, programele Pc(λ) cu λ ∈ [2, +∞ ) au ca soluţie optimă


soluţia asociată bazei [A1, A2, A3]:

x1∗ = 1 , x 2∗ = 2 , x 3∗ = 4

Valoarea maximă a funcţiei obiectiv este: ϕ ( λ ) = 28 + 11λ .

Următoarea diagramă redă sintetic rezultatele studiului


6. Analiza sensitivităţii. Postoptimizare. Programare parametrică 121

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

ϕ (λ ) = (65/2) + (13/2)λ ϕ (λ ) = 32 + 9λ ϕ (λ ) = 28 + 11λ

Figura 6.7.1

ϕ(λ )

50

169/5

λ
1/5 2

Figura 6.7.2

În figura 6.7.2 este vizualizată variaţia valorii maxime a funcţiei


obiectiv în raport cu parametrul λ . Se confirmă faptul, deja anunţat, potrivit
căruia ϕ (λ ) este o funcţie convexă, liniară pe porţiuni.

6.7.2 Parametrizarea vectorului termenilor liberi

Un program parametric de tipul Pb(λ) , λ ∈ R se studiază în mod asemănător:


122 I. PROGRAMARE LINIARA
1) Cu ajutorul algoritmului simplex se rezolvă programul
corespunzător valorii λ 0 = 0:

 Ax = b 0

Pb (0)  x ≥ 0
(max) f = cx

De această dată, costurile reduse c j = c B B −1 A j − c j , j ∈ J corespunzătoare


bazei optime B nu depind de λ şi ca urmare B şi soluţia de bază asociată sunt
dual admisibile pentru oricare din programele Pb(λ) ,λ ∈ R .

2) Se determină vectorul componentelor bazice ale soluţiei programului


"generic" Pb(λ) , asociată bazei B:

x B ( λ ) = B −1b( λ ) = B −1b0 + λ B −1b1 = b 0 + λ b 1 ⇔ xi (λ ) = bi 0 + λ bi 1 (6.7.2)

unde i ∈ I ≡ mulţimea indicilor coloanelor Ai din B.


Ipoteza ne asigură că aceste componente sunt nenegative pentru λ0 = 0.
Cercetăm dacă există şi valori λ ≠ 0 pentru care aceste componente sunt în
continuare nenegative. Pentru acele valori λ, soluţia asociată bazei B este
soluţia optimă a programului Pb(λ) corespunzător.Drept care:

3) Se rezolvă sistemul de inecuaţii liniare:

xi ( λ ) ≥ 0 ⇔ bi 0 + λ bi 1 ≥ 0 i ∈ I (6.7.3)

Mulţimea soluţiilor acestui sistem va fi un interval [λ ,λ ] care în mod cert


conţine şi valoarea particulară λ0 = 0, conform celor amintite mai sus. În
concluzie oricare ar fi λ ∈ [λ ,λ ] soluţia asociată bazei B este soluţie optimă
pentru programul Pb(λ) .

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ă:

xr ( λ ) = min xi ( λ ) (cu siguranţă xr(λ) < 0 !)


6. Analiza sensitivităţii. Postoptimizare. Programare parametrică 123
Dacă toate elementele arj ( j ∈ J ≡ mulţimea indicilor coloanelor din A
care nu sunt în B) sunt nenegative, programele Pb(λ) cu λ < λ sunt
incompatibile.Altminteri se efectuează o iteraţie cu algoritmul simplex dual
eliminând din bază coloana Ar. Pentru noua bază se repetă operaţiile 2) şi 3) de
mai sus determinându-se un alt interval [λ',λ ] de admisibilitate - deci de
optimalitate - pentru soluţia asociată.

5) Se repetă operaţia 4) - urmată de operaţiile 2) şi 3) până la epuizarea


"spre stânga" a domeniului valorilor admisibile ale parametrului λ după care se
cercetează în manieră analoagă valorile λ > λ .

Ca şi în cazul precedent se obţine un şir de intervale consecutive


delimitate de punctele critice:

.....< λ' < λ <λ < λ' < .....

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

"Global", ϕ(λ) apare ca o funcţie convexă, liniară pe porţiuni.

Exemplul 6.7.2 Considerăm programul parametric:

 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

După adăugarea variabilelor de abatere şi artificiale pentru crearea bazei


unitare de start se obţine programul în formă bună:
124 I. PROGRAMARE LINIARA
 x1 + x 2 + x 3 + x 4 = 7 + 2λ

 x1 + 2 x 2 + 2 x 3 + x6 = 13 + λ

3x1 − x 2 + x 3 − x5 + x 7 = 5 + 2λ λ ∈R
 x j ≥ 0 , j = 1, K ,7

 (max) f = 2 x1 + 3x 2 + 5x 3 − Mx 6 − Mx 7

Se constată că problema particulară, corespunzătoare valorii λ0 = 0 coincide cu


cea rezolvată în exemplul 6.7.1. Reamintim că în trei iteraţii a fost obţinută
baza optimă B = [ A4, A5, A3]. Vom determina acum soluţia programului
"generic" Pb(λ) asociată aceleiaşi baze,folosind formula (6.7.2). Avem:

 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 λ 

Deoarece costurile reduse asociate bazei B nu depind de λ şi sunt nenegative,


soluţia calculată este dual admisibilă oricare ar fi λ ∈ R. Ea va fi optimă pentru
toţi acei λ pentru care este şi admisibilă. Variaţia semnului componentelor
vectorului xB(λ) poate fi urmărită în următorul tabel:

λ -∞ -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ă:

Pentru toţi λ ∈ [-(1/3) , 1] programul parametric Pb(λ) are soluţia


optimă:

x1∗ = 0 , x2∗ = 0 , x3∗ = 13 2 + 1 2 λ cu: ϕ ( λ ) = (max) f = 65 2 + 1 2 λ .

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ă.

În concluzie, oricare ar fi λ < -(1/3) programul parametric Pb(λ) este


incompatibil.

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

Pentru λ ≥ 1 programul parametric Pb(λ) are soluţia optimă:

x1∗ = − 3 5 + 3 5 λ , x2∗ = 0 , x3∗ = 34 5 + 15 λ cu: ϕ ( λ ) = (max) f = 164 5 + 115 λ

Rezultatele studiului sunt sintetizate în diagrama din fig. 6.7.3. Propunem


cititorului să vizualizeze grafic dependenţa maximului funcţiei obiectiv de
parametrul λ; va constata uşor că ϕ(λ) este o funcţie convexă, liniară pe
porţiuni.

-(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

7. Aplicaţie la programarea în numere întregi

De regulă, variabilele unei probleme de programare matematică variază


continuu singura condiţie impusă fiind aceea ca valorile lor să fie nenegative,
cerinţă justificată de obicei de contextul practic modelat. O mulţime de situaţii,
cele mai multe din domeniul economic, impun utilizarea unor variabile care
pot lua numai valori întregi: dacă, de exemplu, o variabilă “este măsurată“ în
unităţi indivizibile (număr de bucăţi) atunci este clar că în orice soluţie
admisibilă şi în particular în soluţia optimă, variabila în cauză nu poate lua
valori fracţionare.

O problemă care utilizează variabile întregi se va numi problemă de


programare în numere întregi sau problemă de programare discretă (totală
sau mixtă după cum toate variabilele trebuie să ia în exclusivitate valori întregi
sau numai o parte din ele).

După cum va rezulta şi din exemplele concrete, utilizarea variabilelor


întregi duce la creşterea flexibilităţii modelării în sensul obţinerii unor
descrieri “mai exacte” a situaţiilor practice modelate. Pe de altă parte, condiţia
de integritate impusă variabilelor complică enorm rezolvarea, mai cu seamă din
cauza faptului că mijloacele teoriei clasice nu sunt direct aplicabile.Astfel, la
ora actuală, o problemă de programare liniară uzuală, cu câteva mii de
variabile “continue” poate fi rezolvată lejer , utilizând unul sau altul
dintre programele comerciale de calculator existente pe piaţă, în timp ce o
problemă

de optimizare discretă cu mai puţin de 100 variabile poate cauza serioase


dificultăţi.

Nu este în intenţia noastră ca, în cuprinsul acestei lucrări, să dezvoltăm


teoria şi metodele specifice programării în numere întregi. În secţiunile
următoare ne propunem să ilustrăm utilitatea acestui tip de programare în
modelarea proceselor economice şi să indicăm unele posibilităţi de rezolvare
ale programelor discrete folosind postoptimizarea.

7.1 O problemă de optimizare discretă: problema croirii

Problema debitării sau croirii unor repere din suporţi de dimensiune


mai mare este frecvent întâlnită în cele mai diverse domenii cum ar fi industria
mobilei, a sticlei, a hârtiei, a confecţiilor, industria metalurgică sau cea
7. Aplicaţie la programarea în numere întregi 127
constructoare de maşini. Importanţa acestei probleme rezidă în dependenţa
nemijlocită a reducerii consumului de materiale de utilizarea unor scheme
eficiente de croire. Formele concrete sub care ea se prezintă diferă foarte mult
de la un context la altul dar chestiunea care se pune de fiecare dată este
aceeaşi:

cum trebuie să se desfăşoare procesul efectiv de croire astfel încât producerea


unor cantităţi date de repere să se facă cu un consum cât mai mic de
materiale.

De obicei, clasificarea problemelor de croire se face după numărul


dimensiunilor relevante ale reperelor croite: avem probleme unidimensionale,
bidimensionale sau tridimensionale. În croirea unidimensională reperele se
diferenţiază printr-o singură dimensiune chiar dacă ele au mai multe. Cazul
tipic este cel al debitării unor bare de diferite lungimi din bare mai mari. Iată
un alt exemplu: o firmă produce un carton special în rulouri avînd o anumită
lăţime. Clienţii solicită însă rulouri cu aceeaşi lungime ca şi rulourile standard
dar de lăţimi mai mici. În acest caz, reperele ca şi suporţii sunt bidimensionali
dar relevantă este o singură dimensiune - lăţimea (vezi exemplul 7.1.1).

Este interesant de menţionat cu acest prilej faptul că există contexte


care nu implică croirea unor obiecte mai mici din suporţi similari mai mari în
sensul uzual al cuvântului “croire”,dar care sunt reductibile la acest gen de
probleme. Un exemplu îl constituie umplerea unor spaţii publicitare la

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.

După cum vom vedea problemele de croire unidimensionale sunt relativ


simplu de formalizat (ca de altfel şi celelalte cu mai multe dimensiuni).
Principala dificultate rezidă în numărul de posibilităţi de “tăiere” a unui suport
care, în cele mai multe situaţii concrete, poate fi uluitor de mare. De exemplu,
pentru o problemă cu 40 de repere ale căror lungimi sunt cuprinse între 20 şi
80 inches şi care se taie din suporţi cu lungimea de 200 inches, numărul
reţetelor de croire posibile este situat între 10 şi 100 milioane!

Croirea bidimensională este cu mult mai complicată. Chiar şi în cazul


cel mai simplu în care reperele şi suporţii sunt dreptunghiulari dificultăţile sunt
enorme. Ele sunt cauzate în primul rând de numărul mare de posibilităţi de
“aşezare” a reperelor pe suport; deşi finit acest număr este practic de necuprins.
128 I. PROGRAMARE LINIARA
Dacă în cazul unidimensional acestea pot fi construite algoritmic, existând
siguranţa - cel puţin teoretică - a generării tuturora, în cazul bidimensional nu
există la ora actuală algoritmi care să garanteze producerea oricărei “aşezări”
posibile. Nu mai puţin importante sunt restricţiile privind aşezarea efectivă a
reperelor pe suport, aşezare care trebuie să ţină seama de particularităţile
instrumentului de tăiere ca şi de alte cerinţe, unele imposibil de formalizat. De
exemplu, în multe situaţii practice se poate întâmpla ca o “reţetă“ de croire,
acceptabilă dintr-un anumit punct de vedere - de pildă al acoperirii cât mai
bune a suportului - să nu fie acceptabilă din alt punct de vedere - de pildă al
“productivităţii” ei în procesul efectiv de debitare! Există şi alte restricţii
impuse de condiţiile concrete, restricţii care diferă de la un caz la altul. S-a
conturat deja opinia că fiecare problemă de croire reală trebuie tratată de sine
stătător, “speculându-se” pe cât posibil toate particularităţile ei.

În ceeace priveşte croirea tridimensională, termenul de “croire” este


impropriu, el fiind folosit mai degrabă pentru a sublinia asemănarea cu
problemele anterioare.Pentru a nu intra în amănunte vom da următorul
exemplu: mai multe containere paralelipipedice trebuiesc încărcate în vagoane
identice. Cum trebuie făcută încărcarea acestor containere astfel încât numărul
de vagoane utilizate să fie minim? În mod curent, problemele de acest tip
poartă numele de probleme de împachetare.

În continuare ne vom ocupa de modelarea problemei de croire


unidimensională.

Un număr de repere cu lungimile l1 > l2 > ... > lm trebuiesc executate în


cantităţile b1, b2, ..., bm. Aceste repere se obţin prin tăiere din suporţi identici cu
lungimea L. În ce mod trebuie făcută croirea reperelor astfel încât cantităţile
planificate să fie realizaţe cu un consum minim de suporţi?

O modalitate de tăiere a unui suport în repere se va numi reţetă de


croire. Evident, o reţetă este complet determinată de un vector cu m
componente întregi, nenegative a = (a1 , a 2 ,K , a m ) în care ai reprezintă
numărul reperelor de lungime li rezultate prin tăiere. Deoarece suma lungimilor
reperelor tăiate dintr-un suport nu depăşeşte lungimea acestuia, urmează că
mulţimea reţetelor de croire se identifică cu mulţimea soluţiilor
întregi,nenegative şi nenule ale inecuaţiei:

l1a1 + l2 a 2 +K+ lm a m ≤ L (7.1.1)

Să numim rest al reţetei a = (a1 , a 2 ,K , a m ) diferenţa:


7. Aplicaţie la programarea în numere întregi 129

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ă :

r(a) < lm ≡ lungimea celui mai mic reper.

Î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

(pentru nevoi ulterioare reţetele vor fi scrise în “coloană“). Notând cu xj


numărul de aplicări ale reţetei Aj (sau, cum se mai spune, multiplicitatea
reţetei Aj) problema de croire unidimensională se modelează astfel:

(C) Să se determine x1, x2, ..., xn întregi nenegativi, astfel încât:

n n
∑ A xj ≥ b ⇔ ∑ aij x j ≥ bi i = 1,..., m
j
(7.1.2)
j =1 j =1

şi care minimizează funcţia obiectiv:

n
f = ∑ xj (7.1.3)
j =1

Obsevaţie: Deşi în enunţ se specifică realizarea reperelor “exact” în


cantităţile b1, b2, ..., bm nu putem impune în (7.1.2) satisfacerea restricţiilor cu
n
egalitate deoarece sistemul ∑ A j x j = b s-ar putea să nu aibe soluţii întregi
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”.

În modelarea problemei de croire am putea considera şi un alt criteriu


de performanţă şi anume minimizarea restului inutilizabil reprezentat prin
expresia:
130 I. PROGRAMARE LINIARA

f ' = r ( A1 ) x1 + r ( A 2 ) x 2 +K+ r ( A n ) x n (7.1.4)

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.

În aplicaţiile practice, pe lângă restul inutilizabil trebuie avut în vedere


şi aşa numitul rest utilizabil reprezentat de suma lungimilor reperelor croite
“peste” cantităţile planificate (acesta se mai numeşte şi supraplan).

Exemplul 7.1.1 O sucursală a unei firme producătoare de hîrtie


produce un carton izolator în rulouri avînd lăţimea de 70 inches (un inch = 2,54
cm). Toate rulourile au aceeaşi lungime. Clienţii firmei solicită rulouri
având însă o lăţime mai mică, dar de aceeaşi lungime ca şi ruloul standard.
Cererea zilnică este de 100 rulouri de 22 inches, 125 rulouri de 20 inches şi
80 rulouri

de 12 inches lăţime. Rulourile de lăţime mai mică se obţin prin tăiere


din
rulourile standard. Firma doreşte să acopere aceste cereri de aşa manieră încât
pierderile datorate tăierii să fie minime.

Prin acest exemplu practic nu intenţionăm să ilustrăm aspectele


teoretice şi de calcul din domeniul croirii (foarte importante, dar depăşind
obiectivele pe care ni le-am propus la începutul paragrafului...). De altfel,
problemele de optimizare liniară ce vor apare pe parcurs sunt rezolvate cu
ajutorul unor pachete de programe utilitare. Dorim să realizăm o analiză
economică a diferitelor variante rezultate din studiu în vederea formulării unei
decizii finale cât mai corecte.

Pentru început vom lista toate reţetele maximale de croire; ne putem


permite aceasta întrucît numărul lor este, în cazul de faţă, mic.

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

Acoperirea cererii zilnice conduce la restricţiile:

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

Dacă se urmăreşte minimizarea restului total inutilizabil, la sistemul


(7.1.5) ataşăm funcţia obiectiv:

(min) f ' = 4 x1 + 6 x 2 + 2 x 3 + 8 x 4 + 4 x5 + 10 x 7 + 6 x8 + 2 x 9 + 10 x10

În vederea rezolvării problemei relaxate, vom introduce variabilele de abatere


x11, x12, x13 care vor indica numărul de rulouri de 22, 20, respectiv de 12 inches
tăiate peste cantităţile cerute.

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

Din tabelul simplex 7.1.2 rezultă următoarea soluţie optimă:

x 60 = 100 , x 90 = 125 , x130 = 820 , x 0j = 0 j = 1,K ,13 j ≠ 6,9,13 (min) f ' = 250

Ea prevede tăierea a 225 rulouri standard:100 de rulouri după reţeta A6 şi 125,


după reţeta A9. Resturile inutilizabile însumează 250 inches. Rulourile de 22 şi
20 inches se produc în cantităţile planificate, în schimb apare un surplus de 820
rulouri de 12 inches, cu mult mai mare decât cantitatea cerută. Restul total,
utilizabil şi inutilizabil măsoară 820 × 12 + 250 =10090 inches şi reprezintă
132 I. PROGRAMARE LINIARA
10090
= 64,1% din lăţimea tuturor rulourilor tăiate!! Este clar că această
225 × 70
soluţie nu poate fi acceptată.

Dacă se urmăreşte minimizarea numărului de rulouri standard tăiate,


funcţia obiectiv f ’ trebuie schimbată în:

f = x1 + x 2 + x 3 + x 4 + x5 + x 6 + x 7 + x8 + x 9 + x10

Prin reoptimizare se obţine tabelul 7.1.3. În raport cu noul criteriu problema


relaxată are o infinitate de soluţii optime: nu mai puţin de şase costuri reduse
sunt nule! - vezi observaţia 5) din secţiunea 4.2 şi exemplul 6.2.1.

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

Soluţia din tabelul 7.1.3 nu este acceptabilă deoarece valoarea variabilei


x7 este fracţionară. Aplicând un algoritm adecvat de rezolvare a problemelor de
optimizare liniară discretă au fost determinate soluţiile optime întregi din
tabelul 7.1.4. Oricare din cele şase soluţii listate , deşi prevăd o dublare
a restului inutilizabil, sunt mult mai realiste deoarece:

- se taie un număr mult mai mic de rulouri standard: 89 faţă de 225!


- supraplanul este nesemnificativ ca valoare;
- procentul pierderilor rezultate din tăiere este de numai :
570
×100 = 9,15%
89 × 70

Retete Nr. rulouri Supraplan Rest Rest


utilizate standard utilizabil inutilizabil Rest
7. Aplicaţie la programarea în numere întregi 133
SOLUTIA multiplicităţi utilizate 22 20 12 (lungime) (lungime) total
I A2 A7 A9
51 18 20 89 2 - - 44 526 570
II A2 A6 A7
41 20 28 89 2 - - 44 526 570
III A2 A5 A7
31 40 18 89 2 - - 44 526 570
IV A2 A7 A9
50 18 21 89 - - 4 48 522 570
V A1 A6 A7
27 20 42 89 1 1 - 42 528 570
VI A1 A4 A6
6 63 20 89 1 1 - 42 528 570

Tabelul 7.1.4

7.2 Probleme cu variabile bivalente

A) Alegerea proiectelor de investiţii. O firmă este interesată în mai


multe proiecte de investiţii pe care ar putea să le realizeze într-o perioadă de
câţiva ani,dar din cauza bugetului limitat, va trebui să se limiteze la o parte din

ele. Proiectul j aduce firmei - în caz de finalizare - un profit estimat la cj dolari,


j = 1,...,n şi necesită investiţii anuale în valoare de aij dolari, i = 1,...,m.
Capitalul disponibil pentru anul i este bi. Problema constă în alegerea acelor
proiecte care să aducă firmei un profit total maxim cu condiţia nedepăşirii
capitalului disponibil anual.

Introducem variabilele bivalente:

1 ⇔ proiectul j este acceptat Comment:


xj = 
0 ⇔ proiectul j nu este acceptat

În ipotezele de liniaritate uzuale obţinem problema de programare bivalentă:

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

Utilizarea variabilelor bivalente ne permite să modelăm o serie de


situaţii speciale.Dacă, de exemplu, în problema de mai sus din primele trei
proiecte cel mult unul (respectiv exact unul) trebuie realizat, introducem
restricţia:

x1 + x 2 + x 3 ≤ 1 (respectiv x1 + x 2 + x 3 = 1 )

Este posibil ca un proiect să fie acceptat numai dacă este realizat un


altul.Pentru a arăta, de exemplu, că proiectul 7 nu poate fi acceptat dacă
proiectul 9 nu se realizează, introducem restricţia: x 7 ≤ x 9 .

D) Problema monezilor. Această problemă îşi are originea în studiul


unei situaţii în aparenţă banale, care are loc în orice magazin. S-a observat că
numai în puţine cazuri clienţii plătesc la casă o sumă egală cu contravaloarea
mărfurilor cumpărate; de regulă, ei dau o sumă acoperitoare în bancnote şi
monezi de valoare mare şi aşteaptă restul. Pentru casier, operaţia de dare a
restului nu este aşa de simplă cum s-ar crede; el trebuie s-o execute rapid
şi
corect, mai cu seamă atunci când la casă sunt mai mulţi clienţi care îşi aşteaptă
rândul să plătească. După cum este ştiut, în foarte multe magazine s-a trecut la
automatizarea înregistrării mărfurilor cumpărate de clienţi şi a evaluării
resturilor de plată, modul în care aceste resturi sunt înapoiate clienţilor
rămânând în sarcina casierilor.
Însă, un rest format din multe monezi, de cele mai diverse tipuri
valorice (în special mici...) nu este de natură să satisfacă pe client care ar putea
să plece nemulţumit. Pe de altă parte, este greu să dai un rest exact utilizând
numai monezi de valoare mare. Chestiunea se complică dacă se are în vedere şi
faptul că diferitele tipuri valorice de monezi, disponibile pentru plata restului
se pot afla la un moment sau altul în cantităţi neîndestulătoare.Se naşte firesc
întrebarea: cum se poate da un rest de plată astfel încât:

- numărul tipurilor valorice de monezi utilizate la plata restului să nu


depăşească o limită dată;
-numărul total al monezilor necesare plăţii să fie minim;
7. Aplicaţie la programarea în numere întregi 135

Rezolvarea acestei chestiuni a permis automatizarea operaţiei - cel puţin în


marile magazine -contribuind astfel la creşterea gradului de servire al
clienţilor.

În continuare vom arăta cum se formalizează problema descrisă;


rezultatul va fi un nou program liniar în numere întregi. Vom folosi
următoarele notaţii:

S = restul de plată;
n = numărul total al tipurilor valorice de monezi disponibile pentru
plată;

p = numărul maxim de tipuri valorice de monezi ce pot fi utilizate


pentru plata sumei S;
aj = valoarea monezii de tip j;
mj = numărul monezilor de tip j disponibile în casă;

Pentru fiecare j = 1,..., n introducem variabilele:

xj = numărul monezilor de tip j utilizate la plata sumei S;

1 daca tipul de moneda j este utilizat efectiv la plata sumei S;


yj = 
0 in caz contrar;

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

7.3 O problemă de programare mixtă: Program de producţie cu


costuri de pregătire
136 I. PROGRAMARE LINIARA
Reluăm problema de programare liniară:

 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

Pentru a încorpora în modelul matematic anterior aceste noi elemente


introducem variabilele bivalente:

 1 daca activitatea j se va opera la un nivel x j > 0


yj = 
0 in caz contrar

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

în care mj reprezintă o margine superioară pentru nivelul xj al activităţii j.

Se obţine astfel o problemă de optimizare mixtă în care o parte din


variabile continuă să ia orice valoare nenegativă în timp ce altele nu pot lua
decât valori întregi.

7.4 Principiul Branch & Bound de rezolvare a problemelor de


programare în numere întregi

Să considerăm un program liniar în numere întregi cu m restricţii şi n


variabile în formă standard:

 Ax = b

( P)  x ≥ 0 , x intreg
(max) f = cx

Vom presupune că toate componentele masivelor A, b, c sunt numere întregi.


Fie A mulţimea soluţiilor admisibile întregi ale programului (P). Alături de
(P) vom considera şi programul relaxat (adică fără condiţia de integritate
impusă variabilelor):

 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.

Pentru a fi mai precişi, să presupunem că în x* componenta x1∗ este


fracţionară. Este clar atunci că soluţia optimă întreagă x 0 va satisface una din
următoarele restricţii mutual exclusive:
138 I. PROGRAMARE LINIARA

x1 ≤  x1∗  sau x1 ≥  x1∗  +1 (7.4.1)

Considerăm programele liniare:

 ( PL)  ( PL)
( PL1 ) ≡  ( PL2 ) ≡ 
 x ≤  x1   x ≥  x1  + 1
∗ ∗

Spunem că am “ramificat” problema (PL) în raport cu variabila x1 .Dacă A1 şi


A2 sunt mulţimile de soluţii admisibile întregi ale celor două probleme este
clar că:

A1 ∩ A 2 = ∅ şi A = A1 ∪ A 2

Să considerăm acum soluţia optimă x*1 a programului (PL1), în caz că el este


compatibil şi să presupunem că a doua componentă a sa x 2∗1 este fracţionară
(prima componentă este sigur întreagă: x1∗1 =  x1∗  !) .Ramificăm ca mai sus
problema (PL1) în raport cu variabila x2 obţinând problemele:

 ( 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:

A11 ∩ A12 = ∅ şi A = A11 ∪ A12 ∪ A 2

În principiu, ramificarea poate continua de la oricare din problemele PL11, PL12


sau PL2, condiţia de ramificare fiind aceea ca programul în cauză să fie
compatibil iar soluţia sa optimă să fie fracţionară. De notat că ramificarea unei
probleme se poate face în mai multe moduri în funcţie de alegerea variabilei a
cărei valoare este fracţionară. Iată două din ele mai des folosite:

- ramificarea se face după prima variabilă cu valoare fracţionară în


soluţia optimă curentă.
7. Aplicaţie la programarea în numere întregi 139

- ramificarea se face după variabila care, în soluţia optimă curentă, are


cea mai mare parte fracţionară.

Am putea vizualiza acest proces de ramificare printr-un arbore T ale


cărui noduri sunt diferitele probleme rezultate, ca în figura 7.4.1. Nodurile
terminale ale acestui arbore sunt fie probleme incompatibile, fie probleme cu

soluţii optime întregi. Fiecare nod are un unic "predecesor" şi - dacă nu este
nod terminal - doi "succesori".

Chestiunea fundamentală este cum conducem acest proces de


ramificare pentru a găsi soluţia optimă x0. Pentru aceasta introducem o
variabilă zCMB şi o "locaţie" xCMB; în orice moment al derulării procesului de
ramificare xCMB va reţine Cea Mai Bună soluţie admisibilă întreagă găsită până
în acel moment iar zCMB va fi valoarea obiectivului problemei (P) în xCMB.
PL

x1 ≤  x 1  ∗
x1 ≥  x1  +1

PL1 PL2

∗1
x2 ≤  x 2  ∗1
x2 ≥  x 2  +1
PL11 PL12

Figura 7.4.1

La start zCMB = - ∞ şi xCMB = ∅ (locaţia vidă). Fiecare nod PLα -


unde α este o succesiune de 1 şi 2 ! - va avea ataşată o “margine superioară“
zα reprezentată prin rotunjirea întreagă inferioară a optimului problemei PLα.
Este clar că dacă x 0 este o soluţie admisibilă pentru PLα atunci:

zCMB ≤ f( x 0 ) ≤ zα
140 I. PROGRAMARE LINIARA

Să notăm că în procesul efectiv de ramificare arborele T nu există de la bun


început! La start el se reduce la “rădăcina” (PL) şi în continuare primeşte noi
noduri şi muchii de legătură în funcţie de problemele rezultate prin ramificare
şi efectiv rezolvate. Să presupunem că suntem în nodul (PLα) al arborelui T.
Rezolvăm problema (PLα). Exceptând problema iniţială (PL), celelalte vor fi
rezolvate prin postoptimizare, adăugând la problema “predecesor” una din
restricţiile (7.4.1). Dacă (PLα) este compatibilă fie x∗α soluţia sa optimă şi
zα

marginea superioară definită mai sus. Dacă (PLα) este incompatibilă vom
punezα = - ∞. Sunt posibile mai multe situaţii:

1) zα ≤ zCMB .În acest caz este inutil să continuăm procesul de


ramificare din nodul (PLα) deoarece orice soluţie admisibilă întreagă a
problemei (PLα) nu este “mai bună“ decât xCMB. Nodul (PLα) se declară
“mort” şi ne întoarcem în unicul predecesor al acestuia din arborele T.

2) zα > zCMB. Două cazuri se pot întâmpla:

2.1) Soluţia optimă x∗α a problemei (PLα) este întreagă.Actualizăm:

xCMB = x∗α , zCMB =zα

după care revenim în unicul predecesor al nodului (PLα) din arborele T.

2.2) Soluţia optimă x∗α are componente fracţionare. Putem fi într-


una din următoarele situaţii:

2.2.1) Problema (PLα) este cercetată pentru prima oară. În


acest caz alegem o variabilă, fie ea xj, a cărei valoare optimă x ∗j α este
fracţionară. Adăugăm la (PLα) restricţia xj ≤  x ∗j α  obţinând problema (PLα1) şi
reoptimizăm. Arborele T primeşte un nou nod (PLα1) şi o muchie de legătură
care uneşte (PLα) cu (PLα1). Spunem că ne-am deplasat din (PLα) “pe ramura
din stânga”.

2.2.2) Problema (PLα) a fost rezolvată într-o fază anterioară şi


ramificată deja după o anumită variabilă, să zicem xj .Dacă numai problema
(PLα1) a fost rezolvată atunci se trece la rezolvarea problemei (PLα2), obţinută
7. Aplicaţie la programarea în numere întregi 141
∗α
din (PLα) prin adăugarea restricţiei xj ≤  x  +1. Arborele T primeşte un
j

nou nod (PLα2) şi o muchie de legătură între (PLα) şi (PLα2). Spunem că am


înaintat din nodul (PLα) “pe ramura din dreapta”.Dacă ambele probleme (PLα1)
şi (PLα2) rezultate din ramificarea lui (PLα) sunt deja rezolvate declarăm nodul
(PLα) “mort” şi ne întoarcem în unicul său predecesor din arborele T.

Este clar acum că procedura se încheie în momentul în care rădăcina


(PL) a arborelui T este declarată nod mort. Să mai observăm că de fiecare dată

când se “înaintează“ în T dintr-un anumit nod se merge mai întâi pe ramura


“din stânga” şi apoi pe cea “din dreapta”.

Dacă mulţimea soluţiilor admisibile ale problemei relaxate (PL) este


mărginită (fapt care poate fi asigurat cel puţin în aplicaţiile practice) atunci
algoritmul este convergent în sensul că într-un număr finit de paşi - înaintări şi
retrageri în arborele T - se obţine fie soluţia optimă întreagă a problemei
originale fie concluzia că ea este incompatibilă, adică nu are soluţii admisibile
întregi.

Principalul dezavantaj al algoritmului constă în faptul că volumul de


calcule creşte exponenţial o dată cu dimensiunile problemei; ca urmare, el nu
poate fi aplicat decât în cazul unor probleme de “talie” mică. Pentru
problemele practice, caracterizate în general prin dimensiunile lor
impresionante, se utilizează proceduri euristice care, fără a determina soluţia
optimă, furnizează soluţii acceptabile cu un efort de calcul rezonabil.

Algoritmul descris este o specializare a unei metode mai generale


denumită Branch and Bound (ramifică şi mărgineşte) şi folosită la rezolvarea
problemelor de optimizare combinatorială. Specific problemelor
combinatoriale este numărul finit de soluţii admisibile, relativ uşor de
construit.În ciuda acestui fapt, ele fac parte din categoria problemelor grele
deoarece, de regulă, numărul soluţiilor admisibile este imens, practic
impredictibil, chiar şi în cazul unor probleme de dimensiuni modeste.
142 I. PROGRAMARE LINIARA
În principiu, metoda Branch & Bound “ramifică“, adică partiţionează
mulţimea finită a soluţiilor admisibile ale unei probleme combinatoriale în
părţi mai mici pe care “mărgineşte”, aceasta însemnând optimizarea funcţiei
obiectiv pe fiecare din părţile rezultate. Unele din aceste părţi sunt ramificate şi
mărginite în continuare ; nu sunt ramificate acele părţi care în mod sigur nu
conţin soluţia optimă a problemei! Ideea metodei este deci de a găsi soluţia
optimă fără a inspecta toate soluţiile admisibile.

Exemplul 7.4.1 Vom aplica procedura descrisă următorului program


liniar în numere întregi:

 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

Ne amintim că relaxata acestui program a fost studiată în exemplul 6.5.2 unde


se punea problema maximizării profitului firmei X cu condiţia ca producţia
bunului A3 să reprezinte cel puţin 8% din valoarea întregii producţii. Soluţia
optimă găsită acolo nu era acceptată deoarece avea componente fracţionare. Ne
propunem acum să determinăm combinaţia optimă cu componente întregi
utilizând algoritmul descris mai sus cu precizarea că ramificarea se va face
după variabila cu cea mai mare parte fracţionară în soluţia curentă.

Iniţializare: Rezolvăm programul relaxat (PL) obţinut din (P) prin


omiterea condiţiei de integritate impusă varibilelor x1, x2, x3.(Operaţia a fost
deja făcută în exemplul 6.5.2, prin postoptimizare). Rezultă soluţia optimă:

x1 = 3,889 x2 = 42,222 x3 = 6,667 (max)f = 298,889

Iniţializăm arborele T prin rădăcina sa (PL) căreia îi ataşăm marginea


superioară z = 298 = 298,889 (nici o soluţie admisibilă întreagă nu poate
oferi obiectivului f o valoare mai mare!). Punem zCMB = - ∞ şi xCMB = ∅.

Notă: În forma sa finală, arborele T este vizualizat în fig. 7.4.2.


Cititorul este invitat să urmărească etapele ce vor fi parcurse pe această figură
7. Aplicaţie la programarea în numere întregi 143
şi mai mult, este îndemnat să reconstituie “în dinamică“ construcţia
arborelui, urmărind indicaţiile date în cuprinsul iteraţiilor.

Iteraţia 1. Avem z > zCMB. Ramificăm (PL) după variabila x1 a cărei


valoare în soluţia optimă curentă are cea mai mare parte fracţionară. Rezolvăm
problema (PL1), rezultată din (PL) prin adăugarea restricţiei x1 ≤ 38. Se obţine
soluţia, deasemeni fracţionară:

x1 = 38 x2 = 42,400 x3 = 7,200 (max)f = 298,000

Arborele T primeşte nodul (PL1) şi o muchie de legătură cu predecesorul (PL).


Ataşăm nodului (PL1) marginea superioară z1 = 298.

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:

x1 = 38 x2 = 42 x3 = 7,333 (max)f = 296,667

Introducem în T nodul (PL11), muchia de legătură cu predecesorul (PL1) şi


marginea superioară z11 = 296.

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:

xCMB = (38, 42, 7) zCMB = f(xCMB) = 296

Nodul (PL111) se declară mort şi ne întoarcem în predecesorul (PL11). Vom


adăuga acum la (PL11) restricţia x3 ≥ 8. Noua problemă (PL112) furnizează o
nouă soluţie admisibilă întreagă a problemei originale (P):

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ă:

x1 = 37,357 x2 = 43 x3 = 6,643 (max)f = 297,357

Completăm arborele T cu nodul (PL12) şi cu muchia de legătură


corespunzătoare. Ataşăm nodului proaspăt inclus marginea superioară z12 =
297.

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 = 27,500 x2 = 43 x3 = 6 (max)f = 266,500

Introducem în T nodul (PL121) pe care-l legăm de predecesorul său (PL12).


Deoarece z121 = 266 < 296 = zCMB orice soluţie admisibilă întreagă a
problemei (PL121) este mai “slabă“ decît xCMB. Ca urmare, abandonăm nodul
(PL121) şi ne întoarcem în nodul (PL12). Efectuăm o “înaintare spre dreapta” în
arborele T rezolvând problema (PL122) obţinută din (PL12) prin extindere cu
restricţia x3 ≥ 7. Se găseşte o soluţie admisibilă întreagă mai bună decât actuala
xCMB:

x1 = 37 x2 = 43 x3 = 7 (max)f = 297

Drept care, facem actualizarea:

xCMB = (37, 43, 7) zCMB = f(xCMB) = 297

şi ne întoarcem în nodul (PL12), de acolo în nodul (PL1), ajungând în final în


rădăcina (PL) a arborelui T. Construim problema (PL2), adăugând la (PL)

restricţia x1 ≥ 39 (vezi iteraţia 1). Prin reoptimizare se obţine soluţia


fracţionară:
7. Aplicaţie la programarea în numere întregi 145
x1 = 39 x2 = 42,034 x3 = 6,655 (max)f = 298,445

Arborele T primeşte nodul (PL2) cu marginea superioară z2 =298.

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ă:

x1 = 45,500 x2 = 31 x3 = 6 (max)f = 272,500

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

Întorcându-ne în rădăcina (PL), constatăm că nici o ramificare nu mai


este posibilă.În concluzie soluţia optimă întreagă a problemei originale (P) este
actuala xCMB, adică:

x10 = 37 x 20 = 43 x 30 = 7 (max) f = zCMB = 297

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 general, într-o problemă de optimizare se urmăreşte maximizarea sau


minimizarea unei funcţii numerice în condiţiile satisfacerii unui sistem de
restricţii. În aplicaţiile economice restricţiile formalizează o serie de condiţii
cum ar fi: încadrarea consumurilor în stocurile disponibile, realizarea
profiturilor prognozate, menţinerea costurilor de producţie sub un anumit
plafon, utilizarea cât mai deplină a forţei de muncă, asigurarea unei producţii
diversificate, menţinerea şi extinderea pieţelor de desfacere etc. Oricare din
aceste condiţii este în realitate un “obiectiv” pe care planificatorul doreşte să-l
realizeze. Fiecărui obiectiv i se fixează o anumită limită sub care nu trebuie să
coboare sau care trebuie depăşită (uneori, chiar două limite - inferioară şi
superioară - între care trebuie să se situeze).
De obicei, unul din aceste obiective este lăsat “liber” - adică neplafonat
- urmărindu-se determinarea unei “soluţii” care să atingă celelalte obiective şi
să asigure celui ales cea mai mare sau, după caz, cea mai mică valoare.Acest
punct de vedere nu este întotdeauna realist. Adeseori, problemele curente ale
conducerii activităţilor economice reclamă urmărirea “simultană” a mai multor
obiective şi în consecinţă determinarea unei soluţii prin care toate acestea să fie
realizate. În majoritatea cazurilor însă, este imposibilă obţinerea unei asemenea
soluţii.

În acest context, programarea scop îşi propune să determine o soluţie


care să se apropie “cât mai mult” de obiectivele fixate, în sensul minimizării
totalului “abaterilor”. Există două modalităţi curente de a realiza acest
deziderat.

În programarea scop nepreemtivă tuturor obiectivelor li se acordă


aceeaşi importanţă. În programarea scop preemtivă obiectivele sunt mai întâi
clasificate pe nivele de prioritate. Obiectivele de primă importanţă vor fi
urmărite cu prioritate şi numai după aceea vor fi avute în vedere obiectivele de
importanţă secundară etc.

8.1 Programarea scop nepreemtivă

Să considerăm sistemul restricţiilor unui program liniar oarecare


(pentru simplitate în formă standard):

n
∑ aij x j = bi i = 1,..., m (8.1.1)
j =1
148 PROGRAMARE LINIARA

unde xj ≥ 0 j=1,…,n

Presupunem că (8.1.1) modelează o firmă cu n activităţi productive,


planificatorul urmărind realizarea simultană a m obiective şi mai precis,
determinarea unei soluţii care să atingă “ţelurile” b1, b2,…,bm fixate acestora.
Deoarece lucrăm în ipotezele uzuale de liniaritate, constantele ai1, ai2,…,ain
reprezintă “contribuţiile” unitare ale celor n activităţi productive la realizarea
obiectivului i. După cum s-a specificat şi în introducere nu întotdeauna se poate
găsi o soluţie care să atingă toate ţelurile propuse, altfel spus, este posibil ca
sistemul (8.1.1) să nu aibe soluţii nenegative.

Plecând de la caracterul “orientativ” al ţelurilor fixate pentru obiective,


programarea scop admite nesatisfacerea în totalitate a ecuaţiilor (8.1.1)
introducând pe de altă parte anumite “penalizări” în ceeace priveşte abaterea
de la egalitate. În noul context, se urmăreşte găsirea unei soluţii a sistemului
(8.1.1) care să satisfacă “cât mai bine” ecuaţiile sale în sensul minimizării
sumei penalizărilor cauzate de neîndeplinirea unora din ele.
Pentru a formaliza ideile de mai sus introducem în egalităţile (8.1.1)
variabilele y1, y2,…,ym fără restricţii de semn:

n
∑ aij x j + yi = bi i = 1,..., m (8.1.2)
j =1

Dacă x = ( x1 , x2 ,..., xn ) reprezintă un set de nivele posibile ale activităţilor


firmei, diferenţa:

n
yi = bi − ∑ a ij x j
j =1

va fi o măsură a “neîndeplinirii ţelului” bi fixat pentru obiectivul i:

n
- dacă yi < 0 atunci ∑ aij x j > bi ; spunem în acest caz că x
j =1

“depăşeşte” ţelul propus;

n
- dacă yi > 0 atunci ∑ aij x j < bi ; în acest caz vom zice că x “nu
j =1

atinge” ţelul fixat;


8. Programarea scop 149

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:

yi = yi+ − yi− (8.1.3)

în care yi+ , yi− sunt partea pozitivă respectiv partea negativă a variabilei yi,
mărimi definite prin:

 yi daca yi > 0  0 daca yi ≥ 0


yi+ =  yi− =  (8.1.4)
 0 daca yi ≤ 0 − yi daca yi < 0

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.

Cu observaţia finală că obiectivele nu sunt ierarhizate în prealabil pe


nivele de prioritate, programarea scop nepreeemtivă îşi propune să determine
un vector x∗ = ( x1∗ , x2∗ ,..., xn∗ ) care să minimizeze suma:

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:

xj ≥ 0 j=1,…,n ; yi+ ≥ 0 , yi− ≥ 0 i=1,…,m (8.1.7)

În cele de mai sus restricţiile originale (8.1.1) au fost presupuse egalităţi şi ca


urmare a fost penalizată atât “lipsa” cât şi “excesul”.

Dacă din anumite motive nu putem accepta depăşirea ţelului bi


(respectiv neatingerea lui) vom pune pi− = M (respectiv pi+ = M) unde M
150 PROGRAMARE LINIARA

este o constantă pozitivă foarte mare (aceasta înseamnă practic transformarea


variabilei yi− respectiv yi+ în variabilă “artificială”).

Să presupunem acum că restricţia i din (8.1.1) este în fapt o inegalitate


n
de tipul ∑ a ij x j ≤ b i , fapt care sugerează că bi este o "limită superioară" a
j =1

obiectivului corespunzător.Ţinând seama de (8.1.3) şi (8.1.4) nu vom penaliza


"neatingerea" ţelului bi , punând în consecinţă p i+ = 0 . Dacă din contră, bi ar fi
n
o "limită inferioară" a obiectivului i, deci am avea inegalitatea ∑ a ij x j ≥ b i ,nu
j =1

vom penaliza "depăşirea" lui bi , punând în consecinţă p = 0 .
i

Vom observa în final că soluţia x* depinde nemijlocit de alegerea


penalizărilor p i+ şi p i− .

Exemplul 8.1.1 Conducerea firmei X are în vedere trei noi produse


care vor înlocui modelele curente. Ea a trasat copartimentului de C.O. sarcina
de a stabili combinaţia în care vor fi realizate noile bunuri, urmărind
obiectivele:

- realizarea unui profit de cel puţin 125 milioane $;


- menţinerea în activitate a celor 4000 de angajaţi actuali;
- menţinerea volumului investiţiilor sub plafonul de 55 milioane $;

"Contribuţiile" noilor bunuri la atingerea obiectivelor sus amintite sunt direct


proporţionale cu "nivelele" la care sunt produse (cu alte cuvinte se va lucra în
ipotezele uzuale de liniaritate); ele sunt indicate în tabelul 8.1.1.
Conştient de faptul că este posibil ca toate cele trei obiective să nu
poată fi îndeplinite simultan, directorul executiv a examinat cu specialiştii
departamentului diferite modalităţi de obţinere a unei soluţii "de compromis".
Astfel s-a convenit o penalizare de 5 unităţi valorice pentru nerealizarea
profitului scontat (per milion $), 2 unităţi valorice pentru depăşirea numărului
actual de angajaţi şi 4 unităţi pentru diminuarea sa (per suta de angajaţi)

precum şi 3 unităţi valorice pentru depăşirea plafonului investiţional (per


milion $).

Notă: valoarea "penalizărilor este mai puţin importantă; ceeace


contează sunt raporturile dintre ele. Astfel, conducerea firmei nu agreează o
8. Programarea scop 151

modificare a numărului de angajaţi, dar dacă aceasta nu poate fi evitată, ar


prefera să angajeze noi lucrători decât să disponibilizeze o parte a personalului
actual. În opinia directorului executiv, cel mai important obiectiv rămâne
realizarea profitului scontat. Ar urma grija de a nu recurge la concedieri şi în
fine cerinţa de a respecta plafonul de investiţii stabilit.

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

În cazul de faţă, programarea scop nepreemtivă propune rezolvarea următorului


program liniar:

 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

(vezi modelul general (8.1.5) - (8.1.7))

Luând ca variabile bazice iniţiale y 1+ , y 2+ , y 3+ , în trei iteraţii se găseşte


următoarea combinaţie în care vor fi produse noile bunuri:

x 1∗ = 25 3 x ∗2 = 0 x ∗3 = 5
3

Soluţia găsită asigură realizarea profitului scontat ( y 1+ = y 1− = 0) şi menţine


investiţia la nivelul plafonului impus ( y 3+ = y 3− = 0 ) dar necesită noi angajări
de personal (deoarece y 2− = 253 ⋅ 100 ≈ 833 angajaţi). Penalizarea pentru abaterea
de la ţelurile propuse are în acest caz valoarea minimă w ∗ = 50 3 .
152 PROGRAMARE LINIARA

8.2 Programarea scop preemtivă

În exemplul precedent toate obiectivele au fost presupuse a avea cam


aceeaşi importanţă. Există situaţii în care unul sau mai multe obiective se
detaşează net în importanţă faţă de celelalte şi în consecinţă realizarea lor va fi
urmărită cu prioritate. La rândul lor, obiectivele rămase pot fi şi ele împărţite
pe grupe de prioritate: a doua prioritate, a treia ş.a.m.d. Principiul programării
scop preemtive este următorul:

Din mulţimea soluţiilor care realizează (cel mai bine) obiectivele cu


prioritatea unu se selectează soluţiile care se apropie “cel mai mult” de
obiectivele cu prioritatea doi ş.a.m.d., obiectivele cu aceeaşi prioritate fiind
tratate ca în cazul programării scop nepreemtive. Dacă la o anumită etapă a
acestei cercetări secvenţiale rezultă o singură soluţie ea va fi acceptată fără a
mai lua în considerare şi eventualele obiective rămase.

Exemplul 8.2.1 După cum am văzut soluţia găsită în exemplul 8.1.1


recomanda creşterea numărului de angajaţi cu mai mult de 20%. Procentul este
mult prea mare, crede directorul executiv care consideră că este foarte probabil
ca necesitatea creşterii forţei de muncă să aibe un caracter temporar. Astfel,
angajarea unui mare număr de persoane pe perioade relativ scurte ar implica
cheltuieli de instruire nerecuperabile în bună măsură iar pe de altă parte, prin
operarea unor concedieri masive, firma ar putea întâmpina în viitor dificultăţi
în angajarea unor specialişti cu înaltă calificare.

Din aceste motive, directorul executiv este de părere că nedepăşirea


numărului actual de angajaţi trebuie să devină un obiectiv cu prioritate
maximă. Aceeaşi importanţă, spune el, va trebui acordată şi menţinerii
investiţiei de capital pentru noile produse în limita plafonului de 55 mil.$.

În acest fel, obiectivele avute în vedere în exemplul 8.1.1 au fost


împărţite în două grupe. În grupa obiectivelor cu prioritatea unu au fost incluse:
nedepăşirea numărului actual de angajaţi şi menţinerea investiţiei de capital sub
plafonul fixat, în grupa obiectivelor cu prioritatea doi rămânând realizarea unui
profit de cel puţin 125 mil.$ şi evitarea micşorării numărului actual de angajaţi.
(vezi tabelul 8.2.1)
8. Programarea scop 153

Nivel de Obiectiv Ţel Penalizare


prioritate (pentru neîndeplinire)
unu Utilizarea forţei de muncă ≤ 40 2 (+)
Investiţia de capital 3 (+)
≤ 55
doi Profit ≥ 125 5 (-)
Utilizarea forţei de muncă 4 (-)
≥ 40

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−

(pentru a facilita comparaţia cu modelul “nepreemtiv” au fost folosite notaţiile


din exemplul 8.1.1).

Se constată imediat că problema are o infinitate de soluţii în care


y = y 3− = 0 (implicând min w1 = 0).

2

În a doua etapă vom avea în vedere obiectivele cu prioritatea doi;


pentru aceasta rezolvăm modelul:
154 PROGRAMARE LINIARA

 + −
 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

După cum se vede variabilele y 2− şi y 3− au fost omise pentru a se asigura


îndeplinirea obiectivelor cu prioritatea unu.

Rezultă soluţia : x1∗∗ = 5 x 2∗∗ = 0 x 3∗∗ = 15 4 .

Pe lângă obiectivele din prima grupă această soluţie realizează şi menţinerea


numărului de angajaţi. În schimb, profitul care s-ar obţine va fi mai mic cu
y1+ = 35 4 = 8,75 mil.$ decât cifra planificată iniţial.
CAPITOLUL II

PROBLEME DE OPTIMIZARE IN RETELE DE TRANSPORT SI


DISTRIBUTIE

1.Modelarea problemelor de transport şi distribuţie

Într-o mare varietate de contexte se pune problema deplasării unei


cantităţi Q ce poate fi materie, energie, informaţie, etc. din unele locuri numite
surse în alte locuri numite destinaţii, această deplasare realizându-se pe
anumite rute de legătură. Unităţile indivizibile ale cantităţii Q care se
deplasează de-alungul rutelor se vor numi unităţi de flux.

1.1 O clasificare a problemelor de transport şi distribuţie

Pentru Cercetarea Operaţională, problema enunţată va prezenta interes


numai dacă respectă următoarele ipoteze:

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

Ansamblul surselor, destinaţiilor, al punctelor intermediare şi al rutelor


de legătură se va numi reţea de transport; el se identifică cu un graf neorientat
sau parţial orientat ca în figura 1.1.1.

b) Unele rute de legătură pot avea limitări superioare şi / sau


inferioare pentru volumul unităţilor de flux ce se deplasează într-un sens sau
altul. Aceste limitări poartă numele de capacităţi (inferioare, respectiv
superioare) În continuare, vom avea în vedere numai cazul în care toate
capacităţile inferioare sunt egale cu zero, capacităţile superioare fiind
exprimate prin numere pozitive.

c) Există un cost al deplasării unei unităţi de flux de la un punct al


reţelei la altul,cost care poate fi exprimat în bani, timp sau distanţă. Sunt
situaţii în care acest cost poate semnifica profitul obţinut de pe urma
deplasării. Pe aceeaşi rută, costurile ce şi capacităţile pot diferi în funcţie de
sensul de parcurgere.

Ipoteza a) va fi întotdeauna presupusă în timp ce ipotezele b) şi c) pot


fiinţa separat sau simultan.

1) În prezenţa ipotezei c) şi absenţa condiţiei b) se pune problema


deplasării cantităţii de flux Q de la surse la destinaţii la un cost total minim.
Dacă sursele sunt în legătură directă cu destinaţiile obţinem problema clasică
de transport, care va face obiectul secţiunilor imediat următoare. Cazul
general, în care exisă şi puncte intermediare, este cunoscut sub numele de
problema transferului şi va fi prezentat în secţiunea 4. În cazul particular al
unei singure surse s, al unei singure destinaţii t şi a unei singure unităţi de flux
se obţine problema drumului de cost minim de la s la t.

2) În prezenţa ipotezei b) şi absenţa ipotezei c) se pune problema dacă


reţeaua , ale cărei rute sunt capacitate, este capabilă să permită acoperirea
integrală a cererilor în punctele de destinaţie. Pentru aceasta, se va rezolva
problema determinării volumului maxim Q* de unităţi de flux ce pot fi
deplasate de la surse la destinaţii. Dacă Q* < Q vor exista destinaţii a căror
cerere este acoperită doar în parte şi atunci se ridică problema măririi
capacităţii de transfer a reţelei. Am descris succint problema fluxului maxim.

3) În prezenţa simultană a ipotezelor b) şi c) se pune problema


satisfacerii cererilor în punctele de destinaţie la un cost de transport minim.
Ca şi în cazul precedent vom avea în vedere o problemă modificată: vom
determina mai întâi cantitatea maximă de flux ce poate fi deplasată de la surse
1. Modelarea problemelor de transport şi distribuţie 157
la destinaţii şi apoi modul de organizare al deplasării astfel încât costul
operaţiei să fie minim. Aceasta este problema fluxului (maxim) de cost minim.

În secţiunile următoare ne vom ocupa numai de problema clasică de


transport şi de generalizarea ei, problema de transfer; ele vor fi privite ca
probleme de programare liniară cu o structură specială şi rezolvate prin
metodele programării liniare. Celelalte probleme identificate vor fi tratate în
cuprinsul altei lucrări.

1.2 Problema clasică de transport. Problema de transport


echilibrată (PTE)

Un produs omogen (de exemplu bere) se află disponibil în localităţile


F1, F2, ..., Fm în cantităţile a1, a2, ..., am şi este cerut pentru consum în centrele
C1, C2, ..., Cn în cantităţile b1, b2, ..., bn. Se presupune cunoscut costul cij al
transportului unei unităţi de produs de la Fi la Cj. Se pune problema satisfacerii
cererii în punctele de consum la un cost total de transport minim.
Centrele furnizoare, centrele consumatoare, legăturile directe între ele şi
costurile unitare de transport sunt vizualizate de obicei printr-un graf orientat
ca în figura 1.1.1 a).

Evident, o condiţie necesară şi suficientă pentru existenţa unei soluţii a


problemei formulate este ca totalul cantităţilor disponibile să acopere totalul
cererilor:
m n
∑ ai ≥ ∑ b j (1.2.1)
i =1 j =1

În continuare, condiţia (1.2.1) va fi presupusă îndeplinită. Vom presupune


deasemenea că :

ai > 0, i = 1,...,m şi bj > 0, j = 1,...,n.

Dacă notăm cu xij cantitatea livrată de furnizorul Fi consumatorului Cj,


modelul matematic al problemei (clasice) de transport este:

(PT) Să se determine ( xij∗ ) i = 1,..., m , j = 1,..., n care satisfac


restricţiile:
n
∑ xij ≤ ai i = 1,...,m (1.2.2)
j =1
158 II. PROBLEME DE OPTIMIZARE IN RETELE DE TRANSPORT SI DISTRIBUTIE
m
∑ xij ≥ b j j = 1,...,n (1.2.3)
i =1

condiţiile de nenegativitate:

xij ≥ 0 1 = 1,..., m j = 1,..., n

şi care minimizează fincţia obiectiv:


m n
f = ∑ ∑ cij xij (1.2.4)
i =1 j =1

Inegalităţile (1.2.2) exprimă cerinţa ca totalul livrărilor fiecărui furnizor


să se încadreze în disponibil; inegalităţile (1.2.3) arată că cererea fiecărui
consumator trebuie să fie acoperită prin totalul cantităţilor primite; în fine,
(1.2.4) este expresia costului total al transportului.

Vom spune că problema de transport (PT) este echilibrată dacă:


m n
∑ ai = ∑ b j (1.2.5)
i =1 j =1

Se observă imediat că (1.2.5) atrage după sine satisfacerea cu egalitate a


restricţiilor (1.2.2) şi (1.2.5). Prin urmare, modelul matematic al unei probleme
de transport echilibrate este:

 ∑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

Remarcăm faptul că (PTE) este o problemă de programare liniară în formă


standard, cu m + n restricţii şi mn variabile.

Se arată uşor că matricea A a coeficienţilor sistemului de restricţii din


(PTE), care apare în tabelul 1.1.1, are rangul m + n - 1. Aceasta înseamnă că în
1. Modelarea problemelor de transport şi distribuţie 159
sistemul (1.2.6) - (1.2.7) putem elimina o ecuaţie fără ca mulţimea soluţiilor
admisibile să se modifice. În consecinţă:

Orice soluţie de bază a problemei (PTE) are cel mult m + n - 1 componente


nenule.

O soluţie de bază a problemei (PTE) se va numi nedegenerată dacă are


exact m + n - 1 componente nenule; altminteri, ea se va zice degenerată.

În continuare, vom presupune că orice soluţie a problemei (PTE) este


nedegenerată. Cazul în care (PTE) are şi soluţii degenerate va fi analizat în
secţiunea 2.5.
x11 ...x1j... x1n .......... xi1 ...xij... xin ........... xm1 ...xmj... xmn
.
1 1 ....1... 1 0 ....0... 0 0 .....0.... 0
.
M
i 0 ....0... 0 1 ....1... 1 0 .....0.... 0
M
m 0 ....0... 0 0 ....0... 0 1 .....1.... 1
1 1 ....0... 0 1 ....0... 0 1 .....0.... 0
M
j 0 ....1... 0 0 ....1... 0 0 .....1.... 0
.
M
n 0 ....0... 1 0 ....0... 1 0 .....0.... 1
.

Tabelul 1.1.1

1.3 Câteva elemente de teoria grafurilor

În secţiunea 1.1 am vizualizat elementele unei reţele de transport printr-


un desen compus din puncte şi arce care unesc unele din aceste puncte (vezi
figura 1.1.1). Un asemenea desen constituie forma uzuală de prezentare a unui
concept deosebit de important, atât în sine cât şi pentru studiul unei
impresionante varietăţi de probleme din cele mai diverse domenii,domeniul
economic fiind prioritar.
Am socotit deci necesar să includem în lucrare câteva elemente
privitoare la conceptul de graf, căci despre el este vorba. Aceste elemente vor
fi foarte utile pentru înţelegerea consideraţiilor teoretice dezvoltate în legătură
cu
160 II. PROBLEME DE OPTIMIZARE IN RETELE DE TRANSPORT SI DISTRIBUTIE
rezolvarea problemei de transport şi deasemenea constituie cadrul natural de
abordare şi a celorlalte probleme amintite în clasificarea dată în secţiunea
precedentă.

Un graf este un cuplu G = (V,E) format dintr-o mulţime nevidă V, ale


cărei elemente se numesc vârfuri sau noduri şi o mulţime E de elemente, zise
muchii, cu proprietatea că fiecărei muchii e ∈ E îi sunt asociate două noduri x,
y ∈ V, nu neapărat distincte, numite extremităţile muchiei e. Un subgraf al
grafului G = (V,E) este un graf G’ = (V’,E’) în care V’ ⊆ V, E’ ⊆ E şi orice
muchie e∈ E’ are aceleaşi extremităţi atât în G‘ cât şi în G.

După cum se vede, definiţia generală nu exclude existenţa muchiilor cu


o singură extremitate (aceste muchii se numesc bucle), nici existenţa mai
multor muchii cu aceleaşi extremităţi (figura 1.3.1 a)

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.

În continuare, vom avea în vedere în exclusivitate grafuri finite şi


simple aşa cum este cel reprezentat grafic în figura 1.3.1 b).

Fie e = {x, y} o muchie a grafului G = (V,E); extremităţile sale pot fi


ordonate în două moduri: (x, y) şi (y, x). Cele două perechi se numesc rute
orientate sau arce generate de muchia subiacentă e; spunem că arcul (x, y) are
extremitatea iniţială x şi extremitatea finală y şi că (y, x) este arcul opus lui
(x, y). A orienta muchia {x, y} înseamnă a alege unul din arcele (x, y)
sau
1. Modelarea problemelor de transport şi distribuţie 161
(y, x); dacă a fost ales arcul (x, y) vom spune că (x, y) este un arc permis şi că
arcul (y, x) este blocat. Dacă o asemenea alegere nu a fost făcută vom spune că
muchia {x, y} este neorientată. În acest caz, convenim ca ambele arce (x, y) şi
(y, x), generate de muchia {x, y}, să fie considerate permise. În fine, a da o
orientare în graful G înseamnă a orienta unele din muchiile sale; orientarea
poate fi totală sau parţială după cum toate muchiile grafului au fost orientate
sau numai o parte din ele. Este clar că în acelaşi graf G pot fi date mai multe
orientări; dacă G are m muchii, atunci există 2m orientări totale diferite ale
acestuia!
Un graf orientat (parţial orientat, neorientat) este un graf în care s-a
dat o orientare totală ( o orientare parţială, respectiv nu s-a dat nici o orientare);
de exemplu, graful din figura 1.1.1 a) este (total) orientat iar cel din figura
1.1.1 b) numai parţial. Graful din figura 1.3.1 b) este neorientat.
În unele situaţii este util să se pună în evidenţă arcele permise ale unui graf
(parţial) orientat; realizarea grafică, intuitivă a acestei operaţii este făcută în
figura 1.3.2.
x y x y


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.

În continuare vom introduce o serie de noţiuni frecvent utilizate în


teoria grafurilor. Unele din ele se referă la muchii şi de aceea se numesc
“generic” concepte neorientate altele se referă la rutele orientate permise, drept
care se mai numesc şi concepte orientate. Vom considera un graf (finit, simplu)
G =(V,E), în care (eventual) s-a dat o orientare pe unele din muchii (posibil pe
toate).

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 ciclu este un lanţ ale cărui extremităţi coincid.

În figura 1.3.1 b) succesiunile de noduri λ = (x, y, t, u, v) şi λ‘ = (x, z, y, t, z, v)


sunt lanţuri: λ este un lanţ simplu de lungime 4 în timp ce λ‘ are lungimea 5 şi
nu este simplu. Succesiunea µ = (x, y, t, u, x) este un ciclu de lungime 4.

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.

Graful G = (V,E) se zice conex dacă oricare două noduri ale


sale sunt extremităţile unui lanţ. Dacă G nu este conex, există partiţiile V =
V1∪V2∪....∪Vs şi E = E1∪E2∪....∪Es astfel încât G1 = (V1,E1) , G2 = (V2,E2) ,
..., Gs = (Vs,Es) sunt grafuri conexe. Subgrafurile G1, G2,...., Gs se numesc
componentele conexe ale grafului G. Graful din figura 1.3.2 este conex (ca şi
cele din figurile anterioare); graful din figura 1.3.3 are trei componente conexe.

Graful G = (V,E) se Graful G G2


numeşte bipartit dacă mulţimea
nodurilor sale poate fi
descompusă în două submulţimi G3
G1
nevide şi disjuncte S şi T, astfel
încât orice muchie din G are o
extremitate în S şi cealaltă în T.

Este clar că graful asociat


unei probleme clasice de
transport este bipartit, nodurile Figura 1.3.3
care reprezintă furnizorii
formând mulţimea S iar nodurile corespunzătoare consumatorilor alcătuind
mulţimea T.
1. Modelarea problemelor de transport şi distribuţie 163

Calitatea unui graf de a fi S T


bipartit nu depinde de modul particular a b a b
de reprezentare aşa cum arată exemplul ⇒
din figura 1.3.4. O caracterizare
completă a grafurilor bipartite este c d d c
oferită de următoarea teoremă:

Un graf este bipartit dacă şi Figura 1.3.4


numai dacă nu conţine cicluri de
lungime impară (altfel spus, orice ciclu al său are un
număr par de muchii).

Un arbore este un graf conex şi fără cicluri


(figura 1.3.5)
Orice arbore este complet caracterizat de oricare din
următoarele proprietăţi:
Figura 1.3.5
1) Orice arbore cu p noduri are p - 1 muchii.
2) Între oricare două noduri ale unui arbore există un unic lanţ de
muchii.
3) Dacă între două noduri ale unui arbore adăugăm o muchie se creează
un unic ciclu (figura 1.3.6).

*
adaugă →
* ⇒ *

**
** **

Figura 1.3.6

scoate →

Figura 1.3.7
164 II. PROBLEME DE OPTIMIZARE IN RETELE DE TRANSPORT SI DISTRIBUTIE

4) Dacă dintr-un arbore scoatem o muchie, graful se disconectează


(figura 1.3.7).

Un arbore H într-un graf G este un subgraf care - de sine stătător - este


un arbore. H se zice maximal dacă conţine toate nodurile grafului G (figura
1.3.8).

G Arbore nemaximal în G Arbore maximal în G

Figura 1.3.8

1.4 O caracterizare în termeni de grafuri a soluţiilor unei PTE

Să considerăm graful G asociat unei probleme de transport echilibrate


(PTE). Acesta are m + n vîrfuri şi deci orice arbore maximal în G va avea m +
n - 1 muchii. Să considerăm o soluţie de bază x = ( xij ) a problemei; în
secţiunea 1.2 am făcut ipoteza că ea este nedegenerată.

Se poate demonstra că cele m + n - 1 muchii {Fi, Cj}, corespunzătoare


componentelor nenule din x, formează un arbore maximal în G. Şi reciproca
se dovedeşte a fi adevărată. Fie H un arbore maximal în G; în sistemul celor m
+ n egalităţi (1.2. ) , (1.2. ) să punem xij = 0 pentru toate muchiile {Fi, Cj} care
nu sunt în H. Rămâne un sistem de m + n ecuaţii cu m + n - 1 necunoscute.
Eliminând una din ecuaţii, sistemul rămas are o unică soluţie care este o soluţie
de bază a PTE.

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

Observaţie: Orice soluţie x = ( xij ) a PTE va fi înscrisă într-un tabel


cu m rânduri, corepunzătoare furnizorilor şi n coloane corespunzătoare
consumatorilor. Tabelul va avea mn celule sau rute; celula din rîndul i şi
coloana j, notată (Fi ,Cj) sau simplu (i, j), va conţine componentaxij a
soluţieix.

Exemplul 1.4.1 Să considerăm problema de transport echilibrată


definită de următoarele date:

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:

 x11 + x12 + x13 + x14 = 15


 x 21 + x 22 + x 23 + x 24 = 17

 x 31 + x 32 + x 33 + x 34 = 18

 x11 + x 21 + x 31 = 10
 x12 + x 22 + x 32 = 12

 x13 + x 23 + x 33 = 9

 x14 + x 24 + x 34 = 19


 x ij ≥ 0


(min) f = 3x11 + 3x12 + x13 + 4 x14 + 3x 21 + 4 x 22 +
 + 3x 23 + 6 x 24 + 4 x 31 + 3x 32 + 6 x 33 + 2 x 34

166 II. PROBLEME DE OPTIMIZARE IN RETELE DE TRANSPORT SI DISTRIBUTIE

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

Reciproc, să considerăm în G următorul arbore maximal:

C1 Anulăm în sistemul restricţiilor toate variabilele xij cu


F1
proprietatea că muchiile corespunzătoare {Fi,Cj} nu
apar în arbore. Rezultă sistemul şi soluţia:
C2
 x11 + x13 = 15
 x + x = 17 x 11 = 10
F2  22 24

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

2. Adaptarea metodei simplex la rezolvarea PTE

Fiind o problemă de programare liniară, PTE se poate rezolva cu


ajutorul metodei simplex. Totuşi, algoritmul simplex va avea în acest caz o
descriere specifică datorită unei proprietăţi importante pe care o are matricea A
a coeficienţilor PTE. Într-adevăr, se poate demonstra că orice determinant
extras din A are valoarea -1 , 0 sau 1. În consecinţă, dacă disponibilele a1,
a2,..., am şi cererile b1, b2,..., bn sunt exprimate prin numere întregi, orice soluţie
de bază va avea componentele întregi şi astfel PTE va avea cel puţin o soluţie
optimă cu componente întregi.

2.1 Determinarea unei soluţii admisibile de bază iniţiale

Să considerăm următorul procedeu general de construire a unei soluţii


admisibile a PTE. Componentele ei vor fi determinate progresiv şi înscrise într-
un tabel aşa cum s-a menţionat în observaţia din secţiunea 1.4.

Iniţializare: Toate cele mn rute ale tabelului sunt considerate


neblocate.

Etapa k , k ≥ 1.

• Se alege o rută ( Fik , C jk ) dintre cele neblocate.


• Se pune xik jk = min(aik , b jk ) şi se blochează ruta aleasă. Vom spune
că pe ruta (în celula) ( Fik , C jk ) s-a făcut alocarea xik jk .
• Se actualizează:

a ik ← a ik − xik jk
b jk ← b jk − xik jk

• Dacă aik = 0 se pune xik j = 0 pe toate rutele ( Fik , C j ) , j ≠ j k încă


neblocate, după care acestea se declară blocate.
Dacă b jk = 0 se pune xijk = 0 pe toate rutele (Fi , C jk ) , i ≠ i k încă neblocate,
după care acestea se declară blocate.
• Dacă toate cele mn rute au fost blocate STOP. Altminteri, se
actualizează k ← k + 1 şi se reiau operaţiile de mai sus.
168 II. PROBLEME DE OPTIMIZARE IN RETELE DE TRANSPORT SI DISTRIBUTIE
Se constată fără dificultate că ansamblul de valori numerice x = (xij) rezultate în
urma aplicării algoritmului constituie o soluţie admisibilă a PTE; se poate
arăta că x este o soluţie de bază.

În ipoteza că valorile xij au fost trecute progresiv în tabelul menţionat


la început,este uşor de văzut că dacă la fiecare etapă se blochează fie rutele
aparţinând unui rând fie cele aparţinând unei coloane, atunci soluţia
construită are exact m + n - 1 componente nenule, altfel spus este
nedegenerată. Dacă din contră, după efectuarea unei alocări, se blochează
simultan atât rândul cât şi coloana rutei în care s-a făcut alocarea, soluţia
rezultată va fi degenerată! Vom discuta în secţiunea 2.5 ce trebuie făcut în
acest caz.

Toate metodele de generare a unei soluţii iniţiale pentru PTE au la bază


procedura de mai sus. Ele se deosebesc prin modul de alegere a rutelor
( Fi1 , C j1 ) , ( Fi2 , C j2 ) , ... .Astfel:

1) În metoda colţului de nord - vest (N - V) , prima rută aleasă este


(F1,C1). Celelalte se aleg astfel încât 1 = i1 ≤ i2 ≤ i3 ≤K şi 1 = j1 ≤ j2 ≤ j3 ≤K

2) În metoda costului (unitar de transport) minim prima rută


( Fi1 , C j1 ) aleasă corespunde celui mai mic cost unitar de transport. La etapa k,
ruta ( Fik , C jk ) corespunde celui mai mic cost unitar de transport de pe rutele
încă neblocate la această etapă.

3) Metoda diferenţelor maxime (Vogel) este o metodă mai elaborată.


Presupunem costurile unitare de transport înscrise într-un tabel cu m rânduri şi
n coloane.

• Pe fiecare rând şi pe fiecare coloană a acestui tabel se calculează


diferenţa dintre cel mai mic cost de transport şi cel imediat superior; dacă
costul minim nu este unic, diferenţa se va lua egală cu zero.
• Se identifică rândul sau coloana cu cea mai mare diferenţă şi aici, în
ruta de cost minim, se execută prima alocare din algoritmul precedent.
• Se refac diferenţele pe rândurile şi coloanele neblocate folosindu-se
numai costuri "neblocate", după care se reia procedura de alocare.

Exemplul 2.1.1 Vom genera o soluţie de bază iniţială pentru problema


de transport echilibrată din exemplul 1.4.1, folosind pe rând cele trei metode
sus amintite.

1) Prin metoda colţului N - V se obţine soluţia:


2. Adaptarea metodei simplex la rezolvarea PTE 169

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

Costul asociat acestei soluţii: f = 10 × 3 + 5× 3 + 7× 4 + 9× 3 + 1× 6 + 18× 2


=142 u.m.

2) Prin metoda costului minim rezultă soluţia:

6 (4)
9 (1)

10 (3)
6 (5)
1 (6)
Costul asociat: f = 123 u.m.
18 (2)

Tabelul 2.1.2

3) Prin metoda diferenţelor maxime se obţine soluţia:

5 (6)
9 (1)
1 (3)

10 (4)
7 (5)
Costul asociat: f = 122 u.m.
18 (2)

Tabelul 2.1.3

(Cititorul este îndemnat să refacă " în dinamică" construcţia soluţiilor de mai


sus!)

Observaţie: Metoda colţului N - V, deşi mai simplă, produce în


general soluţii cu cost mai ridicat deoarece nu ţine seama în nici un fel de
costurile unitare de transport. Celelalte metode, acordând prioritate rutelor "mai
ieftine", dau soluţii mai apropiate de soluţia optimă.
Experimentele numerice au arătat că metoda diferenţelor maxime
produce de foarte multe ori chiar soluţia optimă sau în orice caz o soluţie foarte
apropiată de aceasta, aşa încât mulţi utilizatori preferă s-o adopte ca soluţie
suboptimală.

2.2 Testarea optimalităţii unei soluţii admisibile de bază a PTE

Fie x = ( xij ) o soluţie admisibilă de bază a PTE, presupusă


nedegenerată. Obiectivul este de a găsi o condiţie pentru recunoaşterea
optimalităţii sale. Să considerăm duala problemei de transport echilibrate:
170 II. PROBLEME DE OPTIMIZARE IN RETELE DE TRANSPORT SI DISTRIBUTIE

(Q) Să se determine u ∗ = (u1∗ , u2∗ ,K , um∗ ) şi v ∗ = (v1∗ , v 2∗ ,K , v n∗ )


care maximizează funcţia:
m n
g = ∑ ai ui + ∑ b j v j
i =1 j =1

cu restricţiile:
ui + v j ≤ cij i = 1,K , m ; j = 1,K , n (2.2.1)

Teorema ecarturilor complementare (cap.I, teorema 2.3.4) arată că


soluţia x este optimă dacă şi numai dacă există (u , v ) = (u1 ,K , um , v1 ,K , v n )
care satisfac restricţiile (2.2.1) ale dualei (Q), astfel încât ( x , u , v ) să verifice
relaţiile:

xij (ui + v j − cij ) = 0 i = 1,K , m ; j = 1,K , n (2.2.2)

Să notăm cu I mulţimea rutelor (Fi,Cj) (sau mai simplu (i,j)) cu proprietatea că


xij ≠ 0 . Deoarece soluţia x a fost presupusă nedegenerată, mulţimea I are m +
n - 1 elemente. Din (2.2.2) rezultă că, pentru a fi optimă, soluţia duală (u,v )
de mai sus trebuie să verifice relaţiile:

ui + v j = cij ( ∀) (i , j ) ∈ I (2.2.3)

Să remarcăm că (2.2.3) este un sistem liniar cu m + n - 1 ecuaţii şi m + n


variabile. Deoarece I se identifică cu un arbore maximal în graful G asociat
PTE (a se revedea secţiunea 1.4 !), sistemul (2.2.3) este întotdeauna compatibil
nedeterminat soluţiile sale fiind de forma:

ui = ui0 + k i = 1,K , m ; v j = v 0j − k j = 1,K , n (2.2.4)

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)

nu depind de soluţia (u,v ) a sistemului (2.2.3), deoarece:

∆ ij = (ui0 + k ) + (v 0j − k ) − cij = ui0 + v 0j − cij


2. Adaptarea metodei simplex la rezolvarea PTE 171
Din consideraţiile de mai sus deducem următorul criteriu de recunoaştere a
optimalităţii soluţiei x:

Determinăm o soluţie particulară (u,v ) a sistemului (2.2.3) şi


calculăm ∆ij =ui + vj - cij pentru toate cuplurile (i,j)∉I (pentru (i,j)∈I este
evident că ∆ij = 0)

Dacă toţi ∆ij calculaţi sunt ≤ 0, atunci (u,v ) este o soluţie a dualei
(Q) care împreună cux satisface condiţiile de ecart complementar (2.2.2) şi,
în consecinţă,x este o soluţie optimă a PTE.

Exemplul 2.2.1 Vom testa optimalitatea soluţiei determinate în


exemplul 2.1.1 prin metoda diferenţelor maxime.

Sistemul ui + vj = cij (i,j) ∈ I


v1 v2 v3 v4
u1 5 9 1 u1 +v2 = 3 u1 + v3 = 1 u1 + v4 = 4
u2 10 7 ⇒ u2 +v1 = 3 u2 +v2 =4
u3 18 u3 + v4 =2

Tabelele 2.2.1 - 2.2.2

Determinăm o soluţie particulară a acestui sistem luând u1 = 0

v2 = 3 u2 = 1 v1 = 2

u1 = 0 v3 = 1

v4 = 4 u3 = -2

Figura 2.2.1

Este interesant de urmărit rezolvarea sistemului pe arborele asociat soluţieix:


172 II. PROBLEME DE OPTIMIZARE IN RETELE DE TRANSPORT SI DISTRIBUTIE

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

Calculăm mărimile ∆ ij = ui + v j − cij numai pentru rutele "neocupate"


adică pentru rutele (i,j) ∉ I (Pentru cele "ocupate", adică pentru rutele (i,j) ∈I,
ştim că ∆ij = 0 ; în tabelul 2.2.3 aceste zerouri au fost înlocuite cu asteriscuri
pentru a le deosebi de eventualele mărimi ∆ij nule, asociate unor rute
neocupate. Prezenţa unor asemenea mărimi în cazul în care soluţia curentă
este optimă arată că aceasta nu este unică! - vezi observaţia 6) din Cap. I,
secţiunea 4.2 şi secţiunea următoare 2.3 din care va rezulta că mărimile ∆ij se
identifică cu costurile reduse din programarea liniară generală.)

v1 = 2 v2 = 3 v3 =1 v4 =4
u1 = 0 -1 * * *
u2 = 1 * * -1 -1
u3 =-2 -4 -2 -7 *

Tabelul 2.2.3

Constatăm că soluţia testată verifică criteriul de optimalitate.

2.3 Îmbunătăţirea unei soluţii de bază

Să presupunem că soluţia x considerată în secţiunea precedentă nu


verifică testul de optimalitate; aceasta înseamnă că:

există o rută (i0 , j0 ) = ( Fi0 , C j0 ) ∉ I cu proprietatea ∆ i0 j0 > 0.


2. Adaptarea metodei simplex la rezolvarea PTE 173
Vom construi o soluţie admisibilă de bază x ′ mai bună decît x în sensul că
x ′ implică un cost total de transport mai mic.

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 :

Fi0 → C j0 → Fi1 → C j1 →K→ Fi p → C j p → Fi0 (2.3.1)

Fie θ > 0. Construim o soluţie variabilă x~ = ( ~


xij ) a PTE punând:

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)

Deoarece soluţia x este presupusă nedegenerată , pentru θ suficient de mic,


(2.3.2) este o soluţie admisibilă a PTE. Costul asociat soluţiei ~
x va diferi de
costul asociat soluţiei x prin valoarea:

∆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:

xi1 j0 − θ ≥ 0 , xi2 j1 − θ ≥ 0 ,K , xi0 j p − θ ≥ 0

de unde rezultă că θ nu poate depăşi valoarea:


174 II. PROBLEME DE OPTIMIZARE IN RETELE DE TRANSPORT SI DISTRIBUTIE

{ }
θ 0 = min xi1 j0 , xi2 j1 ,K , xi0 j p = xis js −1 (2.3.4)

Luăm în (2.3.2) θ = θ0 şi notăm cu x ′ soluţia ~ x corespunzătoare. Ea va avea


cel mult m + n - 1 componente nenule; într-adevăr, în noua soluţie
xi′0 j0 = θ 0 > 0 iar în vechea soluţie xi0 j0 = 0 . Pe de altă parte, componenta
xi′s js −1 corespunzătoare minimului din (2.3.4) este acum nulă în timp ce în
vechea soluţie x era pozitivă. Noua soluţie x ′ este şi o soluţie de bază,
deoarece ea corespunde arborelui H’ obţinut din H ∪ Fi0 , C j0 îndepărtând { }
{
muchia Fis , C js −1 . }
Exemplul 2.3.1 Considerăm problema de transport echilibrată din
exemplul 1.4.1 şi soluţia x generată în exemplul 2.1.1 prin metoda colţului
N-V. Aplicăm acestei soluţii testul de optimalitate din secţiunea precedentă.

Sistemul ui + vj = cij (i,j) ∈ I


10 5 u1 +v1 = 3 u1 +v2 = 3
7 9 `1 u2 + v2 = 4 u2 +v3 = 3 u2 + v4 = 6
18 u3 + v4 = 2

Tabelele 2.3.1 -2.3.2

Determinăm o soluţie particulară a sistemului luând de exemplu u2 = 0, după


care calculăm mărimile ∆ ij = ui + v j − cij pentru rutele "neocupate":

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

Deoarece există şi mărimi ∆ij pozitive, soluţia testată nu este optimă.


Considerăm ruta neocupată (F1,C3) în care ∆13 = 1 > 0. Adăugăm la arborele H
al soluţiei x muchia {F1,C3}:
2. Adaptarea metodei simplex la rezolvarea PTE 175

x12 = 5 - θ
C1 F1 C2

F1 Rezultă ciclul:

C2 x22 = 7 + θ x13 = θ
F2 F2 x23 = 9 - θ C3
C3

F3 Pe muchiile ciclului au fost puse în evidenţă


C4 componentele din soluţia variabilă ~
x care depind de
parametrul θ > 0.

Acest ciclu se poate pune în evidenţă şi în tabelul 2.3.1 al soluţiei x printr-un


contur poligonal care începe din celula (1,3) şi "coteşte" în unghi drept prin
celulele ocupate (2,3) , (2,2) , (1,2) - vezi tabelul 2.3.4.

10 5-θ - + θ

7+θ + - 9-θ 1

18

Tabelul 2.3.4

Conturul va avea un număr par de "colţuri" deoarece acestea corespund


muchiilor ciclului.

În tabelul 2.3.4 apare în fapt soluţia variabilă ~ x definită în (2.3.2).


Costul asociat al transportului, calculat cu relaţia (2.3.3) are valoarea:

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

Invităm cititorul să repete calculele făcute în acest exemplu plecând de la


soluţia din tabelul 2.3.5.

2.4 Algoritm de rezolvare a PTE. Convergenţă

Ca şi până acum ne vom referi la problema de transport echilibrată


(PTE) al cărei model matematic a fost prezentat în secţiunea 1.2 şi vom
presupune în continuare că toate soluţiile sale de bază sunt
nedegenerate.Dezvoltările teoretice din secţiunile precedente ca şi exemplele
ilustrative conduc la următorul algoritm de rezolvare a PTE.

Iniţializare. Se determină printr-o metodă oarecare (vezi secţiunea 2.1)


o soluţie admisibilă de bază de start x = ( xij ).

Conţinutul unei iteraţii. 1) Se asociază furnizorilor variabilele u1,


u2,..., um şi consumatorilor variabilele v1, v2,..., vn. Asociem fiecărei rute
ocupate (i,j) - aceasta însemnând xij >0 - o ecuaţie de forma ui + vj = cij. Se
determină o soluţie particulară (u , v ) a sistemului format. Pentru aceasta se
acordă o valoare particulară (întotdeauna zero) uneia dintre variabile (de
regulă, celei care apare de cele mai multe ori); valorile celorlalte variabile se
determină apoi în mod unic. Se calculează mărimile ∆ ij = ui + v j − cij pentru
toate rutele neocupate (adică acolo unde xij = 0).

2) (Test de optimalitate) Dacă toţi ∆ij ≤ 0 soluţia curentă x este optimă.


În caz contrar:
2. Adaptarea metodei simplex la rezolvarea PTE 177
3) Se identifică ruta (i0,j0) cu cel mai mare ∆ i0 j0 pozitiv. În tabelul
soluţiei x se identifică unicul contur poligonal care începe şi sfârşeşte în celula
(i0,j0) şi coteşte în unghi drept numai prin celule ocupate (acest contur
corespunde ciclului format în arborele H asociat soluţiei x ,după adăugarea
muchiei {Fi0 , C j0 } !). Se marchează alternativ cu + şi - colţurile ciclului. Se
calculează θ 0 ca fiind minimul componentelor xij aflate în celulele marcate cu -
.

4) (Construcţia unei noi soluţii) Se adună θ 0 la valorile xij aflate în


celulele marcate cu + şi se scade acelaşi θ 0 din valorile xij înscrise în celulele
marcate cu -. Valorile xij aflate în celulele nemarcate cu + sau - nu se
modifică. Costul asociat soluţiei x ′ rezultate are valoarea:

f ( x ′) = f ( x ) − θ 0 ⋅ ∆ i0 j0 (2.4.1)

Se revine la pasul 1) în cadrul unei noi iteraţii.

În ceea ce priveşte convergenţa algoritmului, dacă toate soluţiile de


bază ale PTE sunt nedegenerate, algoritmul descris se termină într-un număr
finit de iteraţii cu determinarea unei soluţii optime.

Într-adevăr, formula (2.4.1) arată că la fiecare iteraţie valoarea funcţiei obiectiv


descreşte semnificativ. Cum numărul soluţiilor de bază admisibile este finit,
algoritmul se opreşte obligatoriu într-un număr finit de paşi, ultima soluţie
testată fiind optimă. (Cititorul atent va observa desigur că afirmaţia precedentă
şi justificarea ei constituie în fapt o simplă reluare a teoremei de convergenţă
4.5.1 din cap. I şi a demonstraţiei acesteia!)

2.5 Degenerare

Algoritmul de rezolvare a PTE şi convergenţa acestuia au fost


prezentate în ipoteza că toate soluţiile admisibile de bază ale problemei sunt
nedegenerate. Şansa ca o problemă de transport să aibe soluţii degenerate este
însă foarte mare şi în plus nu avem nici un criteriu pe baza căruia să
recunoaştem în prealabil existenţa acestor soluţii. Este important să observăm
că:
dacă în rezolvarea unei PTE am pornit cu o soluţie nedegenerată şi
apoi toate soluţiile construite au fost deasemeni nedegenerate, procesul iterativ
este necesarmente finit.
178 II. PROBLEME DE OPTIMIZARE IN RETELE DE TRANSPORT SI DISTRIBUTIE
În virtutea acestei observaţii, va fi important să ştim cum procedăm
dacă soluţia de start este degenerată sau dacă degenerarea apare pe parcursul
aplicării algoritmului. În principiu, evitarea degenerării se face prin “uşoara”
perturbare a unora din datele problemei de aşa manieră încât noua problemă să
aibe numai soluţii de bază nedegenerate! Soluţiile celor două probleme vor
diferi “cu puţin” unele de altele astfel că, după rezolvarea problemei perturbate
prin “revenire” la problema iniţială se obţine soluţia optimă a acesteia din
urmă. Am considerat că este mai simplu şi mai bine să explicăm tehnica de
perturbare pe câteva exemple particulare; în orice altă situaţie similară se va
proceda absolut analog.

Exemplul 2.5.1 Considerăm problema de transport echilibrată definită


de datele din tabelul 2.5.1:

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

Soluţia este degenerată deoarece are 5 < 6 = 3 +4 - 1 componente nenule.


Această situaţie se datorează faptului că la alocarea a 4-a disponibilul curent al
furnizorului F1 a fost egal cu necesarul curent al consumatorului C1 ( =10) şi ca
urmare, după efectuarea alocării, atât rândul 1 cât şi coloana 1 au fost blocate!
2. Adaptarea metodei simplex la rezolvarea PTE 179
Pentru a obţine o soluţie nedegenerată perturbăm puţin datele problemei
originale în următorul mod. Fie ε > 0 un număr foarte mic.

• Mărim cu ε necesarul consumatorului C1 acesta devenind b1=110+ ε.


• pentru reechilibrarea problemei mărim cu acelaşi ε disponibilul unui
furnizor activ (adică cu disponibilul curent nenul) altul decît F1; de exemplu
modificăm disponibilul lui F2: a2 = 100 + ε.

Reluăm alocarea a 4-a:

x11 = min(10 + ε, 10) = 10

Actualizăm:

b1 ← ε a1 ← 0

Continuând aplicarea metodei diferenţelor maxime, rezultă în final soluţia


nedegenerată:

10 (4) 90 (1)
(2) (6)
ε (5) 50 50
100 (3)

Tabelul 2.5.3

dar, pentru problema perturbată!!

Aplicăm acestei soluţii algoritmul de rezolvare a PTE:

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

Tabelele 2.5.4 - 2.5.5


180 II. PROBLEME DE OPTIMIZARE IN RETELE DE TRANSPORT SI DISTRIBUTIE

“Redistribuim” în colţurile ciclului 90 10


valoarea:
θ 0 = min {x11 =10 , x24 =50}= 10 ⇒ 10 + ε 50 40
Obţinem soluţia: 100

Tabelul 2.5.6

Pentru ε = 0 se găseşte o soluţie nedegenerată a problemei originale căreia îi


aplicăm, în continuare algoritmul:

v1=6 v2=6 v3=3 v4=8


u1 = -4 90 10 -2 * -6 *
u2=0 10 50 40 ⇒ * -1 * *
u3=-3 100 * -2 -4 0

Tabelele 2.5.7 - 2.5.8

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

În acord cu teoria generală a programării liniare, problema dată va avea o


infinitate de soluţii optime de forma:

x = α x + β x′ 90 10
unde α + β = 1 10α +50β 50 40α
α≥0,β≥0 100α +60β 40β

Tabelul 2.5.10

Exempul 2.5.2 Să rezolvăm acum problema:


2. Adaptarea metodei simplex la rezolvarea PTE 181

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

pornind de la soluţia de bază nedegenerată din tabelul 2.5.12, determinată prin


metoda diferenţelor maxime.
(4) (1)
20 90 90 20
- +
(5) (2) (6)
10 50 20 ⇒ 30 50
+ -
(3)
90 90

Tabelul 2.5.12 Tabelul 2.5.13

Propunem cititorului să verifice că această soluţie nu este optimă şi că ∆14 =


2 > 0. În tabelul 2.5.12 este indicat şi conturul poligonal asociat rutei (1,4).
Marcând succesiv colţurile conturului cu + şi - se constată că minimul θ 0 al
valorilor numerice din celulele marcate cu - nu este unic: θ 0 = x11 = x24 = 20.

Aceasta face ca noua soluţie, indicată în tabelul 2.5.13, să fie degenerată.


Pentru a evita degenerarea, modificăm puţin valoarea uneia din variabilele x11
sau x24; luăm de exemplu: x11 = 20 + ε, ceea ce înseamnă să considerăm a1 =
110 + ε şi b1 = 120 + ε. De această dată minimul θ 0 = x24 = 20 este unic, astfel
că după “redistribuirea” sa în colţurile conturului poligonal indicat se obţine
soluţia nedegenerată din tabelul 2.5.14:

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

Tabelul 2.5.14 Tabelul 2.5.15


182 II. PROBLEME DE OPTIMIZARE IN RETELE DE TRANSPORT SI DISTRIBUTIE
dar, a problemei modificate! Din tabelul alăturat 2.5.15 rezultă că soluţia
construită este optimă. Luând ε = 0 obţinem soluţia optimă a problemei iniţiale
care este deja afişată în tabelul 2.5.13.
3. Variante ale problemei de transport 183

3. Variante ale problemei de transport

În dezvoltările teoretice din secţiunile precedente condiţia de echilibru


(1.2.5) a fost esenţială. În foarte multe contexte practice însă, această condiţie
nu este îndeplinită Deasemenea este posibil ca unele ipoteze sau constante ale
problemei de transport să se modifice de la o perioadă la alta antrenând
schimbări de amploare mai mică sau mai mare în soluţia optimă. În fine, nu
puţine sunt situaţiile concrete ce nu implică "transporturi" în sensul strict al
cuvîntului, dar care pot fi modelate ca probleme de transport.

3.1 Probleme de transport neechilibrate

În cazul în care în problema generală de transport (secţiunea 1.2) totalul


cantităţilor disponibile la furnizori întrece totalul cererilor consumatorilor:

m n

∑ a > ∑b
i =1
i
j =i
j

ne putem reduce la o problemă de transport echilibrată introducând un


consumator fictiv Cn +1 a cărui “cerere” să fie egală cu excesul de disponibil:

m n
bn +1 = ∑ ai − ∑ b j
i =1 j =1

Costurile unitare de transport de la furnizorii reali către Cn +1 se iau egale cu


zero. După rezolvarea problemei echilibrate, cantităţile “livrate”
consumatorului fictiv se vor interpreta drept cantităţi rămase în stocurile
furnizorilor.

Dacă totalul cantităţilor disponibile este mai mic decât cererea totală:

m n

∑ ai < ∑ b j
i =1 j =i

problema de transport, aşa cum a fost ea definită în secţiunea 1.2, este


incompatibilă (vezi inegalitatea (1.2.1)). Putem încerca o rezolvare parţială a
cererilor, introducând un furnizor fictiv Fm +1 al cărui “disponibil”să fie egal cu
cererea neacoperită:
184 II. PROBLEME DE OPTIMIZARE IN RETELE DE TRANSPORT SI DISTRIBUTIE

n m
a m +1 = ∑ b j − ∑ a i
j =1 i =1

Din nou, costurile unitare de transport pe rutele ce leagă acest “furnizor” de


consumatorii reali se iau egale cu zero. Obţinem o problemă de transport
echilibrată, în a cărei soluţie optimă, cantităţile “livrate” de furnizorul fictiv se
vor interpreta drept cereri neacoperite.

Mult mai aproape de realitate ni se pare următoarea abordare. Să


presupunem că furnizorii F1, F2,..., Fm sunt bazine carbonifere iar consumatorii
C1, C2,..., Cn sunt termocentrale. Să admitem că într-o perioadă normală de
lucru (să zicem o lună) cantitatea de cărbune Q necesară termocentralelor,
reprezentată prin suma b1+b2+...+bn a cererilor este egală cu cantitatea totală de
cărbune posibil de livrat de către centrele miniere, cantitate reprezentată prin
suma a1+a2+...+am. Cunoscând costurile unitare de transport ale cărbunelui pe
calea ferată sau cu alte mijloace (naval, auto) se poate determina un program
de satisfacere a necesarului de cărbune al termocentralelor care să implice un
cost total minim. Să presupunem că în luna următoare sunt anunţate o
serie de

acţiuni greviste la unele centre miniere. Este posibil ca nu toate sindicatele


miniere din acelaşi bazin carbonifer să adere la grevă ceea ce face ca producţia
de cărbune să scadă într-o măsură mai mică sau mai mare. Fie a1′ , a 2′ ,...., a m′
producţiile lunare în condiţii de criză şi Q’< Q suma acestora.

Într-o asemenea situaţie critică este mai logic ca fiecare termocentrală


să primească o parte proporţională cu cererea sa în condiţii normale de
aprovizionare, adică:

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

O dată stabilite cantităţile bi′ avem o problemă de transport echilibrată pe care


o rezolvăm cu algoritmul descris.

Exemplul 3.1.1 Patru termocentrale C1, C2, C3, C4 se aprovizionează cu


cărbune de la trei mine F1, F2, F3. Necesarul lunar al termocentralelor,
producţiile lunare ale minelor şi costurile transportului unei unităţi fizice de
cărbune (1000 t.) pe diferitele rute sunt date în tabelul 3.1.1

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

Cu metoda diferenţelor maxime, se obţine direct programul optim de


aprovizionare din tabelul 3.1.2. Rutele utilizate în acest program sunt
evidenţiate în figura alăturată.
F1 120
F2 F3
120 30
30 150 ⇒ 100
80
20 150
100 80 20 C1 C2 C3 C4

Tabelul 3.1.2

Costul asigurării transporturilor din program se ridică la 1150 u.m.


Pentru luna următoare unele sindicate miniere preconizează o serie de
acţiuni greviste.Ca urmare a acestora se estimează că producţia totală de
cărbune va scade cu 30% fiind repartizată astfel: 100 mii t. la mina F1 şi numai
120, respectiv 130 mii t. la minele F2 şi F3 deci un total de 350 mii t. faţă de o
cerere de 500 mii t.
Problema repartizării producţiei diminuate se poate pune în două
moduri:

• urmărind în exclusivitate criteriul minimizării cheltuielilor de


transport. “Reechilibrăm” problema prin introducerea unei “mine” fictive F4 a
186 II. PROBLEME DE OPTIMIZARE IN RETELE DE TRANSPORT SI DISTRIBUTIE
cărei producţie lunară să fie egală cu cantitatea cu care s-a diminuat producţia
curentă a minelor reale, adică 150 mii t. Neexistând transporturi efective între
F4 şi C1, C2, C3, C4 costurile unitare de transport pe rutele corespunzătoare vor
fi luate, firesc, egale cu zero. Vezi tabelul 3.1.3.

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

Rezultă două soluţii optime indicate în tabelele 3.1.4 şi 3.1.5. Costul de


transport aferent este de 730 u.m.

În prima variantă numai cererea termocentralei C2 este integral


acoperită, C1 primind numai 20%, C3 numai 71% iar C4 numai 80% din
necesarul curent. În a doua variantă C1 primeşte cantitatea normală, C2 numai

27% iar C3 şi C4 procentele anterioare. După cum se vede reducerea cu 30% a


producţiei normale este repartizată foarte diferit pe consumatori.

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

• repartizând producţia diminuată proporţional cu cererile normale.


Producţia diminuată reprezintă 70% din cea normală, astfel că termocentralele
C1, C2, C3, C4 ar urma să primească 100⋅0,7=70 mii t, 110⋅0,7=77 mii t,
140⋅0,7=98 mii t, respectiv 150⋅0,7=105 mii t.
3. Variante ale problemei de transport 187
Rezolvând problema echilibrată rezultată obţinem soluţia:

2 98 F1 98 F2 F3
15
15 105 ⇒ 2 60
70 105
70 60
C1 C2 C3 C4

Exemplul 3.1.2 Datorită dezvoltării şi extinderii capacităţilor de


producţie, conducerea firmei X a decis să facă noi angajări în fiecare din cele
cinci fabrici ale sale, conform datelor din următorul tabel:

Fabrica I II III IV V Total


Nr. de noi 45 74 50 82 63 314
angajaţi

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:

Agenţia din oraşul A B C Total


Număr de oferte convenabile ptr. firmă 120 100 154 374

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ţă.

Întrucât disponibilul de personal este mai mare decât cererea, vom


introduce o "fabrică fictivă" VI a cărei cerere să fie de 374-314 = 60 noi
angajaţi. Obţinem o problemă echilibrată de transport cu datele din tabelul
3.1.6 al cărei obiectiv este minimizarea numărului total de persoane× km.

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

Deoarece pe rutele care leagă oraşele A, B, C de "fabrica" VI nu vor avea loc


transporturi de personal, costurile unitare au fost luate egale cu zero.

Aplicând algoritmul de rezolvare descris în secţiunea 2.4 se obţine


următorul program posibil de angajări (vezi tabelul 3.1.7).Toţi cei 120 de
candidaţi din oraşul A vor fi angajaţi : 45 la fabrica I, 62 la fabrica II şi restul
la fabrica III. la fel, candidaţii din B vor fi angajaţi în totalitate: 37 la fabrica
III şi 63 la fabrica V. Din C vor fi acceptate numai 94 de oferte din cele 154
disponibile adică 61%. Rezultă un total (minim) de 1051 oameni × km
transportaţi pentru care firma trebuie să plătească zilnic 12612 u.m.

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

Conducerea firmei este de părere că adoptarea acestui program ar creea


o imagine nefavorabilă firmei pe piaţa forţei de muncă prin "discriminarea"
potenţialilor lucrători din C faţă de cei din A sau B şi decide să examineze şi
alte variante. Astfel, pentru a nu apare ca "incorectă"faţă de candidaţii
potenţiali dintr-un oraş sau altul, s-a decis ca surplusul de 60 de oferte ce nu
vor putea fi acceptate să fie repartizat în mod egal între cele trei oraşe, adică 20
de fiecare. Firma doreşte să ştie care va fi efectul acestei hotărâri asupra
cheltuielilor cu transportul noilor angajaţi.

Reluăm problema fixând numărul de oferte acceptabile la 120 - 20 =


100 pentru oraşul A, 100 - 20 = 80 pentru B şi 154 - 20 = 134 pentru C.(total
314). Rezultă soluţia din tabelul 3.1.8. Conform acesteia, numărul total de
persoane×km transportaţi va creşte la
I II III IV V 1087, implicând cheltuieli zilnice în
A 45 22 33 valoare de 13044 u.m., cu 3,43 % mai
mari decât în varianta studiată
anterior. Noul program satisface
oferta de forţă de muncă în proporţie
de 83,3 % pentru A, 80 % pentru B şi
3. Variante ale problemei de transport 189
B 17 63
C 52 82

Tabelul 3.1.8

87 % pentru C.

Plecând de la ultima soluţie, conducerea firmei doreşte să cunoască ce


implicaţii ar putea avea asupra cheltuielilor de transport satisfacerea ofertelor
în aceeaşi proporţie.

Notând cu a1, a2, a3 volumul ofertelor acceptabile din A, B, repectiv C


este necesar ca:

a1 a a a1 + a 2 + a 3 314
= 2 = 3 = =
120 100 154 120 + 100 + 154 374

din care rezultă: a1 = 101 , a2 = 84 , a3 = 129. Cu noile date se obţine


programul:

I II III IV V Soluţia găsită implică 1089 oameni ×


A 45 27 29 km de transportat zilnic la un cost de
B 21 63 13068 u.m., cu 3,6 % mai mare decât
C 47 82 în prima variantă.

Tabelul 3.1.9

Fireşte, în adoptarea deciziei asupra variantei finale a programului de


noi angajări, conducerea firmei poate să ţină seama şi de alte cerinţe care nu au
fost avute în vedere în studiul întreprins. În consecinţă, soluţiile sintetizate în
tabelele 3.1.7 , 3.1.8 şi 3.1.9 trebuiesc considerate ca simple "scenarii" menite
să ajute factorii decizionali în luarea unei hotărâri cât mai bune!

3.2 Blocarea unor rute

Până în prezent am admis că orice rută dintre un furnizor şi un


consumator poate fi utilizată la un cost de transport mai mic sau mai mare.
Sunt cazuri în care, din diferite motive una sau mai multe rute nu pot fi
utilizate. “Blocarea “ acestor rute se va face prin introducerea unor costuri
190 II. PROBLEME DE OPTIMIZARE IN RETELE DE TRANSPORT SI DISTRIBUTIE
unitare de transport foarte mari. Concret, dacă ruta (Fi,Cj) nu mai poate fi
folosită vom lua cij = M unde M este o constantă pozitivă foarte mare.

Exemplul 3.2.1 În exemplul 3.1.1 am determinat programul lunar


normal de aprovizionare cu cărbune al celor patru termocentrale în ipoteza că
toate rutele erau disponibile (tabelul 3.1.2). Evident, acest program nu va suferi
nici o modificare în cazul în care se blochează o rută ce nu era prevăzută a fi
utilizată. Să presupunem că în luna următoare ruta (F3,C3) se va închide
temporar din cauza unor lucrări de modernizare. În acest fel, mina F3 nu mai
poate aproviziona direct termocentrala C3. Pentru a determina schimbările din
programul actual cauzate de această întrerupere reevaluăm mărimile ∆ij luând
de astă dată în calcul c33 = M » 0

v1= 3 v2=3 v3=M v4=2


u1=1-M 120 1-M 2-M * -2-M
u2 = 0 30 150 ⇒ -1 * M-7 *
u3 = 0 100 80 20 * * * -4

Tabelele 3.2.1 - 3.2.2

Deoarece ∆23 = M - 7 > 0, soluţia curentă nu mai este optimă; ea se


îmbunătăţeşte folosind conturul poligonal indicat.
Noul program de transport, pus
în evidenţă în tabelul 3.2.3 nu mai 120
utilizează ruta blocată (F3,C3) şi ca 10 20 150
urmare costul său creşte, ajungând la 100 100
1190 u.m.
Tabelul 3.2.3

Exemplul 3.2.2 Vom studia acum o problemă de transport


"parametrică' care extinde într-un fel consideraţiile anterioare. Reluăm
problema aprovizionării cu cărbune a termocentralelor din exemplul precedent
(cu datele din tabelul 3.1.1). Să presupunem că pentru transportul cărbunelui de
la mina F1 la termocentrala C3 există mai multe variante ce pot fi folosite într-o
lună sau alta în funcţie de programul de întreţinere, reparare şi modernizare a
reţelei de căi ferate. Posibilele schimbări ale traseului au un efect direct asupra
costului unitar de transport c13 = 1 luat iniţial în calcul. Ne propunem să
studiem efectul pe care îl are variaţia costului c13 asupra programului optim de
3. Variante ale problemei de transport 191
transport şi a costului total aferent. Pentru aceasta, considerăm soluţia optimă
determinată în cazul particular c13 = 1 (vezi tabelul 3.1.2) şi recalculăm
mărimile ∆ij luînd c13 = λ ≥ 0 variabil.

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

Tabelele 3.2.4 - 3.2.5

Condiţia de optimalitate ∆ij ≤ 0 conduce la concluzia că atâta timp cât c13 ≤ 4


programul optim de transport este cel afişat în tabelul 3.1.2 (sau 3.2.4) cu
costul total f = 1030 + 120c13.

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

v1=3 v2=7-λ v3=5 v4=6-λ F1 F2 F3


40
u1=λ-5 80 40 30

u2 =λ-4 30 150 ⇒ 100


80
100 150
u3=0 100 100 C1 C2 C3 C4

Tabelul 3.2.6

Testarea optimalităţii acestei soluţii este făcută în tabelul 3.2.7 folosind


valorile ui , v j înscrise la stânga şi deasupra tabelului 3.2.6. Condiţia
∆ ij ≤ 0 arată că soluţia găsită este optimă atâta timp cât 4 ≤ c13 ≤ 5 .Costul
asociat are valoarea 1350 + 40c13 u.m.
Pentru c13 > 5 avem ∆11 = ∆21 < 0.Folosind
λ -5 * * -4
conturul poligonal asociat rutei (1,1) se
λ -5 * λ -6 *
găseşte soluţia din tabelul 3.2.8 al cărei cost
* 4- λ * -λ este de 1550 u.m.
Tabelul 3.2.7

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ă.

3.3 Alte probleme reductibile la problema de transport

Deşi nu implică transporturi fizice unele probleme pot fi aduse la


“formatul” problemei de transport.

Exemplul 3.3.1 O firmă specializată în producerea de echipament


electric are de expediat un număr de generatoare la sfârşitul lunilor Ianuarie,
Februarie şi Martie. În fiecare lună, firma produce, în regim normal de lucru,
un anumit număr de generatoare. Dacă necesităţile o impun, prin organizarea
unr schimburi prelungite, firma poate produce şi peste plafoanele normale dar
la un cost mai ridicat.

Luna Ianuarie Februarie Martie


Nivelul cererii (buc.) 8 6 12
Volumul producţiei în regim 7 7 7
normal de lucru (buc.)
Volumul producţiei 4 4 5
suplimentare (buc.)
Costul unui generator din producţia 40 40 50
normală (u.m.)
Costul unui generator din producţia 50 60 80
suplimentară (u.m.)

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ă.

Obiectivul urmărit este elaborarea unui program de fabricaţie pentru


satisfacerea comenzilor la un cost total de producţie şi stocare minim.

Pentru a formula o problemă de transport trebuie să identificăm mai


întâi sursele şi destinaţiile. În fiecare lună un generator poate fi produs în două
moduri: în timpul normal de lucru sau “peste program”; vor exista deci 2×3 = 6
“surse” ale căror disponibile sunt nivelele de producţie corespunzătoare.
Astfel, sursa “Ianuarie-producţie normală“ are un disponibil de 7 bucăţi
în timp

ce sursa “Martie-producţie suplimentară”are un disponibil de 5 bucăţi.


Destinaţiile se identifică cu sfârşiturile celor trei luni când cererile trebuiesc
acoperite.

Între cele 6 surse şi 3 destinaţii se creează 6×3 = 18 legături (rute);


fiecare indică luna în care este produs un generator, modul în care acesta este
produs (în regim normal de lucru sau “peste program”) şi luna în care este
expediat. Din cele 18 legături, 6 vor fi blocate deoarece exprimă un nonsens:
livrarea unui produs finit într-o lună anterioară celei în care a fost fabricat!

Costurile unitare de transport pe rutele neblocate sunt în fapt costurile


unitare de producţie la care se adaugă eventualele cheltuieli de stocare. Astfel,
pe ruta “Ianuarie-producţie suplimentară→ Martie” costul unitar de transport
va fi egal cu costul fabricării unui generator peste nivelul producţiei normale
din Ianuarie la care se adaugă costul stocării pe două luni, adică 50+2×10 = 70
u.m.

Am obţinut o problemă de transport ale cărei date sunt prezentate în


tabelul 3.3.2.

Destinaţii Ianuarie Februarie Martie Disponibil


Surse
Ian.-prod. normală 40 50 60 7
Ian.-prod, suplim. 50 60 70 4
Feb.-prod. normală M 40 50 7
Feb.-prod. suplim. M 60 70 4
Martie-prod. normală M M 50 7
Martie-prod. suplim. M M 80 5
34
194 II. PROBLEME DE OPTIMIZARE IN RETELE DE TRANSPORT SI DISTRIBUTIE
Cerere 8 6 12 26

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.

Invităm cititorul să rezolve problema echilibrată, avertizându-l că


aceasta are mai multe soluţii optime! Una dintre ele este interpretată în figura
3.3.1; costul asociat este de 1250 u.m.

Ianuarie

Prod. normală 7 buc. 7


Ianuarie
Cerere: 8 buc. Exemplul 3.3.2
Prod. suplim. 4 buc. 1
Foarte des citată în
literatura de specialitate
Februarie 3 este problema patronului
Februarie de restaurant.
Prod. normală 7 buc.
6 Cerere: 6 buc.
1 Patronul unui
Prod. suplim. 1 buc. 1 restaurant ştie că în raport
cu mesele pe care a stabilit
Martie
Martie să le servească în
Cerere: 12 buc.
7 următoarele n zile (în
Prod. normală7 buc. regim de rezervare) va
avea nevoie de ri şervete
Prod. suplim. 5 buc.
de masă curate, i = 1,...,n.
Pentru procurarea acestor
Figura 3.3.1 şervete el are la dispoziţie
două posibilităţi:

• fie să le cumpere la preţul de a u.m. bucata;


• fie să trimită şervetele murdare la o spălătorie. În serviciul normal,
şervetele spălate sunt livrate după p zile la un cost de c u.m. bucata; în serviciul
de urgenţă, şervetele spălate se livrează după q < p zile la un cost b > c u.m.
bucata.
3. Variante ale problemei de transport 195
Pornind fără nici un şervet utilizabil, cum trebuie să procedeze
patronul cu achiziţionarea şi spălarea şervetelor astfel încât să minimizeze
costul total pe perioada celor n zile?

Pentru a trata problema enunţată ca o problemă de transport este


necesar să identificăm: 1) produsul ce trebuie “transportat şi distribuit”, 2)
sursele,

3) destinaţiile, 4) legăturile (rutele) permise între surse şi destinaţii şi 5)


costurile unitare de transport.

1) Produsul de transportat şi distribuit îl constituie şervetele “curate”.


După provenienţă ele sunt de trei feluri: şervete “noi” cumpărate de la
magazin, şervete “spălate în regim de urgenţă“ şi şervete “spălate în regim
normal”.

2) Evident o primă sursă de şervete curate o constituie stocul de


şervete noi pe care patronul intenţionează să le cumpere de la magazin; notăm
această sursă cu F0. Deoarece, la urma urmei, fiecare şervet spălat a fost
cândva nou este clar că la începutul perioadei patronul nu poate cumpăra mai
puţine şervete decât numărul maxim necesar într-o zi. Pe e altă parte, patronul
poate cumpăra în fiecare zi numărul de şervete curate necesare.În concluzie,
numărul S al şervetelor din stocul iniţial F0 va trebui fixat undeva între limitele
specificate în următoarea inegalitate:

n
max ri ≤ S ≤ ∑ ri (3.3.1 )
1≤i ≤ n
i =1

Mai departe, la sfârşitul unei zile, să zicem i, cele ri şervete murdare se


constituie ca o sursă de şervete curate pentru zilele următoare (fireşte, după ce
în prealabil au fost spălate!).Face excepţie ultima zi, a n-a, cînd şervetele
murdare se aruncă pur şi simplu la deşeuri (se face ipoteza că în perioada
următoare, patronul va utiliza alt stoc de şervete noi...).În consecinţă, pe lîngă
“sursa” F0, vom mai considera alte n - 1 “surse” F1, F2,..., Fn-1,
corespunzătoare zilelor 1, 2,..., n-1, cu “disponibilele” r1, r2,..., rn-1.

3) Este firesc ca fiecare din cele n zile să fie socotită ca o destinaţie a


cărei cerere este egală cu numărul şervetelor curate.Vom avea deci n destinaţii
C1, C2,..., Cn , corespunzătoare zilelor 1, 2,..., n cu cererile r1, r2,..., rn. Datorită
relaţiei (3.3.1) “oferta” totală de şervete curate acoperă cererea totală:
196 II. PROBLEME DE OPTIMIZARE IN RETELE DE TRANSPORT SI DISTRIBUTIE

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.

4,5) Având în vedere semnificaţia ei, sursa F0 este legată de toate


destinaţiile C1, C2,..., Cn , “costul unitar” comun pe aceste rute fiind preţul de
cumpărare al unui şervet nou. Să considerăm acum o sursă oarecare Fi, i = 1,
2,..., n-1, al cărei “disponibil” este format din cele ri şervete folosite în ziua i.
Aceste şervete, sau o parte din ele, devin disponibile pentru o nouă folosire
abia după q zile, adică după ce au fost trimise la spălătoria rapidă. În concluzie,
“rutele” (Fi, Cj) cu 1 ≤ j < i + q sunt lipsite de sens şi vor fi blocate printr-un
cost M foarte mare. Pe rutele (Fi, Cj) cu i+ q ≤ j < i + p se va “practica” costul
b al spălării unui şervet în regim de urgenţă iar pe rutele (Fi, Cj) cu i+p≤j
≤ n, se va practica costul c al spălării unui şervet în regim normal. În fine, sunt
permise toate rutele către destinaţia C0 - în caz că aceasta trebuie avută în
vedere! - cu costul comun zero.

Consideraţiile precedente sunt ilustrate prin următorul caz concret:

n = 5 zile

ziua i 1 2 3 4 5
cererea ri 60 50 80 40 60

preţul unui şervet nou: a = 5


durata serviciului normal: p = 2 zile
durata serviciului rapid: q = 1 zi
costul spălării unui şervet în regim de urgenţă: b = 2 u.m.
costul spălării unui şervet în regim normal: c = 1 u.m.
3. Variante ale problemei de transport 197
Din (3.3.1) rezultă că 80 ≤ S ≤ 280. În tabelul (3.3.3) apar datele problemei de
transport corespunzătoare.

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

Problema are mai multe soluţii optime; structura unora depinde de


numărul S de şervete noi pe care patronul intenţionează să le cumpere la
început! Invităm cititorul să facă calculele necesare, luând ca model studiul
problemei parametrice de transport din exemplul 3.2.2. Oricare din aceste
soluţii implică un cost total de 730 u.m. a cărui structură va fi detaliată pe
soluţia din tabelul 3.3.4.

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

Din prima linie a tabelului 3.3.4 rezultă că patronul va trebui să


cumpere 80 de şervete noi: 60 vor fi folosite în prima zi, restul a doua zi.Din a
doua linie rezultă că 30 din şervetele folosite în prima zi vor fi trimise la
spălătoria rapidă pentru a fi disponibile a doua zi. Restul de 30 vor fi spălate în
regim normal pentru a fi folosite în ziua a treia ş.a.m.d. Ultima linie arată că
din cele 40 de şervete întrebuinţate în a patra zi, 10 vor fi spălate rapid, pentru
a putea fi folosite a doua zi iar celelalte 30 vor fi aruncate la deşeuri (acolo
unde vor ajunge şi cele 50 de şervete “murdărite” în ultima zi).

Tabelul poate fi “citit şi pe coloane”. Astfel din coloana a treia


deducem că necesarul de şervete pentru a treia zi este asigurat prin spălarea în
198 II. PROBLEME DE OPTIMIZARE IN RETELE DE TRANSPORT SI DISTRIBUTIE
regim normal a 30 şervete folosite în prima zi şi prin spălarea în regim de
urgenţă a celor 50 de şervete folosite în a doua zi.
În regim normal sunt spălate 30 + 40 = 70 şervete iar în regim de
urgenţă 30 + 50 + 40 + 10 = 130 şervete. Structura costului total este deci
următoarea:
80 × 5 + 130 × 2 + 70 × 1 = 400 + 260 + 70 = 730 u.m.

Structura soluţiei analizate este vizualizată în figura 3.3.2.

30 40

30 50 40 10

Ziua 1 Ziua 2 Ziua 3 Ziua 4 Ziua 5


60 Necesar: Necesar: Necesar: Necesar: 30 Necesar: 50
S 60 şervete 50 şervete 80 şervete 40 şervete 50 şervete

20

Figura 3.3.2
4. Problema de transfer 197

4. Problema de transfer

În problema clasică de transport, sursele erau în legătură directă cu


destinaţiile, rutele erau orientate de la surse către destinaţii şi nu era permis
nici un transport între două surse sau între două destinaţii. Problema de transfer
este o generalizare a problemei clasice de transport în următoarele direcţii:

• În reţeaua asociată există şi centre intermediare sau de tranzit; pot


exista legături între surse sau între destinaţii; ca urmare, este posibil ca o sursă
( o destinaţie) să "funcţioneze" la un moment dat şi ca punct de tranzit pentru
unităţi de flux provenind dela o altă sursă (sau care se deplasează către o altă
destinaţie).
• Pe unele rute transporturile pot fi efectuate în ambele sensuri, costul
unitar al transportului putând depinde de sensul de parcurgere al rutei.

Diferenţele existente între reţelele asociate unei probleme clasice de transport


respectiv unei probleme de transfer sunt puse în evidenţă în figura 1.1.1.

4.1 Modelul matematic al problemei de transfer

Problema de transfer se poate descrie în următorii termeni. Există n


localităţi, notate 1, 2, ....,n şi se pune problema organizării transportului unui
anumit progus omogen între aceste localităţi la un cost total minim. Între unele
localităţi există legături directe numite rute. Pe fiecare rută este precizat un
cost al transportului unei unităţi de produs de la o extremitate la cealaltă. Este
posibil ca aceste costuri unitare (ce pot fi exprimate în bani, timp sau distanţă)
să depindă de sensul de parcurgere a rutei respective. Pentru uniformitatea
expunerii vom presupune că între oricare două localităţi i şi j există o legătură
directă accesibilă în ambele sensuri, convenind că dacă o asemenea rută sau
sens de parcurgere nu există în realitate, costul corespunător să fie luat egal cu
+∞.

Ansamblul localităţilor şi al rutelor de legătură poartă numele de reţea


de transport şi poate fi vizualizată printr-un graf finit, neorientat sau parţial
orientat, simplu şi conex.

Nodurile reţelei sunt diferenţiate în:

• surse: localităţile în care produsul este disponibil pentru a fi


transportat în alte locuri;
198 II. PROBLEME DE OPTIMIZARE IN RETELE DE TRANSPORT SI DISTRIBUTIE
• destinaţii: localităţile în care produsul este cerut pentru consum,
cererea neputând fi acoperită din producţia locală;
• centre intermediare (de tranzit): localităţile în care produsul se
găseşte doar în tranzit, eventualul consum fiind asigurat din producţia locală.

Pentru fiecare i = 1,..., n vom nota:

• cu ai cantitatea disponibilă în nodul i pentru a fi transportată spre


alte localităţi. Evident ai > 0 dacă i este o sursă şi ai = 0 în celelalte cazuri;
• cu bi cantitatea netă solicitată pentru consum în nodul i. Dacă i este
o destinaţie atunci bi > 0; în celelalte noduri bi = 0;
• cu cij unde i ≠ j costul transportului unei unităţi de produs de la i la
j. Vom presupune că cij ≥ 0 şi că cij = +∞ în cazul în care deplasarea de la i la j
nu este posibilă în realitate.Pentru simplificarea notaţiilor vom pune cii = 0;
• cu xij (i ≠ j) cantitatea de produs transportată din nodul i în nodul j.
Dacă transportul de la i la j nu este permis condiţia cij = +∞ va implica xij = 0 în
orice soluţie admisibilă a problemei;

• cu ~ xii , i = 1,... ,n cantitatea de produs aflată în tranzit în nodul i


(adică primită din unele localităţi şi expediată spre altele).

Cu aceste notaţii putem ataşa fiecărui nod al reţelei de transport


următoarele relaţii:

Totalul _ Cantitatea aflată Producţia netă în nodul i


cantităţilor în tranzit în nodul = (disponibilă pentru a fi expediată
expediate din nodul i spre alte noduri)
i

sau:
n

∑x
k =1
ik −~
xii = a i i = 1,...,n (4.1.1)
k ≠i

Totalul _ Cantitatea aflată


Consum net în
cantităţilor în tranzit în = nodul i
ajunse în nodul i nodul i
sau:
4. Problema de transfer 199
n

∑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)

Costul transporturilor efectuate între cele n localităţi este reprezentat prin


următoarea funcţie ce trebuie minimizată:
n n
(min) f = ∑ ∑ c ij x ij (4.1.4)
i =1 j =1

(unde cii = 0 , i = 1,...,n)

Ansamblul restricţiilor (4.1.1) şi (4.1.2), condiţiile de nenegativitate


(4.1.3) şi funcţia obiectiv (4.1.4) constituie modelul matematic al problemei de

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)

Restricţiile (4.1.1), (4.1.2) ca şi modul de formare al funcţiei obiectiv


(4.1.4) pot fi citite comod pe liniile şi coloanele tabelului (4.1.1).

c11 = 0 c12 . . . . c1n


~
- x11 x12 x1n a1
c21 c22 = 0 . . . . c2n
x21 - x~22 x2n a2
. . . . . . . .
. . . . . . . .
cn1 cn2 . . . . cnn = 0
xn1 xn2 -~
x nn an
b1 b2 . . . . bn L

Tabelul 4.1.1
200 II. PROBLEME DE OPTIMIZARE IN RETELE DE TRANSPORT SI DISTRIBUTIE

4.2 Reducerea problemei de transfer la o problemă clasică de


transport

Să observăm că în nici un nod cantitatea tranzitată nu poate depăşi


“plafonul” L definit în (4.1.5). Pe această bază introducem variabilele
nenegative:

xii = L − x~ii i = 1,..., n

Substituind:
~
xii = L - xii (4.2.1)

în ecuaţiile (4.1.1) şi (4.1.2) problema de transfer se reduce la problema de


transport echilibrată:

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

(min) f = ∑ ∑ cij xij


 i =1 j =1

După rezolvarea problemei (4.2.2), relaţia (4.2.1) ne permite să punem în


evidenţă cantităţile aflate în tranzit în nodurile reţelei.

Exemplul 4.2.1 În reţeaua din figura 4.2.1 nodurile 1 şi 5 sunt surse cu


disponibilele a1 = 300 şi a5 = 200 iar nodurile 3 şi 4 sunt destinaţii cu cererile
b3 = 100 respectiv b4 = 400. Valorile numerice înscrise pe muchii reprezintă
costuri unitare de transport valabile, acolo unde este permis, în ambele sensuri
de parcurgere. Se pune problema determinării unui program de satisfacere a
cererilor la un cost total de transport minim.
9
300Î 1 2
3 2
Atenţie! Rutele {1, 4} şi {1, 3} nu pot fi
4 folosite decât în sensurile indicate de
2 3
săgeţi adică 4→1 şi 3→1.
4 Ø 5
100
12
400 Õ 4 5 Í200
Figura 4.2.1
4. Problema de transfer 201

Condiţia de echilibru şi compatibilitate (4.1.5) este îndeplinită: L = 300 + 200


= 100 + 400. Datele numerice ale problemei de transport echivalente (4.2.2)
apar în tabelul 4.2.1. (Urmărind reţeaua din figura 4.2.1 şase rute orientate au
fost blocate în tabel prin “costul de penalizare” M » 0.)

Componentele soluţiei iniţiale, determinată prin metoda diferenţelor


maxime, sunt înscrise în tabelul 4.2.2 (cifrele înscrise în paranteze indică
ordinea în care au fost făcute alocările!).

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

v1=-11 v2=-2 v3=0 v4=4 v5=-5


(1) (2) u1=11
500 300 * * – – –
200(6) 300(7) u2=2 – * * – –
100(8) 400(4) u3=0 – – * * –
500(3) u4=-4 – – – * –
200(9) 500(5) u5=5 – – * – *

Tabelele 4.2.2 - 4.2.3

În tabelul 4.2.3 mărimile ∆ij = ui + vj, calculate cu ajutorul valorilor ui,


vj înscrise pe margini, sunt trecute doar prin semnul lor; deoarece toate sunt
negative, soluţia iniţială este chiar optimă.

Cantităţile ~xii aflate în tranzit, calculate cu formula (4.2.1) şi cantităţile


xij, i ≠ j, transportate pe rutele permise ale reţelei, sunt indicate în tabelul 4.2.4;
în reţeaua din figura 4.2.2 sunt puse în evidenţă rutele efectiv folosite în
programul de transport şi sensurile deplasărilor.
202 II. PROBLEME DE OPTIMIZARE IN RETELE DE TRANSPORT SI DISTRIBUTIE

~
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

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