Sunteți pe pagina 1din 118

Cercetări Operaționale, anul III Seminarul 2

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.

Se consideră programul liniar :


3𝑥 + 5𝑥 ≤ 150

⎪ 𝑥 ≤ 20
8𝑥 + 5𝑥 ≤ 300
⎨ 𝑥 ≥0 𝑥 ≥0

⎩(max)𝑓 = 50𝑥 + 40𝑥

1. i) Să se aducă programul dat la forma standard (P) ;


ii) Să se scrie (P) în formatul matricial 𝐴𝑥 = 𝑏 , 𝑥 ≥ 0 , (max) 𝑓 = 𝑐𝑥 punând în
evidență :
- Matricea tehnologică A cu coloanele sale ;
- Vectorul coloană x al variabilelor de decizie ;
- Vectorul coloană b al termenilor liberi ;
- Vectorul linie c al coeficienților funcției obiectiv, numit și vectorul costurilor.

Soluție: i) Forma standard


3𝑥 +5𝑥 +𝑥 = 150

⎪ 𝑥 +𝑥 = 20
(𝑃) 8𝑥 +5𝑥 +𝑥 = 300
⎨ 𝑥 ≥ 0 𝑗 = 1, … ,5

⎩(max) 𝑓 = 50𝑥 +40𝑥 +0 ∙ 𝑥 0 ∙ 𝑥 0∙𝑥
unde 𝑥 , 𝑥 , 𝑥 sunt variabilele de abatere.
ii) Matricea tehnologică A cu coloanele A1,A2,…,A5 :
3 5 1 0 0 3 5
𝐴 = [𝐴 , 𝐴 , 𝐴 , 𝐴 , 𝐴 ] = 0 1 0 1 0 cu 𝐴 = 0 , 𝐴 = 1 etc
8 5 0 0 1 8 5
𝑥
⎡𝑥 ⎤
⎢ ⎥
Vectorul coloană al variabilelor de decizie : 𝑥 = ⎢𝑥 ⎥
⎢𝑥 ⎥
⎣𝑥 ⎦
150
Vectorul coloană al termenilor liberi : 𝑏 = 20
300
Vectorul linie al costurilor: 𝑐 = [50 40 0 0 0]
Atenție: scrierea vectorilor x,b și c în coloană sau în linie este impusă de regulile calculului
matricial!

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 :

Fiind dat sistemul de ecuații liniare :


𝐴𝑥 =𝑏
(*)
−𝑐𝑥 +𝑓 =0

în n + 1 variabile 𝑥 = (𝑥 , 𝑥 , … , 𝑥 ) și f , să se determine soluția (𝑥 ∗ , 𝑓 ∗ ) în care :


𝑥 ∗ ≥ 0 și 𝑓 ∗ este maxim

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

- înmulțim prima ecuație cu 1 3; obținem ecuația:

𝑥 + 𝑥 + 𝑥 = 50 (**)

- La a 3-a ecuație a sistemului (*) adunăm ecuația (**), înmulțită în prealabil


cu -8 ; în noua ecuație nu mai apare x1.
- La a 4-a ecuație din sistemul (*) adunăm ecuația (**), înmulțită în prealabil
cu +50 ;în noua ecuație nu mai apare x1.
În urma efectuării acestor operații sistemul (*) capătă forma echivalentă:
5 1
⎧ 𝑥 + 𝑥 + 𝑥 = 50
⎪ 3 3
⎪ +𝑥 +𝑥 = 20
25 8
⎨ − 𝑥 − 𝑥 +𝑥 = −100
3 3
⎪ 130
⎪ 50
𝑥 + 𝑥 +𝑓 = 2500
⎩ 3 3
în care variabila bazică x1 apare doar în prima ecuație cu coeficientul +1.

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.

4. i) Să se determine soluția asociată bazei 𝐵 = [𝐴 , 𝐴 , 𝐴 ] și să se constate că este admisibilă ;


ii) Să se probeze că soluția asociată bazei 𝐵 = [𝐴 , 𝐴 , 𝐴 ] este unica soluție optimă a
programului (P).

Soluție : i) Soluția asociată bazei 𝐵 = [𝐴 , 𝐴 , 𝐴 ] se obține acordând valoarea 0 variabilelor


nebazice 𝑥 , 𝑥 ; din forma explicită obținută mai sus rezultă imediat :
- Valorile variabilelor bazice ≡ termenii liberi din primele 3 ecuații :
𝑥 = 30 , 𝑥 = 12 , 𝑥 =8
- Valoarea funcției obiectiv≡ termenul liber din a 4-a ecuație: 𝑓 = 1980
În concluzie, soluția asociată bazei 𝐵 = [𝐴 , 𝐴 , 𝐴 ] este 𝑥(𝐵) = (30,12,0,8,0), evident
admisibilă; valoarea funcției obiectiv în această soluție este 𝑓 𝑥(𝐵) = 1980.
ii) Fie 𝑥̅ = (𝑥̅ , 𝑥̅ , 𝑥̅ , 𝑥̅ , 𝑥̅ ) o soluție admisibilă oarecare diferită de 𝑥(𝐵). Cu ajutorul formei
explicite de mai sus calculăm :

𝑓(𝑥̅ ) = 1980 − 𝑥̅ − 𝑥̅ .

Deoarece 𝑥̅ ≠ 𝑥(𝐵) vom avea 𝑥̅ > 0 sau 𝑥̅ > 0 de unde va rezulta că :


𝑓(𝑥̅ ) < 1980 = 𝑓(𝑥(𝐵))
În concluzie, 𝑥(𝐵) este unica soluție admisibilă în care funcția obiectiv are valoarea
maximă 1980.

Observație : Ignorând valorile varibilelor de abatere 𝑥 = 0 , 𝑥 = 0 , 𝑥 = 0 se obține soluția


optimă a programului liniar original,în două variabile : 𝑥 ∗ = 30 , 𝑥 ∗ = 12.

5. Să se scrie forma explicită a programului (P) în raport cu baza unitară 𝐸 = [𝐴 , 𝐴 , 𝐴 ]. Să se


indice soluția asociată bazei unitare.

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.

Anexă. Pivotarea gaussiană

Se consider un tabel dreptunghiular de numere T în care a fost selectat (pus în evidență) un


element nenul p numit pivot (figura 1)

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

2 1 0 2 1 7/3 0 -2/3 2 4/3


-1 -2 -1 1 4 -5/3 0 1/3 1 10/3
-1 3 2 0 -1 ⟹ -1/3 1 2/3 0 -1/3
-2 0 5 -1 3 -2 0 5 -1 3
Cercetări Operaționale, anul III Seminarul 3

TEMA : Bazele metodei simplex

Reluăm programul liniar în formă standard cu m restricții și n variabile și în care funcția


obiectiv se maximizează:

∑ 𝑎 𝑥 =𝑏 𝑖 = 1, … , 𝑚 𝐴𝑥 = 𝑏
(𝑃) 𝑥 ≥ 0 𝑗 = 1, … , 𝑛 ⟺ 𝑥≥0
(max)𝑓 = ∑ 𝑐 𝑥 (max)𝑓 = 𝑐𝑥

în care:
𝑎 𝑎 ⋯ 𝑎
𝑎 𝑎 ⋯ 𝑎
 𝐴= = [𝐴 , 𝐴 , … , 𝐴 ]
⋮ ⋮ ⋯ ⋮
𝑎 𝑎 ⋯ 𝑎

este matricea tehnologică iar 𝐴 , 𝐴 , … , 𝐴 sunt coloanele acesteia,

𝑥
𝑥
 𝑥= ⋮ este vectorul coloană al variabilelor de decizie,
𝑥

𝑏
𝑏
 𝑏= este vectorul coloană al termenilor liberi,

𝑏

 𝑐 = [𝑐 𝑐 ⋯ 𝑐 ] este vectorul linie al coeficienților funcției obiectiv numit și


vectorul costurilor.

Relativ la matricea tehnologică A facem ipoteza :


𝑅𝑎𝑛𝑔(𝐴) = 𝑚 < 𝑛

Ipoteza, ușor de îndeplinit în aplicațiile practice, are două consecințe importante :

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

Punând relația de definiție a funcției obiectiv 𝑓 = 𝑐𝑥 în forma −𝑐𝑥 + 𝑓 = 0 și interpretând


valoarea f a funcției obiectiv ca o nouă variabilă, obținem următoarea formulare echivalentă a
programului (P):

Fiind dat sistemul de ecuații liniare


𝐴𝑥 =𝑏
(*)
−𝑐𝑥 +𝑓 =0
în n+1 variabile 𝑥 = (𝑥 , 𝑥 , … , 𝑥 ) și f să se determine o soluție (𝑥 ∗ , 𝑓 ∗ ) în care 𝑥 ∗ ≥ 0 și 𝑓 ∗
este maxim.

Fixăm o bază B a programului în formă standard (P).Introducem următoarele notații:


 I ≡ mulțimea indicilor coloanelor din matricea tehnologică A care compun submatricea
patrată B:
𝐵= 𝐴 ∈

 J ≡ mulțimea indicilor coloanelor din A care nu sunt în B; aceste coloane vor forma
submatricea,
𝑆= 𝐴 ∈

astfel că matricea tehnologică A este partiționată în două blocuri :


𝐴 = [𝐵, 𝑆]
Baza B induce partiționările :
⋮ ⋮
𝑥= 𝑥 cu 𝑥 = 𝑥 și 𝑥 = 𝑥
𝑥 ⋮ ∈ ⋮ ∈

𝑐 = [𝑐 , 𝑐 ] 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…)

 Explicitarea variabilelor bazice in funcție de cele nebazice în sistemul de ecuații


liniare 𝑨𝒙 = 𝒃
Deoarece B este o matrice inversabilă, sistemul

𝐴𝑥 = 𝑏 ⟺ [𝐵, 𝑆] 𝑥 = 𝑏 ⟺ 𝐵𝑥 + 𝑆𝑥 = 𝑏
𝑥
poate fi rezolvat în raport cu xB :
𝑥 + 𝐵 𝑆𝑥 = 𝐵 𝑏 ⟺ 𝑥 + 𝑆̅𝑥 = 𝑏 unde 𝑆̅ = 𝐵 𝑆 și 𝑏 = 𝐵 𝑏
Punem în evidență componentele masivelor 𝑆̅ și 𝑏 :
𝑆̅ = 𝐵 𝑆 = 𝐵 [⋯ 𝐴 ⋯] ∈ = [⋯ 𝐵 𝐴 ⋯] ∈ = [⋯ 𝐴̅ ⋯] ∈ unde

𝐴̅ = 𝐵 𝐴 = 𝑎 𝑗 ∈ 𝐽 de unde în final 𝑆̅ = 𝑎 ∈ , ∈
.
⋮ ∈

𝑏=𝐵 𝑏= 𝑏
⋮ ∈

În concluzie, sistemul:

𝐴𝑥 = 𝑏 ⟺ 𝑎 𝑥 =𝑏 𝑖 = 1, … , 𝑚

a fost transformat în sistemul echivalent

𝑥 + 𝑆̅𝑥 = 𝑏 ⟺ 𝑥 + 𝑎 𝑥 =𝑏 𝑖∈𝐼

în care, într-adevăr, variabilele bazice sunt explicitate în funcție de cele nebazice.

 Eliminarea variabilelor bazice 𝒙𝒊 , 𝒊 ∈ 𝑰 din expresia funcției obiectiv


Pentru început

𝑓 = 𝑐𝑥 = [𝑐 , 𝑐 ] 𝑥 =𝑐 𝑥 +𝑐 𝑥
𝑥
Î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.

Constanta 𝑓 ̅ = 𝑐 𝑏 și componentele vectorului 𝑐̅ = 𝑐 𝑆̅ − 𝑐 vor juca un rol important în teoria


metodei simplex astfel că merită să le cercetăm structura :

 𝑓̅ = ∑ ∈ 𝑐 𝑏 (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 !!

Am numit soluția asociată bazei B unica soluție a sistemului de restricții 𝐴𝑥 = 𝑏 în care


variabilele nebazice 𝑥 , 𝑗 ∈ 𝐽 au valoarea zero. Această soluție, notată 𝑥(𝐵) și valoarea funcției
obiectiv în 𝑥(𝐵), rezultă imediat din forma explicită (PB) înlocuind acolo 𝑥 = 0 ⟺ 𝑥 = 0 ,
𝑗∈𝐽:

𝑥(𝐵) = 𝑥 = 𝑏 ⟺ 𝑥 = 𝑏 ,𝑖 ∈ 𝐼 ; 𝑥 = 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 𝒇 … * … … 𝒄𝒋 …

numit tabelul simplex asociat bazei B.

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

Ar rezulta următorul procedeu naiv de rezolvare a programului (P) :


- Se generează toate bazele programului (P) ;
- Pentru fiecae bază generată se calculează soluția de bază asociată ;
- Se elimină soluțiile de bază neadmisibile ;
- Dintre cele rămase se reține aceea care maximizează valoarea funcției obiectiv.

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.

Metoda simplex. Descriere de principiu

Î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

În seminarul 3 am studiat programul în formă standard


3𝑥 +5𝑥 +𝑥 = 150

⎪ 𝑥 +𝑥 = 20
(𝑃) 8𝑥 +5𝑥 +𝑥 = 300
⎨ 𝑥 ≥ 0 𝑗 = 1, … ,5

⎩(max) 𝑓 = 50𝑥 +40𝑥 +0 ∙ 𝑥 0 ∙ 𝑥 0∙𝑥
În raport cu baza 𝐵 = [𝐴 , 𝐴 , 𝐴 ]am construit forma explicită a programului (P) ca fiind
sistemul de ecuații liniare
1 1
⎧ 𝑥 − 𝑥 + 𝑥 = 30
⎪ 5 5
⎪ 8 3
⎪ 𝑥 + 𝑥 − 𝑥 = 12
25 25
(𝑃 )
⎨ 8 3
− 𝑥 +𝑥 + 𝑥 =8
⎪ 25 25
⎪ 14
⎪ 26
𝑥 + 𝑥 +𝑓 = 1980
⎩ 5 5

1. i) Scrieți tabelul simplex asociat bazei 𝐵 = [𝐴 ,𝐴 ,𝐴 ]


ii) Scrieți tabelul simplex asociat bazei unitare 𝐸 = [𝐴 , 𝐴 , 𝐴 ]
Soluție :
i) Tabelul cerut conține constantele sistemului (PB) :
50 40 0 0 0
CB VB VVB x1 x2 x3 x4 x5
50 x1 30 1 0 -1/5 0 1/5
40 x2 12 0 1 8/25 0 -3/25
0 x4 8 0 0 -8/25 1 3/25
f 1980 * * 14/5 * 26/5

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:

𝑥 1/2 −1/10 −3/10 100 4


𝑥 = 𝑥 =𝐵 𝑏= 0 3/5 −1/5 100 = 36
𝑥 −1/2 −1/10 7/10 120 24

În concluzie, soluția optimă a programului dat este :𝑥 ∗ = 36 , 𝑥 ∗ = 24 , 𝑥 ∗ = 4

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 :

𝑥 = (10,5,5,10,2) ; 𝑥 = (0,3,7,0,0) ; 𝑥 = (5,0,6,2,4) ; 𝑥 = (0,0,7,3,4)

Ș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

Completați tabelul cu ce lipsește și continuați aplicarea algoritmului simplex.


Soluție : Se completează pe rând : 1) coloana CB ; 2) valoarea funcției obiectiv cu formula (vfo);
3) linia costurilor reduse cu formula (cr). S obține:

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

TEMA : rezolvarea programelor liniare cu algoritmul simplex

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:

 Termenii liberi ai restricțiilor sunt nenegativi (≥0),


 Restricțiile sunt egalități (altfel spus, programul este în formă standard);
 Matricea tehnologică a programului conține o matrice unitate de ordinul m = numărul
restricțiilor.

Pregătirea problemei :

1. Ne asigurăm că toți termenii liberi ai restricțiilor sunt nenegativi (≥0) înmulțind cu – 1


restricțiile cu termen liber negativ.
2.Dacă este cazul, aducem programul la forma standard introducând în fiecare restricție
inegalitate o variabilă de abatere. Variabilele de abatere se introduc în expresia funcției obiectiv
cu coeficientul zero.
3.Cercetăm dacă matricea tehnologică a formei standard conține matricea unitate de
ordinul m = numărul restricțiilor (altfel spus, cercetăm dacă programul – în formă standard – este
și în formă bună !) Dacă este cazul pentru creearea coloanelor unitare lipsă, în restricțiile
corespunzătoare se vor introduce noi variabile nenegative numite variabile artificiale. Spre
deosebire de variabilele de abatere, variabilele artificiale se introduc în funcția obiectiv cu un
coeficient comun :

-M în problemele de maximizare ;
+M în problemele de minimizare

unde M este o constantă pozitivă foarte mare.


1. Se consideră programul liniar :

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

Soluție : i) Pentru forma standard se introduc variabilele de abatere x4 și x5 în a 2-a respectiv a


3-a restricție :

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:

 Între AP și AFSP există o corespondență bijectivă (împerechere) care conservă soluțiile


optime. În cazul de față, corespondența lucrează astfel:
AP → AFSP : (𝑥̅ , 𝑥̅ , 𝑥̅ ) ⟶ (𝑥̅ , 𝑥̅ , 𝑥̅ , 2𝑥̅ + 𝑥̅ − 35,20 − 𝑥̅ − 3𝑥̅ )
AP ← AFSP : (𝑥 , 𝑥 , 𝑥 ) ⟵ (𝑥 , 𝑥 , 𝑥 , 𝑥 , 𝑥 )
 Soluțiile din AFSP se identifică cu soluțiile din AFBP în care toate variabilele artificiale
au valoarea zero.
 Costurile de penalizare foarte mari asociate variabilelor artificiale « obligă »
algoritmul simplex să se îndrepte către soluțiile în care aceste variabile au valori mici și de
dorit, zero !!

Aplicarea algoritmului simplex asupra formei bune

Start Se scrie tabelul simplex asociat bazei unitare.


Nu uitați :
 Valoarea funcției obiectiv în soluția asociată bazei curente ≡ produsul scalar al coloanelor
CB (Costurile variabilelor Bazice) și VVB (Valorile Variabilelor Bazice)
 Costul redus 𝑐̅ al unei variabile nebazice xj ≡ produsul scalar al coloanelor CB și “xj”
din care se scade costul cj scris deasupra tabelului.

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 2 (criteriul de intrare în bază) Se determină indicele nebazic 𝑘 ∈ 𝐽 cu proprietatea


𝑐̅ = 𝑚𝑖𝑛 𝑐̅ , 𝑗 ∈ 𝐽 în problemele de maximizare !
𝑐̅ va fi cu siguranță < 0 Coloana nebazică Ak intră în baza curentă.

Pasul 3 (Recunoașterea optimului infinit) Dacă toate componentele 𝑎 , 𝑖 ∈ 𝐼 ale coloanei 𝐴̅


( coloana «xk » din tabelul simplex curent !) sunt ≤ 0 Stop : programul de rezolvat are optim
infinit).
Î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ă.

Pasul 5 (Pivotare) Se determină forma explicită a programului de rezolvat în raport cu noua


bază
𝐵 = 𝐵\{𝐴 } ∪ {𝐴 }

prin pivotare gaussiană cu pivotul 𝑎 > 0 a formei explicite în raport cu baza veche B.

Notă : Algoritmul se aplică și problemelor de minimizare cu două mici modificări :


 În pasul 1, soluția de bază curentă este optimă dacă 𝑐̅ ≤ 0 ≤, 𝑗 ∈ 𝐽 ;
 În pasul 2 indicele 𝑘 ∈ 𝐽 al coloanei care intră în baza curentă se găsește cu relația
𝑐̅ = 𝑚𝑎𝑥 𝑐̅ , 𝑗 ∈ 𝐽 ; de această dată 𝑐̅ > 0 !
2. Să se determine soluția optimă a programului (P) din exemplul 1 aplicând algoritmul
simplex formei bune (FBP)
Soluție : Primul tabel simplex este asociat bazei unitare [𝐴 , 𝐴 , 𝐴 ]
8 -6 7 0 0 -M -M
CB VB VVB x1 x2 x3 x4 x5 x6 x7 θ
-M x6 30 3 -1 2 0 0 1 0 30:3=10
-M x7 35 2 1 0 -1 0 0 1 35 :2=17.5
0 x5 20 1 0 3 0 1 0 0 20 :1=20
f -65M -5M-8 6 -2M-7 M * * *
8 x1 10 1 -1/3 2/3 0 0 1/3 0 -
-M x7 15 0 5/3 -4/3 -1 0 -2/3 1 15 :(5/3)=9
0 x5 10 0 1/3 7/3 0 1 -1/3 0 10 :(1/3)=30
f -15M+80 * -5/3M+10/3 4/3M-5/3 M * 5/3M+8/3 *
8 x1 13 1 0 2/5 -1/5 0 1/5 1/5
-6 x2 9 0 1 -4/5 -3/5 0 -2/5 3/5
0 x5 7 0 0 13/5 1/5 1 -1/5 -1/5
f 50 * * 1 2 * M+4 M-2

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

Pasul 1 Această soluție nu este optimă deoarece 𝑐̅ = − 𝑀 + < 0 (M este o constantă


pozitivă foarte mare !!)
Pasul 2 𝑐̅ este singurul cost redus negativ (din al doilea table simplex) și ca urmare coloana
−1
𝐴 = 1 intră în bază.
0
Pasul 3 Criteriul de recunoaștere a optimului infinit nu este îndeplinit :
1
⎡− 3⎤
coloana "𝑥 " = ⎢ 5 3 ⎥ din tabelul simplex (în teorie ≡ 𝐴̅ ) nu are toate componentele ≤0 !!
⎢ ⎥
1
⎣ 3 ⎦
0
Pasul 4 Minimul rapoartelor calculate în dreapta tabelului arată că 𝐴 = 1 iese din bază.
0
Pasul 5 Pivotăm al 2-lea tabel simplex cu pivotul încadrat 𝑎 = .

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

3. Să se determine soluția optimă a programului liniar :


(max)𝑓 = 50𝑥 + 40𝑥
⎧ 3𝑥 + 5𝑥 ≤ 150

(𝑃) 𝑥 ≤ 20
⎨ 8𝑥 + 5𝑥 ≤ 300

⎩ 𝑥 ≥ 0 ,𝑥 ≥ 0
Soluție : Forma standard
3𝑥 + 5𝑥 + 𝑥 = 150
⎧ 𝑥 +𝑥 = 20

(𝐹𝑆𝑃) 8𝑥 + 5𝑥 + 𝑥 = 300
⎨ 𝑥 ≥ 0 𝑗 = 1, … ,5

⎩(max)𝑓 = 50𝑥 + 40𝑥 + 0 ∙ 𝑥 + 0 ∙ 𝑥 + 0 ∙ 𝑥
Matricea tehnologică conține o matrice unitate de ordinul 3 și ca urmare, forma standard coincide
cu forma bună ; se poate aplica algoritmul simplex luând ca bază de start baza unitară [𝐴 , 𝐴 , 𝐴 ]
50 40 0 0 0
CB VB VVB x1 x2 x3 x4 x5 θ
0 x3 150 3 5 1 0 0 150 :3=50
0 x4 20 0 1 0 1 0 -
0 x5 300 8 5 0 0 1 300 :8=17.5
f 0 -50 -40 * * *
0 x3 75/2 0 25/8 1 0 -3/8 (75/2) :(25/8)=12
0 x4 20 0 1 0 1 0 20 :1=20
50 x1 75/2 1 5/8 0 0 1/8 (75/2) :,(5/8)=60
f 1875 * -35/4 * * 25/4
40 x2 12 0 1 8/25 0 -3/25
0 x4 8 0 0 -8/25 1 3/25
50 x1 30 1 0 -1/5 0 1/5
f 1980 * * 14/5 * 26/5

Programul (P) are soluția optimă : 𝑥 ∗ = 30 , 𝑥 ∗ = 12


Valorile variabilelor de abatere: 𝑥 ∗ = 0 , 𝑥 ∗ = 8 , 𝑥 ∗ = 0
Valoarea maximă a funcției obiectiv (max)f = 1980

4. Să se determine soluția optimă a programului liniar :

(min)𝑓 = 𝑥 − 3𝑥 + 2𝑥
⎧ 𝑥 − 2𝑥 + 𝑥 ≥ 3

(𝑃) 2𝑥 + 𝑥 − 𝑥 = 7
⎨ 𝑥 + 𝑥 + 2𝑥 ≤ 8

⎩ 𝑥 ≥ 0, 𝑥 ≥ 0, 𝑥 ≥ 0

Soluție : Aducem (P) la forma standard :


𝑥 − 2𝑥 + 𝑥 − 𝑥 =3
⎧ 2𝑥 + 𝑥 − 𝑥 =7

(𝐹𝑆𝑃) 𝑥 + 𝑥 + 2𝑥 +𝑥 =8
⎨ 𝑥 ≥ 0 𝑗 = 1, … ,5

⎩(min)𝑓 = 𝑥 − 3𝑥 + 2𝑥 + 0 ∙ 𝑥 + 0 ∙ 𝑥

Se observă că matricea tehnologică a (FSP) nu conține o (întreagă) submatrice unitate de ordinul


3 și ca urmare aducem (FSP) la forma bună introducând variabilele artificiale 𝒙𝟔 ș𝒊 𝒙𝟕 în
primele două ecuații. Aceste variabile vor apare și în expresia funcției obiectiv cu coeficientul
comun +M deoarece funcția obiectiv se minimizează !

𝑥 − 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

Programul liniar (P) are soluția optimă: 𝑥 ∗ = , 𝑥∗ = , 𝑥 ∗ = 0;


Valorile variabilelor de abatere: 𝑥 ∗ = 0 , 𝑥 ∗ = (𝑥 ∗ = 0 arată că soluția optimă satisface cu
egalitate prima restricție; 𝑥 ∗ ≠ 0 arată că soluția optimă satisface cu inegalitate strictă a doua
restricție)

Valoarea minimă a funcției obiectiv este .

5. Să se scrie forma explicită a programului (FSP) din exercițiul 4 în raport cu baza optimă.

Soluție : Am văzut că, în soluția optimă a programului (FBP), variabilele artificiale 𝑥 și 𝑥 au


valoarea zero. Baza 𝐵 = [𝐴 , 𝐴 , 𝐴 ], optimă pentru (FBP), este o bază optimă și pentru (FSP) și
soluția (FSP) asociată acestei baze se obține din soluția (FBP) asociată aceleiași baze, ignorând
valorile (nule) ale variabilelor artificiale ! Tot așa, tabelul simplex optim al (FSP) se obține din
tabelul simplex optim al (FBP) ignorând coloanele variabilelor artificiale:

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 *

Forma explicită a programului (FSP) în raport cu baza optimă 𝐵 = [𝐴 , 𝐴 , 𝐴 ] este :

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)𝑓 = 𝑥 + 𝑥 + 𝑥 + 𝑀 ∙ 𝑥 + 𝑀 ∙ 𝑥

Baza de start este baza unitară 𝐸 = [𝐴 , 𝐴 ]

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

De exemplu, pentru ∝= rezultă soluția optimă :𝑥 = , 𝑥 = , 𝑥 = care nu este


soluție de bază !

7. (un program liniar cu optim infinit) Să se rezolve programul liniar :

(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 ∙ 𝑥

Baza de start este baza unitară 𝐸 = (𝐴 , 𝐴 , 𝐴 )

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 *

În al 3-lea tabel simplex avem următoarea situație:

- Există un cost redus negativ : 𝑐̅ = − < 0 (criteriul de optim pentru problemele d


maxim nu este îndeplinit…) ;
⎡− ⎤
⎢ ⎥
- Coloana 𝐴̅ = ⎢− ⎥ (denumită frecvent coloana “x4” din tabelul simplex…) nu are
⎢ ⎥
⎣− ⎦
componente positive.
Conform teoriei, algoritmul simplex se oprește cu concluzia că programul are optim infinit.
Notă : Recomandăm cititorului studios să confirme această concluzie prin metoda grafică.
8. (cum se recunoaște incompatibilitatea unui program liniar ?) Să se rezolve programul
liniar :
(min)𝑓 = 6𝑥 + 𝑥 − 2𝑥

⎪ 5𝑥 − 𝑥 + 𝑥 ≥ 6
(𝑃) 2𝑥 + 𝑥 + 3𝑥 ≤ 7
⎨ −3𝑥 + 𝑥 + 2𝑥 ≥ 2

⎩ 𝑥 ≥ 0, 𝑥 ≥ 0, 𝑥 ≥ 0
Soluție :
Forma standard :
5𝑥 +𝑥 −𝑥
−𝑥 =6

⎪ 2𝑥 +𝑥
+3𝑥 +𝑥 =7
(𝐹𝑆𝑃) −3𝑥 +𝑥
+2𝑥 −𝑥 = 2
⎨ 𝑥 ≥ 0 𝑗 = 1, … ,6

⎩(min)𝑓 = 6𝑥 + 𝑥 − 2𝑥 + 0 ∙ 𝑥 + 0 ∙ 𝑥 + 0 ∙ 𝑥
Forma bună :
5𝑥 −𝑥
+𝑥 −𝑥 +𝑥 =6

⎪ 2𝑥 +𝑥
+3𝑥 +𝑥 =7
(𝐹𝑆𝑃) −3𝑥 +𝑥
+2𝑥 −𝑥 +𝑥 = 2
⎨ 𝑥 ≥ 0 𝑗 = 1, … ,8

⎩(min)𝑓 = 6𝑥 + 𝑥 − 2𝑥 + 0 ∙ 𝑥 + 0 ∙ 𝑥 + 0 ∙ 𝑥 + 𝑀 ∙ 𝑥 + 𝑀 ∙ 𝑥

Baza admisibilă de start este baza unitară 𝐸 = (𝐴 , 𝐴 , 𝐴 )


6 1 -2 0 0 0 M M
CB VB VVB x1 x2 x3 x4 x5 x6 x7 x8
M x7 6 5 -1 1 -1 0 0 1 0
0 x5 7 2 1 3 0 1 0 0 0
M x8 2 -3 1 2 0 0 -1 0 1
f 8M 2M-6 -1 3M+2 -M * -M * *
M x7 5 13/2 -3/2 0 -1 0 1/2 1 -(1/2)
0 x5 4 13/2 -1/2 0 0 1 3/2 0 -(3/2)
-2 x3 1 -3/2 ½ 1 0 0 -1/2 0 1/2
f 5M-2 (13/2)M-3 (-3/2)M-2 * -M * (1/2)M+1 * (-3/2)M-1
M x7 1 0 -1 0 -1 -1 -1 1 1
6 x1 8/13 1 -1/13 0 0 2/13 3/13 0 -3/13
-2 x3 25/13 0 5/13 1 0 3/13 -2/13 0 2/13
f M-(2/13) * -M-(29/13) * -M -M+6/13 -M+(22/13) * -22/13
Se constată că soluția formei bune afișată în al 3-lea tabel simplex este optimă deoarece toate
costurile reduse sunt ≤0, deci satisfac criteriul de optim pentru problemele de minim. În această
soluție, variabila artificială x7 are o valoare nenulă și ca urmare programul dat (P) este
incompatibil!

Probleme propuse

1. Instrucțiunile logice și de calcul ale algoritmului simplex sunt : P ≡ pivotează tabelul


simplex curent ; O ≡ aplică criteriul de optim ; I ≡ aplică criteriul de intrare în bază ; E ≡ aplică
criteriul de ieșire din bază ; X ≡ aplică criteriul de recunoaștere a optimului infinit.
În ce ordine se succed aceste instrucțiuni într-o iterație a algoritmului simplex ?

2. i) Determinați cu ajutorul algoritmului simplex soluția optimă a programului liniar :

(max)𝑓 = 2𝑥 + 3𝑥

⎪ 2𝑥 + 𝑥 ≥ 40
(𝑃) 𝑥 + 3𝑥 ≥ 30
⎨ 𝑥 + 𝑥 ≤ 30

⎩ 𝑥 ≥ 0 ,𝑥 ≥ 0

ii) Rezolvați programul prin metoda grafică și comparați rezultatele.

3. Rezolvați următoarea problemă de minimizare transformând-o intr-una de maximizare :

(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

TEMA : Reoptimizare la adăugarea unei restricții. Utilizarea algoritmului simplex dual.

I) Algoritmul simplex dual. Recapitulare

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 :

 Soluția de bază asociată 𝑥(𝐵) = 𝑥 dată de formulele :


𝑥
𝑥 =𝑏=𝐵 𝑏 , 𝑥 = 0 sau, pe componente : 𝑥 = 𝑏 , 𝑖 ∈ 𝐼 ; 𝑥 = 0 , 𝑗 ∈ 𝐽

 Costurile reduse, reunite în vectorul: 𝑐̅ = 𝑐 𝑆̅ − 𝑐 = 𝑐 𝐵 𝑆 − 𝑐 sau, pe


componente: 𝑐̅ = 𝑐 𝐴̅ − 𝑐 = 𝑐 𝐵 𝐴 − 𝑐 = ∑ ∈ 𝑐 𝑎 − 𝑐 , 𝑗 ∈ 𝐽.

Vom spune că baza B este:


 Primal admisibilă dacă soluția x(B) asociată bazei B este admisibilă, adică:
𝑏 ≥0 , 𝑖∈𝐼
 Dual admisibilă dacă se verifică criteriul de optim al algoritmului simplex, adică :
𝑐̅ ≥ 0 , 𝑗 ∈ 𝐽 în problemele de maximizare sau 𝑐̅ ≤ 0 , 𝑗 ∈ 𝐽 în cele de minimizare.
Soluția asociată x(B) se va numi primal sau dual admisibilă dacă baza B este primal sau dual
admisibilă.

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

Instrucțiunile algoritmului simplex dual sunt următoarele :

Start : Se presupun cunoscute o bază dual admisibilă B împreună cu tabelul simplex asociat TB

Conținutul unei iterații :

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 :

Pasul 2 (Criteriul de ieșire din bază) Se determină indicele bazic 𝑟 ∈ 𝐼 cu proprietatea :


𝑏 = 𝑚𝑖𝑛 𝑏 , 𝑖 ∈ 𝐼 (*)
(cu siguranță 𝑏 < 0 !) Coloana Ar iese din baza curentă.

Pasul 3 (Criteriul de recunoaștere a incompatibilității) Dacă 𝑎 ≥ 0 , 𝑗 ∈ 𝐽 (adică toate


componentele liniei variabilei bazice xr, situate în corpul mare al tabelului simplex TB, sunt
nenegative ) Stop: programul (P) este incompatibil. În caz contrar se trece la:

Pasul 4 (Criteriul de intrare în bază) Se determină indicele nebazic 𝑘 ∈ 𝐽 cu formula :


̅ ̅
= 𝑚𝑖𝑛 pentru 𝑗 ∈ 𝐽 cu proprietatea 𝑎 <0 (**)

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.

Se actualizează baza curentă 𝐵 ← 𝐵 și se revine la pasul 1 în cadrul unei noi iterații.

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 !

II) Adăugarea unei restricții suplimentare

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

Operația de rezolvare a programului (P’) pe baza rezultatelor rezolvării programului (P) se


numește reoptimizare și va fi descrisă în continuare.

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:

1) Transformăm restricția suplimentară în egalitate adăugând variabila de abatere xn+1 :


𝑙 𝑥 + 𝑙 𝑥 + ⋯+ 𝑙 𝑥 + 𝑥 =𝛽
2) Eliminăm eventualele variabile bazice care ar putea apare în membrul stâng; pentru aceasta
se va folosi forma explicită (PB) a programului (P) în raport cu baza B, din care se obțin
variabilele bazice în funcție de cele nebazice.Atenție : coeficienții formei explicite (P B) apar în
tabelul simplex TB – tabel presupus a fi disponibil ! Obținem o relație de forma :
𝑥 +∑ ∈ 𝑙 ̅ 𝑥 = 𝛽̅ (*)

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

1. Iată o situație de aplicare comodă a algoritmului simplex dual ! Caracteristici :


- Programul dat este o formă canonică de minimizare (adică funcția obiectiv se
minimizează iar restricțiile sunt inegalități de tipul ≥) ;
- Coeficienții funcției obiectiv sunt nenegativi (≥0).
Exemplu ilustrativ :Să se determine, cu ajutorul algoritmului simplex dual, soluția optimă a
programului liniar

3𝑥 − 2𝑥 + 𝑥 ≥ 8
2𝑥 + 𝑥 + 2𝑥 ≥ 8
𝑥 ≥ 0, 𝑥 ≥ 0, 𝑥 ≥ 0
(min)𝑓 = 6𝑥 + 𝑥 + 3𝑥

Aducem programul la forma standard și înmulțim ecuațiile rezultate cu -1 :


3𝑥 − 2𝑥 + 𝑥 − 𝑥 = 8 ⟹ −3𝑥 + 2𝑥 − 𝑥 + 𝑥 =8
⎧ 2𝑥 + 𝑥 + 2𝑥 − 𝑥 = 8 ⟹ −2𝑥 − 𝑥 − 2𝑥 +𝑥 =8
⎨ 𝑥 ≥0 , 𝑗 = 1, … ,5
⎩(min)𝑓 = 6𝑥 + 𝑥 + 3𝑥 + 0 ∙ 𝑥 + 0 ∙ 𝑥

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

- Soluția (0,0,0, −8, −8) ⟺ 𝑥 = 0, 𝑥 = 0, 𝑥 = 0, 𝑥 = −8, 𝑥 = −8 asociată bazei


[𝐴 , 𝐴 ] nu este admisibilă (𝑥 < 0, 𝑥 < 0) dar satisface criteriul de optim pentru problemele de
minimizare : 𝑐̅ = −6 ≤ 0, 𝑐̅ = −1 ≤ 0, 𝑐̅ = −3 ≤ 0 ;
- Iese din bază coloana A4 ;
- Aplicăm formula criteriului de intrare în bază : 𝑚𝑖𝑛 = 2, = 3 = 2 ⟹intră în
bază coloana A1 (valorile numerice implicate în formulă au fost evidențiate în primul tabel
simplex prin îngroșare!);
- Pivotare cu pivotul 𝑎 = −3.

Iterația 2

- Soluția , 0,0,0, − ⟺ 𝑥 = , 𝑥 = 0, 𝑥 = 0, 𝑥 = 0, 𝑥 = − asociată bazei [𝐴 , 𝐴 ]


nu este admisibilă (𝑥 < 0) dar este dual admisibilă ;
- Iese din bază coloana A5 ;
-
- Deoarece 𝑚𝑖𝑛 = , = , = 3 = ⟹ intră în bază coloana 𝐴 ;
- Pivotare cu pivotul 𝑎 =− .

Iterația 3

Soluția (2,0,2,0,0) ⟺ 𝑥 = 2, 𝑥 = 0, 𝑥 = 2, 𝑥 = 0, 𝑥 = 0 asociată bazei [𝐴 , 𝐴 ] este


primal și dual admisibilă deci este optimă.

În concluzie, programul dat are soluția optimă : 𝑥 ∗ = 2, 𝑥 ∗ = 0, 𝑥 ∗ = 2.


Valorile variabilelor de abatere 𝑥 ∗ = 0, 𝑥 ∗ = 0 arată că soluția optimă satisface cu egalitate
restricțiile.
Valoarea minimă a funcției obiectiv 𝑚𝑖𝑛𝑓 = 18.

2. i) Să se scrie forma explicită a programului rezolvat în raport cu baza optimă [𝐴 , 𝐴 ].


ii) La programul original se adaugă restricția 𝑥 ≥ 1. Să se determine prin reoptimizare
soluția optimă a programului extins.
iii) La programul original se adaugă restricția 𝑥 + 𝑥 + 𝑥 ≥ 6 Să se determine prin
reoptimizare soluția optimă a programului extins.

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

ii) Soluția optimă a programului original nu verifică restricția adăugată : 𝑥 = 0 < 1.


Rescriem restricția suplimentară în formatul cerut în teorie (restricția suplimentară trebuie să
fie o inegalitate de tipul ≤ !) după care o transformăm în egalitate prin introducerea unei variabile
de abatere :
𝑥 ≥ 1 ⟺ −𝑥 ≤ −1 ⟹ −𝑥 + 𝑥 = −1
Această egalitate nu conține variabilele bazice x1 și x3 !; coeficienții ei se adaugă la tabelul
simplex optim al problemei originale. Se aplică algoritmul simplex dual.

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

iii) Soluția optimă a programului original nu verifică restricția adăugată :


𝑥 +𝑥 +𝑥 = 2+2 =4<6
Procedăm ca mai sus :
𝑥 + 𝑥 + 𝑥 ≥ 6 ⟹ −𝑥 − 𝑥 − 𝑥 ≤ −6 ⟹ −𝑥 − 𝑥 − 𝑥 + 𝑥 = −6
De această dată, în ultima egalitate apar variabilele bazice x1 și x3 , pe care le eliminăm folosind
forma explicită scrisă mai sus :

5 1 1 7 1 3
𝑥 = 2+ 𝑥 + 𝑥 − 𝑥 ; 𝑥 = 2− 𝑥 − 𝑥 + 𝑥
4 2 4 4 2 4

După înlocuire se obține ecuația : − 𝑥 − 𝑥 + 𝑥 = −2 ai cărei coeficienți se adaugă la


tabelul simplex optim al problemei originale. Se aplică algoritmul simplex dual.
6 1 3 0 0 0
CB VB VVB x1 x2 x3 x4 x5 x7
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 x7 -2 0 -1/2 0 0 -1/2 1
f 18 * -13/4 * -3/2 -3/4 *
6 x1 1 1 -3/2 0 -1/2 0 1/2
3 x3 5 0 5/2 1 1/2 0 -3/2
0 x5 4 0 1 0 0 1 -2
f 21 * -5/2 * -3/2 * -3/2

Într-o singură iterație a rezultat soluția optimă :


𝑥 ∗∗ = 1 , 𝑥 ∗∗ = 0 , 𝑥 ∗∗ = 5 (min)𝑓 = 21

3. Să se determine soluția optimă a programului liniar :


(min)𝑓 = 2𝑥 + 𝑥

⎪ 3𝑥 + 2𝑥 ≥ 3
(𝑃) 4𝑥 + 3𝑥 ≥ 6
⎨ 𝑥 + 2𝑥 ≤ 3

⎩ 𝑥 ≥ 0 ≥, 𝑥 ≥ 0
folosind algoritmul simplex dual.

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

Programul dat are soluția optimă : 𝑥 ∗ = , 𝑥∗ = ;

Valorile variabilelor de abatere : 𝑥 ∗ = , 𝑥∗ = 0 , 𝑥∗ = 0 ;

Valoarea minimă a funcției obiectiv : (min)𝑓 = .

4. i) Să se scrie forma explicită a programului (FSP) în raport cu baza optimă [𝐴 , 𝐴 , 𝐴 ].


ii) La programul original (P) se adaugă restricția 𝑥 + 𝑥 ≥ 2. Să se determine prin reoptimizare
soluția optimă a programului extins.
Coeficienții formei explicite căutate se găsesc în tabelul simplex optim al (FSP) :

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

Într-o singură iterație s-a obținut soluția optimă a programului extins:𝑥 ∗∗ = 1 , 𝑥 ∗∗ = 1.


Valorile variabilelor de abatere 𝑥 ∗∗ = 0 , 𝑥 ∗∗ = 1 , 𝑥 ∗∗ = 0 , 𝑥 ∗∗ = 0.
Valoarea minimă a funcției obiectiv : (min)𝑓 = 3 .
Cercetări Operaționale, anul III
Note pentru Seminarul 6 Prof.dr. Vasile Teodor NICA

TEMA I : Modelare cu variabile întregi.

1. Un atelier de prelucrare a maselor plastice produce două tipuri de ambalaje A și B pentru


protejarea unor obiecte din sticlă.Ambalajele sunt fabricate cu ajutorul a două matrițe alimentate
prin injecție de la o mașină care produce polistiren expandat. Cu prima matriță se pot realiza 100
ambalaje A în 6 ore în timp ce cu a doua matriță se pot face 100 ambalaje B în 5 ore. Procesul
tehnologic nu permite utilizarea simultană a matrițelor. Utilajul care produce materia primă poate
lucra până la 60 ore pe săptămână. Ambalajele fabricate sunt stocate în depozitul atelierului care
are o capacitate de 15000 u.v. (unități de volum ≡ picioare cubice) Un ambalaj A are nevoie de
un spațiu de 10 u.v. iar un ambalaj B ocupă un spațiu de 20 u.v. Singurul client al ambalajului A
nu acceptă mai mult de 800 bucăți pe săptămână în timp ce ambalajele B pot fi produse în orice
cantitate, cererea fiind mare. Cele două ambalaje aduc un profit de $5 respectiv $4.50 per bucată.
Câte ambalaje din cele două tipuri ar trebui produse săptămânal în vederea maximizării
profitului ?

Soluție : Elaborarea modelului matematic

I) Identificarea variabilelor de decizie


Producția de ambalaje este discretizată în cicluri de fabricație :
- Un ciclu pentru ambalajul A durează 6 ore și are ca rezultat fabricarea a 100 ambalaje A;
- Un ciclu pentru ambalajul B durează 5 ore și are ca rezultat fabricarea a 100 ambalaje B.
În consecință, vom lua ca variabile de decizie :
x1 ≡ numărul ciclurilor de fabricație în care se produce ambalajul A
pe săptămână !
x2 ≡ numărul ciclurilor de fabricație în care se produce ambalajul B

Săptămânal, se vor produce :


100x1 bucăți A ≡ x1 sute de bucăți ambalaje A;
100x2 bucăți B ≡ x2 sute de bucăți ambalaje B.
În continuare, vom măsura producția în sute de bucăți A sau B !

II) Identificarea criteriului de performanță și formalizarea lui în funcția obiectiv


Obiectivul urmărit este maximizarea profitului. Per suta de bucăți, profiturile sunt de $500
pentru ambalajul A și $450 pentru B. Profitul săptămânal are expresia
𝑓 = 500𝑥 + 450𝑥 (1)

III) Identificarea condițiilor limitative și formalizarea lor în restricții


 x1 cicluri A durează 6x1 ore; x2 cicluri B durează 5x2 ore. Ambalajele A și B nu pot fi
produse simultan așa că timpul necesar realizării ciclurilor amintite este 6𝑥 + 5𝑥 . În tot acest
timp trebuie asigurată alimentarea cu materie primă care nu poate depăși 60 ore pe săptămână.
Rezultă relația:
6𝑥 + 5𝑥 ≤ 60 (2)
 Spațiul de depozitare este limitat la 15000 u.v. 100 bucăți A au nevoie de 1000 u.v. pentru
depozitare ; 100 bucăți B necesită 2000 u.v. rezultă relația :
1000𝑥 + 2000𝑥 ≤ 15000 ⟺ 𝑥 + 2𝑥 ≤ 15 (3)
 Producția de ambalaje A este limitată la 8 sute de bucăți pe săptămână :
𝑥 ≤8 (4)

IV) Condiții explicite impuse variabilelor


 Condiția de nenegativitate :
𝑥 ≥0 , 𝑥 ≥0 (5)
Deoarece un ciclu de fabricație nu poate fi întrerupt urmează că x 1 , x2 nu au sens economic
decât dacă sunt exprimate prin numere întregi :
𝑥 , 𝑥 (𝑛𝑢𝑚𝑒𝑟𝑒)î𝑛𝑡𝑟𝑒𝑔𝑖 (6)
Reunind (1) – (6) obținem programul întreg total:
(max)𝑓 = 500𝑥 + 450𝑥
⎧ 6𝑥 + 5𝑥 ≤ 60

𝑥 + 2𝑥 ≤ 15
⎨ 𝑥 ≤8
⎪ 𝑥 ≥ 0 ,𝑥 ≥ 0
⎩ 𝑥 , 𝑥 î𝑛𝑡𝑟𝑒𝑔𝑖
Soluția optimă întreagă a programului 𝑥 = 8 , 𝑥 = 2 are următoarea interpretare:
Profitul maxim 8 × 500 + 2 × 450 = $4900 s-ar obține din producerea și vânzarea a 800
ambalaje A și a 200 ambalaje B.S-ar utiliza 6 × 8 + 5 × 2 = 58 ore din timpul utilajului care
produce materia primă iar necesarul de spațiu pentru depozitare ar fi de 1000 × 8 + 2000 × 2 =
12000 u.v.

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

Soluție: Elaborarea modelului matematic

I) Identificarea variabilelor de dcizie ale modelului


Producția este discretizată în cicluri de fabricație diferențiate pe tipul de ciment produs și
instalația producătoare. În consecință, vom lua ca variabile de decizie :
𝑥 ≡ numărul ciclurilor de fabricație pentru cimentul C1 programate pe instalația I1 ;
𝑥 ≡ numărul ciclurilor de fabricație pentru cimentul C1 programate pe instalația I2 ;
𝑥 ≡ numărul ciclurilor de fabricație pentru cimentul C2 programate pe instalația I1 ;
𝑥 ≡ numărul ciclurilor de fabricație pentru cimentul C2 programate pe instalația I2 ;

II) Identificarea condițiilor limitative și formalizarea lor în restricții


Cantitatea totală de ciment Cantitatea de ciment C1 programată Cantitatea de ciment C1 programată
= + =
C1 ce urmează a fi produsă a se realiza pe instalația I1 a se realiza pe instalația I2
= 80𝑥 + 160𝑥

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)

III) Identificarea criteriului de performanță și formalizarea sa în funcția obiectiv


Obiectivul urmărit este minimizarea costului total de producție :
𝑐𝑜𝑠𝑡 𝑡𝑜𝑡𝑎𝑙 𝑐𝑜𝑠𝑡𝑢𝑙 𝑝𝑟𝑜𝑑𝑢𝑐𝑒𝑟𝑖𝑖 𝑐𝑜𝑠𝑡𝑢𝑙 𝑝𝑟𝑜𝑑𝑢𝑐𝑒𝑟𝑖𝑖 𝑐𝑜𝑠𝑡𝑢𝑙 𝑝𝑟𝑜𝑑𝑢𝑐𝑒𝑟𝑖𝑖 𝑐𝑜𝑠𝑡𝑢𝑙 𝑝𝑟𝑜𝑑𝑢𝑐𝑒𝑟𝑖𝑖
= + + + ⟹
𝑑𝑒 𝑝𝑟𝑜𝑑𝑢𝑐ț𝑖𝑒 𝑐𝑖𝑚𝑒𝑛𝑡𝑢𝑙𝑢𝑖𝐶 𝑝𝑒 𝐼 𝑐𝑖𝑚𝑒𝑛𝑡𝑢𝑙𝑢𝑖 𝐶 𝑝𝑒𝐼 𝑐𝑖𝑚𝑒𝑛𝑡𝑢𝑙𝑢𝑖 𝐶 𝑝𝑒𝐼 𝑐𝑖𝑚𝑒𝑛𝑡𝑢𝑙𝑢𝑖 𝐶 𝑝𝑒𝐼

𝑓 = 30 × 80𝑥 + 25 × 160𝑥 + 20 × 120𝑥 + 15 × 180𝑥 (5)

IV) Condiții explicite impuse variabilelor de decizie


𝑥 ≥ 0 𝑖, 𝑗 = 1,2 (6)
𝑥 𝑛𝑢𝑚𝑒𝑟𝑒 î𝑛𝑡𝑟𝑒𝑔𝑖 (7)
Reunind (1) – (7) se obține – după operarea unor simplificări în restricții - programul întreg total :
4𝑥 +8𝑥 ≥ 75

⎪ 2𝑥 +3𝑥 ≥ 40

4𝑥 +3𝑥 ≤ 60
⎨ 4𝑥 +3𝑥 ≤ 50

⎪ 𝑥 ≥ 0 , î𝑛𝑡𝑟𝑒𝑔𝑖
⎩(min)𝑓 = 24𝑥 +40𝑥 +24𝑥 +27𝑥 (sute u.m.)

Soluția optimă întreagă: 𝑥 ∗ = 13 , 𝑥 ∗ = 3 , 𝑥 ∗ = 2 , 𝑥 ∗ = 12 are următoarea interpretare :


- Instalația I1 va fi programată să producă 13 × 80 = 1040 t ciment C1 și 2 × 120 = 240 t
ciment C2 ;
- Instalația I2 va fi programată să producă 3 × 160 = 480 t ciment C1 și 12 × 180 =
2160 t ciment C2 ;
- S-ar produce în total 1040 + 480 = 1520 t ciment C1 și 240 + 2160 = 2400 t ciment C2 ;
- Costul de producție ar avea nivelul minim de 80400 u.m.

3. Conducerea firmei ProTZ a luat în discuție 6 proiecte de investiții. Alternativele


investiționale, valoarea netă prezentă a profiturilor viitoare în caz de realizare, cererile de capital
și fondurile disponibile pe următorii 3 ani sunt date în următorul tabel :
Valoarea netă prezentă Cerere de capital (mil. Lei)
Proiecte
a profitului (mil. Lei) Anul I Anul II Anul III
1.Dezvoltare limitată a capacităților de depozitare 4 3 1 4
2.Dezvoltare masivă a capacităților de depozitare 6 2.5 3.5 3.5
3. Testarea pe piață a unui nou produs 10.5 6 4 5
4. Campanie publicitară 4 2 1.5 1.8
5 Cercetare fundamentală 8 5 1 4
6. Achiziționarea de echipamente noi 3 1 0.5 0.9
Fonduri disponibile (mil. Lei) 10.5 7 8.75

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

Soluție :i) Asociem celor 6 proiecte variabilele bivalente 𝑥 , 𝑥 , … , 𝑥 cu valorile:


1 dacă proiectul j este admis
𝑥 =
0 dacă proiectul j este respins
Aceste variabile ne vor permite să operăm cu valoarea netă prezentă a profitului sau cu cererea
de capital fără să ne mai gândim dacă proiectul a fost sau nu a fost aprobat ! Astfel, valoarea netă
prezentă a profitului pentru proiectul 1 va fi dată de expresia 4x1 cu numai două valori permise :
4 dacă 𝑥 = 1 ⟺ proiectul 1 a fost admis
0 dacă 𝑥 = 0 ⟺ proiectul 1 a fost respins
Tot așa, expresiile 3𝑥 , 1 ∙ 𝑥 , 4𝑥 vor reprezenta cererile de capital pentru proiectul 1 în anii I,II
respectiv III.
Cu aceste lămuriri modelul problemei este :
(max)𝑓 = 4𝑥 + 6𝑥 + 10.5𝑥 + 4𝑥 + 8𝑥 + 3𝑥

⎪ 3𝑥 + 2.5𝑥 + 6𝑥 + 2𝑥 + 5𝑥 + 𝑥 ≤ 10.5
𝑥 + 3.5𝑥 + 4𝑥 + 1.5𝑥 + 𝑥 + 0.5𝑥 ≤ 7
⎨ 4𝑥 + 3.5𝑥 + 5𝑥 + 1.8𝑥 + 4𝑥 + 0.9𝑥 ≤ 8.75

⎩ 𝑥 ∈ {0,1} 𝑗 = 1, … ,6
ii) Se adaugă restricția 𝑥 + 𝑥 ≥ 1.
iii) Se adaugă restricția 𝑥 ≤ 𝑥 ⟺ −𝑥 + 𝑥 ≤ 0.

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) ⟺ 𝑧 ≤ 𝑦.

4. Într-o problemă de alegere a unor proiecte de investiții formalizați în inegalități liniare


următoarele condiții de aprobare sau respingere:
i) Proiectul P2 se poate aproba numai dacă proiectul P1 este aprobat ;
ii) Proiectul P2 se poate aproba numai dacă proiectul P1 este respins ;
iii) Proiectul P3 trebuie aprobat dacă proiectele P1 și P2 au fost aprobate ;
iv) Dintre proiectele P1 , , P2 , P3 , P4 cel mult două pot fi aprobate.
Notă: În rezolvare, un proiect oarecare Pi va fi identificat cu o variabilă bivalentă xi cu valoarea
1 dacă proiectul este admis și zero dacă este respins.
Soluție : i) Atenție : chiar dacă proiectul P1 se aprobă nu rezultă în mod necesar aprobarea
proiectului P2 ! Ca urmare implicația 𝑥 = 1 ⟹ 𝑥 = 1 este incorectă.
Dacă însă proiectul P1 este respins, cu siguranță este respins și proiectul P2 căci dacă ar fi fost
aprobat, decizia presupunea aprobarea prealabilă a lui P1 … În concluzie, implicația corectă
este :
𝑥 = 0 ⟹ 𝑥 = 0 cu formalizarea 𝑥 ≤ 𝑥 ⟺ −𝒙𝟏 + 𝒙𝟐 ≤ 𝟎.
ii) cu certitudine: dacă proiectul P1 este aprobat, cu necesitate proiectul P2 este respins (de ce ?) :
Formal :( 𝑥 = 1 ⟹ 𝑥 = 0) ⟺ (1 − 𝑥 = 0 ⟹ 𝑥 = 0) ⟺ 𝑥 ≤ 1 − 𝑥 ⟺ 𝒙𝟏 + 𝒙𝟐 ≤ 𝟏.
iii) Formal :
[(𝑥 = 1 și 𝑥 = 1) ⟹ 𝑥 = 1] ⟺ [(1 − 𝑥 = 0ș𝑖 1 − 𝑥 = 0) ⟹ 1 − 𝑥 = 0] ⟺
⟺ [2 − 𝑥 − 𝑥 = 0 ⟹ 1 − 𝑥 = 0] ⟺ 1 − 𝑥 ≤ 2 − 𝑥 − 𝑥 ⟺ 𝒙𝟏 + 𝒙𝟐 − 𝒙𝟑 ≤ 𝟏.
iv) 𝒙𝟏 + 𝒙𝟐 + 𝒙𝟑 + 𝒙𝟒 ≤ 𝟐

5. O mică firmă produce bunurile alimentare G1 , G2 , G3 Bunuri


G1 G2 G3
folosind trei materii prime agricole de bază R1 , R2 , R3. Resurse
R1 2 4 5
Necesarul de resurse, în kg, pentru realizarea unui kg din R2 1 3 2
fiecare din bunurile G1 , G2 , G3 este dat în tabelul alăturat. R3 2 1 1
Pentru ziua următoare există în stoc 45 kg din R1 , 30 kg din R2 și 20 kg din R3. Profiturile sunt
de 7 , 9 , 12 unități monetare per kg din G1 , G2 respectiv G3. Firma livrează bunul G1 în cutii de
0.5 kg , bunul G2 în cutii de 1 kg și bunul G3 în cutii de 2 kg. Desfacerea este asigurată pentru tot
ceeace se produce.
i) Modelați problema determinării programului de activitate pe ziua următoare care
maximizează profitul.
ii) Deoarece resursele sunt foarte perisabile, firma este interesată în a le valorifica cât mai
bine. Cum se poate modela acest deziderat ?

Soluție : i) Se notează cu 𝑥 , 𝑥 , 𝑥 numărul cutiilor conținând bunurile G1 , G2 respectiv G3


care ar putea fi produse din resursele existente. Atunci cantitățile în kg din bunurile G1 , G2 , G3
ambalate vor avea expresiile 𝑥 , 𝑥 respectiv 2𝑥 . Încadrarea necesarului din resursele R1 , R2,
R3 în disponibilele date conduce la relațiile :
1
2 ∙ 𝑥 + 4𝑥 + 5 ∙ 2𝑥 ≤ 45
2
1
𝑥 + 3𝑥 + 2 ∙ 2𝑥 ≤ 30
2
1
2 ∙ 𝑥 + 1 ∙ 𝑥 + 1 ∙ 2𝑥 ≤ 20
2
Se urmărește maximizarea profitului a cărui expresie este :
1
7 ∙ 𝑥 + 9𝑥 + 12 ∙ 2𝑥 = 3.5𝑥 + 9𝑥 + 24𝑥
2
Variabilele de decizie trebuie să satisfacă cerințele :
𝑥 ≥ 0 , 𝑥 ≥ 0 , 𝑥 ≥ 0 , întregi
Rezultă programul întreg total :
𝑥 + 4𝑥 + 10𝑥 ≤ 45
⎧ 𝑥 + 6𝑥 + 8𝑥
⎪ ≤ 60
(𝑃 ) 𝑥 + 𝑥 + 2𝑥 ≤ 20
⎨ 𝑥 ,𝑥 ,𝑥 ≥ 0 întregi

⎩(max)𝑓 = 3.5𝑥 + 9𝑥 + 24𝑥
ii) Cantitățile neconsumate din cele trei resurse au expresiile :

Din resursa R1 : 45 − 2 ∙ 𝑥 + 4𝑥 + 5 ∙ 2𝑥 = 45 − (𝑥 + 4𝑥 + 10𝑥 ) ≥ 0

Din resursa R2 :30 − 𝑥 + 3𝑥 + 2 ∙ 2𝑥 = 30 − (𝑥 + 6𝑥 + 8𝑥 ) ≥ 0

Din resursa R3 :20 − 2 ∙ 𝑥 + 1 ∙ 𝑥 + 1 ∙ 2𝑥 = 20 − (𝑥 + 𝑥 + 2𝑥 ) ≥ 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𝑧

Modelul (P1) are soluția optimă întreagă 𝑥 = 14 , 𝑥 = 0 , 𝑥 = 3 cu interpretarea se propune


producerea a 14 cutii cu bunul G1 și a 3 cutii cu G3.S-ar utiliza 44 kg din resursa R1 (45 kg
disponibile) , 19 kg din R2 (30 kg disponibile) și 20 kg din R3 (tot stocul).Profitul ar avea valoarea
maximă de 121 u.m. Propunerea are și puncte slabe: nu produce bunul G 2 și utilizează numai
63.3% din resursa R2.
Modelul (P2) are soluția optimă întreagă 𝑥 = 12 , 𝑥 = 8 , 𝑥 = 0 cu interpretarea: se propune
producerea a 12 cutii cu G1 și a 8 cutii cu G2. S-ar utiliza 44 kg din R1 iar din R2 și R3 s-ar folosi
întreg stocul. Profitul aferent ar fi de 114 u.m. reprezentând 94.2% din nivelul maxim.

Termeni utilizați în programarea în numere întregi

 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!)

⟹ 𝒙𝟏 ≤ 𝟑(deoarece 𝑥 trebuie să fie număr întreg!)

 (𝐸 ) + (𝐸 ) ⟹ 2𝑥 ≤ 5 ⟹ 𝑥 ≤ 2 ⟹ (𝑑𝑒𝑜𝑎𝑟𝑒𝑐𝑒 𝑥 𝑡𝑟𝑒𝑏𝑢𝑖𝑒 𝑠ă 𝑓𝑖𝑒 𝑛𝑢𝑚ă𝑟 î𝑛𝑡𝑟𝑒𝑔!)

⟹ 𝒙𝟐 ≤ 𝟐 (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

Dar membrul stâng este un număr întreg, așa că de fapt :

⌊𝛽⌋ − 𝛼 𝑥̅ ≤ −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.

Algoritmul lui Gomory pentru rezolvarea programelor întregi totale


Acest algoritm reduce rezolvarea unui program liniar întreg total (P) la rezolvarea, cu algoritmul
simplex dual, a unei secvențe de programe liniare uzuale , prin reoptimizare. Fie (PL)
programul relaxat.

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

Conținutul unei iterații :


Pasul 1 Dacă soluția optimă a programului curent este întreagă, Stop : aceasta va fi și soluția
optimă a programului original (P). (Altfel spus, algoritmul se oprește în momentul în care toate
componentele coloanei VVB din tabelul simplex curent sunt numere întregi!).
În caz contrar se trece la :
Pasul 2 Din tabelul simplex optim al programului curent se selectează o ecuație (în notațiile
reamintite în seminarul 3 !!):

𝑥 + 𝑎 𝑥 =𝑏

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

Alegem ca ecuație generatoare: 𝑥 + 𝑥 + 𝑥 = din care derivăm tăietura:


2 1 1 2 1 1
𝑥 + 𝑥 ≥ ⟺ − 𝑥 − 𝑥 +𝑥 =−
3 3 3 3 3 3
Adăugăm noua tăietură la tabelul simplex curent după care reoptimizăm cu algoritmul simplex
dual.
2 1 0 0 0 0 0
CB VB VVB x1 x2 x3 x4 x5 x6 x7
1 x2 7/3 0 1 0 2/3 0 1/3 0
0 x3 1/3 0 0 1 -1/3 0 -2/3 0
2 x1 7/3 1 0 0 -1/3 0 1/3 0
0 x5 7/3 0 0 0 2/3 1 -8/3 0
0 x7 -1/3 0 0 0 -2/3 0 -1/3 1
f 7 * * * 0 * 1 *
1 x2 2 0 1 0 0 0 0 1
0 x3 1/2 0 0 1 0 0 -1/2 -1/2
2 x1 5/2 1 0 0 0 0 1/2 -1/2
0 x5 2 0 0 0 0 1 3 1
0 x4 1/2 0 0 0 1 0 1/2 -3/2
f 7 * * * * * 1 0

Î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

Ecuația generatoare: 𝑥 − 𝑥 − 𝑥 = ⟹ tăietura: 𝑥 + 𝑥 ≥ ⟹la tabelul simplex


curent adăugăm ecuația:− 𝑥 − 𝑥 + 𝑥 = − și reoptimizăm cu algoritmul simplex dual:
2 1 0 0 0 0 0 0
CB VB VVB x1 x2 x3 x4 x5 x6 x7 x8
1 x2 2 0 1 0 0 0 0 1 0
0 x3 1/2 0 0 1 0 0 -1/2 -1/2 0
2 x1 5/2 1 0 0 0 0 1/2 -1/2 0
0 x5 2 0 0 0 0 1 3 1 0
0 x4 1/2 0 0 0 1 0 1/2 -3/2 0
0 x8 -1/2 0 0 0 0 0 -1/2 -1/2 1
f 7 * * * * * 1 0 *
1 x2 1
0 x3 1
2 x1 3
0 x5 1
0 x4 2
0 x7 1
f 7

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.

1. Să se determine, cu algoritmul lui Gomory, soluția optimă a programului întreg total :

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

Valorile Variabilelor → VV x3 x4 ← lista variabilelor nebazice


f 29/4 11/12 7/12
Lista tuturor x1 9/4 1/4 1/4
variabilelor din x2 1/2 1/6 -1/6
programul (P) x3 0 -1 0
x4 0 0 -1

Începem aplicarea algoritmului lui Gomory

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 ;

-Minimul rapoartelor = ; = va da coloana pivotului ;

-Noua formă secundară va rezulta prin pivotare astfel :


-În lista variabilelor nebazice x4 este înlocuită cu x5;
-Valorile numerice din coloanal pivotului se împart la pivot și schimbă
semnul !
-Celelalte valori numerice din S1 se transformă cu regula dreptunghiului.
Iterația 2
Tabelul S2  Soluția optimă a programului curent are componente neîntregi ;
VV x3 x5
f 20/3 1/3 7/3  Ecuația generatoare : 𝑥 + 𝑥 − 𝑥 =
x1 2 0 1
x2 2/3 1/3 -2/3
 Tăietura C2 : 𝑥 + − 𝑥 ≥ ⟺ 𝑥 + 𝑥 ≥ ⟹
x3 0 -1 0
x4 1 1 -4
1 1 2
− 𝑥 − 𝑥 +𝑥 =−
x6 -2/3 -1/3 -1/3 3 3 3

 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 ;

-Coloana pivotului va fi indicată de minimul rapoartelor : =1 ; =7;

-Reoptimizarea a necesitat două iterații. Se vede că soluția intermediară are toate


componentele întregi dar nu este admisibilă (este totuși dual admisibilă !)
Alg. Simplex dual. Prima
iterație
VV x6 x5
f 6 1 2
x1 2 0 1
x2 0 1 -1 ⟹
x3 2 -3 1
x4 -1 3 -5
x4 -1 3 -5
Alg. Simplex dual. A doua
iterație. Tabelul S3
Iterația 3
VV x6 x4
f 28/5 11/5 2/5 Soluția optimă a programului curent are componente
x1 9/5 3/5 1/5 neîntregi;
x2 1/5 2/5 -1/5
x3 9/5 -12/5 1/5 Ecuația generatoare: 𝑥 + 𝑥 + 𝑥 = ;
x4 0 0 -1
x7 -4/5 -3/5 -1/5
Tăietura C3: 𝑥 + 𝑥 ≥ ⟹: − 𝑥 − 𝑥 + 𝑥 = −

Programul curent ≡ programul relaxat + tăieturile C1 , C2 , C3.


Scriem coeficienții formei standard a tăieturii C3 sub forma secundară S3și reoptimizăm:
Tabelul S4 Iterația 4
VV x6 x7
f 4 1 2 Soluția optimă a programului curent are toate componentele întregi;
x1 1 0 1 programul original are soluția optimă întreagă:
x2 1 1 -1
x3 1 -3 1 𝑥 = 1 , 𝑥 = 1 𝑓(𝑥 ) = 4
x4 4 3 -5

2. Reluăm programul întreg total


(max)𝑓 = 3𝑥 + 𝑥
2𝑥 + 3𝑥 ≤ 6
2𝑥 − 3𝑥 ≤ 3
𝑥 ≥ 0, 𝑥 ≥ 0, î𝑛𝑡𝑟𝑒𝑔𝑖
rezolvat mai sus. Să se reprezinte grafic mulțimea soluțiilor admisibile ale programului relaxat,
soluțiile admisibile întregi și acoperirea convexă a acestora.Să se vizualizeze efectul introducerii
tăieturilor C1 , C2 , C3 generate de algoritmul lui Gomory.

Soluție : Vezi figura 3 !


C3
𝑥 ≤1
C
C

C1
𝑥 ≤2

N(1,1)
)
2
2,
3
max f
B ,

O M A (2 , 0)

C2
𝑥 +𝑥 ≤2
Figura 3

Mulțimea soluțiilor admisibile ale programului relaxat


(max)𝑓 = 3𝑥 + 𝑥
2𝑥 + 3𝑥 ≤ 6
2𝑥 − 3𝑥 ≤ 3
𝑥 ≥ 0, 𝑥 ≥ 0
este mulțimea convexă și poliedrală OABC.
Programul are cinci soluții admisibile întregi, evidențiate prin mici discuri albe. Acoperirea
convexă a acestora este mulțimea OMNC, deasemeni convexă și poliedrală.
Este pusă în evidență și o dreaptă de nivel a funcției obiectiv precum și direcția de translatare
corespunzătoare maximizării.
Soluțiile efectiv generate de algoritmul lui Gomory sunt evidențiate prin mici discuri negre :

B , ← soluție admisibilă,fracționară;

2, ← soluție admisibilă,fracționară;

(2 , 0) ← soluție întreagă dar neadmisibilă;

, ← soluție admisibilă,fracționară;

(1 , 1) ← soluție admisibilă, întreagă.


Pentru vizualizarea tăieturilor este necesar ca acestea să fie exprimate în variabilele reprezentării
grafice x1 și x2 .

 De exemplu, tăietura C1 a fost derivată din ecuația generatoare 𝑥 + 𝑥 + 𝑥 = astfel :

𝑥 + 𝑥 + 𝑥 = 2 + ⟹ 𝑥 + 𝑥 − = 2 − 𝑥 ≝ 𝑥 ; s-a arătat că ambii membri ai


egalității obținute au valori întregi nenegative în orice soluție întreagă a programului dat.
Tăietura C1 are două reprezentări :

- reprezentarea 𝑥 + 𝑥 − ≥ 0 ⟺ 𝑥 + 𝑥 ≥ folosită de algoritmul lui Gomory în


forma standard − 𝑥 − 𝑥 + 𝑥 = − ;
- reprezentarea 2 − 𝑥 ≥ 0 ⟺ 𝑥 ≤ 2 folosită în vizualizare.
 Tot așa, tăietura C2 a rezultat din ecuația generatoare 𝑥 + 𝑥 − 𝑥 = prin evidențierea
părților fracționare ale tuturor constantelor din ecuație și separarea acestora de părțile întregi:

𝑥 + 𝑥 + −1 + 𝑥 = ⟹ 𝑥 + 𝑥 − = −𝑥 + 𝑥 ≝ 𝑥 ≥ 0 (î𝑛𝑡𝑟𝑒𝑔!)

Tăietura C2 are reprezentările:

- reprezentarea 𝑥 + 𝑥 − ≥0⟺ 𝑥 + 𝑥 ≥ folosită în optimizare în forma


standard: − 𝑥 − 𝑥 + 𝑥 = − ;
- reprezentarea −𝑥 + 𝑥 ≥ 0 ⟺ −𝑥 + 2 − 𝑥 ≥ 0 ⟺ 𝑥 + 𝑥 ≤ 2 folosită în vizualizare.
 Propunem cititorului interesat să arate că, pentru vizualizare, tăietura C3 are reprezentarea
𝑥 ≤ 1.
Probleme propuse

1. Să se determine soluția optimă a programului întreg total


𝑥 +10𝑥 ≤ 20
𝑥 ≤2
𝑥 ≥ 0, 𝑥 ≥ 0 î𝑛𝑡𝑟𝑒𝑔𝑖
(max)𝑓 = 𝑥 + 5𝑥
cu algoritmul lui Gomory.La fiecare iterație, ecuația generatoare va fi dată de variabila care
în soluția optimă neîntreagă curentă are partea fracționară cea mai mare.

2. Să se determine soluția optimă a programului întreg total


4𝑥 −3𝑥 ≥4
⎧ 2𝑥 +5𝑥 ≤ 10

4𝑥 −𝑥 ≤ 10
⎨𝑥 ≥ 0, 𝑥 ≥ 0 î𝑛𝑡𝑟𝑒𝑔𝑖

⎩ (max)𝑓 = 𝑥 +𝑥
cu algoritmul lui Gomory.La fiecare iterație, ecuația generatoare va fi dată de variabila care
în soluția optimă neîntreagă curentă are partea fracționară cea mai mare.
Cercetări Operaționale, anul III
Note pentru Seminarul 7 Prof.dr. Vasile Teodor NICA

TEMA : Metoda Branch and Bound pentru rezolvarea programelor întregi

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

Fixăm un program întreg total (P). Presupunem că :


- funcția obiectiv se maximizează ;
- Coeficienții funcției obiectiv sunt numere întregi, astfel că valoarea ei în orice soluție
întreagă a programului (P) va fi un număr întreg ;
- Mulțimea soluțiilor admisibile ale programului relaxat (PL) este mărginită – de aici
rezultă că programul (P) are un număr finit de soluții admisibile întregi.

Metoda B&B utilizează următoarele ingrediente:


 O listă L în care sunt înscrise toate programele întregi rezultate din ramificare (după
cum se va vedea toate programele diin lista L sunt extinderi ale programului (P) cu limitări
impuse unora dintre variabile. În particular, toate programele din L au aceeași funcție obiectiv!)
Lista L este dinamică în sensul că, pe parcurs, în ea se vor opera ștergeri și/sau adăugiri de
programe. La start L = {P}.

 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

Start : Inițializăm : L = {P} , 𝑥 =∅ , 𝑧 = −∞ dacă funcția obiectiv din (P) se


maximizează.

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.

Pasul 3 Se rezolvă programul relaxat (PLα) Sunt posibile următoarele rezultate :


I) (PLα) este un program incompatibil; evident, nici programul (Pα) nu va avea soluții
admisibile întregi. Se revine la pasul 1.
II) (PLα) este un program compatibil. Mulțimea soluțiilor sale admisibile este mărginită
conform ipotezei și ca urmare (PLα) are optim finit notat zα. Atunci numărul întreg ⌊𝑧 ⌋ ≡ partea
întreagă a numărului zα , este o margine superioară a funcției obiectiv din (P) pe soluțiile
admisibile întregi ale programului (Pα). Două continuări sunt posibile:
II1) ⌊𝑧 ⌋ ≤ 𝑧 . Dacă este așa, nici o soluție admisibilă întreagă a programului (Pα) nu
oferă funcției obiectiv f din (P) o valoare mai mare decât cea dată de soluția existentă în xCMB.
Programul (Pα) este abandonat deoarece soluția optimă întreagă a programului (P) nu se
găsește cu siguranță printre soluțiile întregi ale lui (Pα) ! Se revine la pasul 1.
II2) ⌊𝑧 ⌋ > 𝑧 . În acest caz este posibil ca (Pα) să aibe soluții admisibile întregi mai
bune decât soluția din xCMB. Fie x*soluția optimă a programului (PLα).Două situații pot urma :
II21) x* este o soluție întreagă. Atunci x* este o soluție întreagă mai bună decât cea
existentă în xCMB , drept care se fac actualizările:
𝑥 ← 𝑥∗ ; 𝑧 ← 𝑓(𝑥 ∗ )
și se revine la pasul 1.
II22) Una sau mai multe variabile întregi au în x* valori fracționare. Fie xk una
dintre aceste variabile. Evident, orice soluție admisibilă întreagă a programului (Pα) va verifica
una din inegalitățile mutual exclusive :
𝑥 ≤ ⌊𝑥 ∗ ⌋ sau 𝑥 ≥ ⌈𝑥 ∗ ⌉ = ⌊𝑥 ∗ ⌋ + 1
(unde ⌊𝑥⌋ , ⌈𝑥⌉ desemnează rotunjirea întreagă inferioară, respectiv superioară a numărului
real x)
Extindem programul (Pα) cu fiecare dintre cele două inegalități, obținând două noi programe
întregi:
𝑃 𝑃
(𝑃 ) ≡ , (𝑃 ) ≡
𝑥 ≤ ⌊𝑥 ∗ ⌋ 𝑥 ≥ ⌈𝑥 ∗ ⌉
Programele 𝑃 și 𝑃 se adaugă la lista L , de exemplu în capul acesteia (sau, de ce nu, ambele
în coada listei L sau unul în capul listei și celălalt în coadă !) :
L = {𝑃 , 𝑃 ,celelalte programe întregi din lista veche}
Se revine la pasul 2.

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

PL11 PL12 PL21 PL22

…. …. PL211 PL212

…. ….

Arborele T nu există de la început ! La start el se reduce la rădăcina (PL) și în continuare


primește noi noduri și arce de legătură în funcție de problemele rezultate din ramificare și efectiv
studiate.

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 î𝑛𝑡𝑟𝑒𝑔𝑖

pe care le introducem în capul listei L :


L = {𝑃 , 𝑃 }
Soluția optimă a programului PL
5 ∗ 13 75
𝑥∗ = ,𝑥 = , 𝑧 = 𝑓(𝑥 ∗ ) =
4 4 4

𝑥 + 3𝑥 ≤ 11

APL

Dreaptă de nivel a max f


funcției obiectiv

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

care se adaugă în capul listei L :


L = {𝑃 , 𝑃 , 𝑃 }

Soluția optimă a programului PL1


10 2
𝑥∗ = 1 , 𝑥∗ = , 𝑧 = 𝑓(𝑥 ∗ ) = 18
3 5

Soluția optimă a programului PL2


5 1
𝑥∗ = 2 , 𝑥∗ = , 𝑧 = 𝑓(𝑥 ∗ ) = 16
2 2
APL1

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

𝑥 ≥4 PL12 este un program incompatibil!

Soluția optimă a programului PL11este întreagă


𝑥 ∗ = 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ă:

𝑥∗ = 2 , 𝑥∗ = , 𝑧 = 𝑓(𝑥 ∗ ) = 16 (vezi figura 2)

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

PL1 PL2 Condiția de ramificare


nu este îndeplinită
10 56 5 33
𝑥 = 1 ,𝑥 = ,𝑓 = 𝑥 = 2 ,𝑥 = ,𝑓 = ⌊𝑧 ⌋ = 16 < 17 = 𝑧
3 3 2 2

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.

Start : Inițializăm : L = {P} , 𝑥 =∅, 𝑧 = −∞

Iterația 1 Selectăm programul P ⟹ L = ∅;


Rezolvăm programul relaxat PL. Se găsește soluția optimă:
22 51 54
𝑥∗ = 1 , 𝑥∗ = 2 , 𝑧 = 𝑓(𝑥 ∗ ) = 9
57 57 57
Soluția nu este întreagă iar condiția de ramificare ⌊𝑧⌋ = 9 > −∞ = 𝑧 este banal îndeplinită.
Ramificăm (P) după variabila x1 ; aceasta înseamnă înlocuirea lui (P) cu programele întregi :

(max)𝑓 = 3𝑥 + 2𝑥

𝑃 ⎪ −3𝑥 + 8𝑥 ≤ 19 𝑃
(𝑃 ) ≡ ≡ 6𝑥 + 3𝑥 ≤ 17 (𝑃 ) ≡
𝑥 ≤1 ⎨ 𝑥 ≥2
⎪ 𝑥 ≤1
⎩ 𝑥 , 𝑥 ≥ 0 î𝑛𝑡𝑟𝑒𝑔𝑖
care se introduc în lista L :
L = {𝑃 , 𝑃 }

Iterația 2 Selectăm programul P1 ⟹ L = {𝑃 };


Rezolvăm programul relaxat PL1. Se găsește soluția optimă:
3 1
𝑥∗ = 1 , 𝑥∗ = 2 , 𝑧 = 𝑓(𝑥 ∗ ) = 8
4 2
Condiția de ramificare ⌊𝑧 ⌋ = 8 > −∞ = 𝑧 este banal îndeplinită. Ramificăm P1 după
variabila x2 : P1 va fi înlocuit cu programele întregi :

𝑃 𝑃
(𝑃 ) ≡ (𝑃 ) ≡
𝑥 ≤2 𝑥 ≥3

care se introduc în capul listei L :


L = {𝑃 , 𝑃 . 𝑃 }

Iterația 3 Selectăm programul P11 ⟹ L = {𝑃 , 𝑃 };


Programul relaxat PL11 are soluția optimă întreagă:
𝑥∗ = 1 , 𝑥∗ = 2 , 𝑓(𝑥 ∗ ) = 7
Fiind prima soluție întreagă găsită o reținem:
𝑥 ← (1,2) 𝑧 ←7

Iterația 4 Selectăm programul P12 ⟹ L = {𝑃 };


Programul relaxat PL12 este incompatibil..

Iterația 5 Selectăm programul P2 ⟹ L = ∅;


Programul relaxat PL2 are soluția optimă:
2 1
𝑥∗ = 2 , 𝑥∗ = 1 , 𝑧 = 𝑓(𝑥 ∗ ) = 9
3 3
Condiția de ramificare ⌊𝑧 ⌋ = 9 > 7 = 𝑧 este îndeplinită (este deci posibil ca programul
întreg P2 să aibe soluții întregi mai bune decât cea din xCMB!) Ramificăm P2 după variabila x2;
înlocuim P2 cu programele întregi:

𝑃 𝑃
(𝑃 ) ≡ (𝑃 ) ≡
𝑥 ≤1 𝑥 ≥2
Actualizăm lista L :
L = {𝑃 , 𝑃 }

Iterația 6 Selectăm programul P21⟹ L = {𝑃 };


Programul relaxat PL21 are soluția optimă:
1
𝑥∗ = 2 , 𝑥∗ = 1 , 𝑧 = 𝑓(𝑥 ∗ ) = 9
3
Condiția de ramificare ⌊𝑧 ⌋ = 9 > 7 = 𝑧 dă liber ramificării programului P21 după variabila
x1 ; înlocuim P21 cu programele întregi :

𝑃 𝑃
(𝑃 )≡ (𝑃 )≡
𝑥 ≤2 𝑥 ≥3

pe care le introducem în capul listei L :


L = {𝑃 ,𝑃 .𝑃 }

Iterația 7 Selectăm programul P211 ⟹ L = {𝑃 , 𝑃 };


Programul relaxat PL211 are soluția optimă întreagă:
𝑥∗ = 2 , 𝑥∗ = 1 , 𝑓(𝑥 ∗ ) = 8
mai bună decât soluția din xCMB, drept care actualizăm:
𝑥 ← (2,1) 𝑧 ←8

Iterațiile 8 și 9 Programele relaxate PL212 și PL22 sunt incompatibile și ca urmare: .L = ∅.

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

Arborele programelor liniare efectiv rezolvate este dat în figura 5.


Recapitulare : Pentru determinarea soluției optime întregi a programului (P) s-au rezolvat 9
programe liniare uzuale ≡ relaxatele programelor întregi rezultate din ramificare.
Având în vedere că modificările în lista L s-au făcut în capul acesteia, ordinea în care au fost
rezolvate cele nouă programe a fost :
PL , PL1 , PL11 , PL12 , PL2 , PL21 , PL211 , PL212 , PL22.

𝑥 =∅ 𝑧
PL
𝟐𝟐 𝟓𝟏 𝟓𝟒
𝒙𝟏 = 𝟏 , 𝒙𝟐 = 𝟐 , 𝒇(𝒙) = 𝟗
𝟓𝟕 𝟓𝟕 𝟓𝟕

x1≤1 x1≥2

PL1 PL2
𝟑 𝟏 𝟐 𝟏
𝒙𝟏 = 𝟏, 𝒙𝟐 = 𝟐 , 𝒇(𝒙) = 𝟖 𝒙𝟏 = 𝟐, 𝒙𝟐 = 𝟏 , 𝒇(𝒙) = 𝟗
𝟒 𝟐 𝟑 𝟑

x2≤2 x2≥3 x2≤1 x2≥2

PL11 PL12 PL21 PL22

𝒙𝟏 = 𝟏, 𝒙𝟐 = 𝟐, 𝒇(𝒙) = 𝟕 incompatibilă 𝟏 incompatibilă


𝒙𝟏 = 𝟐 , 𝒙𝟐 = 𝟏, 𝒇(𝒙) = 𝟗
𝟑
𝑥 ← (1,2) 𝑧 ←7
x1≤2 x1≥3

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

Sol. opt. PL2


x2 ≥ 2

x2 ≤ 2
Sol. opt. P11 Sol. opt. PL21

x2 ≤ 1

Sol. opt. PL211

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

TEMA: Problema rucsacului și rezolvarea ei prin programare dinamică.

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.

Modelul matematic. Cu notația:

𝑥 ≡ 𝑛𝑢𝑚ă𝑟𝑢𝑙 𝑜𝑏𝑖𝑒𝑐𝑡𝑒𝑙𝑜𝑟 𝑑𝑒 𝑡𝑖𝑝𝑢𝑙 𝑖 𝑖𝑛𝑡𝑟𝑜𝑑𝑢𝑠𝑒 î𝑛 𝑟𝑢𝑐𝑠𝑎𝑐 𝑖 = 1, … , 𝑛

se obține următorul program întreg total:

𝑚𝑎𝑥𝜌 = 𝜋 𝑥 + 𝜋 𝑥 + ⋯ + 𝜋 𝑥 ← 𝑣𝑎𝑙𝑜𝑎𝑟𝑒𝑎 î𝑛𝑐ă𝑟𝑐ă𝑡𝑢𝑟𝑖𝑖 𝑠ă 𝑓𝑖𝑒 𝑚𝑎𝑥𝑖𝑚𝑖𝑧𝑎𝑡ă


(𝑅) 𝑙 𝑥 + 𝑙 𝑥 + ⋯ + 𝑙 𝑥 ≤ 𝐿 ← 𝑛𝑢 𝑡𝑟𝑒𝑏𝑢𝑖𝑒 𝑑𝑒𝑝ăș𝑖𝑡ă 𝑐𝑎𝑝𝑎𝑐𝑖𝑡𝑎𝑡𝑒𝑎 𝑟𝑢𝑐𝑠𝑎𝑐𝑢𝑙𝑢𝑖
𝑥 ≥ 0, 𝑥 ≥ 0, … , 𝑥 ≥ 0 î𝑛𝑡𝑟𝑒𝑔𝑖

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

Programarea dinamică este o tehnică de optimizare aplicabilă problemelor care au o structură


secvențială. Prin folosirea ei, un proces de optimizare, în general multidimensional, este redus
la o secvență recursivă de procese unidimensionale (Bellman, 1954)
B. Rezolvarea problemei rucsacului prin programare dinamică.

I) Pentru fiecare k = 1,…,n și fiecare întreg λ = 0,1,…,L considerăm programul întreg:

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.

II) Funcțiile 𝜌 , 𝜌 , … , 𝜌 se determină recursiv astfel:

 𝜌 (𝜆) = 𝑚𝑎𝑥{𝜋 𝑥 |𝑙 𝑥 ≤ 𝜆} = 𝜋 𝜆 = 0,1, … , 𝐿 (*)


 pentru 𝑘 > 1 se demonstrează formula de recurență :

𝜌 (𝜆) = 𝑚𝑎𝑥 𝜌 (𝜆 − 𝑙 𝑥 ) + 𝜋 𝑥 𝑥 = 0,1, … , 𝜆 = 0,1, … , 𝐿 (**)

 pentru k = n va fi suficient să calculăm valoarea :

𝜌 (𝐿) = 𝑚𝑎𝑥 𝜌 (𝐿 − 𝑙 𝑥 ) + 𝜋 𝑥 𝑥 = 0,1, … , (***)

III) Dacă se notează :

𝑥 ∗ (𝜆) = 𝑣𝑎𝑙𝑜𝑎𝑟𝑒𝑎 𝑣𝑎𝑟𝑖𝑎𝑏𝑖𝑙𝑒𝑖 𝑥 𝑐𝑎𝑟𝑒 𝑟𝑒𝑎𝑙𝑖𝑧𝑒𝑎𝑧ă 𝒎𝒂𝒙𝒊𝒎𝒖𝒍 𝑑𝑖𝑛 𝑓𝑜𝑟𝑚𝑢𝑙𝑒𝑙𝑒 (∗)ș𝑖 (∗∗)
atunci, o soluție optimă 𝑥 ∗ = (𝑥 ∗ , 𝑥 ∗ , … , 𝑥 ∗ ) a programului (R) se determină retrospectiv astfel :
- 𝑥 ∗ = 𝑥 ∗ (𝐿) = 𝑣𝑎𝑙𝑜𝑎𝑟𝑒𝑎 𝑣𝑎𝑟𝑖𝑎𝑏𝑖𝑙𝑒𝑖 𝑥 𝑐𝑎𝑟𝑒 𝑟𝑒𝑎𝑙𝑖𝑧𝑒𝑎𝑧ă 𝒎𝒂𝒙𝒊𝒎𝒖𝒍 𝑑𝑖𝑛 𝑓𝑜𝑟𝑚𝑢𝑙𝑎 (∗∗∗)
- și pentru k = n-1,…,2,1 :
𝑥 ∗ = 𝑥 ∗ (𝐿 − 𝑆 ) unde 𝑆 = 𝑙 𝑥∗ + ⋯ + 𝑙 𝑥∗

C. Ilustrări numerice

1. Să se rezolve prin programare dinamică:


max 𝜌 = 9𝑥 +5𝑥 +3𝑥 +𝑥
(𝑅) 7𝑥 + 4𝑥 + 3𝑥 + 2𝑥 ≤ 10
𝑥 , 𝑥 , 𝑥 , 𝑥 ≥ 0 î𝑛𝑡𝑟𝑒𝑔𝑖
Soluție :
 Determinăm valorile funcției :

𝜌 (𝜆) = 𝑚𝑎𝑥{9𝑥 |7𝑥 ≤ 𝜆 , 𝑥 ≥ 0 î𝑛𝑡𝑟𝑒𝑔} 𝜆 = 0,1, … ,10

Este ușor de văzut că 𝜌 (𝜆) = 9 ∙ .Valorile funcției 𝜌 sunt listate în tabelul 1.

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

𝜌 (𝜆) = 𝑚𝑎𝑥{9𝑥 + 5𝑥 |7𝑥 + 4𝑥 ≤ 𝜆 ; 𝑥 , 𝑥 ≥ 0, î𝑛𝑡𝑟𝑒𝑔𝑖} 𝜆 = 0,1, … ,10

Avem formula de recurență :

𝜆
𝜌 (𝜆) = 𝑚𝑎𝑥 𝜌 (𝜆 − 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 :

𝜌 (𝜆) = 𝑚𝑎𝑥{9𝑥 + 5𝑥 + 3𝑥 |7𝑥 + 4𝑥 + 3𝑥 ≤ 𝜆 ; 𝑥 , 𝑥 , 𝑥 ≥ 0, î𝑛𝑡𝑟𝑒𝑔𝑖} 𝜆 = 0,1, … ,10

folosind relația de recurență:

𝜆
𝜌 (𝜆) = 𝑚𝑎𝑥 𝜌 (𝜆 − 3𝑥 ) + 3𝑥 𝑥 = 0,1, … , 𝜆 = 0,1, … ,10
3

- pentru λ = 0,1,2 → x3 = 0 → 𝜌 (𝜆) = 𝜌 (𝜆)


- pentru λ = 3,4,5 → 𝑥 ∈ {0,1} → 𝜌 (𝜆) = 𝑚𝑎𝑥{𝜌 (𝜆), 𝜌 (𝜆 − 3) + 3}
- pentru λ = 6,7,8 → 𝑥 ∈ {0,1,2} → 𝜌 (𝜆) = 𝑚𝑎𝑥{𝜌 (𝜆), 𝜌 (𝜆 − 3) + 3, 𝜌 (𝜆 − 6) + 6}
- pentru λ = 9,10 → 𝑥 ∈ {0,1,2.3} →
→ 𝜌 (𝜆) = 𝑚𝑎𝑥{𝜌 (𝜆), 𝜌 (𝜆 − 3) + 3, 𝜌 (𝜆 − 6) + 6, 𝜌 (𝜆 − 9) + 9}

Valorile funcției ρ2 sunt listate în tabelul 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, î𝑛𝑡𝑟𝑒𝑔𝑖}

Conform formulei (***) :


10
𝜌 (10) = 𝑚𝑎𝑥 𝜌 (10 − 2𝑥 ) + 𝑥 𝑥 = 0,1, … , =5 =
2
= 𝑚𝑎𝑥{12,10 + 1,6 + 2,5 + 3,0 + 4,0 + 5} = 12 → 𝑥 ∗ (10) = 0

 Determinarea soluției optime :

𝑥 ∗ = 𝑥 ∗ (10) = 0
𝑥 ∗ = 𝑥 ∗ (10 − 2𝑥 ∗ ) = 𝑥 ∗ (10) = 1
∗ ∗ (10 ∗ ∗) ∗ (7) ⟹ 𝑥 ∗ = (1,0,1,0)
𝑥 =𝑥 − 3𝑥 − 2𝑥 = 𝑥 =0
∗ ∗ (10 ∗ ∗ ∗) ∗ (7)
𝑥 =𝑥 − 4𝑥 − 3𝑥 − 2𝑥 = 𝑥 =1

2. Să se rezolve prin programare dinamică:

max 𝜌 = 4𝑥 +5𝑥 +3𝑥


(𝑅) 5𝑥 + 3𝑥 + 2𝑥 +≤ 11
𝑥 , 𝑥 , 𝑥 ≥ 0 î𝑛𝑡𝑟𝑒𝑔𝑖
Soluție :
 Determinăm valorile funcției :

𝜆
𝜌 (𝜆) = 𝑚𝑎𝑥{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 :

𝜌 (𝜆) = 𝑚𝑎𝑥{4𝑥 + 5𝑥 |5𝑥 + 3𝑥 ≤ 𝜆 ; 𝑥 , 𝑥 ≥ 0, î𝑛𝑡𝑟𝑒𝑔𝑖} =


𝜆
= 𝑚𝑎𝑥 𝜌 (𝜆 − 3𝑥 ) + 5𝑥 𝑥 = 0,1, … , 𝜆 = 0,1, … ,11
3

- pentru λ = 0,1,2 → x2 = 0 →𝜌 (𝜆) = 𝜌 (𝜆)


- pentru λ = 3,4,5 → 𝑥 ∈ {0,1} → 𝜌 (𝜆) = 𝑚𝑎𝑥{𝜌 (𝜆), 𝜌 (𝜆 − 3) + 5}
- pentru λ =6,7, 8 → 𝑥 ∈ {0,1,2} → 𝜌 (𝜆) = 𝑚𝑎𝑥{𝜌 (𝜆), 𝜌 (𝜆 − 3) + 5, 𝜌 (𝜆 − 6) + 10}
- pentru λ = 9,10,11 → 𝑥 ∈ {0,1,2.3} →
→ 𝜌 (𝜆) = 𝑚𝑎𝑥{𝜌 (𝜆), 𝜌 (𝜆 − 3) + 5, 𝜌 (𝜆 − 6) + 10, 𝜌 (𝜆 − 9) + 15}

λ 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

 Determinăm valoarea numerică:


𝜌 (11) = 𝑚𝑎𝑥{4𝑥 + 5𝑥 + 3𝑥 |5𝑥 + 3𝑥 + 2𝑥 ≤ 11 ; 𝑥 ≥ 0, î𝑛𝑡𝑟𝑒𝑔𝑖} =
11
= 𝑚𝑎𝑥 𝜌 (11 − 2𝑥 ) + 3𝑥 𝑥 = 0,1, … , =5 =
2
= 𝑚𝑎𝑥{𝜌 (11), 𝜌 (9) + 3, 𝜌 (7) + 6, 𝜌 (5) + 9, 𝜌 (3) + 12, 𝜌 (1) + 15}
= 𝑚𝑎𝑥{15,15 + 3,10 + 6,5 + 9,5 + 12,0 + 15} = 18 → 𝑥 ∗ (11) = 1

 Determinarea soluției optime :


𝑥 ∗ = 𝑥 ∗ (11) = 1
𝑥 ∗ = 𝑥 ∗ (11 − 2𝑥 ∗ ) = 𝑥 ∗ (9) = 3
∗ ∗ (11 ∗ ∗) ∗ (0) ⟹ 𝑥 ∗ = (0,3,1)
𝑥 =𝑥 − 3𝑥 − 2𝑥 = 𝑥 =0

Dacă doriți să încercați….

3. Să se rezolve prin programare dinamică:


max 𝜌 = 4𝑥 +8𝑥 +3𝑥
(𝑅) 5𝑥 + 3𝑥 + 2𝑥 +≤ 11
𝑥 , 𝑥 , 𝑥 ≥ 0 î𝑛𝑡𝑟𝑒𝑔𝑖

TEMA: Condițiile de optimalitate KARUSH – KUHN – TUCKER în programarea


neliniară convexă.

A. Forma canonică a unui program neliniar. Programe convexe

Reamintim că o problemă de programare matematică constă în minimizarea sau maximizarea


unei funcții (funcția obiectiv) ale cărei variabile (numite variabile de decizie) trebuie să satisfacă
un set de ecuații și/sau inecuații (numite restricții).
Deoarece avem în vedere cu precădere problemele rezultate din modelarea unor procese
economice vom presupune constant că valorile variabilelor de decizie sunt nenegative (≥0).
Până acum au fost studiate problemele de programare matematică în care funcția obiectiv și
restricțiile erau liniare în variabilele de decizie. Aceste probleme s-au numit programe liniare.
În continuare vom studia programele neliniare în care funcția obiectiv și/sau unele restricții sunt
neliniare în variabilele de decizie ca de exemplu:

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

De exemplu,forma canonică a programului P1 va fi :


(min) − 𝑓 = −𝑥 − 2𝑥 + 𝑥
(𝑃 ) 𝑥 +𝑥 −1≤0
𝑥 ≥ 0, 𝑥 ≥ 0
Reamintim că o funcție neliniară f(x) cu 𝑥 = (𝑥 , 𝑥 , … , 𝑥 ) definită în toate punctele unei
mulțimi convexe din Rn s-a numit convexă dacă pentru oricare două puncte din domeniul de
definiție 𝑥 = (𝑥 , 𝑥 , … , 𝑥 ) și 𝑦 = (𝑦 , 𝑦 , … , 𝑦 ) și orice scalar 0 ≤ 𝛼 ≤ 1 are loc inegalitatea :
𝒇 (𝟏 − 𝜶)𝒙 + 𝜶𝒚 ≤ (𝟏 − 𝜶)𝒇(𝒙) + 𝜶𝒇(𝒚)
Pentru funcțiile f de o singură variabilă regăsim conceptul uzual : f este convexă ⟺ graficul
funcției f « ține apa » ⟺ 𝑓 (𝑥) ≥ 0 pe domeniul de definiție presupus a fi un interval.
Definiție Un program neliniar se zice program convex dacă, adus la forma canonică (*),
funcțiile f și 𝑔 , 𝑔 , … , 𝑔 sunt convexe.
Programele convexe sunt importante deoarece se aseamănă foarte mult cu programele liniare :
- Mulțimea soluțiilor admisibile este convexă ;
- Optimul funcției obiectiv este global și se atinge, de regulă, pe frontiera mulțimii soluțiilor
admisibile ;
- Modelarea unei mari varietăți de procese economice conduce la programe convexe;
- În programarea convexă s-a depus un efort de cercetare apreciabil, finalizat în rezultate
remarcabile cum ar fi condițiile de optimalitate Karush – Kuhn – Tucker sau metodele efective
de rezolvare.

B. Condițiile de optimalitate Karush – Kuhn – Tucker


Considerăm programul convex în formă canonică:
𝑚𝑖𝑛𝑓(𝑥) , 𝑥 = (𝑥 , 𝑥 , … , 𝑥 )
(𝑃) 𝑔 (𝑥) ≤ 0 𝑖 = 1, … , 𝑚
𝑥≥0
Introducem vectorul de variabile 𝑢 = (𝑢 , 𝑢 , … , 𝑢 ) – asociate restricțiilor – și numite
multiplicatori Lagrange. Construim funcția :
L(𝑥, 𝑢) = L(𝑥 , 𝑥 , … , 𝑥 ; 𝑢 , 𝑢 , … , 𝑢 ) = 𝑓(𝑥) + 𝑢 ∙ 𝑔 (𝑥) + 𝑢 ∙ 𝑔 (𝑥) + ⋯ + 𝑢 ∙ 𝑔 (𝑥)
numită lagrangianul programului (P).
Din motive tehnice vom presupune existența unei soluții 𝑥̅ = (𝑥̅ , 𝑥̅ , … , 𝑥̅ ) care satisface
strict restricțiile și condițiile de nenegativitate :
𝑔 (𝑥̅ ) < 0 , 𝑖 = 1, … , 𝑚 și 𝑥̅ > 0 , 𝑗 = 1, … , 𝑛
Această cerință se numește condiția Slater de regularitate a restricțiilor.Ea poate să
lipsească dacă toate restricțiile din (P) sunt liniare.
Vom presupune că funcțiile f și 𝑔 , 𝑔 , … , 𝑔 sunt diferențiabile pe domeniul comun de
definiție presupus a fi o mulțime convexă deschisă din Rn.
Cu aceste pregătiri avem următoarea :

Teoremă Condiția necesară și suficientă pentru ca 𝑥 ∗ = (𝑥 ∗ , 𝑥 ∗ , … , 𝑥 ∗ ) să fie o soluție optimă a


programului convex (P) este să existe 𝑢∗ = (𝑢∗ , 𝑢∗ , … , 𝑢∗ ) astfel încât cuplul (𝑥 ∗ , 𝑢∗ )să verifice
relațiile :
𝜕L 𝜕L
≥0 𝑗 = 1, … , 𝑛 (1) 𝑥 =0 𝑗 = 1, … , 𝑛 (1′)
𝜕𝑥 𝜕𝑥

(KKT) 𝜕L 𝜕L
≤0 𝑖 = 1, … , 𝑚 (2) 𝑢 =0 𝑖 = 1, … , 𝑚 (2′)
𝜕𝑢 𝜕𝑢

𝑥 ≥0 𝑗 = 1, … , 𝑛 𝑢 ≥0 𝑖 = 1, … , 𝑚

numite condițiile de optimalitate Karush – Kuhn – Tucker.

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

1. Să se probeze că programul neliniar :

(max)𝑓 = 𝑥 + 2𝑥 − 𝑥
𝑥 +𝑥 ≤1
𝑥 ≥ 0, 𝑥 ≥ 0

este convex și să se determine soluția sa optimă.

Soluție : I) Mai întâi se aduce programul la forma canonică :

(min) − 𝑓 = −𝑥 − 2𝑥 + 𝑥
𝑥 +𝑥 −1≤0
𝑥 ≥ 0, 𝑥 ≥ 0

Probarea convexității programului se reduce la probarea convexității funcției obiectiv deoarece


restricția este liniară.
Funcția obiectiv -f este convexă ca sumă de funcții convexe : -f = f1 + f2 cu f1 =-𝑥 1 funcție liniară
deci convexă și 𝑓 = −2𝑥 + 𝑥 deasemeni convexă deoarece 𝑓 = 6𝑥 ≥ 0 𝑝𝑒𝑛𝑡𝑟𝑢 𝑥 ≥ 0.

II) Atașăm formei canonice lagrangianul:


L(𝑥 , 𝑥 , 𝑢) = −𝑥 − 2𝑥 + 𝑥 + 𝑢(𝑥 + 𝑥 − 1)
III) Scriem condițiile de optimalitate KKT :

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

În concluzie, programul convex dat are soluția optimă 𝑥 ∗ = 1 − 𝑥∗ = .Multiplicatorul


√ √
Lagrange are valoarea optimă 𝑢∗ = 1.
2. Să se determine soluția optimă a programului
𝑚𝑎𝑥𝑓 = 𝑥 + 2𝑥
(𝑃) 𝑥 − 𝑥 𝑥 + 𝑥 ≤ 21
𝑥 ≥ 0, 𝑥 ≥ 0
știind că (P) este un program convex.

Soluție : I) Forma canonică :


𝑚𝑖𝑛 − 𝑓 = −𝑥 − 2𝑥
𝑥 − 𝑥 𝑥 + 𝑥 − 21 ≤ 0
𝑥 ≥ 0, 𝑥 ≥ 0

II) Asociem restricției multiplicatorul Lagrange u și construim lagrangianul :


L(𝑥 , 𝑥 , 𝑢) = −𝑥 − 2𝑥 + 𝑢(𝑥 − 𝑥 𝑥 + 𝑥 − 21)

III) Scriem condițiile de optimalitate KKT :

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

IV) Analiza condițiilor KKT


L
 Dacă la optim am avea 𝑢 = 0 din (1.1) ar rezulta = −1 < 0 contradicție! Deci la
optim 𝑢 > 0 ;
 𝑢 > 0 și (2’) implică :
𝒙𝟐𝟏 − 𝒙𝟏 𝒙𝟐 + 𝒙𝟐𝟐 − 𝟐𝟏 = 𝟎 (3)
L
 Dacă la optim am avea 𝑥 = 0 din (1.1) ar rezulta = −1 − 𝑢𝑥 < 0 , pentru că 𝑢 ≥
0 și 𝑥 ≥ 0 , contradicție! În consecință, la optim 𝑥 > 0;
L
 Tot așa, 𝑥 = 0 ar implica = −2 − 𝑢𝑥 < 0 contradicție! Deci, la optim 𝑥 > 0;
 𝑥 > 0 și 𝑥 > 0 implică – din (1.1’) și (1.2’) – relațiile :

−𝟏 + 𝟐𝒖𝒙𝟏 − 𝒖𝒙𝟐 = 𝟎 (4)


−𝟐 − 𝒖𝒙𝟏 + 𝟐𝒖𝒙𝟐 =0 (5)
 Interpretăm (4) și (5) ca un sistem în variabilele x1 , x2 :

2𝑥 − 𝑥 =
(știm că 𝑢 > 0!)
−𝑥 + 2𝑥 =

din care obținem


4 5
𝑥 = 𝑥 =
3𝑢 3𝑢
Revenim în (3):
16 20 25 1 1 𝑥 =4
− + = 21 ⟹ 𝑢 = ⟹ 𝑢 = > 0 ⟹
9𝑢 9𝑢 9𝑢 9 3 𝑥 =5

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ă

Soluție :Putem scrie 𝑓(𝑥 , 𝑥 ) = 𝑓 (𝑥 ) + 𝑓 (𝑥 ) cu 𝑓 (𝑥 ) = 𝑥 + , 𝑓 (𝑥 ) = 𝑥 + .

Funcția f1 este convexă pe intervalul (0,+∞) deoarece 𝑓 (𝑥 ) = > 0 și analog, f2 este


convexă pe (0,+∞) astfel că 𝑓(𝑥 , 𝑥 ) este o funcție convexă pe ortantul pozitiv 𝑥 > 0, 𝑥 > 0
ca sumă de funcții convexe.
Lagrangianul programului (P) :
𝑎 𝑎
L(𝑥 , 𝑥 , 𝑢) = 𝑥 + + 𝑥 + + 𝑢(𝑥 + 𝑥 − 𝐼)
𝑥 𝑥
Condițiile KKT :
𝜕L 𝑎 𝜕L 𝑎
⎧ = 1 − + 𝑢 ≥ 0 (1.1) ; 𝑥 = 𝑥 1 − + 𝑢 = 0 (1.1 )
⎪𝜕𝑥 𝑥 𝜕𝑥 𝑥
⎪ 𝜕L 𝑎 𝜕L 𝑎
= 1 − + 𝑢 ≥ 0 (1.2) ; 𝑥 = 𝑥 1 − + 𝑢 = 0 (1.2 )
𝜕𝑥 𝑥 𝜕𝑥 𝑥

⎪ 𝜕L = 𝑥 + 𝑥 − 𝐼 ≤ 0 (2) ; 𝑢 𝜕L = 𝑢(𝑥 + 𝑥 − 𝐼) = 0 (2 )
⎪ 𝜕𝑢 𝜕𝑢
⎩ 𝑥 ≥ 0, 𝑥 ≥ 0 ; 𝑢≥0

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 + 𝑢 𝑎 +𝑎 𝐼
𝒂𝟏 𝒂𝟐
𝒙∗𝟏 = 𝑰 , 𝒙∗𝟐 = 𝑰
𝒂𝟏 + 𝒂𝟐 𝒂𝟏 + 𝒂𝟐

4. Să se determine soluția optimă a programului neliniar :

𝑚𝑎𝑥𝑓(𝑥 , 𝑥 ) = 𝑥 𝑥
(𝑃) 𝑝 𝑥 +𝑝 𝑥 ≤𝑉 (în care 𝑎 , 𝑎 , 𝑝 , 𝑝 , 𝑉 sunt constante pozitive)
𝑥 ≥ 0, 𝑥 ≥ 0

probând în prealabil că (P) este un program convex.

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

min(−𝑙𝑛𝑓) = −𝑎 𝑙𝑛𝑥 − 𝑎 𝑙𝑛𝑥


(𝑃) 𝑝 𝑥 +𝑝 𝑥 −𝑉 ≤0
𝑥 ≥ 0, 𝑥 ≥ 0

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.

Lagrangianul programului (P) :


L(𝑥 , 𝑥 , 𝑢) = −𝑎 𝑙𝑛𝑥 − 𝑎 𝑙𝑛𝑥 + 𝑢(𝑝 𝑥 + 𝑝 𝑥 − 𝑉)
Condițiile KKT:
𝜕L 𝑎 𝜕L 𝑎
⎧ = − + 𝑢𝑝 ≥ 0 (1.1) ; 𝑥 = 𝑥 − + 𝑢𝑝 = 0 (1.1 )
⎪ 𝜕𝑥 𝑥 𝜕𝑥 𝑥
⎪ 𝜕L 𝑎 𝜕L 𝑎
= − + 𝑢𝑝 ≥ 0 (1.2) ; 𝑥 = 𝑥 − + 𝑢𝑝 = 0 (1.2 )
𝜕𝑥 𝑥 𝜕𝑥 𝑥

𝜕L 𝜕L
⎪ = 𝑝 𝑥 + 𝑝 𝑥 − 𝑉 ≤ 0 (2) ; 𝑢 = 𝑢(𝑝 𝑥 + 𝑝 𝑥 − 𝑉) = 0 (2 )
⎪𝜕𝑢 𝜕𝑢
⎩ 𝑥 ≥ 0, 𝑥 ≥ 0 ; 𝑢≥0

Analiza condițiilor KKT și determinarea soluției optime a programului (P):


La optim :
 𝑥 > 0, 𝑥 > 0 ⟹ 𝑢 > 0 (din (1.1)sau (1.2))

− + 𝑢𝑝 = 0 ⟹ 𝑝 𝑥 = ⟹𝑥 = din (1.1 )
 𝑥 > 0, 𝑥 > 0 ⟹
− + 𝑢𝑝 = 0 ⟹ 𝑝 𝑥 = ⟹𝑥 = din (1.2 )

 𝑢 > 0 ⟹ (din (2' )) 𝑝 𝑥 + 𝑝 𝑥 − 𝑉 = 0 ⟹ =𝑉 ⟹

𝒂𝟏 + 𝒂𝟐 𝒂𝟏 𝑽 𝒂𝟐 𝑽
𝒖∗ = , 𝒙∗𝟏 = ∙ , 𝒙∗𝟐 = ∙
𝑽 𝒂𝟏 + 𝒂𝟐 𝒑𝟏 𝒂𝟏 + 𝒂𝟐 𝒑𝟐
RECAPITULARE PROGRAMARE LINIARĂ

I) Ce este un program liniar.

Reamintim că o problemă de programare liniară sau program liniar se compune din


următoarele elemente :
• Un set de variabile 𝑥 = (𝑥1 , 𝑥2 , … 𝑥𝑛 ) numite variabile de decizie ;
• Un sistem de ecuații și/sau inecuații liniare în variabilele 𝑥1 , … , 𝑥𝑛 , numite restricții ;
• Condițiiile de nenegativitate :variabilele 𝑥1 , … , 𝑥𝑛 nu pot lua decât valori (reale) ≥ 0 ;
• O funcție liniară în variabilele 𝑥1 , … , 𝑥𝑛 numită funcția obiectiv.
Problema. Să se determine setul de valori numerice 𝑥 ∗ = (𝑥1∗ , 𝑥2∗ , … , 𝑥𝑛∗ ) care satisfac restricțiile
și condițiile de nenegativitate și care oferă funcției obiectiv valoarea optimă, adică maximă sau
minimă ,după caz.

Exemplul 1. Un program liniar în trei variabile :


(𝑚𝑎𝑥)𝑓 = 7𝑥1 + 9𝑥2 + 8𝑥3 ⟵ funcția obiectiv
5𝑥1 + 2𝑥2 − 𝑥3 ≥ 4
(𝑃) 3𝑥1 + 𝑥2 + 𝑥3 = 5 } ⟵ restricții
𝑥1 + 2𝑥2 + 3𝑥3 ≤ 9
{𝑥1 ≥ 0, 𝑥2 ≥ 0, 𝑥3 ≥ 0 ⟵ condiții de nenegativitate
Se cere determinarea valorilor numerice 𝑥1∗ , 𝑥2∗ și 𝑥3∗ care satisfac cele trei restricții și condițiile
de nenegativitate și care oferă funcției obiectiv cea mai mare valoare posibilă.

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 1 Continuare. Pentru programul (P) din exemplul 1 :


• setul 𝑥̅ = (1,3, −1) ⟺ 𝑥̅1 = 1, 𝑥̅2 = 3, 𝑥̅3 = −1 este o soluție care nu este admisibilă;
• setul 𝑥̿ = (1,1,1) ⟺ 𝑥̿1 = 1, 𝑥̿2 = 1, 𝑥̿3 = 1 este o soluție admisibilă;
1 22
• setul 𝑥 ∗ = (1⁄5 , 22⁄5 , 0) ⟺ 𝑥1∗ = , 𝑥2∗ = , 𝑥3∗ = 0 este unica soluție optimă a
5 5
programului (P) oferind funcției obiectiv f valoarea maximă 41.
II) Modelarea prin programarea liniară

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)

III) Precizarea condițiilor explicite impuse valorilor variabilelor de decizie


Având în vedere semnificația lor economică este clar că variabilele x1 și x2 nu pot lua decât valori
nenegative
𝑥1 ≥ 0 , 𝑥2 ≥ 0 (4)
Atenție: 𝑥1 = 0 sau 𝑥2 = 0 traduce intenția de a nu produce covrigi respectiv brioșe !
În acord cu terminologia generală, perechile de valori numerice (𝑥̅1 , 𝑥̅2 ) asignate variabilelor x1 ,
x2 care satisfac restricțiile (1-3) și condițiile de nenegativitate (4) se numesc soluții admisibile ;
oricare dintre ele reprezintă un « program de producție » realizabil din resursele date.
IV) Identificarea criteriului de apreciere (de performanță) a soluțiilor admisibile și
formalizarea acestuia în funcția obiectiv a modelului
Din enunț rezultă că aprecierea diferitelor « posibilități de producție » se va face prin venitul
(potențial) pe care l-ar aduce în caz de adoptare. Expresia acestui venit este dată de funcția
𝑓 = 10𝑥1 + 12𝑥2 (5)
a cărei valoare maximă urmează a fi căutată pe mulțimea soluțiilor admisibile.
Modelul matematic al situației de planificare din exemplul 2 este ansamblul relațiilor (1-5) rescris
în continuare și notat cu sigla (P) :
(max 𝑓 = 10𝑥1 + 12𝑥2 )
5𝑥1 + 3𝑥2 ≤ 90
(𝑃) 2𝑥1 + 3𝑥2 ≤ 45
𝑥1 + 3𝑥2 ≤ 36
{ 𝑥1 ≥ 0, 𝑥2 ≥ 0
Deoarece funcția obiectiv (5) și restricțiile (1-3) sunt liniare în variabilele x1,x2 (P) este un
program liniar care se « citește » :
Să se determine valorile numerice 𝑥1∗ , 𝑥2∗ asignate variabilelor 𝑥1 , 𝑥2 care satisfac restricțiile (1-3)
și condițiile de nenegativitate (4) și care oferă funcției obiectiv (5) valoarea maximă.
Într-o secțiune viitoare se va arăta că soluția optimă a programului (P) este :
𝑥1∗ = 15(pungi cu covrigi) , 𝑥2∗ = 5(pungi cu brioșe) cu venitul maxim (max)f = 210 lei.
În caz de adoptare, această soluție ar utiliza întreg disponibilul de făină și ouă și numai 30 măsuri
din stocul de zahăr.
III) Clasificarea programelor liniare

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

(𝑚𝑎𝑥)𝑓 = 10𝑥1 + 5𝑥2


3𝑥1 − 2𝑥2 ≤ 3
(𝑃2 ) 5𝑥1 + 4𝑥2 ≥ 10
2𝑥1 + 𝑥2 ≤ 5
{ 𝑥1 ≥ 0, ≥ 𝑥2 ≥ 0

(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. Un program liniar cu optim infinit

(𝑚𝑎𝑥)𝑓 = 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

4. Un program liniar incompatibil

(𝑚𝑎𝑥)𝑓 = 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

Programul are soluții(!)


dar niciPpppppp
una nu este
admisibilă

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.

V) Forme speciale de prezentare a unui program liniar.

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.

Exemplul 4 Forma standard a programului (P) din exemplul 1


5𝑥1 + 2𝑥2 − 𝑥3 ≥ 4 5𝑥1 + 2𝑥2 − 𝑥3 − 𝑥4 =4
3𝑥1 + 𝑥2 + 𝑥3 = 5 3𝑥1 + 𝑥2 + 𝑥3 =5
(𝑃) 𝑥1 + 2𝑥2 + 3𝑥3 ≤ 9 ⟹ (𝐹𝑆𝑃) 𝑥1 + 2𝑥2 + 3𝑥3 + 𝑥5 =9
𝑥1 ≥ 0 , 𝑥2 ≥ 0 , 𝑥3 ≥ 0 𝑥𝑗 ≥ 0 𝑗 = 1, … ,5
{(max)𝑓 = 7𝑥1 + 9𝑥2 + 8𝑥3 {(max) 𝑓 = 7𝑥1 + 9𝑥2 + 8𝑥3 + 0 ∙ 𝑥4 + 0 ∙ 𝑥5
Rezolvarea grafică a programelor liniare în două variabile
Ca și în alte domenii ale matematicii, reprezentările și interpretările geometrice au jucat un rol
decisiv în stabilirea rezultatelor fundamentale ale programării liniare.

A. Elemente de geometrie analitică

Fixăm în plan un sistem de axe de coordonate format din dreptele perpendiculare orientate
Ox1 (axa orizontală) și Ox2 (axa verticală).

I) Pentru un punct A din plan :


Distanța x1 de la A la axa verticală, luată cu + dacă A este în dreapta axei verticale și
luată cu – dacă A este în stânga ei, se numește abscisa punctului A.
Distanța x2 de la A la axa orizontală, luată cu + dacă A este deasupra axei orizontale și
luată cu – dacă A este sub ea, se numește ordonata punctului A.
Valorile numerice x1 și x2 se numesc coordonatele punctului A - în raport cu sistemul
axelor de coordonate fixat – și caracterizează complet poziția acestuia în plan.Sigla 𝐴(𝑥 , 𝑥 ) va
însemna : A este punctul din plan cu abscisa x1 și ordonata x2.
Evident, punctele 𝐴(𝑥 , 𝑥 ) cu 𝑥 = 0 sunt punctele axei verticale iar punctele 𝐴(𝑥 , 𝑥 )
în care 𝑥 = 0 formează axa orizontală. Punctul O de intersecție al axelor se numește origine și
are coordonatele (0,0).
Ne vor interesa în special punctele 𝐴(𝑥 , 𝑥 )ale căror coordinate satisfac condițiile de
nenegativitate 𝑥 ≥ 0, 𝑥 ≥ 0; totalitatea lor formează primul cadran al axelor de coordonate,
vezi figura 1.

II) Să considerăm o ecuație liniară în două variabile ca de exemplu 2𝑥 + 3𝑥 = 6. Evident,


există o infinitate de perechi de valori numerice (𝑥 , 𝑥 ) care verifică egalitatea. Dacă interpretăm
aceste perechi de numere drept coordonatele unor puncte din plan (plan raportat în prealabil la un
sistem de axe de coordonate…) ce figură geometrică ar reprezenta aceste puncte ? Se arată că :
Totalitatea punctelor 𝐴(𝑥 , 𝑥 )ale căror coordonate verifică ecuația 2𝑥 + 3𝑥 = 6 formează o
dreaptă, notată cu d. Vom numi d “dreapta de ecuație 2𝑥 + 3𝑥 = 6”.
Vizualizarea dreptei d necesită cunoașterea coordonatelor a două puncte distincte ale sale. De
regulă, se determină coordonatele “tăieturilor” adică ale intersecțiilor lui d cu axele de
coordonate:
x2
Primulp cadran

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.

III) Să considerăm acum o inecuație liniară în două variabile ca de exemplu 2𝑥 + 3𝑥 ≤ 6.


Se arată că :
Totalitatea punctelor 𝐴(𝑥 , 𝑥 )ale căror coordonate verifică inecuația 2𝑥 + 3𝑥 ≤ 6 formează
unul din cele două semiplane în care dreapta d de ecuație 2𝑥 + 3𝑥 = 6 împarte planul ! Pentru
identificarea lui va fi suficient să luăm un punct nesituat pe d, de exemplu origina (0,0), și să
testăm satisfacerea inecuației de către coordonatele punctului ales. În caz afirmativ reținem
semiplanul care conține punctul, altminteri reținem celălalt semiplan ! În figura 3 este pus în
evidență – prin săgeata roșie – semiplanul dat de inecuația 2𝑥 + 3𝑥 ≤ 6.

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

(max 𝑓 = 10𝑥 + 12𝑥 )


⎧ 5𝑥 + 3𝑥 ≤ 90

(𝑃) 2𝑥 + 3𝑥 ≤ 45
⎨ 𝑥 + 3𝑥 ≤ 36

⎩ 𝑥 ≥ 0, 𝑥 ≥ 0

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

Propuneri de plan relizabile

(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

Punctele mulțimii hașurate A ≡OABCD se identifică cu


soluțiile admisibile ale programului liniar (P) și corespund
propunerilor de plan,realizabile din resursele date !

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.

C. Determinarea pe cale grafică a soluției optime

Vom răspunde acum la cea de a doua chestiune pusă în subsecțiunea precedentă.


Dând funcției obiectiv f o valoare oarecare, de exemplu 120, ne putem întreba ce semnificație au
punctele (𝑥 , 𝑥 ) – firește cu 𝑥 ≥ 0 , 𝑥 ≥ 0 – situate pe dreapta de ecuație
𝑓 = 120 ⟺ 10𝑥 + 12𝑥 = 120

x2

dreapta de nivel f = venit maxim Soluția optimă a programului liniar (P):


𝑥 ∗ = 15 , 𝑥 ∗ = 5 , (max)𝑓 = 210

D
D C

A dreapta de nivel f = 240

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

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