Documente Academic
Documente Profesional
Documente Cultură
TEMA: Baze ale unui program liniar în formă standard. Forma explicită a unui program
liniar în raport cu o bază. Soluția asociată unei baze.
2. Ce este o bază a programului (P) ? Câte baze poate avea programul (P) ? Puteți identifica
rapid o bază a programului (P) ?
Soluție : O bază a programului în formă standard (P) este o submatrice patrată inversabilă
de ordinul 3, extrasă din matricea tehnologică A. Programul (P) poate avea cel mult 𝐶 = 10
baze și chiar are 10 baze deoarece orice grup de 3 coloane din A constituie o matrice inversabilă
(≡ determinant nenul !) Baza ușor de identificat este baza unitară :
1 0 0
𝐸 = [𝐴 𝐴 𝐴 ]= 0 1 0
0 0 1
3. i) Să se arate că submatricea
3 5 0
𝐵 = [𝐴 𝐴 𝐴 ]= 0 1 1
8 5 0
este o bază a programului (P) ;
ii) Să se determine forma explicită a programului (P) în raport cu baza B.
Soluție :i) det(𝐵) = 25 ≠ 0 ⟹B este o matrice inversabilă, deci este o bază a programului (P).
ii) Reamintim că rezolvarea programului în formă standard
𝐴𝑥 = 𝑏
(𝑃) 𝑥≥0
(𝑚𝑎𝑥)𝑓 = 𝑐𝑥
înseamnă determinarea unei soluții x* a sistemului 𝐴𝑥 = 𝑏 care să fie admisibilă, adică 𝑥 ∗ ≥ 0,
și să ofere funcției obiectiv f cea mai mare valoare posibilă.
Va fi util să reformulăm rezolvarea programului (P) în următorii termeni :
În raport cu baza 𝐵 = [𝐴 , 𝐴 , 𝐴 ]
- variabilele 𝑥 , 𝑥 , 𝑥 se numesc variabile bazice ;
- celelalte variabile,adică 𝑥 , 𝑥 se numesc variabile nebazice.
În acest cadru, forma explicită a programului (P) în raport cu baza 𝐵 = [𝐴 , 𝐴 , 𝐴 ] este un sistem
de ecuații liniare, echivalent cu sistemul (*), în care :
- variabilele bazice 𝑥 , 𝑥 , 𝑥 sunt explicitate în funcție de cele nebazice 𝑥 , 𝑥 ;
- variabilele bazice sunt eliminate din expresia funcției obiectiv.
Start
3𝑥
+5𝑥 +𝑥 = 150
⎧
+𝑥 +𝑥 = 20
Sistemul (*):
⎨ 8𝑥 +5𝑥 +𝑥 = 300
⎩−50𝑥 −40𝑥 +𝑓 = 0
Pasul 1 Explicităm variabila x1 în prima ecuație a sistemului ; efectuăm următoarele operații
elementare care nu alterează mulțimea soluțiilor:
𝑥 + 𝑥 + 𝑥 = 50 (**)
Pasul 2 Explicităm variabila bazică x2 în a 2-a ecuație a sistemului obținut la pasul 1. Efectuând
operații elementare similare celor descrise la pasul1 obținem sistemul :
1 5 50
⎧ 𝑥 + 𝑥 − 𝑥 =
⎪ 3 3 3
⎪ +𝑥 +𝑥 = 20
8 25 200
⎨ − 𝑥 + 𝑥 +𝑥 =
3 3 3
⎪
⎪ 50 130 4900
+ 𝑥 − 𝑥 +𝑓 =
⎩ 3 3 3
în care x2 apare doar în a 2-a ecuație cu coeficientul +1!
Pasul 3 Explicităm variabila bazică x4 în a 3-a ecuație a sistemului găsit în pasul 2. Calculele sunt
lăsate în seama cititorului (studios…) Obținem forma explicită a programului (P) în raport
cu baza 𝑩 = [𝑨𝟏 , 𝑨𝟐 , 𝑨𝟒 ] :
1 1
⎧ 𝑥 − 𝑥 + 𝑥 = 30
⎪ 5 5
⎪ 8 3
⎪ 𝑥 + 𝑥 − 𝑥 = 12
25 25
⎨ 8 3
− 𝑥 +𝑥 + 𝑥 =8
⎪ 25 25
⎪ 14
⎪ 26
𝑥 + 𝑥 +𝑓 = 1980
⎩ 5 5
Foarte important !
Coeficienții din sistemul (*) precum și coeficienții sistemelor determinate în pașii 1,2 și 3 de mai
sus (toate aceste sisteme sunt achivalente, aceasta însemnând că au aceleași soluții !) au fost
înscriși în următoarele patru tabele :
Start :
x1 x2 x3 x4 x5 f Termeni liberi
3 5 1 0 0 0 150
0 1 0 1 0 0 20
8 5 0 0 1 0 300
-50 -40 0 0 0 1 0
Pasul 1 :
x1 x2 x3 x4 x5 f Termeni liberi
1 5/3 1/3 0 0 0 50
0 1 0 1 0 0 20
0 -25/3 -8/3 0 1 0 -100
0 130/3 50/3 0 0 1 2500
Pasul 2 :
x1 x2 x3 x4 x5 f Termeni liberi
1 0 1/3 -5/3 0 0 50/3
0 1 0 1 0 0 20
0 0 -8/3 25/3 1 0 200/3
0 0 50/3 -130/3 0 1 4900/3
Pasul 3 :
x1 x2 x3 x4 x5 f Termeni liberi
1 0 -1/5 0 1/5 0 30
0 1 8/25 0 -3/25 0 12
0 0 -8/25 1 3/25 0 8
0 0 14/5 0 26/5 1 1980
Se constată fără dificultate că valorile numerice din fiecare tabel – cu excepția primului – se deduc
din tabelul precedent printr-o procedură algoritmică numită pivotare gaussiană (vezi cursul de
algebră liniară) reamintită în anexă.
Notă : Pivoții transformărilor au fost evidențiați în chenar negru. Chenarul roșu delimitează
tabelul dreptunghiular de valori numerice supus pivotării.
𝑓(𝑥̅ ) = 1980 − 𝑥̅ − 𝑥̅ .
Soluție : Treabă simplă ! Uitațivă la sistemul (*) și recapitulați definiția formei explicite. În raport
cu baza unitară, variabilele bazice vor fi 𝑥 , 𝑥 , 𝑥 , celelalte adică 𝑥 , 𝑥 fiind nebazice. În
sistemul (*) variabilele 𝑥 , 𝑥 , 𝑥 sunt explicitate în primele trei ecuații și nu apar în a 4-a ecuație
(ecuația de definiție a funcției obiectiv !) În concluzie, sistemul (*) este forma explicită a
programului (P) în raport cu baza unitară 𝐸 = [𝐴 , 𝐴 , 𝐴 ] :
3𝑥
+5𝑥 +𝑥 = 150
⎧
+𝑥 +𝑥 = 20
⎨ 8𝑥 +5𝑥 +𝑥 = 300
⎩−50𝑥 −40𝑥 +𝑓 = 0
Soluția asociată bazei unitare :
𝑥(𝐸) = (0,0,150,20,300) ⟺ 𝑥 = 0 , 𝑥 = 0 , 𝑥 = 150 , 𝑥 = 20 , 𝑥 = 300
Valoarea funcției obiectiv:
𝑓 𝑥(𝐸) = 0.
coloana
pivotului
linia
p pivotului
Figura 1
Pivotarea gaussiană a tabelului T cu pivotul p înseamnă transformarea tabelului T într-un nou
tabel T’, cu aceleași dimensiuni,după următoarele reguli:
1) Coloana pivotului din T devine coloană unitară în T’ (vezi figura 2)
T T’
0
0
.
.
p 1
0
0
Figura 2
2) Elementele din T situate pe linia pivotului se împart la pivot și rezultatele se
trec în pozițiile corespunzătoare din T’ (vezi figura 3)
T T’
0
0
.
.
p x 1 x’
0
0
𝒙 =𝒙 𝒑
Figura 3
3) Celelalte elemente din T, nesituate pe linia sau coloana pivotului ,se transformă
după regula ilustrată în figura 4 și numită regula dreptunghiului. Rezultatele se trec în
pozițiile corespunzătoare din T’.
T T’
a x x’
p b
𝑥∙𝑝−𝑎∙𝑏
𝑥 =
𝑝
Figura 4
Exemplu de calcul
∑ 𝑎 𝑥 =𝑏 𝑖 = 1, … , 𝑚 𝐴𝑥 = 𝑏
(𝑃) 𝑥 ≥ 0 𝑗 = 1, … , 𝑛 ⟺ 𝑥≥0
(max)𝑓 = ∑ 𝑐 𝑥 (max)𝑓 = 𝑐𝑥
în care:
𝑎 𝑎 ⋯ 𝑎
𝑎 𝑎 ⋯ 𝑎
𝐴= = [𝐴 , 𝐴 , … , 𝐴 ]
⋮ ⋮ ⋯ ⋮
𝑎 𝑎 ⋯ 𝑎
𝑥
𝑥
𝑥= ⋮ este vectorul coloană al variabilelor de decizie,
𝑥
𝑏
𝑏
𝑏= este vectorul coloană al termenilor liberi,
⋮
𝑏
din 𝑅𝑎𝑛𝑔(𝐴) = 𝑚 rezultă că din matricea A se poate extrage cel puțin un grup de m
coloane formând o matrice patrată cu determinantul nenul, deci inversabilă. Un asemenea grup
s-a numit bază a programului (P). Numărul bazelor programului (P) nu depășește
𝑛!
𝐶 =
𝑚! (𝑛 − 𝑚)!
Din 𝑅𝑎𝑛𝑔(𝐴) < 𝑛 rezultă că sistemul liniar 𝐴𝑥 = 𝑏 are o infinitate de soluții (atenție: este posibil
ca nici una dintre aceste soluții să fie admisibilă, adică să aibe toate componenele nenegative,
altfel spus, ipoteza nu implică nicidecum compatibilitatea programului (P)!)
Reamintim că rezolvarea programului (P) înseamnă determinarea unei soluții x* a sistemului Ax=b
care să fie admisibilă ≡ 𝑥 ∗ ≥ 0 și să ofere funcției obiectiv cea mai mare valoare posibilă.
J ≡ mulțimea indicilor coloanelor din A care nu sunt în B; aceste coloane vor forma
submatricea,
𝑆= 𝐴 ∈
𝑐 = [𝑐 , 𝑐 ] cu 𝑐 = [⋯ 𝑐 ⋯] ∈ și 𝑐 = [⋯ 𝑐 ⋯] ∈
Variabilele 𝑥 , 𝑖 ∈ 𝐼 s-au numit variabile bazice iar celelalte adică 𝑥 , 𝑗 ∈ 𝐽 s-au numit
variabile nebazice.
Reamintim că forma explicită a programului (P) în raport cu baza B este un sistem de ecuații
liniare echivalent cu sistemul (*) în care :
- Variabilele bazice 𝑥 , 𝑖 ∈ 𝐼 sunt explicitate în funcție de cele nebazice 𝑥 , 𝑗 ∈ 𝐽 ;
- Variabilele bazice 𝑥 , 𝑖 ∈ 𝐼 sunt eliminate din expresia funcției obiectiv f.
Vom arăta cum se construiește această formă explicită în cazul general (cu această ocazie vom
face și câteva calcule matriciale…)
𝐴𝑥 = 𝑏 ⟺ [𝐵, 𝑆] 𝑥 = 𝑏 ⟺ 𝐵𝑥 + 𝑆𝑥 = 𝑏
𝑥
poate fi rezolvat în raport cu xB :
𝑥 + 𝐵 𝑆𝑥 = 𝐵 𝑏 ⟺ 𝑥 + 𝑆̅𝑥 = 𝑏 unde 𝑆̅ = 𝐵 𝑆 și 𝑏 = 𝐵 𝑏
Punem în evidență componentele masivelor 𝑆̅ și 𝑏 :
𝑆̅ = 𝐵 𝑆 = 𝐵 [⋯ 𝐴 ⋯] ∈ = [⋯ 𝐵 𝐴 ⋯] ∈ = [⋯ 𝐴̅ ⋯] ∈ unde
⋮
𝐴̅ = 𝐵 𝐴 = 𝑎 𝑗 ∈ 𝐽 de unde în final 𝑆̅ = 𝑎 ∈ , ∈
.
⋮ ∈
⋮
𝑏=𝐵 𝑏= 𝑏
⋮ ∈
În concluzie, sistemul:
𝐴𝑥 = 𝑏 ⟺ 𝑎 𝑥 =𝑏 𝑖 = 1, … , 𝑚
𝑥 + 𝑆̅𝑥 = 𝑏 ⟺ 𝑥 + 𝑎 𝑥 =𝑏 𝑖∈𝐼
∈
𝑓 = 𝑐𝑥 = [𝑐 , 𝑐 ] 𝑥 =𝑐 𝑥 +𝑐 𝑥
𝑥
Înlocuind 𝑥 = 𝑏 − 𝑆̅𝑥 obținem
𝑓=𝑐 𝑏 − 𝑆̅𝑥 + 𝑐 𝑥 = 𝑐 𝑏 − (𝑐 𝑆̅ − 𝑐 )𝑥 = 𝑓 ̅ − 𝑐̅ 𝑥 ⟹ 𝑓 + 𝑐̅ 𝑥 = 𝑓 ̅
unde
𝑓 ̅ = 𝑐 𝑏 = 𝑐 𝐵 𝑏 și 𝑐̅ = 𝑐 𝑆̅ − 𝑐 = 𝑐 𝐵 𝑆−𝑐
Se vede că în noua expresie a funcției obiectiv 𝑓 = 𝑓 ̅ − 𝑐̅ 𝑥 ⟺ 𝑓 = 𝑓 ̅ − ∑ ∈ 𝑐̅ 𝑥 nu
apar variabilele bazice 𝑥 , 𝑖 ∈ 𝐼. Coeficienții 𝑐̅ , 𝑗 ∈ 𝐽 se numesc costuri reduse.
Astfel sistemul de ecuații liniare (*), reprezentând programul liniar în formă standard (P),
a fost adus la forma :
⎧ ⎧𝑥 + 𝑎 𝑥 =𝑏 , 𝑖∈𝐼
⎪𝑥 +𝑆̅𝑥 =𝑏 ⎪ ∈
(𝑃 ) ⟺ (𝑃 )
⎨𝑓 +𝑐̅ 𝑥 = 𝑓̅ ⎨ 𝑓
⎪ ⎪ + 𝑐̅ 𝑥 = 𝑓̅
⎩ ⎩ ∈
care constituie forma explicită a programului (P) în raport cu baza B.
𝑓̅ = ∑ ∈ 𝑐 𝑏 (vfo)
𝑐̅ = [⋯ 𝑐̅ ⋯] ∈ = 𝑐 [⋯ 𝐴̅ ⋯] ∈ − [⋯ 𝑐 ⋯] ∈ = ⋯ 𝑐 𝐴̅ − 𝑐 ⋯
∈
⟹
𝑐̅ = 𝑐 𝐴̅ − 𝑐 𝑗 ∈ 𝐽 deci
𝑐̅ = ∑ ∈ 𝑐 𝑎 − 𝑐 𝑗∈𝐽 (cr)
A nu se uita!
Pentru fiecare bază a sa, programul în formă standard (P) are o unică forma explicită.
Programul (P) se poate explicita în atâtea forme câte baze are !!
𝑥(𝐵) = 𝑥 = 𝑏 ⟺ 𝑥 = 𝑏 ,𝑖 ∈ 𝐼 ; 𝑥 = 0 ,𝑗 ∈ 𝐽
𝑥 =0
𝑓 𝑥(𝐵) = 𝑓 ̅
Soluția 𝑥(𝐵) se zice nedegenerată dacă toate valorile 𝑏 , 𝑖 ∈ 𝐼, asociate variabilelor bazice, sunt
nenule. Dacă unele componente 𝑏 sunt nule vom spune că 𝑥(𝐵) este o soluție degenerată.
În continuare, o soluție 𝑥̅ a programului (P) se va numi soluție de bază dacă 𝑥̅ este asociată unei
baze a programului. Criteriul de recunoaștere a soluțiilor de bază este simplu :
Soluția 𝑥̅ = (𝑥̅ , … , 𝑥̅ ) a programului în formă standard (P) este o soluție de bază dacă și numai
dacă coloanele Aj din matricea tehnologică, corespunzătoare componentelor 𝑥̅ nenule, sunt
liniar independente.
Într-adevăr, dacă este așa, atunci 𝑥̅ nu poate avea mai mult de m componente nenule, m fiind
numărul restricțiilor din (P). Dacă numărul acestor componente este exact m, coloanele
corespunzătoare din matricea tehnologică formează o bază B a programului (P) și 𝑥̅ = 𝑥(𝐵). Dacă
numărul componentelor nenule este < 𝑚, coloanele corespunzătoare pot fi completate cu alte
coloane până la o bază în mai multe moduri astfel că 𝑥̅ va fi asociată la mai multe baze !! Prin
urmare, este posibil ca două baze diferite B și B’ să aibe o aceeași soluție asociată 𝑥̅ = 𝑥(𝐵) =
𝑥(𝐵 ) și dacă este așa atunci soluția comună asociată 𝑥̅ este degenerată.
Din cele discutate rezultă că numărul soluțiilor de bază ale programului (P) este finit
nedepășind numărul bazelor.
.
Baza B și soluția asociată x(B) se vor numi admisibile dacă valorile variabilelor bazice din soluție
sunt nenegative : 𝑏 ≥ 0 , 𝑖 ∈ 𝐼. Deoarece numărul bazelor programului (P) este finit urmează că
programul (P) are un număr finit de baze și soluții de bază admisibile.
Pentru comoditatea calculelor ulterioare este util să înscriem constantele formei explicite (PB)
într-un tabel cu formatul :
… ci … … cj …
CB VB VVB … 𝒙𝒊 , 𝒊 ∈ 𝑰 … … 𝒙𝒋 , 𝒋 ∈ 𝑱 …
. . . 0 .
. . . . .
. . . 0 .
ci xi 𝒃𝒊 … 1 … … 𝒂𝒊𝒋 …
. . . . .
. . . . .
. . . 0 .
f 𝒇 … * … … 𝒄𝒋 …
De reținut:
Un tabel simplex conține constantele formei explicite a unui program liniar în formă
standard în raport cu o anumită bază.
Baza se recunoaște prin variabille bazice asociate listate în coloana VB.
Tabelul pune în evidență soluția de bază asociată bazei considerate : valorile variabilelor
bazice sunt listate în coloana VVB. Prin definiție, variabilele nebazice – cele care nu apar în
coloana VB – au valoarea zero.
Conform relației (vfo), valoarea funcției obiectiv în soluția de bază afișată în tabel este
produsul scalar al coloanelor CB și VVB.
Costurile reduse sunt valori numerice asociate variabilelor nebazice; conform relației (cr)
un cost redus 𝑐̅ se obține efectuând produsul scalar al coloanelor CB și « xj » din care se scade
costul cj scris deasupra tabelului simplex. Am putea extinde definiția (cr) a costurilor reduse și la
variabilele bazice dar rezultatul este întotdeauna același:𝑐̅ = 𝑐 − 𝑐 = 0. În tabelul simplex,
« costurile reduse » corespunzătoare variabilelor bazice sunt reprezentate prin *.
Pentru înțelegerea teoriei programării liniare, fundamentale sunt conceptele de bază și soluție
admisibilă de bază (bineînțeles, contează și forma explicită corespunzătoare,pentru că din ea se
citește soluția…) Motivația rezidă în următoarele două rezultate :
Teorema 1 Dacă programul în formă standard (P) este compatibil (adică are soluții
admisibile) atunci are și soluții admisibile de bază.
Teorema 2 (teorema fundamentală a programării liniare) Dacă programul în formă
standard (P) are soluții optime (adică are optim finit) cel puțin una dintre ele este o soluție
admisibilă de bază.
Importanța teoremei 2 este covârșitoare : în baza ei,problema determinării unei soluții optime a
programului în formă standard (P) din mulțimea infinită a tuturor soluțiilor admisibile s-a redus
la căutarea acesteia în mulțimea finită a soluțiilor admisibile de bază !!
Este clar că procedura descrisă este finită dar are serioase neajunsuri:
- Din start trebuie luate în considerare toate cele 𝐶 submatrici patrate de ordinul m care pot
fi extrase din matricea tehnologică A. Testarea inversabilității unei asemenea submatrici B
precum și calculul soluției 𝑥(𝐵) asociate – în caz că B este inversabilă – pot fi făcute simultan.
Numai că, numărul 𝐶 poate excesiv de mare, chiar și pentru valori moderate ale lui m și n. De
exemplu pentru un program liniar în formă standard cu 10 restricții și 20 de variabile, 𝐶 =
184756 și prin urmare vom avea de cercetat 184756 matrici patrate de ordinul 10 !!
- Se poate întâmpla ca după terminarea acestor calcule să nu găsim nici o bază admisibilă,
lucru posibil dacă (P) este un program incompatibil ;
- Presupunând că am găsit baze admisibile și că am identificat soluția de bază care
maximizează valoarea funcției obiectiv, nu suntem siguri că aceasta ar fi și soluția optimă
căutată deoarece s-ar putea ca programul (P) să aibe optim infinit.
Indiferent de situație, un mare volum de calcule și implicit un timp apreciabil sunt irosite cu
generarea soluțiilor neadmisibile de bază care pot fi extrem de numeroase. Această abordare naivă
are o alternativă care, din fericire, s-a dovedit a fi deosebit de eficientă în rezolvarea programelor
liniare. Este vorba de metoda simplex elaborată de matematicianul american GEORGE B.
DANTZIG în 1947.
În esență, metoda simplex este un procedeu de cercetare sistematică a bazelor admisibile ale
unui program liniar în formă standard și a soluțiilor asociate acestor baze. Ea presupune
cunoașterea unei soluții admisibile de bază zisă de start și în continuare construiește un șir de
soluții admisibile de bază, dealungul cărora valoarea funcției obiectiv crește (sau descrește, după
caz) progresiv.
Metoda oferă un test simplu de recunoaștere a optimalității unei soluții admisibile de bază și
deasemeni un test simplu de recunoaștere a optimului infinit.
Cu unele precauții, ușor de îndeplinit, metoda simplex garantează finitudinea procesului iterativ
în sensul că o bază admisibilă cercetată la un moment dat nu mai revine în etapele ulterioare.
Cum numărul bazelor admisibile este finit urmează că într-un număr finit de pași se ajunge fie la
o soluție optimă fie la concluzia că programul are optim infinit.
În această succintă descriere am plecat de la ipoteza cunoașterii unei soluții admisibile de bază,
adică de la premiza că programul de rezolvat este compatibil.Metoda simplex este capabilă să
recunoască incompatibilitatea unui program liniar.
Practica numerică a arătat că numărul soluțiilor de bază efectiv generate de metodă este de regulă
mult mai mic decât numărul total al acestor soluții !
Aplicații
ii) În seminarul trecut am văzut că forma explicită a programului (P) în raport cu baza
unitară 𝐸 = [𝐴 , 𝐴 , 𝐴 ] coincide cu forma standard așa că tabelul simplex asociat acestei baze
arată astfel :
50 40 0 0 0
CB VB VVB x1 x2 x3 x4 x5
0 x3 150 3 5 1 0 0
0 x4 20 0 1 0 1 0
=0 x5 300 8 5 0 0 1
f 0 -50 -40 * * *
2. Se dă programul liniar
(max)𝑓 = 5𝑥 + 3𝑥 + 4𝑥
⎧
⎪ 𝑥 + 2𝑥 + 4𝑥 ≤ 100
(𝑃) 2𝑥 + 𝑥 + 𝑥 ≤ 100
⎨ 𝑥 + 3𝑥 + 3𝑥 = 120
⎪
⎩ 𝑥 ,𝑥 ,𝑥 ≥ 0
Aplicând algoritmul simplex formei standard rezultă că soluția optimă este asociată bazei
𝐵 = [𝐴 , 𝐴 , 𝐴 ]. Determinați această soluție.
Soluție : În raport cu baza 𝐵 = [𝐴 , 𝐴 , 𝐴 ] vectorul variabilelor bazice xB are structura
𝑥
𝑥 = 𝑥
𝑥
Conform teoriei, în soluția asociată bazei 𝐵 = [𝐴 , 𝐴 , 𝐴 ] valorile variabilelor bazice sunt date
de formula:
𝑥 =𝑏=𝐵 𝑏
Determinăm inversa B-1 a matricii B folosind pivotarea gaussiană:
4 1 2 1 0 0
B → 1 2 1 0 1 0 ← E
3 1 3 0 0 1
4 1 1/4 1/2 1/4 0 0
0 7/4 1/2 -1/4 1 0
0 1/4 3/2 -3/4 0 1
1 0 3/7 2/7 -1/7 0
0 1 2/7 -1/7 4/7 0
0 0 10/7 -5/7 -1/7 1
1 0 0 1/2 -1/10 -3/10
E → 0 1 0 0 3/5 -1/5 ← B-1
0 0 1 -1/2 -1/10 7/10
Înlocuind în formulă obținem:
3. Printre soluțiile admisibile ale unui program liniar în formă standard (P) cu trei restricții
și cinci variabile se găsesc și vectorii :
Știind că două și numai două dintre cele patru soluții sunt soluții de bază, care sunt acestea ?
Soluție : În raport cu orice bază a programului (P) există 5 – 3 = 2 variabile nebazice a căror
valoare în soluția de bază asociată este zero. Prin urmare, orice soluție de bază a programului (P)
trebuie să aibe cel puțin două zerouri. În consecință, vectorii 𝑥 și 𝑥 nu sunt soluții de bază !
Cum două dintre cele patru soluții sunt soluții de bază, acestea nu pot fi decât 𝑥 și 𝑥 . Soluția
de bază 𝑥 este degenerată (≡ una dintre cele trei variabile bazice are valoarea zero !) în timp ce
𝑥 este o soluție de bază nedegenerată.
4. În procesul rezolvării unui program liniar de maximizare s-a ajuns la următorul tabel
simplex :
4 3 2 0 0
CB VB VVB x1 x2 x3 x4 x5
x1 10 1 -2 3 0 2
x4 20 0 -1 2 1 1
f
4 3 2 0 0
CB VB VVB x1 x2 x3 x4 x5
4 x1 10 1 -2 3 0 2
0 x4 20 0 -1 2 1 1
f 40 * -11 10 * 8
Deoarece:
Costul redus 𝑐̅ = −11 este negativ;
−2
Coloana "𝑥 " = din tabelul simplex nu are componente pozitive
−1
Algoritmul se oprește, cu concluzia că programul de rezolvat are optim infinit !
Cercetări Operaționale, anul III
Note pentru Seminar 4 Prof. dr. Vasile Teodor NICA
Important: pentru aplicarea algoritmului simplex la rezolvarea unui progam liniar este necesar
ca programul de rezolvat să fie în așa numita formă bună caracterizată astfel:
Pregătirea problemei :
-M în problemele de maximizare ;
+M în problemele de minimizare
(max)𝑓 = 8𝑥 − 6𝑥 + 7𝑥
⎧ 3𝑥 − 𝑥 + 2𝑥 = 30
⎪
(𝑃) 2𝑥 + 𝑥 ≥ 35
⎨ 𝑥 + 3𝑥 ≤ 20
⎪
⎩ 𝑥 ≥ 0, 𝑥 ≥ 0, 𝑥 ≥ 0
i) Aduceți programul (P) la forma standard(FSP) și apoi la forma bună (FBP) deoarece
urmează a fi rezolvat cu algoritmul simplex.
ii) Ce relație există între mulțimile de soluții admisibile A P , AFSP , AFBP ale celor trei
programe ?
3𝑥 − 𝑥 + 2𝑥 = 30
⎧ 2𝑥 + 𝑥 − 𝒙𝟒 = 35
⎪
(𝐹𝑆𝑃) 𝑥 + 3𝑥 + 𝒙𝟓 = 20
⎨ 𝑥 ≥ 0 𝑗 = 1, … ,5
⎪
⎩(max)𝑓 = 8𝑥 − 6𝑥 + 7𝑥 + 𝟎 ∙ 𝒙𝟒 + 𝟎 ∙ 𝒙𝟓
0
Matricea tehnologică conține numai coloana 0 a matricii unitate de ordinul 3 (≡ coloana
1
1 0
coeficienților variabilei x5). Formăm coloanele 0 și 1 adăugând variabilele artificiale x6 și x7 în
0 0
prima, respectiv a doua restricție din (FSP):
3𝑥 − 𝑥 + 2𝑥 + 𝒙𝟔 = 30
⎧ 2𝑥 + 𝑥 −𝑥 + 𝒙𝟕 = 35
⎪
(𝐹𝐵𝑃) 𝑥 + 3𝑥 +𝑥 = 20
⎨ 𝑥 ≥ 0 𝑗 = 1, … ,7
⎪
⎩ (max)𝑓 = 8𝑥 − 6𝑥 + 𝑥 + 0 ∙ 𝑥 + 0 ∙ 𝑥 − 𝑴𝒙𝟔 − 𝑴𝒙𝟕
ii) S-a cerut determinarea soluției optime a programului (P) dar algoritmul simplex se aplică
problemei (FBP)! Este firesc să ne întrebăm, ce relație există între A P și AFBP și cum se găsește
soluția optimă a programului (P) dacă se cunoaște soluția optimă a programului (FBP). Este foarte
important să reținem următoarele:
Conținutul unei iterații ( Atenție: se lucrează în tabelul simplex asociat bazei curente B ! Se
presupune că funcția obiectiv se maximizează !)
Pasul 1 (criteriul de optim) Dacă toate costurile reduse sunt ≥0 Stop: soluția de bază curentă
este optimă. Valorile variabilelor bazice și valoarea funcției obiectiv se citesc din coloana VVB.
Variabilele nebazice au, conform definiției, valoarea zero.
Notă : în aplicațiile practice se trece la interpretarea soluției optime obținute.
În caz contrar se trece la :
Pasul 4 (criteriul de ieșire din bază) Se determină indicele bazic 𝑟 ∈ 𝐼 din relația :
𝑏 𝑏
= 𝑚𝑖𝑛 , 𝑖 ∈ 𝐼 cu 𝑎 >0
𝑎 𝑎
Coloana Ar părăsește baza curentă.
prin pivotare gaussiană cu pivotul 𝑎 > 0 a formei explicite în raport cu baza veche B.
Explicații : La iterația 1
Soluția asociată bazei de start [𝐴 , 𝐴 , 𝐴 ] are componentele:
𝑥 = 0, 𝑥 = 0, 𝑥 = 0, 𝑥 = 0, 𝑥 = 20, 𝑥 = 30, 𝑥 = 35
Pasul 1 Această soluție nu este optimă deoarece costurile reduse 𝑐̅ și 𝑐̅ sunt negative.
3
Pasul 2 Intră în bază coloana 𝐴 = 2 deoarece costul redus 𝑐̅ = −5𝑀 − 8 este cel mai mic
1
cost redus.
Pasul 3 Nu suntem în situația de optim infinit (de ce ?)
Pasul 4 În dreapta primului tabel simplex sunt calculate niște rapoarte al căror minim determină
1
coloana care părăsește baza :iese coloana 𝐴 = 0 .
0
Pasul 5 Pivotăm primul table simplex cu pivotul încadrat 𝑎 =3
La iterația 2
Soluția asociată bazei curente [𝐴 , 𝐴 , 𝐴 ] are componentele :
𝑥 = 10, 𝑥 = 0, 𝑥 = 0, 𝑥 = 0, 𝑥 = 10, 𝑥 = 0, 𝑥 = 15
La iterația 3
Soluția asociată bazei [𝐴 , 𝐴 , 𝐴 ] cu componentele
𝑥 = 13, 𝑥 = 9, 𝑥 = 0, 𝑥 = 0, 𝑥 = 7, 𝑥 = 0, 𝑥 = 0
este soluția optimă a (FBP).Ignorând valorile nule ale variabilelor artificiale x 6 și x7 obținem
soluția optimă a formei standard (FSP). Lăsând la o parte valorile variabilelor de abatere x 4=0 și
x5=7 se găsește soluția optimă a programului original (P) :
𝑥 ∗ = 13 , 𝑥 ∗ = 9 , 𝑥 ∗ = 0 valoarea maximă a funcției obiectiv 𝑓(𝑥 ∗ ) = 50
(min)𝑓 = 𝑥 − 3𝑥 + 2𝑥
⎧ 𝑥 − 2𝑥 + 𝑥 ≥ 3
⎪
(𝑃) 2𝑥 + 𝑥 − 𝑥 = 7
⎨ 𝑥 + 𝑥 + 2𝑥 ≤ 8
⎪
⎩ 𝑥 ≥ 0, 𝑥 ≥ 0, 𝑥 ≥ 0
𝑥 − 2𝑥 + 𝑥 − 𝑥 + 𝒙𝟔 =3
⎧ 2𝑥 + 𝑥 − 𝑥 + 𝒙𝟕 =7
⎪
(𝐹𝐵𝑃) 𝑥 + 𝑥 + 2𝑥 +𝑥 =8
⎨ 𝑥 ≥ 0 𝑗 = 1, … ,5
⎪
⎩(min)𝑓 = 𝑥 − 3𝑥 + 2𝑥 + 0 ∙ 𝑥 + 0 ∙ 𝑥 + 𝑴𝒙𝟔 + 𝑴𝒙𝟕
Aplicăm algoritmul simplex programului (FBP) luând ca bază admisibilă de start baza unitară
𝐸 = [𝐴 , 𝐴 , 𝐴 ]. Mare atenție : coloanele unitare 𝐴 , 𝐴 , 𝐴 sunt listate în E in ordinea în care
formează matricea unitate !!
1 -3 2 0 0 M M
CB VB VVB x1 x2 x3 x4 x5 x6 x7
M x6 3 1 -2 1 -1 0 1 0
M x7 7 2 1 -1 0 0 0 1
0 x5 8 1 1 2 0 1 0 0
f 10M 3M-1 -M+3 -2 -M * * *
1 x1 3 1 -2 1 -1 0 1 0
M x7 1 0 5 -3 2 0 -2 1
0 x5 5 0 3 1 1 1 -1 0
f M+3 * 5M+1 -3M-1 2M-1 * -3M+1 *
1 x1 17/5 1 0 -1/5 -1/5 0 1/5 2/5
-3 x2 1/5 0 1 -3/5 2/5 0 -2/5 1/5
0 x5 22/5 0 0 14/5 -1/5 1 1/5 -3/5
f 14/5 * * -2/5 -7/5 * 7/5-M -1/6-M
5. Să se scrie forma explicită a programului (FSP) din exercițiul 4 în raport cu baza optimă.
1 -3 2 0 0
CB VB VVB x1 x2 x3 x4 x5
1 x1 17/5 1 0 -1/5 -1/5 0
-3 x2 1/5 0 1 -3/5 2/5 0
0 x5 22/5 0 0 14/5 -1/5 1
f 14/5 * * -2/5 -7/5 *
1 1 17
⎧𝑥 − 𝑥 − 𝑥 =
⎪ 5 5 5
⎪ 3 2 1
⎪ 𝑥 − 𝑥 + 𝑥 =
5 5 5
⎨ 14 1 22
𝑥 − 𝑥 +𝑥 =
⎪ 5 5 5
⎪ 2 7
⎪ 14
− 𝑥 − 𝑥 +𝑓 =
⎩ 5 5 5
Soluția optimă a programului (FSP), asociată bazei B, are componentele 𝑥(𝐵) = , , 0,0,
și oferă funcției obiectiv valoarea 𝑓 𝑥(𝐵) = .
6. (un progam liniar cu o infinitate de soluții optime) Să se rezolve programul liniar :
(min)𝑓 = 𝑥 + 𝑥 + 𝑥
𝑥 + 2𝑥 + 3𝑥 = 6
(𝑃)
4𝑥 + 3𝑥 + 2𝑥 = 7
𝑥 ≥ 0, 𝑥 ≥ 0, 𝑥 ≥ 0
Soluție : Programul (P) este în formă standard dar nu este în formă bună intrucât matricea
tehnologică nu conține submatricea unitate de ordinul 2.Forma bună :
𝑥 + 2𝑥 + 3𝑥 + 𝑥 =6
⎧ 4𝑥 + 3𝑥 + 2𝑥 +𝑥 =7
(𝐹𝐵𝑃) 𝑥 ≥ 0 𝑗 = 1, … ,5
⎨
⎩(min)𝑓 = 𝑥 + 𝑥 + 𝑥 + 𝑀 ∙ 𝑥 + 𝑀 ∙ 𝑥
1 1 1 M M
CB VB VVB x1 x2 x3 x4 x5
M x4 6 1 2 3 1 0
M x5 7 4 3 2 0 1
f 13M 5M-1 5M-1 5M-1 * *
M x4 17/4 0 5/4 5/2 1 -1/4
1 x1 7/4 1 3/4 1/2 0 1/4
f (17/4)M+(7/4) * (5/4)M-(1/4) (5/2)M-(1/2) * -
1 x3 17/10 1 1/2 1 2/5 -1/10
1 x1 9/10 0 1/2 0 -1/5 3/10
f 13/5 * 0 * - -
1 x3 4/5 -1 0 1 3/5 -2/5
1 x2 9/5 2 1 0 -2/5 3/5
f 13/5 0 * * - -
Soluția afișată în al 3-lea table simplex este optimă deoarece toate costurile reduse 𝑐̅ , 𝑐̅ , 𝑐̅ sunt
≤0 (problemă de minimizare!) Faptul că 𝑐̅ = 0 semnalează prezența unei alte soluții optime de
bază, afișată în tabelul 4.
În concluzie, programul (P) are doă soluții optime de bază :
9 17 9 4
𝑥∗ = ,0 , și 𝑥 ∗ = 0 , ,
10 10 5 5
Programul mai are și alte soluții optime ( o infinitate !) care sunt combinații convexe ale
soluțiilor de bază 𝑥 ∗ și 𝑥 ∗ , adică au forma :
𝑥 ∗ = (1 − 𝛼)𝑥 ∗ + 𝛼𝑥 ∗ cu 0 ≤ 𝛼 ≤ 1
sau, pe componente :
9 9
⎧𝑥 ∗ = − 𝛼
⎪ 10 10
9
𝑥∗ ≡ 𝑥∗ = 𝛼 0≤𝛼≤1
⎨ 5
⎪ ∗ 17 9
⎩ 𝑥 = − 𝛼
10 10
(max)𝑓 = 3𝑥 + 4𝑥
⎧
⎪ −3𝑥 + 4𝑥 ≤ 12
(𝑃) −2𝑥 + 𝑥 ≤ 2
⎨ 𝑥 − 2𝑥 ≤ 2
⎪
⎩ 𝑥 ≥ 0, 𝑥 ≥ 0
Soluție : Forma standard coincide cu forma bună :
−3𝑥 +4𝑥 +𝑥 = 12
⎧
⎪ −2𝑥 +𝑥 +𝑥 =2
(𝐹𝑆𝑃) ≡ (𝐹𝐵𝑃) 𝑥 −2𝑥 +𝑥 = 2
⎨ 𝑥 ≥ 0 𝑗 = 1, … ,5
⎪
⎩(max)𝑓 = 3𝑥 + 4𝑥 + 0 ∙ 𝑥 + 0 ∙ 𝑥 + 0 ∙ 𝑥
3 4 0 0 0
CB VB VVB x1 x2 x3 x4 x5
0 x3 12 -3 4 1 0 0
0 x4 2 -2 1 0 1 0
0 x5 2 1 -2 0 0 1
f 0 -3 -4 * * *
0 x3 4 5 0 1 -4 0
4 x2 2 -2 1 0 1 0
0 x5 6 -3 0 0 2 1
f 8 -11 * * 4 *
3 x1 4/5 1 0 1/5 -4/5 0
4 x2 18/5 0 1 2/5 -3/5 0
0 x5 42/5 0 0 3/5 -2/5 1
f 84/5 * * 11/5 -24/5 *
Probleme propuse
(max)𝑓 = 2𝑥 + 3𝑥
⎧
⎪ 2𝑥 + 𝑥 ≥ 40
(𝑃) 𝑥 + 3𝑥 ≥ 30
⎨ 𝑥 + 𝑥 ≤ 30
⎪
⎩ 𝑥 ≥ 0 ,𝑥 ≥ 0
(min)𝑓 = 5𝑥 − 𝑥 − 2𝑥
⎧
⎪ 𝑥 + 3𝑥 + 2𝑥 = 12
(𝑃) 6𝑥 + 2𝑥 − 3𝑥 ≤ 6
⎨ 2𝑥 − 𝑥 + 4𝑥 ≥ 4
⎪
⎩ 𝑥 ≥ 0, 𝑥 ≥ 0, 𝑥 ≥ 0
Indicăție : se va maximiza funcția −𝑓 = −5𝑥 + 2𝑥 + 𝑥
Cercetări Operaționale, anul III
Note pentru Seminarul5 Prof. dr. Vasile Teodor NICA
Considerăm programul liniar în formă standard (în notațiile introduse în prelegerile anterioare):
𝐴𝑥 = 𝑏
(𝑃) 𝑥≥0
(max)𝑓 = 𝑐𝑥
În raport cu o bază oarecare B a programului (P) au fost definite următoarele concepte :
Este clar că dacă baza B este simultan primal și dual admisibilă atunci ea este chiar optimă în
sensul că soluția asociată este o soluție optimă a programului (P) !
Algoritmul simplex, prezentat în cursurile anterioare și căruia îi vom zice în continuare
algoritmul simplex primal, determină o bază optimă prin generarea unei secvențe finite de baze
primal admisibile. Pentru pornire este necesară cunoașterea unei asemenea baze.
Algoritmul simplex dual, datorat lui Lemke (1953) determină o bază optimă prin generarea unei
secvențe finite de baze dual admisibile și are nevoie la start de o asemenea bază.
Start : Se presupun cunoscute o bază dual admisibilă B împreună cu tabelul simplex asociat TB
Pasul 1 (testul de optim) Dacă 𝑏 ≥ 0 , 𝑖 ∈ 𝐼 (adică toate componentele coloanei VVB sunt
nenegative Stop : soluția asociată bazei B este optimă (fiind simultan primal și dual
admisibilă !) În caz contrar se trece la :
Coloana Ak intră în baza curentă. Atenție: |𝑥| înseamnă valoarea absolută a numărului real x.
Pasul 5 (Pivotare) Se construiește tabelul simplex TB’ asociat bazei B’, rezultată din B prin
înlocuirea coloanei Ar cu coloana Ak , prin pivotarea tabelului simplex TB cu pivotul 𝑎 < 0.
Observații :
- Alegerea coloanei care părăsește baza curentă după relația (*) are menirea de a accelera
procesul iterativ.
- Alegerea coloanei care intră în baza curentă după relația (**) ne asigură că și noua bază va
fi dual admisibilă!
- Atenție: algoritmul simplex dual nu trebuie privit ca o alternativă a algoritmului
simplex primal ! În principiu, orice program liniar se va rezolva cu algoritmul simplex
primal și numai în acele cazuri în care vor rezulta baze dual admisibile se va aplica
algoritmul simplex dual !
Să presupunem că programul în formă standard (P) a fost rezolvat și are optim finit; fie (P’)
programul linear derivat din (P) prin adăugarea unei noi restricții :
𝑙𝑥 ≤ 𝛽 ⟺ 𝑙 𝑥 + 𝑙 𝑥 + ⋯ + 𝑙 𝑥 ≤ 𝛽
Bineînțeles, programul « extins » (P’) ar putea fi rezolvat de sine stătător cam cu același efort
de calcul ca și (P) pentru că cele două programe nu diferă decât printr-o restricție. Totuși, faptul
că (P’) nu diferă « prea mult » de (P), sugerează ideea că (P’) ar putea fi rezolvat cu un efort
de calcul mai mic dacă se utilizează rezultatele rezolvării programului original (P) !
Presupunem că programul original (P) a fost rezolvat cu ajutorul algoritmului simplex și are o
soluție optimă x*, asociată unei baze B:
𝑥 ∗ = 𝑥(𝐵)
și extrasă din tabelul simplex TB corespunzător. Sunt posibile două situații:
x* verifică restricția suplimentară; atunci x*este o soluție optimă și pentru programul extins;
x* nu verifică restricția adăugată. În acest caz vom face următoarele operații:
Cu siguranță 𝛽̅ < 0 deoarece soluția optimă 𝑥 ∗ = 𝑥(𝐵) a programului (P) nu verifică restricția
adăugată.
𝑥(𝐵)
3) Soluția 𝑥 = se dovedește a fi o soluție dual admisibilă a programului
𝑥 = 𝛽̅
extins (P’). Se completează tabelul simplex TB - optim pentru problema originală, cu o nouă linie
în care apar coeficienții din egalitatea (*)și se aplică algoritmul simplex dual.
Două rezultate sunt posibile : ori se găsește soluția optimă a programului extins ori acesta
este incompatibil.
Aplicații
3𝑥 − 2𝑥 + 𝑥 ≥ 8
2𝑥 + 𝑥 + 2𝑥 ≥ 8
𝑥 ≥ 0, 𝑥 ≥ 0, 𝑥 ≥ 0
(min)𝑓 = 6𝑥 + 𝑥 + 3𝑥
Baza unitară [𝐴 , 𝐴 ] este dual admisibilă (vezi primul tabel simplex!!) așa că se poate aplica
6 1 3 0 0
CB VB VVB x1 x2 x3 x4 x5
0 x4 -8 -3 2 -1 1 0
0 x5 -8 -2 -1 -2 0 1
f 0 -6 -1 -3 * *
6 x1 8/3 1 -2/3 1/3 -1/3 0
0 x5 -8/3 0 -7/3 -4/3 -2/3 1
f 16 * -5 -1 -2 *
6 x1 2 1 -5/4 0 -1/2 1/4
3 x3 2 0 7/4 1 1/2 -3/4
f 18 * -13/4 * -3/2 -3/4
Iterația 1
Iterația 2
Iterația 3
Soluție : i) Tabelul simplex asociat bazei [𝐴 , 𝐴 ] este alcătuit din constantele formei explicite
cerute :
5 1 1
⎧ 𝑥 − 𝑥 − 𝑥 + 𝑥 =2
⎪ 4 2 4
⎪ 7 1 3
𝑥 +𝑥 + 𝑥 − 𝑥 =2
⎨ 4 2 4
⎪
⎪ 13 3 3
− 𝑥 − 𝑥 − 𝑥 +𝑓 = 18
⎩ 4 2 4
6 1 3 0 0 0
CB VB VVB x1 x2 x3 x4 x5 x6
6 x1 2 1 -5/4 0 -1/2 1/4 0
3 x3 2 0 7/4 1 1/2 -3/4 0
0 x6 -1 0 -1 0 0 0 1
f 18 * -13/4 * -3/2 -3/4 *
6 x1 13/4 1 0 0 -1/2 1/4 -5/4
3 x3 1/4 0 0 1 1/2 -3/4 7/4
1 x2 1 0 1 0 0 0 -1
f 85/4 * * * -3/2 -3/4 -13/4
+
Într-o singură iterație, pentru programul extins, a rezultat următoarea soluție optimă :
13 1 85
𝑥 ∗∗ = , 𝑥 ∗∗ = 1 , 𝑥 ∗∗ = (min)𝑓 =
4 4 4
5 1 1 7 1 3
𝑥 = 2+ 𝑥 + 𝑥 − 𝑥 ; 𝑥 = 2− 𝑥 − 𝑥 + 𝑥
4 2 4 4 2 4
Soluție :
Forma standard :
3𝑥+2𝑥 −𝑥 =3
⎧
⎪ 4𝑥+3𝑥 −𝑥 =6
(𝐹𝑆𝑃) 𝑥+2𝑥 +𝑥 = 3
⎨ 𝑥 ≥ 0 𝑗 = 1, … ,5
⎪
⎩(min)𝑓 = 2𝑥 + 𝑥 + 0 ∙ 𝑥 + 0 ∙ 𝑥 + 0 ∙ 𝑥
Înmulțim primele două ecuații cu -1 pentru a creea baza unitară :
−3𝑥 −2𝑥 +𝑥 = −3
⎧
⎪ −4𝑥 −3𝑥 +𝑥 = −6
(FSP) 𝑥 +2𝑥 +𝑥 = 3
⎨ 𝑥 ≥ 0 𝑗 = 1, … ,5
⎪
⎩(min)𝑓 = 2𝑥 + 𝑥 + 0 ∙ 𝑥 + 0 ∙ 𝑥 + 0 ∙ 𝑥
Tabelul simplex asociat bazei unitare [𝐴 , 𝐴 , 𝐴 ] arată că aceasta este dual admisibilă și ca
urmare se poate aplica algoritmul simplex dual.
2 1 0 0 0
CB VB VVB x1 x2 x3 x4 x5
0 x3 -3 -3 -2 1 0 0
0 x4 -6 -4 -3 0 1 0
0 x5 3 1 2 0 0 1
f 0 -2 -1 * * *
0 x3 1 -1/3 0 1 -2/3 0
1 x2 2 4/3 1 0 -1/3 0
0 x5 -1 -5/3 0 0 2/3 1
f 2 -2/3 * * -1/3 *
0 x3 6/5 0 0 1 -4/5 -1/5
1 x2 6/5 0 1 0 1/5 4/5
2 x1 3/5 1 0 0 -2/5 -3/5
f 12/5 * * * -3/5 -2/5
4 1 6
⎧ 𝑥 − 𝑥 − 𝑥 =
⎪ 5 5 5
⎪ 1 4 6
⎪ 𝑥 + 𝑥 + 𝑥 =
5 5 5
⎨ 𝑥 2 3 3
− 𝑥 − 𝑥 =
⎪ 5 5 5
⎪ 3
⎪ 2 12
− 𝑥 − 𝑥 +𝑓 =
⎩ 5 5 5
ii) Soluția optimă 𝑥 ∗ = , 𝑥 ∗ = a programului (P) nu verifică restricția suplimentară :
9
𝑥∗ + 𝑥∗ = <2
5
Trecem la reoptimizare :
- Aducem restricția suplimentară la formatul din teorie, adică inegalitate de tipul ≤ , după
care o transformăm în egalitate prin introducerea unei variabile de abatere :
𝑥 + 𝑥 ≥ 2 ⟹ −𝑥 − 𝑥 ≤ −2 ⟹ −𝑥 − 𝑥 + 𝑥 = −2
În relația obținută apar variabilele bazice 𝑥 , 𝑥 care trebuie eliminate; drept care:
- Din tabelul simplex optim (sau din forma explicită, că este același lucru) extragem
variabilele bazice 𝑥 , 𝑥 în funcție de cele nebazice 𝑥 , 𝑥 :
3 2 3 6 1 4
𝑥 = + 𝑥 + 𝑥 ; 𝑥 = − 𝑥 − 𝑥
5 5 5 5 5 5
și le înlocuim în relația suplimentară :
3 2 3 6 1 4 1 1 1
− − 𝑥 − 𝑥 − + 𝑥 + 𝑥 + 𝑥 = −2 ⟹ − 𝑥 + 𝑥 + 𝑥 = −
5 5 5 5 5 5 5 5 5
- Coeficienții ecuației obținute se adaugă la tabelul simplex optim al programului (FSP). Se
obține tabelul simplex asociat unei baze dual admisibile a problemei extinse. În continuare se
aplică algoritmul simplex dual.
2 1 0 0 0 0
CB VB VVB x1 x2 x3 x4 x5 x6
0 x3 6/5 0 0 1 -4/5 -1/5 0
1 x2 6/5 0 1 0 1/5 4/5 0
2 x1 3/5 1 0 0 -2/5 -3/5 0
0 x6 -1/5 0 0 0 -1/5 1/5 1
f 12/5 * * * -3/5 -2/5 *
0 x3 2 0 0 1 0 -1 -4
1 x2 1 0 1 0 0 1 1
2 x1 1 1 0 0 0 -1 -2
0 x4 1 0 0 0 1 -1 -5
f 3 * * * * -1 -3
2. O fabrică de ciment produce două tipuri de ciment C1 șiC2. Pentru următoarea săptămână sunt
programate realizarea a 1500 t ciment C1 și a 2400 t ciment C2. Fabrica are două instalații I1 și I2
cu următoarele caracteristici:
Pe fiecare ciclu de fabricație instalația I1 poate produce 80 t ciment C1 sau 120 t ciment
C2 în timp ce I2 poate produce 160 t ciment C1sau 180 t ciment C2 ;
Un ciclu de fabricație durează 8 ore pentru cimentul C1 și 6 ore pentru cimentul C2
indiferent de instalația producătoare ;
In următoarea săptămână, fondurile de timp productiv sunt de 120 ore pentru instalația I1
și de 100 ore pentru instalația I2;
Costurile de producție (u.m. pe tona de ciment) variază funcție de marca cimentului și
instalația producătoare așa cum rezultă din tabelul alăturat: I1 I2
Cum vor fi folosite cele două instalații pentru ca programul săptămânii C1 30 25
următoare să fie realizat cu costuri minime? C2 20 15
Analog
Cantitatea totală de ciment
= 120𝑥 + 180𝑥
C2 ce urmează a fi produsă
Atunci
Realizarea cantităților planificate se formalizează în relațiile:
80𝑥 + 160𝑥 ≥ 1500 (1)
120𝑥 + 180𝑥 ≥ 2400 (2)
Pe instalația I1 sunt programate x11 cicluri pentru cimentul C1 necesitând 8x11 ore din timpul
disponibil al instalației și alte x21 cicluri pentru cimentul C2 care se realizează în 6x21 ore. În
consecință, producția de ciment programată pe instalația I1 se va realiza în 8𝑥 + 6𝑥 ore. Acest
necesar de timp trebuie să se încadreze în fondul de timp disponibil al instalației I 1 :
8𝑥 + 6𝑥 ≤ 120 (3)
Analog, încadrarea timpului necesar realizării producției de ciment pe instalația I2 în fondul de
timp disponibil al acestei instalații conduce la relația :
8𝑥 + 6𝑥 ≤ 100 (4)
- Formulați un program bivalent pentru alegerea acelor proiecte care maximizează valoarea
netă prezentă a profitului total.
- Ce modificare intervine în programul inițial dacă trebuie realizat măcar unul dintre proiectele
de extindere a capacităților de depozitare
- Ce modificare intervine în programul inițial dacă alegerea proiectulu 6 implică neapărat
realizarea proiectului 5?
Observații utile
Dacă x este o variabilă bivalentă atunci și 1-x este o variabilă bivalentă ;
Dacă y și z sunt variabile nenegative atunci (𝑦 = 0 și 𝑧 = 0) ⟺ 𝑦 + 𝑧 = 0;
Dacă y și z sunt variabile nenegative atunci (𝑦 = 0 ⟹ 𝑧 = 0) ⟺ 𝑧 ≤ 𝑦.
O valorificare cât mai bună a celor trei resurse înseamnă determinarea valorilor variabilelor de
decizie 𝑥 , 𝑥 , 𝑥 așa încât diferențele de mai sus să fie cât mai mici.
O modalitate de a realiza acest deziderat ar fi minimizarea celei mai mari diferențe:
min 𝑦
𝑦 = 𝑚𝑎𝑥 45 − (𝑥 + 4𝑥 + 10𝑥 ), 30 − (𝑥 + 6𝑥 + 8𝑥 ), 20 − (𝑥 + 𝑥 + 2𝑥 )
unde 𝑥 , 𝑥 , 𝑥 satisfac toate condițiile din modelul (𝑃 )
Pentru a transforma acest model într-un program liniar uzual înlocuim relația de definiție a
variabilei y cu inegalitățile :
45 − (𝑥 + 4𝑥 + 10𝑥 ) ≤ 𝑦
1
30 − (𝑥 + 6𝑥 + 8𝑥 ) ≤ 𝑦
2
20 − (𝑥 + 𝑥 + 2𝑥 ) ≤ 𝑦
Din relația de definiție a lui y rezultă că dacă 𝑥 , 𝑥 , 𝑥 au valori întregi atunci y este sau un număr
întreg sau un număr cu partea fracționară 0.5 ; în consecință, 𝑧 = 2𝑦 vafi cu siguranță un număr
întreg !
Înlocuind 𝑦 = obținem în final programul întreg total :
𝑥 + 4𝑥 + 10𝑥 ≤ 45
⎧
⎪ 𝑥 + 6𝑥 + 8𝑥 ≤ 60
⎪ 𝑥 + 𝑥 + 2𝑥 ≤ 20
(𝑃 ) 2𝑥 + 8𝑥 + 20𝑥 +𝑧 ≥ 90
⎨ 𝑥 + 6𝑥 + 8𝑥 +𝑧 ≥ 60
⎪ 2𝑥 + 2𝑥 + 4𝑥 +𝑧 ≥ 40
⎪ 𝑥 ,𝑥 ,𝑥 ,𝑧 ≥ 0 , î𝑛𝑡𝑟𝑒𝑔𝑖
⎩ min 0.5𝑧
Variabilă continuă ≡ variabilă care, o dată cu două valori permise, poarte lua orice valoare
intermediară ; de regulă o variabilă continuă x satisface numai condiția de nenegativitate x ≥0 ;
Variabilă întreagă ≡ variabilă ale cărei valori permise sunt numere întregi ;
Variabilă bivalentă ≡ variabilă întreagă cu numai două valori permise 0 și 1;
Problemă de programare în numere întregi sau program întreg ≡ program (liniar de
regulă) în care una sau mai multe variabile sunt întregi. Programul se zice total dacă toate
variabilele sunt întregi și mixt dacă utilizează atât variabile întregi cât și variabile continue.
Fie (P) un program întreg total. Eliminând condiția de integritate impusă variabilelor
întregi se obține un program liniar uzual notat (PL) și numit programul relaxat. Este evident că
orice soluție admisibilă a progamului întreg (P) este o soluție admisibilă și pentru programul
relaxat, nu și reciproc, deoarece (PL) are, de regulă, și soluții admisibile cu componente
fracționare. Soluția optimă a programului relaxat se va numi soluție optimă fracționară pentru
a o deosebi de soluția optimă întreagă a programului (P).
Programul (P) și relaxatul său (PL) au aceeași funcție obiectiv.Valorile acesteia în soluția
optimă întreagă, respectiv fracționară se vor numi optim întreg respectiv optim fracționar.
Exemplul 1.
Program întreg total Programul relaxat
(max)𝑓 = 2𝑥 + 𝑥
⎧ (max)𝑓 = 2𝑥 + 𝑥
𝑥 +𝑥 ≤5 ⎧
⎪ ⎪ 𝑥 +𝑥 ≤5
−𝑥 + 𝑥 ≤ 0
(𝑃) (𝑃𝐿) −𝑥 + 𝑥 ≤ 0
⎨ 6𝑥 + 2𝑥 ≤ 21 ⎨ 6𝑥 + 2𝑥 ≤ 21
⎪ 𝑥 ≥ 0, 𝑥 ≥ 0 ⎪
⎩ 𝑥 ≥ 0, 𝑥 ≥ 0
⎩ 𝑥 , 𝑥 î𝑛𝑡𝑟𝑒𝑔𝑖
(Ambele programe sunt rezolvate grafic în figura 1 !)
Soluția optimă întreagă Soluția optimă fracționară
𝑥 = (3,1) ⟺ 𝑥 = 3, 𝑥 = 1 𝑥∗ = , ⟺ 𝑥∗ = , 𝑥∗ =
Optimul întreg 𝑓(𝑥 ) = 7 𝑂𝑝𝑡𝑖𝑚𝑢𝑙 𝑓𝑟𝑎𝑐ț𝑖𝑜𝑛𝑎𝑟 𝑓(𝑥 ∗ ) = =7
În figura 1, mulțimea APL a soluțiilor admisibile ale programului relaxat (PL) este mulțimea
convexă și poliedrală OABC.
În aceeași figură au fost puse în evidență – prin mici discuri albe - punctele cu coordonate întregi
(0 , 0) , (1 , 0) , (2 , 0) , (3 , 0) , (1 , 1) , (2 , 1) , (3 , 1) , (2 , 2)
care formează mulțimea soluțiilor admisibile întregi AP ale programului (P).
Translatând dreapta de nivel a funcției obiectiv în direcția maximizării se găsesc soluțiile optime
– fracționară și întreagă – ale celor două programe.
Se observă că soluția optimă întreagă nu este vârf al mulțimii A PL și ca urmare algoritmul simplex
nu o recunoaște ! Singurele soluții recunoscute de algoritm sunt cele patru vârfuri O,A,B,C ale
mulțimii APL ce corespund soluțiilor admisibile de bază ale formei standard !!
Și totuși, un program liniar întreg poate fi rezolvat ca un program liniar uzual. Într-adevăr,să
punem în evidență acoperirea convexă Conv(AP) a mulțimii soluțiilor admisibile întregi ale
programului (P),adică cea mai mică mulțime convexă care conține cele opt puncte.În figura 1
Conv(AP) este mulțimea poliedrală OMNP. Evident, vârfurile acestei mulțimi sunt soluții întregi
și dacă vom maximiza funcția obiectiv pe ea vom regăsi soluția întreagă x0 !
În concluzie, putem rezolva un program liniar întreg ca o problemă de programare liniară
uzuală cu algoritmul simplex, cu condiția să știm să descriem în limbaj de inecuații liniare
acoperirea convexă a soluțiilor întregi.
În cazul studiat, Conv(AP) se compune din soluțiile sistemului :
−𝑥 + 𝑥 ≤ 0 ← corespunde marginii 𝑂𝑃
𝑥 + 𝑥 ≤ 4 ← corespunde marginii 𝑃𝑁
𝑥 ≤ 3 ← corespunde marginii 𝑀𝑁
𝑥 ≥ 0, 𝑥 ≥ 0
Atașând la acest sistem funcția obiectiv 𝑓 = 2𝑥 + 𝑥 și aplicând algoritmul simplex se găsește
soluția optimă întreagă x0 = (3,1).
𝑥 ≥0
𝑥 +𝑥 ≤5 −𝑥 + 𝑥
≤0
C
Dreaptă de nivel a
B
Soluția optimă fracționară 𝑥 ∗ = ,
funcției obiectiv P
Max f
N
Soluția optimă întreagă 𝑥 = (3,1)
𝑥 ≥0
O M A
𝑥
6𝑥 + 2𝑥 ≤ 21
Figura 1
Conceptul de tăietură
La prima vedere, concluzia de mai sus pare a fi fără valoare deoarece s-a bazat pe cunoașterea
apriorică a soluțiilor întregi, lucru imposibil de făcut în general. Teoria ne asigură că descrierea
ecuațională a mulțimii Conv(AP) este posibilă fără generarea soluțiilor admisibile întregi sau
măcar a unora dintre ele (teorema lui Chvatal, 1973).Acest rezultat nu are însă o valoare practică
deoarece implică un volum imens de calcule.
Exemplul 2. Vom arăta cum se obțin restricțiile care definesc mulțimea Conv(AP) ≡ OMNP
vizualizată în figura 1.
Notăm cu E1 , E2 , E3 restricțiile programului original (P) :
𝑥 + 𝑥 ≤ 5 (𝐸 ); −𝑥 + 𝑥 ≤ 0 (𝐸 ); 6𝑥 + 2𝑥 ≤ 21 (𝐸 );
(𝐸 ) ⟹ 𝑥 + 𝑥 ≤ ⟹ 𝑥 ≤ 3 (deoarece 𝑥 ≥ 0!)
⟹ 𝒙𝟐 ≤ 𝟐 (E4)
(𝐸 ) + 4(𝐸 ) ⟹ 6𝑥 + 6𝑥 ≤ 29 ⟹ 𝑥 + 𝑥 ≤ 4 ⟹ 𝒙𝟏 + 𝒙𝟐 ≤ 𝟒
Și totuși am putea recupera ceva din această idee: adăugând la programul relaxat un număr de
restricții suplimentare astfel alese încât să fie verificate de toate soluțiile admisibile întregi, am
putea îndepărta din APL o serie de porțiuni așa încât soluția optimă întreagă să devină vârf în
mulțimea rămasă putând fi astfel recunoscută de algoritmul simplex!! (vezi figura 2)
Din acest motiv noile restricții se numesc tăieturi.
Soluția optimă fracționară x* Soluția optimă întreagă x0
recunoscută de algoritmul este acum recunoscută de
simplex Soluția optimă găsită
algoritmul simplex !
de algoritmul simplex
și
Soluția optimă
întreagă x0
x0
Tăietura T1
Tăietura T2
Figura 2
Procedeul Chvatal – Gomory de generare a tăieturilor
Procedeul va fi explicat pe un program întreg total (P) în care restricțiile sunt egalități (adică (P)
este în formă standard) deși – cu anumite precauții – poate fi aplicat și în cazul restricțiilor
inegalități. Fie (PL) programul relaxat.
Se consideră o combinație liniară oarecare a restricțiilor din (P):
𝛼 𝑥 + 𝛼 𝑥 + ⋯+ 𝛼 𝑥 = 𝛽 (1)
Coeficienții 𝛼 , 𝛼 , … , 𝛼 și β sunt numere reale nu neapărat întregi.
Reamintim că partea întreagă a numărului real x este cel mai mare număr întreg ≤ x și se notează
⌊𝑥⌋. Partea fracționară a numărului x este diferența {𝑥} = 𝑥 − ⌊𝑥⌋ ; evident, 0 ≤ {𝑥} < 1.
Evidențiem părțile întregi și părțile fracționare ale constantelor din ecuația (1):
∑ 𝛼 + 𝛼 𝑥 = ⌊𝛽⌋ + {𝛽} (2)
Rescriem ecuația (2) în forma:
∑ 𝛼 𝑥 − {𝛽} = ⌊𝛽⌋ − ∑ 𝛼 𝑥 (3)
Relația (3) este verificată de orice soluție admisibilă a programului relaxat (PL) și în particular
este verificată de orice soluție întreagă a programului (P). Fie 𝑥̅ = (𝑥̅ , 𝑥̅ , … , 𝑥̅ ) o soluție
admisibilă întreagă fixată. Vom arăta că :
∑ 𝛼 𝑥̅ − {𝛽} ≥ 0 (4)
Presupunem prin absurd contrariul :
∑ 𝛼 𝑥̅ − {𝛽} < 0
Din (3) rezultă:
⌊𝛽⌋ − 𝛼 𝑥̅ < 0
⌊𝛽⌋ − 𝛼 𝑥̅ ≤ −1
și ca urmare:
𝛼 𝑥̅ − {𝛽} ≤ −1 ⟺ 𝛼 𝑥̅ ≤ {𝛽} − 1
Ultima egalitate este falsă deoarece membrul stâng este ≥ 0 în timp ce membrul drept este < 0.
Inegalitatea (4) este deci adevărată.
În concluzie, inegalitatea
𝛼 𝑥 ≥ {𝛽} ⟺ {𝛼 }𝑥 + {𝛼 }𝑥 + ⋯ + {𝛼 }𝑥 ≥ {𝛽}
este verificată de orice soluție admisibilă întreagă a programului (P) deci este o tăietură.
Tăieturile obținute pe această cale se numesc tăieturi Chvatal – Gomory.
Start : Inițializăm programul curent ≡ programul relaxat (PL). Se aplică algoritmul simplex
programului curent. Presupunem că acesta are soluție optimă afișată într-un tabel simplex
(altminteri, sau (P) are optim infinit sau este incompatibil !)
𝑥 + 𝑎 𝑥 =𝑏
∈
al cărei termen liber 𝑏 nu este număr întreg. O asemenea ecuație se va numi ecuație
generatoare.Există multe criterii de selectare a (indicelui ) ecuației generatoare. Cele mai uzitate
sunt :
- indicele r este cel mai mic indice bazic cu proprietatea că 𝑏 este neîntreg ;
- indicele r este indicele termenului liber 𝑏 cu cea mai mare parte fracționară.
Primul criteriu asigură terminarea algoritmului într-un număr finit de iterații ; al doilea criteriu
accelerază rezolvarea !
Pasul 3. Se generează tăietura :
𝑎 𝑥 ≥ 𝑏
∈
(Foarte important : această inegalitate nu este verificată de soluția optimă a programului curent –
presupusă neîntreagă !)
Pasul 4. Se actualizează programul curent prin adăugarea tăieturii construite la pasul 3. Se rezolvă
programul curent actualizat prin reoptimizare cu algoritmul simplex dual. Se revine la pasul 1
în cadrul unei noi iterații.
Exemplul 3 Vom determina soluția optimă întreagă a programului (P) din exemplul 1 utilizând
algoritmul lui Gomory. La fiecare iterație ecuația generatoare se va alege după criteriul părții
fracționare maxime.
Start. Înlocuim programul (P) cu forma sa standard :
𝑥+ 𝑥 +𝑥 = 5
⎧
⎪ −𝑥 +𝑥 +𝑥 = 0
6𝑥+2𝑥 +5 = 21
⎨ 𝑥 ≥ 0, î𝑛𝑡𝑟𝑒𝑔𝑖 𝑗 = 1, … ,5
⎪
⎩(max)𝑓 = 2𝑥 + 𝑥 + 0 ∙ 𝑥 + 0 ∙ 𝑥 + 0 ∙ 𝑥
Deoarece toate constantele programului original sunt numere întregi, variabilele de abatere
𝑥 , 𝑥 , 𝑥 vor fi variabile întregi (de ce ?) astfel că forma standard este un program întreg total!
Rezolvăm programul curent ≡ programul relaxat cu algoritmul simplex. În 3 iterații se obține
soluția optimă afișată în tabelul simplex :
2 1 0 0 0 Soluția optimă a programului relaxat, numită și
CB VB VVB x1 x2 x3 x4 x5 soluția optimă fracționară are componentele:𝑥 =
1 x2 9/4 0 1 3/2 0 -1/4
0 x4 1/2 0 0 -2 1 2/4 , 𝑥 = . Valorile variabilelor de abatere:
2 x1 11/4 1 0 -1/2 0 1/4
f 31/4 * * 1/2 * 1/4 𝑥 = 0, 𝑥 = , 𝑥 = 0. Optimul fracționar= .
Iterația 1
Pasul1 Soluția optimă a programului curent are componente neîntregi.
Pasul 2 Constantele din coloana VVB (adică 𝑏 , 𝑖 ∈ 𝐼) au părțile fracționare:
9 1 1 1 11 3
= , = , =
4 4 2 2 4 4
Partea fracționară maximă va indica ecuația generatoare (marcată cu albastru în tabelul
simplex!):
1 1 11
𝑥 − 𝑥 + 𝑥 =
2 4 4
Pasul 3 Din ecuația generatoare derivăm tăietura:
1 1 11 1 1 3
− 𝑥 + 𝑥 ≥ ⟺ 𝑥 + 𝑥 ≥
2 4 4 2 4 4
Pasul 4 La tabelul simplex curent atașăm restricția suplimentară (adusă la forma standard):
1 1 3 1 1 3
− 𝑥 − 𝑥 ≤− ⟹ − 𝑥 − 𝑥 +𝑥 =−
2 4 4 2 4 4
după care aplicăm algoritmul simplex dual.
2 1 0 0 0
CB VB VVB x1 x2 x3 x4 x5 x6
1 x2 9/4 0 1 3/2 0 -1/4 0
0 x4 1/2 0 0 -2 1 2/4 0
2 x1 11/4 1 0 -1/2 0 1/4 0
0 x6 -3/4 0 0 -1/2 0 -1/4 1
f 31/4 * * 1/2 * 1/4 *
1 x2 3 0 1 2 0 0 -1
0 x4 -1 0 0 -3 1 0 2
2 x1 2 1 0 -1 0 0 1
0 x5 3 0 0 2 0 1 -4
f 7 * * 0 * * 1
1 x2 7/3 0 1 0 2/3 0 1/3 În 3 iterații s-a obținut soluția optimă
0 x3 1/3 0 0 1 -1/3 0 -2/3
2 x1 7/3 1 0 0 -1/3 0 1/3 fracționară: 𝑥 = , 𝑥 =
0 x5 7/3 0 0 0 2/3 1 -8/3
f 7 * * * 0 * 1
Iterația 2
În două iterații s-a obținut soluția optimă fracționară a programului dat extins cu două tăieturi:
5
𝑥 = ,𝑥 = 2
2
Iterația 3
Iterația 4
S-a obținut soluția optimă întreagă a programului (P): 𝑥 = 3 , 𝑥 = 1
Valorile variabilelor de abatere:𝑥 = 1 , 𝑥 = 2 , 𝑥 = 1
Valoarea maximă a funcției obiectiv : (max)f = 7.
Comentariu. În esență – așa cum de altfel s-a văzut și din ilustrare – algoritmul lui Gomory
este o secvență de reoptimizări cu adăugare de restricții. Dacă numărul reoptimizărilor este
mare, operarea cu tabelele simplex uzuale devine anevoioasă din cauza creșterii dimensiunilor
acestora (am văzut că la fiecare restricție suplimentară adăugată, tabelul simplex curent creștea
cu o linie și cu o coloană !!)
Din fericire , există o formă alternativă de prezentare a unui tabel simplex care elimină acest
inconvenient. Ea va fi prezentată în următoarea aplicație.
(max)𝑓 = 3𝑥 + 𝑥
2𝑥 + 3𝑥 ≤ 6
2𝑥 − 3𝑥 ≤ 3
𝑥 ≥ 0, 𝑥 ≥ 0, î𝑛𝑡𝑟𝑒𝑔𝑖
Soluție :
Înlocuim programul dat – căruia, în continuare, îi vom zice programul original – cu forma sa
standard :
2𝑥 +3𝑥 +𝑥 =6
⎧
2𝑥 −3𝑥 +𝑥 = 3
(𝑃)
⎨ 𝑥 ≥ 0, î𝑛𝑡𝑟𝑒𝑔𝑖 𝑗 = 1, … ,4
⎩(max)𝑓 = 3𝑥 + 𝑥 + 0 ∙ 𝑥 + 0 ∙ 𝑥
În orice soluție întreagă a programului original, variabilele de abatere x3 și x4 au valori întregi
astfel că (P) este, într-adevăr, un program întreg total.
Rezolvăm programul relaxat
2𝑥 +3𝑥 +𝑥 =6
⎧
2𝑥 −3𝑥 +𝑥 = 3
(𝑃𝐿)
⎨ 𝑥 ≥0 𝑗 = 1, … ,4
⎩(max)𝑓 = 3𝑥 + 𝑥 + 0 ∙ 𝑥 + 0 ∙ 𝑥
cu algoritmul simplex.În continuare este dat tabelul simplex optim și forma explicită asociată :
3 1 0 0 1 1 1
⎧ 𝑥 + 𝑥 − 𝑥 =
CB VB VVB x1 x2 x3 x4 6 6 2
⎪
1 x2 1/2 0 1 1/6 -1/6 1 1 9
3 x1 9/4 1 0 1/4 ¼ ⟺ 𝑥 𝑥 𝑥 =
⎨ 4 4 4
f 29/4 * * 11/12 7/12 ⎪ 11 7 29
𝑓 + 𝑥 + 𝑥 =
⎩ 12 12 4
Rescriem acest tabel intr-un alt format în felul următor. La ecuațiile ce compun forma
explicită și care exprimă variabilele bazice x1 , x2 și funcția obiectiv f în funcție de variabilele
nebazice x3 , x4 , adăugăm relațiile tautologice x3 – x3 = 0 și x4 – x4 = 0 :
11 7 29
⎧𝑓 + 𝑥 + 𝑥 =
⎪ 12 12 4
⎪ 1 1 9
⎪ 𝑥 + 𝑥 + 𝑥 =
4 4 4
⎨ 𝑥 +1𝑥 1 1
− 𝑥 =
⎪ 6 6 2
⎪ 𝑥 −𝑥
⎪ =0
⎩ 𝑥 −𝑥 =0
Constantele acestui sistem compun așa numita formă secundară a tabelului simplex uzual:
Start Inițializăm programul curent ≡ programul relaxat (PL). El a fost rezolvat cu algoritmul
simplex și soluția sa optimă este afișată în forma secundară de mai sus.
Iterația 1
Soluția optimă a programului curent are componente neîntregi.
Selectăm ecuația generatoare (criteriul de selecție utilizat: după prima variabilă cu
valoare neîntreagă):
Tabelul S1
VV x3 x4
f 29/4 11/12 7/12 1 1 9
x1 9/4 1/4 1/4
𝑥 + 𝑥 + 𝑥 =
4 4 4
x2 1/2 1/6 -1/6
x3 0 -1 0 Tăietura C1:
x4 0 0 -1
1 1 1 1 1 1
x5 -1/4 -1/4 -1/4 𝑥 + 𝑥 ≥ ⟹: − 𝑥 − 𝑥 + 𝑥 = −
4 4 4 4 4 4
Adăugăm tăietura construită la programul curent și reoptimizăm cu algoritmul
simplex dual :
-Scriem coeficienții tăieturii – adusă la forma standard – sub forma secundară S 1 ;
C1
𝑥 ≤2
N(1,1)
)
2
2,
3
max f
B ,
O M A (2 , 0)
C2
𝑥 +𝑥 ≤2
Figura 3
B , ← soluție admisibilă,fracționară;
2, ← soluție admisibilă,fracționară;
, ← soluție admisibilă,fracționară;
𝑥 + 𝑥 + −1 + 𝑥 = ⟹ 𝑥 + 𝑥 − = −𝑥 + 𝑥 ≝ 𝑥 ≥ 0 (î𝑛𝑡𝑟𝑒𝑔!)
Branch and Bound (abreviat B&B) este o metodă alternativă de rezolvare a unui program întreg
total sau mixt, bazată pe un principiu care amintește adagiul latin divide et impera:
Deoarece problema originală este în general greu de rezolvat « direct », ea este ramificată adică
divizată în probleme mai mici, cu mai puține soluții întregi. Fiecare subproblemă rezultată din
ramificare este mărginită, aceasta însemnând calcularea unei valori (margine) care arată cât de
bune sunt soluțiile întregi ale problemei respective pentru procesul de optimizare.În principiu,
fiecare subproblemă este la rândul ei ramificată în subprobleme și mai mici, afară de cazul în care
marginea atașată arată că printre soluțiile ei întregi nu se găsește cu siguranță soluția optimă
întreagă căutată !
O locație, notată 𝑥 în care se va păstra Cea Mai Bună soluție admisibilă întreagă
găsită pe parcurs .
O locație, notată zCMB în care se înscrie valoarea funcției obiectiv în soluția păstrată în
𝑥 .
La start 𝑥 = ∅ (locația vidă) 𝑧 = −∞ (în problemele de maximizare!)
Descrierea algoritmului
Pasul 1 : Dacă L = ∅, ceea ce înseamnă că au fost cercetate toate programele întregi rezultate
din ramificarea lui (P), Stop :
Dacă 𝑥 ≠ ∅ acolo se va găsi soluția optimă întreagă a programului (P). Optimul
întreg se va lua din zCMB ;
Dacă 𝑥 = ∅ programul (P) nu are soluții admisibile întregi.
Dacă L ≠ ∅ se trece la :
Pasul 2 Se selectează primul program din lista L ; el are o siglă (Pα). Programul selectat se șterge
din L.
Observații :
1) Lista L este ordonată astfel că, de la bun început, trebuie stabilit locul în care se vor
opera ștergerile și adăugirile de programme : în capul listei, în coada listei… ;
2) La start 𝑃 ≡ 𝑃 ; pe parcurs, indicele α va fi o succesiune de 1 și 2 ;
3) Despre programele întregi Pα1 și Pα2 vom spune că au rezultat din ramificarea
programului Pα după variabila xk. În cazul în care ramificarea se poate executa după mai multe
variabile este necesar un criteriu de alegere a variabilei de ramificare xk.De exemplu,
ramificarea se poate face după prima variabilă întreagă cu valoare fracționară în x* sau după
variabila întreagă cu cea mai mare parte fracționară în x*.
4) Programele întregi Pα1 și Pα2 au următoarele proprietăți :
Nu au soluții admisibile întregi comune ;
Reuniunea soluțiilor lor admisibile întregi este mulțimea soluțiilor admisibile întregi
ale programului ramificat Pα.
5) Întreg procesul de optimizare poate fi vizualizat printr-un graf arbore T ale cărui noduri
sunt relaxatele diferitelor programe întregi rezultate din ramificarea programului original (P).
Un nod, identificat cu programul (uzual) PLα , va fi un nod terminal dacă și numai dacă
programul întreg (Pα) nu a mai fost ramificat și asta se întâmplă în trei situații :
PLα este un program incompatibil ;
PLα este compatibil și ⌊𝑧 ⌋ ≤ 𝑧 (⟺ marginea ⌊𝑧 ⌋ arată că Pα nu are soluții
admisibile întregi mai bune decât soluția din xCMB !)
PLα are soluție optimă întreagă mai bună decât soluția din xCMB.
Cu excepția rădăcinii (PL) fiecare nod are un unic predecesor și, dacă nu este nod terminal, are
doi succesori.
PL
PL1 PL2
…. …. PL211 PL212
…. ….
Metoda B&B este implementată în toate programele comerciale destinate rezolvării problemelor
de optimizare în numere întregi.
Principalele neajunsuri :
Creșterea foarte rapidă a numărului problemelor de rezolvat și de aici a volumului de
calcul o dată cu creșterea dimensiunilor programului original și mai cu seamă a numărului de
variabile întregi.
Comportare impredictibilă pe probleme de dimensiuni apropiate : arborele
problemelor rezolvate poate fi extem de « stufos » pentru o problemă și foarte simplu pentru alta !
Exemplu numeric. Aplicăm metoda B&B la rezolvarea programului întreg total :
(max)𝑓 = 2𝑥 + 5𝑥
2𝑥 + 2𝑥 ≤ 9
(𝑃)
𝑥 + 3𝑥 ≤ 11
𝑥 ≥ 0, 𝑥 ≥ 0 î𝑛𝑡𝑟𝑒𝑔𝑖
Convenții :
- Adăugarea sau ștergerea de programe în lista L se vor opera în capul acesteia ;
- Variabila întreagă după care se va face ramificarea unui program (Pα) va fi prima variabilă
cu valoare fracționară în soluția optimă a programului relaxat (PLα).
Rezolvarea diferitelor programe liniare rezultate se va face cu metoda grafică.
Start : Inițializăm : L = {P} , 𝑥 =∅, 𝑧 = −∞ .
Iterația 1
Selectăm primul program din lista L: P;
Ștergem programul selectat din listă: L = ∅ ;
Rezolvăm programul relaxat PL – vezi figura 1.
Rezultă soluția
1 1 3
𝑥∗ = 1 , 𝑥 ∗ = 3 𝑧 = 𝑓(𝑥 ∗ ) = 18
4 4 4
Conchidem că optimul întreg nu depășește marginea ⌊𝑧⌋ = 18.
Condiția ⌊𝑧⌋ = 18 > −∞ = 𝑧 este banal îndeplinită.
Ramificăm programul (P) după variabila x1 ; aceasta înseamnă înlocuirea
programului (P) cu programele întregi :
(max)𝑓 = 2𝑥 + 5𝑥
⎧
2𝑥 + 2𝑥 ≤ 9
⎪
𝑃 𝑃
𝑃 ≡ ⟺ 𝑥 + 3𝑥 ≤ 11 ; 𝑃 ≡
𝑥 ≤1 ⎨ 𝑥 ≥2
⎪ 𝑥 ≤1
⎩𝑥 ≥ 0, 𝑥 ≥ 0 î𝑛𝑡𝑟𝑒𝑔𝑖
𝑥 + 3𝑥 ≤ 11
APL
2𝑥 + 2𝑥 ≤ 9
Figura 1
Iterația 2
Selectăm primul program din lista L : P1;
Programul selectat este șters din listă: L = {𝑃 } ;
Rezolvăm programul relaxat PL1 – vezi figura 2.
Se găsește soluția :
1 2
𝑥∗ = 1 , 𝑥∗ = 3 , 𝑧 = 𝑓(𝑥 ∗ ) = 18
3 3
Condiția de ramificare ⌊𝑧⌋ = 18 > −∞ = 𝑧 este banal îndeplinită.
Procedăm la ramificarea programului P1 în programele întregi :
𝑃 𝑃
𝑃 ≡ și 𝑃 ≡
𝑥 ≤3 𝑥 ≥4
APL2
𝑥 ≤1 𝑥 ≥2
Figura 2
Iterația 3
Selectăm programul P11 și actualizăm lista: L = {𝑃 , 𝑃 } ;
Rezolvăm programul relaxat PL11 – vezi figura 3.
S-a obținut soluția întreagă :
𝑥 ∗ = 1 , 𝑥 ∗ = 3 , 𝑓(𝑥 ∗ ) = 17
pe care o reținem:
𝑥 ← (1,3) ; 𝑧 ← 17
𝑥 ≤3
APL11
Figura 3
Iterația 4
Selectăm programul P12 ⟹ : L = {𝑃 } ;
Programul relaxat PL12 se dovedește a fi incompatibil (vezi figura 3).
Iterația 5
Selectăm programul P2 și actualizăm: L = ∅ ;
Programul relaxat PL2 are soluția optimă:
de această dată :
⌊𝑧 ⌋ = 16 < 17 = 𝑧
deci nici o soluție întreagă a programului P2 nu este mai bună decât soluția din xCMB..
Abandonăm P2 și revenim la consultarea listei L.
Iterația 6
Deoarece L = ∅ Stop: Soluția optimă întreagă a programului (P) este soluția din x CMB :
𝑥 = 1 , 𝑥 = 3 , 𝑓(𝑥 ) = 17
Arborele problemelor rezolvate :
𝑥 =∅ 𝑧 = −∞
PL
5 13 75
𝑥 = ,𝑥 = ,𝑓 =
4 4 4
PL11 PL12
𝑥 = 1 , 𝑥 = 3 , 𝑓 = 17 Incompatibil
𝑥 = (1,3) 𝑧 = 17
Figura 4
Observație finală : Metoda B&B a redus rezolvarea programului întreg (P) la rezolvarea a cinci
programe liniare uzuale în ordinea PL , PL1 , PL11 , PL12 , P2.
Alt exemplu. Să se determine soluția optimă a programului întreg total :
(max)𝑓 = 3𝑥 + 2𝑥
−3𝑥 + 8𝑥 ≤ 19
(𝑃)
6𝑥 + 3𝑥 ≤ 17
𝑥 ≥ 0, 𝑥 ≥ 0 î𝑛𝑡𝑟𝑒𝑔𝑖
cu metoda BRANCH and BOUND
Convenții :
- Adăugarea sau ștergerea de programe în lista L se vor opera în capul acesteia ;
- Variabila întreagă după care se va face ramificarea unui program (Pα) va fi prima variabilă
cu valoare fracționară în soluția optimă a programului relaxat (PLα).
Rezolvarea diferitelor programe liniare rezultate se va face cu metoda grafică : vezi figura 6 și
explicațiile care o însoțesc.
(max)𝑓 = 3𝑥 + 2𝑥
⎧
𝑃 ⎪ −3𝑥 + 8𝑥 ≤ 19 𝑃
(𝑃 ) ≡ ≡ 6𝑥 + 3𝑥 ≤ 17 (𝑃 ) ≡
𝑥 ≤1 ⎨ 𝑥 ≥2
⎪ 𝑥 ≤1
⎩ 𝑥 , 𝑥 ≥ 0 î𝑛𝑡𝑟𝑒𝑔𝑖
care se introduc în lista L :
L = {𝑃 , 𝑃 }
𝑃 𝑃
(𝑃 ) ≡ (𝑃 ) ≡
𝑥 ≤2 𝑥 ≥3
𝑃 𝑃
(𝑃 ) ≡ (𝑃 ) ≡
𝑥 ≤1 𝑥 ≥2
Actualizăm lista L :
L = {𝑃 , 𝑃 }
𝑃 𝑃
(𝑃 )≡ (𝑃 )≡
𝑥 ≤2 𝑥 ≥3
Iterația 10 Deoarece L = ∅ Stop: în locațiile xCMB și zCMB se găsesc soluția optimă întreagă și
respectiv, optimul întreg ale programului (P):
𝑥∗ = 2 , 𝑥∗ = 1 , 𝑓(𝑥 ∗ ) = 8
𝑥 =∅ 𝑧
PL
𝟐𝟐 𝟓𝟏 𝟓𝟒
𝒙𝟏 = 𝟏 , 𝒙𝟐 = 𝟐 , 𝒇(𝒙) = 𝟗
𝟓𝟕 𝟓𝟕 𝟓𝟕
x1≤1 x1≥2
PL1 PL2
𝟑 𝟏 𝟐 𝟏
𝒙𝟏 = 𝟏, 𝒙𝟐 = 𝟐 , 𝒇(𝒙) = 𝟖 𝒙𝟏 = 𝟐, 𝒙𝟐 = 𝟏 , 𝒇(𝒙) = 𝟗
𝟒 𝟐 𝟑 𝟑
PL211 PL212
𝒙𝟏 = 𝟐, 𝒙𝟐 = 𝟏, 𝒇(𝒙) = 𝟖 incompatibilă
𝑥 ← (2,1) 𝑧 ←8
Figura 5
Problemă În ce ordine ar fi fost rezolvate cela nouă programe dacă, la fiecare iterație :
Programul selectat era – ca de obicei – primul program din lista L ;
Programele rezultate din ramificare erau plasate în coada listei L .
x2
Sol. opt. PL
Sol. opt. PL1
x2 ≥ 3
x2 ≤ 2
Sol. opt. P11 Sol. opt. PL21
x2 ≤ 1
x1
Dreaptă de nivel a x1 ≤ 1 x1 ≤ 2 x1 ≥ 2 x1 ≥ 3
funcției obiectiv
Figura 6
Explicații la figura 6. Din cele nouă programe liniare rezolvate, șase au fost compatibile și trei
incompatibile. Cititorul studios este îndemnat să identifice în figura 6 mulțimile de soluții
admisibile ale programelor compatibile. În desen sunt evidențiate doar mulțimile de soluții
admisibile ale programelor PL11 și PL211 ale căror soluții optime sunt întregi.
Componentele soluțiilor optime ale celor șase programe compatibile au fost determinate astfel:
−3𝑥 + 8𝑥 = 19
- pentru PL : ⟹𝑥 =1 , 𝑥 =2 𝑓(𝑥) = 9 ;
6𝑥 + 3𝑥 = 17
𝑥 =1
- pentru PL1 : ⟹𝑥 =1 , 𝑥 =2 𝑓(𝑥) = 8 ;
−3𝑥 + 8𝑥 = 19
- pentru PL11 : din figură : ⟹ 𝑥 = 1 , 𝑥 = 2 𝑓(𝑥) = 7;
𝑥 =2
- pentru PL2 : ⟹𝑥 =2 , 𝑥 =1 𝑓(𝑥) = 9 ;
6𝑥 + 3𝑥 = 17
𝑥 =1
- pentru PL21 : ⟹𝑥 =2 , 𝑥 = 1 𝑓(𝑥) = 9 ;
6𝑥 + 3𝑥 = 17
- pentru PL211 : din figură : ⟹ 𝑥 = 2 , 𝑥 = 1 𝑓(𝑥) = 8.
Cercetări Operaționale, anul III
Note pentru Seminarul 8 Prof.dr. Vasile Teodor NICA
A. Problema rucsacului. Un rucsac trebuie umplut cu mai multe obiecte de diferite tipuri.
Există n tipuri diferite, obiectele de același tip fiind identice și disponibile în cantități suficiente.
Un obiect de tipul i are o pondere (greutate, volum) 𝑙 > 0 și o anumită valoare ≡ utilitate
𝜋 > 0. Rucsacul are o capacitate limitată de umplere 𝐿 > 𝑙 , … , 𝑙 .Câte obiecte din fiecare tip
vor fi introduse în rucsac astfel încât :
capacitatea rucsacului să nu fie depășită ;
valoarea totală a obiectelor introduse să fie maximă.
În continuare vom presupune că 𝑙 , 𝑙 , … , 𝑙 , 𝐿 sunt numere întregi.
Programul (R) poate fi rezolvat prin metodele specifice programării în numere întregi. Faptul că
(R) are o singură restricție permite o abordare alternativă, prin programarea dinamică.
max 𝜋 𝑥 + ⋯ + 𝜋 𝑥
𝑅 (𝜆) 𝑙 𝑥 + ⋯ + 𝑙 𝑥 ≤ 𝜆
𝑥 , … , 𝑥 ≥ 0, î𝑛𝑡𝑟𝑒𝑔𝑖
Evident, 𝑅 (𝜆) este tot o problemă a rucsacului, dar mai mică: are numai primele 𝑘 ≤ 𝑛 tipuri
de obiecte iar capacitatea rucsacului este redusă la λ ≤ L.
Introducem notația :
𝜌 (𝜆) ≡ 𝑜𝑝𝑡𝑖𝑚𝑢𝑙 𝑝𝑟𝑜𝑔𝑟𝑎𝑚𝑢𝑙𝑢𝑖 𝑅 (𝜆)
Observații :
Programul (R) a fost scufundat într-o familie de programe înrudite : R ≡ Rn(L) ;
Ca urmare, optimul funcției obiectiv din R este 𝜌 (𝐿);
Pentru k fixat și λ variabil, 𝜌 (𝜆) este o funcție de o singură variabilă λ ale cărei valori
permise sunt 0,1,…,L.
𝑥 ∗ (𝜆) = 𝑣𝑎𝑙𝑜𝑎𝑟𝑒𝑎 𝑣𝑎𝑟𝑖𝑎𝑏𝑖𝑙𝑒𝑖 𝑥 𝑐𝑎𝑟𝑒 𝑟𝑒𝑎𝑙𝑖𝑧𝑒𝑎𝑧ă 𝒎𝒂𝒙𝒊𝒎𝒖𝒍 𝑑𝑖𝑛 𝑓𝑜𝑟𝑚𝑢𝑙𝑒𝑙𝑒 (∗)ș𝑖 (∗∗)
atunci, o soluție optimă 𝑥 ∗ = (𝑥 ∗ , 𝑥 ∗ , … , 𝑥 ∗ ) a programului (R) se determină retrospectiv astfel :
- 𝑥 ∗ = 𝑥 ∗ (𝐿) = 𝑣𝑎𝑙𝑜𝑎𝑟𝑒𝑎 𝑣𝑎𝑟𝑖𝑎𝑏𝑖𝑙𝑒𝑖 𝑥 𝑐𝑎𝑟𝑒 𝑟𝑒𝑎𝑙𝑖𝑧𝑒𝑎𝑧ă 𝒎𝒂𝒙𝒊𝒎𝒖𝒍 𝑑𝑖𝑛 𝑓𝑜𝑟𝑚𝑢𝑙𝑎 (∗∗∗)
- și pentru k = n-1,…,2,1 :
𝑥 ∗ = 𝑥 ∗ (𝐿 − 𝑆 ) unde 𝑆 = 𝑙 𝑥∗ + ⋯ + 𝑙 𝑥∗
C. Ilustrări numerice
λ 0 1 2 3 4 5 6 7 8 9 10
ρ1(λ) 0 0 0 0 0 0 0 9 9 9 9
𝑥 ∗ (𝜆) 0 0 0 0 0 0 0 1 1 1 1
Tabelul 1
Determinăm valorile funcției :
𝜆
𝜌 (𝜆) = 𝑚𝑎𝑥 𝜌 (𝜆 − 4𝑥 ) + 5𝑥 𝑥 = 0,1, … , 𝜆 = 0,1, … ,10
4
- pentru λ = 0,1,2,3 → x2 = 0 →𝜌 (𝜆) = 𝜌 (𝜆)
- pentru λ = 4,5,6,7 → 𝑥 ∈ {0,1} → 𝜌 (𝜆) = 𝑚𝑎𝑥{𝜌 (𝜆), 𝜌 (𝜆 − 4) + 5}
- pentru λ = 8,9,10 → 𝑥 ∈ {0,1,2} → 𝜌 (𝜆) = 𝑚𝑎𝑥{𝜌 (𝜆), 𝜌 (𝜆 − 4) + 5, 𝜌 (𝜆 − 8) + 10}
Valorile funcției ρ2 sunt listate în tabelul 2 :
λ 0 1 2 3 4 5 6 7 8 9 10
ρ2(λ) 0 0 0 0 5 5 5 9 10 10 10
𝑥 ∗ (𝜆) 0 0 0 0 1 1 1 0 2 2 2
Tabelul 2
Determinăm valorile funcției :
𝜆
𝜌 (𝜆) = 𝑚𝑎𝑥 𝜌 (𝜆 − 3𝑥 ) + 3𝑥 𝑥 = 0,1, … , 𝜆 = 0,1, … ,10
3
λ 0 1 2 3 4 5 6 7 8 9 10
𝜌 (𝜆) 0 0 0 3 5 5 6 9 10 10 12
𝑥 ∗ (𝜆) 0 0 0 1 0 0 2 0 0 0 1
Tabelul 3
Determinăm valoarea numerică:
𝜌 (10) = 𝑚𝑎𝑥{9𝑥 + 5𝑥 + 3𝑥 + 𝑥 |7𝑥 + 4𝑥 + 3𝑥 + 2𝑥 ≤ 10 ; 𝑥 ≥ 0, î𝑛𝑡𝑟𝑒𝑔𝑖}
𝑥 ∗ = 𝑥 ∗ (10) = 0
𝑥 ∗ = 𝑥 ∗ (10 − 2𝑥 ∗ ) = 𝑥 ∗ (10) = 1
∗ ∗ (10 ∗ ∗) ∗ (7) ⟹ 𝑥 ∗ = (1,0,1,0)
𝑥 =𝑥 − 3𝑥 − 2𝑥 = 𝑥 =0
∗ ∗ (10 ∗ ∗ ∗) ∗ (7)
𝑥 =𝑥 − 4𝑥 − 3𝑥 − 2𝑥 = 𝑥 =1
𝜆
𝜌 (𝜆) = 𝑚𝑎𝑥{4𝑥 |5𝑥 ≤ 𝜆 , 𝑥 ≥ 0 î𝑛𝑡𝑟𝑒𝑔} = 4 ∙ 𝜆 = 0,1, … ,11
5
λ 0 1 2 3 4 5 6 7 8 9 10 11
ρ1(λ) 0 0 0 0 0 4 4 4 4 4 8 8
𝑥 ∗ (𝜆) 0 0 0 0 0 1 1 1 1 1 2 2
Tabelul 1
Determinăm valorile funcției :
λ 0 1 2 3 4 5 6 7 8 9 10 11
ρ2(λ) 0 0 0 5 5 5 10 10 10 15 15 15
𝑥 ∗ (𝜆) 0 0 0 1 1 1 2 2 2 3 3 3
Tabelul 2
(max)𝑓 = 𝑥 + 2𝑥 − 𝑥 𝑚𝑎𝑥𝑓 = 𝑥 + 2𝑥
(𝑃 ) 𝑥 +𝑥 ≤1 sau (𝑃 ) 𝑥 − 𝑥 𝑥 + 𝑥 ≤ 21
𝑥 ≥ 0, 𝑥 ≥ 0 𝑥 ≥ 0, 𝑥 ≥ 0
Pentru studiu dar și pentru rezolvare, orice program neliniar va fi adus la așa zisa formă
canonică :
𝑚𝑖𝑛𝑓(𝑥 , 𝑥 , … , 𝑥 )
⎧
⎪ 𝑐𝑢 𝑟𝑒𝑠𝑡𝑟𝑖𝑐ț𝑖𝑖𝑙𝑒
(𝑃) 𝑔 (𝑥 , 𝑥 , … , 𝑥 ) ≤ 0 𝑖 = 1, … , 𝑚 (*)
⎨ ș𝑖 𝑐𝑜𝑛𝑑𝑖ț𝑖𝑖𝑙𝑒 𝑑𝑒 𝑛𝑒𝑛𝑒𝑔𝑎𝑡𝑖𝑣𝑖𝑡𝑎𝑡𝑒
⎪
⎩ 𝑥 ≥ 0, 𝑥 ≥ 0, … , 𝑥 ≥ 0
cu caracteristicile :
- funcția obiectiv se minimizează ;
- restricțiile sunt inegalități omogene de tipul ≤0.
(KKT) 𝜕L 𝜕L
≤0 𝑖 = 1, … , 𝑚 (2) 𝑢 =0 𝑖 = 1, … , 𝑚 (2′)
𝜕𝑢 𝜕𝑢
𝑥 ≥0 𝑗 = 1, … , 𝑛 𝑢 ≥0 𝑖 = 1, … , 𝑚
Notă Mult timp aceste condiții au purtat numele de condiții Kuhn – Tucker după numele
celor care le-au enunțat în 1950. Ceva mai târziu s-a descoperit că aceste condiții fuseseră
déjà formulate de către Karush în teza sa de doctorat din 1939.
Observații importante :
1) Condiția (2) exprimă cerința satisfacerii restricțiilor programului (P) deoarece :
𝜕L
≤0 ⟺ 𝑔 (𝑥) ≤ 0 𝑖 = 1, … , 𝑚
𝜕𝑢
2) Relațiile (1’) și (2’) se numesc condiții de complementaritate și se vor interpreta numai
în următorul mod:
La optim :
L
pentru fiecare 𝑗 = 1, … , 𝑛 𝑠𝑎𝑢 𝑥 = 0 𝑠𝑎𝑢 = 0;
L
pentru fiecare 𝑖 = 1, … , 𝑚 sau multiplicatorul Lagrange 𝑢 = 0 sau = 𝑔 (𝑥) = 0
adică restricția 𝑔 (𝑥) ≤ 0 este verificată cu egalitate de către soluția optimă !
3) dacă (P) este un program liniar ( orice program liniar este convex…) atunci teorema de
mai sus coincide cu teorema ecarturilor complementare.
C. Aplicații variate
(max)𝑓 = 𝑥 + 2𝑥 − 𝑥
𝑥 +𝑥 ≤1
𝑥 ≥ 0, 𝑥 ≥ 0
(min) − 𝑓 = −𝑥 − 2𝑥 + 𝑥
𝑥 +𝑥 −1≤0
𝑥 ≥ 0, 𝑥 ≥ 0
𝜕L 𝜕L
⎧ ≥ 0 ⟺ −1 + 𝑢 ≥ 0 (1.1) ; 𝑥 = 0 ⟺ 𝑥 (−1 + 𝑢) = 0 (1.1 )
⎪ 𝜕𝑥 𝜕𝑥
⎪ 𝜕L 𝜕L
≥ 0 ⟺ −2 + 3𝑥 + 𝑢 ≥ 0 (1.2) ; 𝑥 = 0 ⟺ 𝑥 (−2 + 3𝑥 + 𝑢) = 0 (1.2 )
𝜕𝑥 𝜕𝑥
⎨
𝜕L 𝜕L
⎪ ≤ 0 ⟺ 𝑥 + 𝑥 − 1 ≤ 0 (2) ; 𝑢 = 0 ⟺ 𝑢(𝑥 + 𝑥 − 1) = 0 (2 )
⎪ 𝜕𝑢 𝜕𝑢
⎩ 𝑥 ≥ 0, 𝑥 ≥ 0 ; 𝑢≥0
IV) Analizăm condițiile KKT având ca obiectiv găsirea unui triplet de valori numerice (𝑥 , 𝑥 , 𝑢)
care să le satisfacă.
La optim avem următoarele fapte :
din (1.1) rezultă 𝑢 ≥ 1 ;
deoarece la optim valoarea multiplicatorului u este >0 din (2’)rezultă :
𝒙𝟏 + 𝒙𝟐 = 𝟏 (3)
(adică soluția optimă satisface cu egalitate restricția programului) ;
dacă la optim am avea 𝑥 = 0 din (3) ar rezulta 𝑥 = 1 iar din (1.1’) am obține u = 1 și
L
atunci = −1 < 0 contradicție! Prin urmare la optim avem 𝑥 > 0;
Deoarece 𝑥 > 0 din (1.2’) rezultă:
−𝟐 + 𝟑𝒙𝟐𝟐 + 𝒖 = 𝟎 (4)
Dacă la optim am avea 𝑥 = 0 din (3) ar rezulta 𝑥 = 1 iar din (4) am obține
𝑢 = −1 contradicție! Deci la optim 𝑥 > 0.
Deoarece 𝑥 > 0 din (1.1’) rezultă u = 1; din (4) obținem 𝑥 = iar din (3) găsim
√
𝑥 =1− > 0.
√
L L
⎧ ≥ 0 ⟺ −1 + 2𝑢𝑥 − 𝑢𝑥 ≥ 0 (1.1) ; 𝑥 = 0 ⟺ 𝑥 (−1 + 2𝑢𝑥 − 𝑢𝑥 ) = 0 (1.1 )
⎪ L L
≥ 0 ⟺ −2 − 𝑢𝑥 + 2𝑢𝑥 ≥ 0 (1.2) ; 𝑥 = 0 ⟺ 𝑥 (−2 − 𝑢𝑥 + 2𝑢𝑥 ) = 0 (1.2 )
⎨ L L
⎪ ≤ 0 ⟺ 𝑥 − 𝑥 𝑥 + 𝑥 − 21 ≤ 0 (2) ; 𝑢 = 0 ⟺ 𝑢(𝑥 − 𝑥 𝑥 + 𝑥 − 21) = 0 (2 )
⎩ 𝑥 ≥ 0, 𝑥 ≥ 0 ; 𝑢≥0
2𝑥 − 𝑥 =
(știm că 𝑢 > 0!)
−𝑥 + 2𝑥 =
3. Modelarea unui proces de stocare a două produse într-un spațiu de depozitare limitat a
condus la următorul program neliniar :
𝑚𝑖𝑛𝑓(𝑥 , 𝑥 ) = 𝑥 + +𝑥 +
(𝑃) 𝑥 +𝑥 ≤𝐼 unde 𝑎 , 𝑎 , 𝐼 sunt constante pozitive.
𝑥 ≥ 0, 𝑥 ≥ 0
Probați că funcția obiectiv este convexă pe ortantul pozitiv 𝑥 > 0, 𝑥 > 0 (ca urmare, (P) este
un program convex). Analizând cu atenție condițiile de optimalitate KKT determinați soluția
optimă
Forma funcției obiectiv impune satisfacerea condiției 𝑥 > 0, 𝑥 > 0.Atunci din (1.1’) și (1.2’)
rezultă relațiile :
𝜕L 𝑎 𝑎
=0⟺ =1+𝑢 ⟹𝑥 = ≤𝑎
𝜕𝑥 𝑥 √1 + 𝑢
deoarece u ≥ 0
𝜕L 𝑎 𝑎
=0⟺ = 1+𝑢 ⟹𝑥 = ≤𝑎
𝜕𝑥 𝑥 √1 + 𝑢
Două cazuri sunt posibile :
I) 𝒂𝟏 + 𝒂𝟐 ≤ 𝑰
Atunci 𝒙∗𝟏 = 𝒂𝟏 , 𝒙∗𝟐 = 𝒂𝟐 ș𝑖 𝒖∗ = 𝟎 satisfac și condițiile (2) și (2’) și în consecință constituie
o
soluție optimă a programului (P) ;
II) 𝒂𝟏 + 𝒂𝟐 > 𝑰
Dacă la optim am avea u = 0 ar rezulta 𝑥 = 𝑎 , 𝑥 = 𝑎 și de aici
𝑥 +𝑥 −𝐼 =𝑎 +𝑎 −𝐼 >0
în contradicție cu (2).Prin urmare la optim vom avea u > 0 ; atunci din (2’) rezultă
𝑎 +𝑎 1 𝐼 𝑎 +𝑎
𝑥 +𝑥 −𝐼 =0⟹ =𝐼⟹ = ⟹ 𝑢∗ = −1⟹
√1 + 𝑢 √1 + 𝑢 𝑎 +𝑎 𝐼
𝒂𝟏 𝒂𝟐
𝒙∗𝟏 = 𝑰 , 𝒙∗𝟐 = 𝑰
𝒂𝟏 + 𝒂𝟐 𝒂𝟏 + 𝒂𝟐
𝑚𝑎𝑥𝑓(𝑥 , 𝑥 ) = 𝑥 𝑥
(𝑃) 𝑝 𝑥 +𝑝 𝑥 ≤𝑉 (în care 𝑎 , 𝑎 , 𝑝 , 𝑝 , 𝑉 sunt constante pozitive)
𝑥 ≥ 0, 𝑥 ≥ 0
Notă (P) este modelul problemei consumatorului din microeconomie : 𝑥 și 𝑥 sunt cantitățile
din două bunuri 1 și 2 disponibile pe piață la prețurile 𝑝 și 𝑝 pe care un consumator dorește să
le cumpere în limita unui buget V, așa încât utilitatea achiziției, reprezentată de funcția Cobb -
Douglas 𝑓(𝑥 , 𝑥 ) = 𝑥 𝑥 , să fie maximă.
Soluție : Maximul funcției f este cu siguranță > 0 și asta numai dacă 𝑥 > 0, 𝑥 > 0. Dar, în
ortantul pozitiv 𝑥 > 0, 𝑥 > 0, funcția f are același comportament ca și funcția:
𝑙𝑛𝑓 = 𝑎 𝑙𝑛𝑥 + 𝑎 𝑙𝑛𝑥
În consecință vom studia programul în formă canonică:
Funcția -lnf este convexă pe ortantul pozitiv 𝑥 > 0, 𝑥 > 0 (este o sumă de funcții convexe…)
astfel că (P) este într-adevăr un program convex.
− + 𝑢𝑝 = 0 ⟹ 𝑝 𝑥 = ⟹𝑥 = din (1.1 )
𝑥 > 0, 𝑥 > 0 ⟹
− + 𝑢𝑝 = 0 ⟹ 𝑝 𝑥 = ⟹𝑥 = din (1.2 )
𝒂𝟏 + 𝒂𝟐 𝒂𝟏 𝑽 𝒂𝟐 𝑽
𝒖∗ = , 𝒙∗𝟏 = ∙ , 𝒙∗𝟐 = ∙
𝑽 𝒂𝟏 + 𝒂𝟐 𝒑𝟏 𝒂𝟏 + 𝒂𝟐 𝒑𝟐
RECAPITULARE PROGRAMARE LINIARĂ
Reamintim că o soluție a unui program liniar este un ansamblu de valori numerice acordate
variabilelor de decizie care satisfac restricțiile programului ; o soluție admisibilă este o soluție
cu toate componentele nenegative. În fine, o soluție optimă este o soluție admisibilă care oferă
funcției obiectiv valoarea optimă, adică maximă sau minimă, după caz.
Exemplul 2 Recent, tânărul întreprinzător român Gheorghe a deschis o mică brutărie în Sinaia
la cota 1440 și vinde turiștilor sosiți cu telecabina covrigi și brioșe în pungi de o duzină. Punga
de covrigi se vinde cu 10 lei iar o pungă cu brioșe costă 12 lei. Produsele sunt bine apreciate și
turiștii sunt înfometați astfel că tot ceeace se coace se și vinde mintenaș. O duzină de covrigi
consumă 5 măsuri de făină,2 ouă și o măsură de zahăr iar o duzină de brioșe necesită 3 măsuri de
făină 3 ouă și 3 măsuri de zahăr. Pentru ziua următoare,Gheorghe are în stoc 90 măsuri de făină,
45 ouă și 36 măsuri de zahăr. Câte duzini de covrigi și câte duzini de brioșe ar putea coace
Gheorghe în ziua următoare pentru ca venitul său să fie maxim ?
Modelul matematic
În acord cu schema generală, elaborarea modelului matematic implică parcurgerea următoarelor
etape:
I) Identificarea mărimilor variabile; acestea vor fi variabilele de decizie ale modelului
În exemplul de față, singurele mărimi necunoscute sunt cantitățile de produse finite ce vor fi
fabricate din resursele existente. Drept care vom nota :
x1 = numărul pungilor cu covrigi
x2 = numărul pungilor cu brioșe
ce vor fi pregătite în ziua următoare din stocurile de făină,ouă și zahăr date.
II) Identificarea condițiilor limitative ale situației concrete modelate și formalizarea
lor în restricțiile modelului
În exemplul nostru există o singură cerință de care trebuie să ținem seama: încadrarea necesarului
de resurse penru fabricarea cantităților x1,x2 în stocurile disponibile:
- pentru făină: producerea a x1 pungi cu covrigi necesită 5x1 măsuri de făină. Pentru x2
pungi cu brioșe avem nevoie de 3x2 măsuri de făină. Prin urmare, expresia necesarului de făină
pentru realizarea combinației (x1,x2) de produse finite va fi 5𝑥1 + 3𝑥2 . Acest necesar nu trebuie
să depășească disponibilul de 90 măsuri, ceeace se traduce prin inegalitatea
5𝑥1 + 3𝑥2 ≤ 90 (1)
- pentru ouă : raționând analog, cerința ca necesarul de ouă să nu depășească disponibilul
înseamnă satisfacerea inegalității
2𝑥1 + 3𝑥2 ≤ 45 (2)
- pentru zahăr :încadrarea necesarului de zahăr în cantitatea disponibilă se formalizează
prin inegalitatea
𝑥1 + 3𝑥2 ≤ 36 (3)
Un program liniar (P) se va numi compatibil dacă mulțimea soluțiilor sale admisibile este nevidă.
Vom spune că (P) este un program incompatibil dacă nu are soluții admisibile (atenție : chiar
dacă este incompatibil, este posibil ca (P) să aibe soluții dar nici una să nu aibe toate componentele
nenegative !)
Vom spune că programul liniar (P) are optim finit dacă (P) are cel puțin o soluție optimă. Dacă
(P) este un program compatibil dar nici una dintre soluțiile sale admisibile nu este optimă vom
zice că (P) are optim infinit (dacă funcția obiectiv f din (P) se maximizează, faptul că (P) are
optim infinit înseamnă următorul lucru : oricât de mare ar fi constanta pozitivă M, va exista
(măcar) o soluție admisibilă 𝑥̅ cu proprietatea că 𝑓(𝑥̅ ) > 𝑀 ! )
Cu soluție optimă
unică (fig 1)
cu optim finit
Cu o infinitate de
compatibil soluții optime (fig 2)
cu optim infinit
program liniar (fig3)
incompatibil
(fig 4)
Exemplul 3 Ilustrări
1. Un program liniar cu soluție optimă unică
(𝑚𝑎𝑥)𝑓 = 3𝑥1 − 𝑥2
3𝑥1 − 2𝑥2 ≤ 3
(𝑃1 ) 5𝑥1 + 4𝑥2 ≥ 10
2𝑥1 + 𝑥2 ≤ 5
{ 𝑥1 ≥ 0, ≥ 𝑥2 ≥ 0
Vezi figura 1. Soluțiile admisibile se identifică cu punctele mulțimii hașurate !
x2
𝑥1 ≥ 0
Dreapta de nivel f=3
a funcției obiectiv
5𝑥1 + 4𝑥2 ≥ 10
A
Soluția optimă unică
13 ∗ 9
𝑥1∗ = , 𝑥2 =
7 7
𝑥2 ≥ 0
x1
3𝑥1 − 2𝑥2 ≤ 3
2𝑥1 + 𝑥2 ≤ 5
Figura 1
2. Un program liniar cu o infinitate de soluții
(P2) provine din (P1) prin schimbarea funcției obiectiv. Ambele programe au aceeași mulțime de
soluții admisibile ; vezi figura 2. Dreptele de nivel ale funcției obiectiv (una dintre ele este dreapta
punctată...) sunt paralele cu dreapta AD și ca urmare, orice punct din segmentul AD se identifică
cu o soluție optimă a programului oferind funcției obiectiv f aceeași valoare maximă = 25.
x2
Dreaptă de nivel
D
a funcției
obiectiv
C
A
A
B
x1
Figura 2
(𝑚𝑎𝑥)𝑓 = 3𝑥1 − 𝑥2
3𝑥1 − 2𝑥2 ≤ 3
(𝑃3 ) {
5𝑥1 + 4𝑥2 ≥ 10
𝑥1 ≥ 0, 𝑥2 ≥ 0
(P3) se obține din (P1) eliminând restricția 2𝑥1 + 𝑥2 ≤ 5. Din figura 3 rezultă că oricât de mare
ar fi constanta pozitivă M, dreapta de nivel 𝑓 = 𝑀 ⟺ 3𝑥1 − 𝑥2 = 𝑀 intersectează mulțimea
soluțiilor admisibile A altfel spus există soluții admisibile – chiar o infinitate ! – care oferă
funcției obiectiv valoarea M. În concluzie, funcția obiectiv poate lua valori oricât de mari pe A !
dreapta de nivel 𝑓 = 𝑀 ⟺ 3𝑥1 − 𝑥2 = 𝑀
Figura 3
(𝑚𝑎𝑥)𝑓 = 3𝑥1 − 𝑥2
3𝑥1 − 2𝑥2 ≥ 3
(𝑃4 ) 5𝑥1 + 4𝑥2 ≤ 10
2𝑥1 + 𝑥2 ≥ 5
{ 𝑥1 ≥ 0, ≥ 𝑥2 ≥ 0
(P4) se obține din (P1) schimbând sensul celor trei restricții. Din figura 4 rezultă clar că sistemul
restricțiilor din (P4), deși are soluții, nici una dintre ele nu are toate componentele nenegative ;
mulțimea soluțiilor admisibile este deci vidă !
2𝑥1 + 𝑥2 ≥ 5
3𝑥1 − 2𝑥2 ≥ 3
5𝑥1 + 4𝑥2 ≤ 10
Figura 4
IV) Proprietățile fundamentale ale mulțimii soluțiilor admisibile A ale unui
program linear compatibil
• A este o mulțime convexă: o dată cu două puncte conține și segmentul care unește
aceste puncte. Urmare a acestei proprietăți este faptul că soluția optimă a programului – dacă
există ! - se găsește pe frontiera mulțimii A !
• A este o mulțime poliedrală aică este o intersecție finită de semispații (semiplane
în reprezentările grafice) ; ca urmare, A un număr finit de vârfuri și dacă programul are optim
finit cel puțin o soluție optimă se găsește într-un vârf.
Vom spune că un program liniar este în formă canonică dacă toate restricțiile sale sunt inecuații:
- de forma ≤ dacă funcția obiectiv se maximizeză ;
- de forma ≥ dacă funcția obiectiv se minimizează.
Forma canonică constituie cadrul natural de prezentare a teoriei dualității liniare. Orice program
liniar este echivalent cu o formă canonică.
Vom spune că un program liniar este în formă standard dacă toate restricțiile sale sunt ecuații.
Forma standard este importantă prin faptul că toate metodele actuale de rezolvare a programelor
liniare cer ca problema de soluționat să fie în această formă !
Un program liniar care nu este în formă standard poate fi adus la această formă prin introducerea
în restricțiile inegalități a unor noi variabile numite variabile de abatere.
Fixăm în plan un sistem de axe de coordonate format din dreptele perpendiculare orientate
Ox1 (axa orizontală) și Ox2 (axa verticală).
B(-1,3)
A(4,2)
x1
O
D(2,-1)
C(-2,2)
Figura 1
x2
𝑥 =0⟶𝑥 =2
tăieturi
dreapta d 𝑥 =0⟶𝑥 =3
x1
O
Figura 2
(𝑥 = 0 ⟶ 𝑥 = 3) ⟹ intersecția dreptei d cu axa orizontală are coordonatele (3,0)
(𝑥 = 0 ⟶ 𝑥 = 2) ⟹ intersecția dreptei d cu axa verticală are coordonatele (0,2)
Dreapta d este reprezentată în figura 2.
x2
dreapta d de ecuație
2𝑥 + 3𝑥 = 6
Semiplanul dat de
inecuația
2𝑥 + 3𝑥 ≤ 6
x1
O
Figura 3
B. Reprezentarea grafică a mulțimii soluțiilor admisibile ale unei probleme de
programare liniară cu două variabile
Pentru un program liniar în două variabile x1,x2 există posibilitatea vizualizării soluțiilor sale
admisibile și a determinării pe cale grafică a soluției optime.
Luăm ca exemplu programul liniar rezultat din modelarea situației de planificare din exemplul 2,
secțiunea ?:
Fixăm în plan (planul hârtiei, planul tablei…) un sistem de coordonate format din dreptele
perpendiculare orientate Ox1 și Ox2.
Ideea de bază constă în identificarea variabilelor x1 și x2 care semnificau numărul pungilor
cu covrigi respectiv cu brioșe,planificate a fi produse în ziua următoare, cu abscisa respectiv
ordonata unui punct din plan !
Având în vedere semnificația economică a variabilelor x1 și x2 punctele (x1,x2) în care 𝑥 < 0 sau
𝑥 < 0 nu au nici o interpretare economică logică. În schimb, punctele (x1,x2) în care 𝑥 ≥ 0 și
𝑥 ≥ 0 se identifică natural cu programele potențiale de activitate ale brutăriei pentru ziua
următoare ! Astfel, în figura 4 :
Punctul (10,2) corespunde intenției de a produce 10 pungi cu covrigi și 2 pungi cu brioșe.
Intenția este chiar realizabilă deoarece ar fi nevoie de 56 măsuri de făină, 26 ouă și 16 măsuri de
zahăr, stocurile din cele trei resurse fiind cu mult mai mari. În caz de adoptare această propunere
de plan ar aduce un venit de 124 lei.
Punctul (18,0) reprezintă intenția de a produce numai 18 pungi cu covrigi.Făina s-ar
consuma toată iar ouăle și zahărul în parte.Venitul de 180 lei ar putea fi socotit ca bun dar
propunerea suferă în ceeace privește « diversificarea ofertei » : este posibil ca unii clienți să
prefere brioșele și ar rămâne mofluzi…
Punctul (9,9) reprezintă o propunere realizabilă mai bună decât precedentele. S-ar utiliza
în întregime stocurile de ouă și zahăr, numai 72 măsuri de făină din cele 90 disponibile și s-ar
obține un venit de 198 lei.
În schimb, punctul (8,10) adică 8 pungi cu covrigi și 10 pungi cu brioșe este o propunere
potențială dar nerealizabilă : am avea făina dar ouăle și zahărul ar fi insuficiente !
x2
(8,10)
(9,9)
Propunere de plan
nerealizabilă
(10,2)
(18,0)
x1
O
Figura 4
Se ridică în mod firesc următoarele întrebări :
- care sunt punctele din plan corespunzătoare intențiilor de plan realizabile și cum
arată mulțimea lor?
- unde se găsește punctul corespunzător programului de activitate realizabil cu cel
mai mare venit și cum se găsește el ?
Răspundem la prima întrebare.
Punem în evidență punctele (x1,x2) – firește cu 𝑥 ≥ 0, 𝑥 ≥ 0 – care satisfac restricția de
încadrare a necesarului de făină în stocul disponibil 5𝑥 + 3𝑥 ≤ 90. Aceste puncte formează
unul din semiplanele determinate de dreapta 5𝑥 + 3𝑥 = 90. Punctele (x1,x2) ale dreptei, în care
𝑥 ≥ 0, 𝑥 ≥ 0 corespund acelor « intenții de plan » care ar utiliza integral stocul de făină și, din
acest motiv, dreapta de ecuație 5𝑥 + 3𝑥 = 90 se va numi în continuare dreapta FĂINĂ.
Semiplanul în care are loc restricția 5𝑥 + 3𝑥 ≤ 90 este cel care conține origina (0,0) deoarece
coordonatele ei verifică inegalitatea. Punctele acestui semiplan, situate în primul cadran,
corespund « intențiilor de plan » al căror necesar de fîină se încadrează în disponibil. Mulțimea
lor este vizualizată în figura 5.1
x1≥ 0
(0,30)
Punctele semiplanului 5𝑥 + 3𝑥 ≤ 90 cu
coordonate nenegative. Ele corespund intențiilor
de plan al căror necesar de făină se încadrează în
disponibil!
dreapta FĂINĂ
5𝑥 + 3𝑥 = 90
x2≥ 0
(18,0)
(0,0)
Figura 5.1
Procedăm analog și cu celelalte două restricții, vezi figurile 5.2 și 5.3
Punctele semiplanului 2𝑥 + 3𝑥 ≤ 45
𝑥 ≥0
cu coordonate nenegative. Ele corespund
intențiilor de plan al căror necesar de ouă
se încadrează în disponibil
(0,15)
Dreapta OUĂ
2𝑥 + 3𝑥 = 45
𝑥 ≥0
(22.5,0)
𝑥
(0,0)
Figura 5.2
Punctele semiplanului 𝑥 + 3𝑥 ≤ 36 cu
coordonate nenegative. Ele corespund
𝑥 ≥0
intențiilor de plan al căror necesar de zahăr se
încadrează în disponibil
(0,12)
dreapta ZAHĂR
𝑥 + 3𝑥 = 36
𝑥 ≥0
x1
(0,0) (36,0)
Figura 5.3
x2
D dreapta FĂINĂ
D C
dreapta ZAHĂR
B
A dreapta OUĂ
x1
O A
Figura 6
Recapitulând, în figurile 5.1 , 5.2 , 5.3 apar mulțimile de puncte (𝑥 , 𝑥 ) ale căror coordonate
satisfac condițiile de nenegativitate și – separat – restricțiile programului (P). Partea lor comună,
adică intersecția, va fi formată din punctele ale căror coordonate satisfac simultan restricțiile și
condițiile de nenegativitate din (P). În figura 6 este pusă în evidență această intersecție : ea este
mulțimea hașurată OABCD. Punctele ei se identifică cu soluțiile admisibile ale programului (P)
și corespund propunerilor de plan, realizabile din resursele date. Pentru această mulțime vom
folosi notația A.
x2
D
D C
x1
O A
dreapta de nivel f = 120
Figura 7
În baza celor discutate anterior, aceste puncte corespund “intențiilor de plan” care ar aduce un
venit de 120 lei, bineînțeles în cazul în care intențiile ar fi și realizabile! Pentru a vedea dacă din
resursele date se poate obține un venit de 120 lei, cercetăm dacă dreapta f = 120 intersectează
mulțimea soluțiilor admisibile A ≡ OABCD din figura 6. Din figura 7 rezultă că există chiar o
infinitate de programe realizabile care ar conduce la acest venit : coordonatele oricărui punct al
intersecției dreptei f = 120 cu A dau un asemenea program !
Se poate obține un venit dublu ? Din figura 7 rezultă că dreapta
𝑓 = 240 ⟺ 10𝑥 + 12𝑥 = 240
nu mai intersectează A și prin urmare un venit de 240 lei nu se poate obține din resursele date.
Pentru a vedea cât de mare este venitul ce poate fi realizat, translatăm dreapta f = 120 către
dreapta f = 240, oprindu-ne în momentul în care se « pierde » intersecția cu mulțimea soluțiilor
admisibile A. Din figura 7 rezultă că dreapta
f = venit maxim
trece prin punctul B, punct ce reprezintă soluția optimă a problemei de programare liniară (P).
Programul de activitate reprezentat de punctul B se află la intersecția dreptelor FĂINĂ și OUĂ
și în consecință acest plan utilizează integral făina și ouăle și doar în parte stocul de zahăr.
Coordonatele punctului
B ≡ componentele programului optim de activitate
se obțin rezolvând sistemul format din ecuațiile dreptelor FĂINĂ și OUĂ :
5𝑥 + 3𝑥 = 90
⟹ 𝑥 ∗ = 15 , 𝑥 ∗ = 5 ⟹ (max)𝑓 = 210
2𝑥 + 3𝑥 = 45
În concluzie, din resursele pe care le are la dispoziție, Gheorghiță poate obține maximum 210 lei
venit. S-ar consuma toată făina și ouăle și numai 30 măsuri de zahăr.
Notă : dreptele de ecuații
𝑓 = 120 ⟺ 10𝑥 + 12𝑥 = 120 , 𝑓 = 240 ⟺ 10𝑥 + 12𝑥 = 240
și în general
𝑓 = 𝐶(constantă) ⟺ 10𝑥 + 12𝑥 = 𝐶
sunt paralele și se numesc drepte de nivel ale funcției f.
TEMĂ
Un fabricant de ambarcațiuni produce bărci cu vâsle pentru agrement și canoe pentru uz sportiv.
Ambarcațiunile sunt confecționate din foi de aluminiu, fasonate cu o presă specială și finisate
manual. La o barcă se folosesc 25 kg foi de aluminiu, operația de presare durează 6 minute iar
finisarea durează 3 ore. Pentru o canoe se consumă 15 kg foi de aluminiu, 5 minute pentru presare
și 5 ore pentru finisare. Pentru următorul sezon estival fabricantul are disponibile 1000 kg foi de
aluminiu, 5 ore de funcționare a presei speciale și 200 ore de muncă pentru finisări. La o barcă
vândută se câștigă 50 euro iar o canoe vândută aduce un profit de 60 euro. Presupunând că toată
producția realizată se și vinde, câte ambarcațiuni din fiecare tip ar trebui fabricate în scopul
maximizării profitului ?
i) Elaborați modelul matematic al situației descrise;
ii) Rezolvați programul liniar rezultat prim metoda grafică.