Uploaded by adrian4fan

mmpd2

advertisement
2. ELEMENTE DE PROGRAMARE LINIARĂ
Programarea liniară reprezinta fundamentele disciplinei „cercetari operationale”
numita si teoria optimizarii deciziilor. Problemele de programare liniară constau in
determinarea valorii optime a unei funcţii liniare de mai multe variabile, cu o semnificaţie
economica precisă, ştiind că variabilele trebuie să îndeplinească anumite condiţii, numite
restrictii.
Problemele de programare liniară pot fi considerate ca extensii ale problemelor de
extremum cu legaturi, dar metodele de rezolvare sunt diferite. Cele mai cunoscute probleme
practice care conduc la modele liniare sunt programarea producţiei şi a personalului,
alcătuirea unui amestec sau stabilirea dietei cu cost minim, problema clasica a transporturilor.
Algoritmii simplex cu ajutorul carora se rezolva problemele de programare liniara
utilizeaza notiuni fundamentale din algebra liniara. De aceea, in prima parte reamintim aceste
notiuni si cateva rezultate importante care se folosesc apoi in programarea liniara.
2.1. Preliminarii de algebra liniara
Fie n > 1 un număr natural. Se notează cu R n mulţimea sistemelor de n numere reale
de forma:
⎛ x1 ⎞
⎜ ⎟
⎜ x2 ⎟
x = ⎜ ⎟, xi ∈ R, i = 1, n
M
⎜ ⎟
⎜x ⎟
⎝ n⎠
numite vectori sau vectori coloană n-dimensionali.
Se definesc operatiile:
⎛ x1 + y1 ⎞
⎛ αx1 ⎞
⎜
⎜
⎟
⎟
⎜ x2 + y2 ⎟
⎜αx2 ⎟
x+ y =⎜
⎟ si αx = ⎜
⎟ , respective adunarea a doi vectori si înmulţirea unui
M
⎜
⎟
⎜x + y ⎟
n⎠
⎝ n
M
⎜
⎟
⎜ αx ⎟
⎝ 3⎠
vector cu un număr real, numit scalar.
Adunarea vectorilor este asociativa, comutativa, are un element neutru, notat 0 şi care are
⎛ − x1 ⎞
⎜
⎟
⎜ − x2 ⎟
toate componentele zero, si vectorul − x = ⎜
reprezinta opusul vectorului x din R n .
⎟
M
⎜
⎟
⎜− x ⎟
⎝ n⎠
Alte proprietăţi ale lui R n legate de înmulţirea cu scalari sunt :
- pentru orice α ∈ R, x, y ∈ R n , α ( x + y ) = αx + αy.
- pentru orice α , β ∈ R , avem : (α + β ) x = αx + βx
- pentru orice α + β ∈ R , x ∈ R n , α ( βx) = (αβ ) x
- pentru orice x ∈ R n , 1.x = x − evident.
In aceste conditii, R n are o structură de spaţiu vectorial real.
Fie vectorii a1, a2 ,..., ak ∈ R n şi scalarii λ1, λ2 ,..., λk ∈ R.
Definiţia 2.1. Se numeşte combinaţie linară a vectorilor a1, a2 ,..., ak ∈ R n cu scalarii
λ1, λ2 ,..., λk ∈ R vectorul x = λ1a1 + λ2 a2 + ... + λk ak .
Se spune că vectorul x ∈ R n este o combinaţie liniară a vectorilor a1, a2 ,..., an , dacă există
scalarii α1, α 2 ,..., α k astfel încât să avem: x = α1a1 + α 2 a2 + ... + α k ak .
Definiţia 2.2. Un sistem de vectori S = {v1, v2 ,..., vm } se numeşte liniar independent
dacă din relaţia α1v1 + α 2v2 + ... + α m vm = 0 , rezultă α1 = α 2 = ... = α m = 0 unică soluţie. Altfel,
daca măcar unul din scalarii α1,α 2 ,..., α m este diferit de zero, atunci sistemul S se numeşte
liniar dependent.
Pentru cazul spaţiul vectorial R n există o teoremă ce caracterizează natura unui sistem
de vectori şi pe care o dăm mai jos. Fie S = { α1,α 2 ,...,α m } ⊂ R n , unde :
⎛ a11 ⎞
⎛ a12 ⎞
⎛ a1m ⎞
⎛ a11 a12
⎜
⎜
⎜
⎜
⎟
⎟
⎟
a
⎜ a21 ⎟
⎜ a2 ⎟
⎜ a2 m ⎟
⎜a
a1 = ⎜
, a2 = ⎜
, …, am = ⎜
şi A = ⎜ 21 22
⎟
⎟
⎟
...
...
M
M
M
⎜
⎜
⎜
⎜
⎟
⎟
⎟
⎜a ⎟
⎜a ⎟
⎜a ⎟
⎜a
⎝ n1 ⎠
⎝ n2 ⎠
⎝ nm ⎠
⎝ n1 an 2
(astfel notat A = (aij )i =1,n ) matricea având drept coloane vectorii daţi.
... a1m ⎞
⎟
... a2m ⎟
,
... ... ⎟
⎟
... anm ⎟⎠
j =1, m
Reamintim că rangul unei matrici este un număr mai mic sau egal cu minimul dintre
numărul de linii şi numărul de coloane, rangA ≤ min{m, n} , care reprezintă ordinul maxim al
minorului nenul al matricii.
Propoziţia 2.1. O condiţie necesară şi suficientă ca sistemul de vectori S să fie liniar
independent este ca rangul matricei A să fie egal cu numărul vectorilor, adică rangA = m . În
caz contrar, sistemul S este liniar dependent.
⎧a11λ1 + a12λ2 + ... + a1mλm = 0
⎪
⎪a λ + a λ + ... + a2mλm = 0
.
Demonstraţie. Fie λ1a1 + λ2 a2 + ... + λm am = 0 , adica ⎨ 21 1 22 2
⎪...............................................
⎪⎩an1λ1 + an 2λ2 + ... + anmλm = 0
Din teoria sistemelor liniare omogene se ştie că o condiţie necesară şi suficientă pentru ca
sistemul precedent să admită numai soluţia banală este ca rangA = numărul necunoscutelor =
m. Cum m este şi numărul vectorilor din S, prima parte a teoremei este demonstrată.
Dacă rangA < m , sistemul admite si alte soluţii decât cea banală şi reciproc, deci există măcar
un scalar λi ≠ 0 printre scalarii λ1, λ2 ,..., λm şi rezultă din definiţia 2.2 că S este un sistem de
vectori liniar dependent.
Practic, pentru a afla natura unui sistem de m vectori din R n , se calculeaza
r = rangA; si apoi
i)
dacă r = m sistemul de vectori este liniar independent;
ii)
dacă r < m sistemul de vectori este liniar dependent.
Reamintim ca numărul maxim de vectori liniari independenţi în R n este n .
Definiţia 2.3. Se numeşte baza în R n orice sistem de n vectori liniar independenţi.
Din definiţie se vede că o bază este un sistem liniar independent maximal în raport cu
incluziunea. Din aceasta rezultă că orice sistem care are n + 1 vectori este liniar dependent.
Există o infinitate de baze în R n . Practic, pentru a decide dacă sistemul de vectori
A = {a1, a2 ,..., an } este o bază, se calculeaza det A, unde A este matricea care are drept coloane
vectorii a1, a2 ,..., an ; Dacă det A ≠ 0 , sistemul A formează o bază.
Propoziţia 2.2. (Teorema bazei). Fie A = {a1, a2 ,..., an } o bază în R n şi x un vector
oarecare din
Rn.
Atunci există scalarii unici α1, α 2 ,..., α n ∈ R astfel încât
x = α1a1 + α 2 a2 + ... + α n an , adica x se poate exprima ca o combinaţie liniară de vectori ai
bazei şi această exprimare este unică.
⎛ α1 ⎞
⎜ ⎟
⎜α ⎟
Sub forma matriciala, sistemul se scrie Ax A = x, unde x A = ⎜ 2 ⎟ sunt coeficienţii combinaţiei
M
⎜ ⎟
⎜α ⎟
⎝ n⎠
liniare. Ei se mai numesc coordonatele (componentele) vectorului x scris în baza A. De aici
rezulta ca x A = A−1x .
Baza
canonică
din
R n este
baza
formată
din
vectorii
unitari
⎛1⎞
⎜ ⎟
⎜0⎟
e1 = ⎜ ⎟ ,
M
⎜ ⎟
⎜0⎟
⎝ ⎠
⎛ 0⎞
⎛ 0⎞
⎜ ⎟
⎜ ⎟
⎜1⎟
⎜ 0⎟
e2 = ⎜ ⎟,..., en = ⎜ ⎟. , iar matricea asociată bazei se noteaza cu I , si se numeste matricea
M
M
⎜ ⎟
⎜ ⎟
⎜ 0⎟
⎜1⎟
⎝ ⎠
⎝ ⎠
⎛ x1 ⎞
⎜ ⎟
⎜x ⎟
n
unitate de ordinul n . Orice vector din R , x = ⎜ 2 ⎟ se exprimă x = x1e1 + x2e2 + ... + xnen .
M
⎜ ⎟
⎜x ⎟
⎝ n⎠
O problema importanta, reluata la fiecare pas din algoritmul simplex, este
transformarea coordonatelor unui vector la schimbarea bazei. Fie două baze ale spaţiului
vectorial
R n : A = {a1, a2 ,..., an } şi B = {b1, b2 ,..., bn } . Cu A şi B vom nota matricile asociate
⎛a
⎞
⎛b
⎞
⎜ 11 a22 L a1n ⎟
⎜ 11 b22 L b1n ⎟
⎜
⎟
⎜
⎟
celor două baze din R n , adică: A = ⎜ a12 a23 L a2n ⎟, B = ⎜ b12 b23 L b2n ⎟.
M
M ⎟
M
M ⎟
⎜ M
⎜ M
⎜a
⎟
⎜
⎟
⎝ n1 an 2 L ann ⎠
⎝ bn1 bn 2 L bnn ⎠
⎛ α1 ⎞
⎛ β1 ⎞
⎜ ⎟
⎜ ⎟
⎜α 2 ⎟
⎜β ⎟
n
Evident, det A ≠ 0, det B ≠ 0. Fie x ∈ R şi x A = ⎜ ⎟ xB = ⎜ 2 ⎟ , coordonatele vectorului x în
M
M
⎜ ⎟
⎜ ⎟
⎜α ⎟
⎜β ⎟
⎝ n⎠
⎝ n⎠
cele două baze. Vectorii din R n , b1, b2 ,..., bn pot fi exprimaţi în baza A astfel :
b1 = c11a1 + c12 a2 + ... + c1n an , b 2 = c21a1 + c22 a2 + ... + c2 n an ,..., bn = cn1a1 + cn 2 a2 + ... + cnn an ,
n
adica bi = ∑ cij a j , i = 1, n în care cij ∈ R sunt coordonatele de trecere ale vectorilor din baza A
j =1
în baza B şi formează matricea C = (cij )i, j =1,n . Matriceal, se scrie B = A C T , unde observam
ca si matricea C este nesingulară. Se demonstreaza ca x A = CT xB , ceea ce se mai poate scrie
sub forma x B = (C T ) −1 x A , numita formula de schimbare de bază în R n .
Din relatia C T = A−1B , rezulta (C T ) −1 = B −1 A.
Dacă baza A este bază canonică, atunci matricea A este matricea unitate, si atunci
obtinem xB = B −1x. , în care x reprezintă coordonatele vectorului x în baza unitară.
Caz particular. In programarea liniara, intereseaza in mod deosebit calcularea
coordonatelor unui vector când se trece de la o bază la o nouă bază care diferă de prima
printr-un singur vector.
Fie A = {a1, a2 ,..., an } şi B = {b1, b2 ,..., bn } două baze din R n care diferă printr-un singur
vector. Pentru simplificarea scrierii, consideram ca se schimba primul vector, dar
raţionamentul este asemănător pentru oricare din ei.
Fie b ∈ R n , care se poate exprima în baza A, b = λ1a1 + λ2 a2 + ... + λn an . Deoarece λ1 ≠ 0, (altfel
λ
λ
1
B nu ar fi bază), obtinem a1 = b − 2 a2 − ... − n an .
λ1
λ1
λ1
Presupunem
ca
stim
coordonatele
lui
x
in
baza
A,
x = α1a1 + α 2a2 + ... + α n an , x A = (α1,α 2 ,...,α n )T . Ne propunem sa determinan coordonatele
vectorului x in noua baza B, adica x = β1a1 + β 2 a2 + ... + β n an , xB = ( β1, β 2 ,..., β n )T . Avem
λ
1
λ
α
λ α − λ2α1
b − 2 a2 − ... − n an ) + α 2a2 + ... + α n an = 1 b + 1 2
a2 + ... +
x = α1 (
λ1
λ1
λ1
λ1
λ1
α1
⎧
⎪ β1 = λ
1
⎪
⎪
λα
⎪ β 2 = 1 2−λ2α1
λ1α n − λnα1
an . Vom obtine ⎨
+
, adica coordonatele in noua baza.
λ1
λ1
⎪L
⎪
⎪
λ1α n −λnα1
⎪ βn =
λ1
⎩
Rezultatele precedente se pot organiza sub forma unor tabele, în prima etapă aflânduse date cunoscute, iar a doua date calculele :
Etapa I
Etapa II
Pentru exemplul nostru, λ1 se numeşte pivot. Elementele de la etapa a doua se calculează
astfel :
- se împart elementele de pe linia pivotului la pivot şi se trec pe linia pivotului la etapa a II-a.
- se completeaza coloana pivotului cu zero ;
- restul elementelor se calculează cu regula dreptunghiului.
Pentru elementul de pe locul al doilea ( β 2 ) se formează dreptunghiul care are într-un vârf
opus elementul corespunzător lui β 2 din prima etapă, adică
şi se calculează diferenţa dintre produsul elementelor de pe diagonala pivotului şi produsul
celorlalte elemente, apoi rezultatul se împarte la pivot şi se trece raportul în locul lui β 2 .
2.2. Formularea unei probleme de programare liniara (PPL)
Forma generală a unei PPL este problema
[opt] f = c1x1 + c2 x2 + ... + cn xn → funcţia de eficienţă
≤
a11x1 + a12 x2 + ... + a1n xn = b1
≥
⎫
⎪
⎪
⎪
⎪
≤
⎪
a21x1 + a2 2 x2 + ... + a2n xn = b2 ⎪⎪
⎬ restricţii
≥
⎪
⎪
.............................................
⎪
≤ ⎪
am1x1 + am 2 x2 + ... + amn xn = bm ⎪
⎪
≥ ⎭⎪
x1, x2 ,.., xn ( cu semne specificate)
Functia liniara f se numeste funcţia obiectiv(funcţie scop, de eficienţă), iar cele m restrictii
sunt de asemenea liniare. In general, condiţiile impuse asupra variabilelor sunt condiţiile de
negativitate.
Modelul clasic al unei PPL este dat de problema practica a optimizarii productiei unui
agent economic. Sistemul economic este definit prin mulţimea de activităţi {A1, A2, ... An}
care compun sistemul economic analizat, mulţimea de resurse utilizate {R1, R2, ... Rm}
precum şi prin relaţiile tehnico-economice dintre acestea. Legătura dintre activităţi şi resurse
este determinată de tehnologia de fabricaţie corespunzătoare fiecărei activităţi Aj (j=1,...,n) şi
poate fi caracterizată numeric prin vectorul coloană a(j) de componente (a1j, a2j, ... amj).
Elementele {aij, i = 1,...,m; j = 1,...,n} se numesc coeficienţi tehnici sau coeficienţi de consum
specific şi arată ce cantitate din resursa Ri se consumă pentru producerea unei unităţi din
produsul (serviciul) Pj (ca rezultat al activităţii Aj). Toate "tehnologiile" de fabricaţie definite
de vectorii coloană a(j) se pot organiza într-o matrice A cu m linii şi n coloane; fiecare linie se
referă la o resursă Ri (i = 1,...,m) şi fiecare coloană se referă la o activitate Aj (j = 1,...,n).
Notând cu xj (j = 1,...,n) rezultatul activităţii Aj într-o perioadă dată şi cu bi (i = 1,...,m)
cantităţile disponibile din resursele Ri (i = 1,...,m), se pot scrie matematic următoarele
restricţii tehnico-economice:
a 11 x 1 + a 12 x 2 + ... + a 1n x n ≤ b 1
a 21 x 1 + a 22 x 2 + ... + a 2n x n ≤ b 2
sau A⋅x ≤ b
LLLLLLLLLLLL
a m1 x 1 + a m2 x 2 + ... + a mn x n ≤ b m
⎛ a 11 a 12 L a 1n ⎞
⎛ x1 ⎞
⎛ b1 ⎞
⎜a
⎜x ⎟
⎜ ⎟
⎟
a
L
a
22
2n ⎟ ; x = ⎜ 2 ⎟ şi b = ⎜ b 2 ⎟
unde A = ⎜ 21
M O M ⎟
⎜ M
⎜ M ⎟
⎜ M ⎟
⎝ a m1 a m2 L a mn ⎠
⎝xn ⎠
⎝bn ⎠
Interpretarea restrictiilor: cantitatea consumată dintr-o resursă nu poate depăşi disponibilitatile
Exemplul 1.Optimizarea productiei. O întreprindere are la dispoziţie trei resurse
A, B, C din care poate fabrica 4 tipuri de produse P1, P2 , P3 , P4 . Managerul doreşte să ştie care
ar fi nivelul de producţie al fiecărui produs, ţinând seama de limitarea resurselor existente şi
de profitul produs. Se cunosc următoarele date: coeficienţii tehnologici ai fiecărui produs,
disponibilul de resurse, profitul unitar. Datele sunt în tabelul de mai jos.
Produse
Consumuri unitare (t)
Disponibil (t)
Resurse
A
B
C
Profit/unit.
(în u.m)
P1
1
0
1
P2
2
1
0
P3
1
1
1
P4
1
1
0
20
10
30
20
1000
800
500
Modelului matematic al problemei are 4 variabile, reprezentate de nivelul de producţie al
fiecărui produs (numărul de unităţi, bucăţi etc. din fiecare produs). Daca notam cu xi nivelul
produsului Pi , atunci functia obiectiv reprezintă profitul total adus prin fabricarea produselor,
deci se va maximiza f ( x1, x2 , x3 , x4 ) = 20 x1 + 10 x2 + 30 x3 + 20 x4 (în unităţi monetare).
Restrictiile modelului deriva limitarea resurselor, deci limitarea producţiei, dar in conditiile
maximizarii profitului. Astfel, se obtine cate o restrictie pentru fiecare dintre resurse:
x1 + 2 x2 + x3 + x4 ≤ 1000
x2 + x3 + x4 ≤ 800
x1 + x3 ≤ 500 .
Evident, variabilele de decizie x1, x2 , x3 , x4 trebuie să fie pozitive, deci x1, x2 , x3 , x4 ≥ 0.
Concuzionand, modelul matematic aferent problemei enuntate consta intr-o PPL:
[max] f = 20 x1 + 10 x2 + 30 x3 + 20 x4 → funcţia de eficienţă
x1 + 2 x2 + x3 + x4 ≤ 1000⎫
⎪
⎪
x2 + x3 + x4 ≤ 800
⎬ restricţii
⎪
⎪
x1 + x3 ≤ 500
⎭
x j ≥ 0 j = 1,4 → condiţiile de negativitate
Acest model poate fi scris si sub forma matriceala. Astfel, daca notam cu
X = ( x1, x2 , x3 , x4 )T ∈ R 4 vectorul nivelurilor de producţie (vectorul necunoscutelor), cu A
matricea
coeficienţilor
⎛1 2 1 1⎞
⎜
⎟
A = ⎜0 1 1 1⎟ ,
⎜1 0 1 0⎟
⎝
⎠
tehnologici,
cu
b
vectorul
resurselor,
b = (1000,800,500)T ∈ R3 şi cu c coeficientii funcţiei de eficienţă, c = (20,10,30,20) ∈ R 4 ,
modelul precedent se scrie sub forma matriceal :
[max] f = cT X
AX ≤ b
X ≥0
Exemplul 2. Problema
amestecului.
Se face un amestec din uleiuri minerale
U1, U 2 , U 3 , U 4 , în vederea obţinerii unui produs finit cu anumite calităţi şi în cantitate de cel
puţin 800 l . Amestecul trebuie să conţină substanţele S1 şi S 2 în cantitate de cel puţin 18000
g respectiv 21000 g. Conţinutul în substanţele S1 şi S 2 ale fiecărui tip de ulei şi costurile
unitare sunt date mai jos :
Uleiuri
Conţinutul în grame/l
Substanţe
S1
S2
Cost unitar
(mii lei/t)
U1
20
10
U2
10
20
5
4
U3
30
10
4,5
U4
20
30
Necesar (g)
18000
21000
3
Ce cantitate din fiecare ulei trebuie pusă în amestec astfel incat costul total sa fie minim ?
Variabilele modelului sunt cantităţile de uleiuri U1, U 2 , U 3 , U 4 , care trebuie puse în amestec,
notate cu x1, x2 , x3 , x4 . Funcţia obiectiv este data de costul amestecului, care trebuie
minimizat: [min] f = 5 x1 + 4 x2 + 4,5 x3 + 3 x4
Restrictiile modelului sunt de doua tipuri: o restrictie impusa de cantitatea minima de
amestec, x1 + x2 + x3 + x4 ≥ 800. , si alte doua restrictii referitoare la substanţele minerale
necesare amestecului:
20 x1 + 10 x2 + 30 x3 + 20 x4 ≥ 18000
10 x1 + 20 x2 + x103 + 30 x4 ≥ 21000
Se adauga evident condiţiile de negativitate x1, x2 , x3 , x4 ≥ 0.
In concluzie, modelul matematic al problemei de amestec este :
[min] f = 5 x1 + 4 x2 + 4,5 x3 + 3 x4
x1 + x2 + x3 + x4 ≥ 800.
20 x1 + 10 x2 + 30 x3 + 20 x4 ≥ 18000
10 x1 + 20 x2 + x103 + 30 x4 ≥ 21000
x1, x2 , x3 , x4 ≥ 0.
Exemplul 3. Problema transporturilor. Problema clasica de transport constă în
determinarea unui plan optim de transport al unui produs de la depozite la consumatori, astfel
încât cheltuielile aferente transportului să fie minime.
Un produs P , depozitatat în m centre de expediţie Di în cantităţile ai (i = 1, m) este solicitat
în centrele de consum C j în cantităţile b j ( j = 1, n) . Cunoscand costurile unitare de transport
cij de la centrul Di la centrul de consum C j , se cere sa se determine cantităţile de marfa
xij pe toate rutele (i, j ), i = 1, m , j = 1, n , care trebuie transportate, astfel încât costul total al
transportului să fie minim. Problema poate fi sintetic prezentata sub forma urmatorului tabel:
Cj
Di
D1
D2
M
Dm
b
C1
c11
x11
c21
x21
M
cm1
xm1
b1
C2
c12
x12
c22
x22
…
a1
…
Cn
c1n
x1n
c2n
x2n
M
...
M
M
cm2
xm2
b2
…
…
cmn
xmn
bn
an
T
…
a
a2
n
Problema de transport este echilibrată daca cererea din centrele de consum ∑ b j coincide cu
j =1
m
n
m
i =1
j =1
i =1
oferta din centrele de depozitare ∑ ai , adică: ∑ b j = ∑ ai = T .
Restrictiile modelului de transport deriva din transportul integral al disponibilului
din
n
produsul P către centrele de consum, ∑ xij = ai , i = 1, m ( m restricţii ), si din satisfacerea
j =1
m
integrală a necesarului fiecărui centru C j : ∑ xij = b j , j = 1, n ( n restricţii ).
i =1
Modelul matematic al unei problemei clasice de transport devine:
m n
min f = ∑ ∑ cij xij
i =1 j =1
n
∑ xij = ai , i = 1, m
j =1
m
∑x
i =1
ij
= b j , j = 1, n .
xij ≥ 0, i = 1, m , j = 1, n .
2.3. Forme ale unei probleme de programare liniara
Dupa cum am vazut deja, o problema de programare liniara consta in
optimizarea (minimizarea sau maximizarea) unei functii liniare supusa unor conditii liniare
(egalitati si/sau inegalitati). Forma generală a oricărei probleme de programare liniară este:
⎧
⎪max (min ) f = c 1 ⋅ x 1 + c 2 ⋅ x 2 + ... + c n ⋅ x n
⎪
⎪⎪
≤
a
⋅
x
+
a
⋅
x
+
...
+
a
⋅
x
i = 1,..., n
⎨ i1 1
i2
2
in
n = bi
≥
⎪
≤0
⎪
⎪x 1 , x 2 ,..., x n ≥ 0
⎪⎩
oarecare
unde cj (coeficienţii funcţiei obiectiv), aij (coeficienţii restricţiilor) şi bi (termenii liberi) sunt
constate reale.
Spunem ca o problema de programare liniara are forma standard (FS) daca toate
restrictiile sunt ecuatii si toate variabilele sunt supuse conditiei de nenegativitate:
⎧min (max )c T x
⎪
⎨ Ax = b
⎪ x ≥ 0.
⎩
O restrictie a unei probleme de programare liniara este numita concordanta daca este o
inegalitate de tipul ≥ cand functia liniara trebuie minimizata sau o inegalitate de tipul ≤ cand
functia liniara trebuie maximizata.
Spunem ca o problema de programare liniara are forma canonica (FC) daca toate
restrictiile sale sunt concordante si toate variabilele sunt supuse conditiei de nenegativitate.
Cu alte cuvinte, o problema de programare liniara are forma canonica daca se scrie
⎧min c T x
⎧max c T x
⎪
⎪
⎨ Ax ≥ b sau ⎨ Ax ≤ b
⎪x ≥ o
⎪ x ≥ o.
⎩
⎩
Orice PPL poate fi adusa la forma standard sau la forma canonica, folosind
urmatoarele transformari elementare (echivalente):
a) Sensul unei inegalitati se schimba prin inmultire cu – 1;
b) Transformarea inegalitatilor in ecuatii: o inegalitate de forma aTx ≤ b poate fi
scrisa ca o ecuatie aTx + y = b , introducand o variabila (numita variabila ecart,
variabila abatere sau variabila de compensare) y ≥ 0 , iar o inegalitate de forma
aTx ≥ b se transforma in ecuatia aTx – y = b prin scaderea variabilei ecart y ≥ 0;
c) Transformarea ecuatiilor in inegalitati: o ecuatie de forma aTx = b este
echivalenta cu inegalitatile aTx ≥ b si aTx ≤ b;
d) O variabila supusa conditiei de nepozitivitate (x ≤ 0) se transforma intr-o variabila
nenegativa prin substitutia x’ = - x;
e) O variabila oarecare x (adica o variabila careia nu i se impun conditii asupra
semnului) se poate inlocui cu doua variabile nenegative x’ si x”, folosind
substitutia x = x’ – x”;
f) Deoarece avem totdeauna inf f(x) = - sup ( - f(x)) o problema de minimizare se
transforma intr-o problema de maximizare si invers, schimbind semnul
coeficientilor din functia considerata.
2.4. Rezultate fundamentale in programarea liniara
In expunerile urmatoare ne vom referi la o PPL sub forma standard, si vom considera
de obicei problema de minimizare in forma standard, adica:
⎧min c T x
⎪
⎨ Ax = b (*)
⎪ x ≥ 0.
⎩
O solutie a sistemului de ecuatii Ax = b care verifica in plus conditiile de
nenegativitate x ≥ 0 este numita program sau solutie admisibila (solutie realizabila, solutie
posibila etc.). Multimea programelor problemei (*) este P = {x∈Rn⏐Ax = b, x ≥ 0}.
Un punct de minim global al functiei obiectiv z = cTx pe multimea problemelor P
este numit solutie optima a PPL (*).
In cele ce urmeaza vom presupune ca rang(A) = m < n, conditie care asigura
compatibilitatea sistemului de restrictii si existenta unui numar infinit de solutii ale acestuia.
Se numeste baza a problemei(*) orice baza a lui R m formata din vectori coloana ai
matricii A.
Se numeşte soluţie de bază a sistemului de ecuaţii Ax = b o soluţie cu proprietatea:
componentelor sale nenule le corespund vectori coloană ai matricei A liniar independenţi.
Rezultă că o soluţie de bază poate avea cel mult m componente diferite de zero. Convenim să
numim variabilele corespunzătoare unei baze în R m variabile bazice.
Utilizand scrierea matriceala, sistemul A⋅x = b se pune sub forma echivalenta:
x
(BS)⋅ ⎛⎜ B ⎞⎟ = b ⇔ B⋅xB + S⋅xS = b ⇔ B⋅xB = b – S⋅xS ⇔ xB = B-1⋅b – B-1⋅S⋅xS , unde baza B
⎝ xS ⎠
este o matrice pătratică nesingulara de dimensiune m, iar restul coloanelor formeaza matricea
⎛B−1b⎞
⎜ 0 ⎟
S, matrice cu m linii şi n – m coloane. xB = ⎜ 0 ⎟ este solutia de baza asociata bazei B.
⎜ M ⎟
⎜ 0 ⎟
⎝
⎠
Teorema fundamentala a programarii liniare
a)
Daca problema de programare liniara (*) are un program, atunci are un
program de baza;
b)
Daca problema de programare liniara (*) are un program optim, atunci are
un program de baza optim.
Teorema. Mulţimea soluţiilor admisibile (optime) este multime închisă şi convexă.
Dacă este şi mărginită atunci punctele extremale ale acesteia sunt chiar soluţiile admisibile
(optime) de bază ale problemei.
Aceste rezultate dau o metoda de rezolvare a unei PPL. Aceasta consta in investigarea
tuturor solutiilor de baza (sunt cel mult C m
n soluţii de bază, adică un număr finit), si apoi
selectarea solutiei care realizeaza optimul functiei obiectiv. Metoda descrisa ramane doar una
teoretica, datorita unui volum ridicat de calcule.
Se impune asadar o alta cale de rezolvare a unei PPL. Algoritmul simplex (Dantzig,
1951) pentru rezolvarea problemelor de programare liniara reprezinta o metoda iterativa care
exploreaza in mod sistematic multimea programelor unei PPL, prin trecerea de la un program
de baza la alt program de baza, care este „cel putin la fel de bun” ca cel precedent. Metoda
furnizeaza de asemenea criterii pentru punerea in evidenta a faptului ca problema are optim
infinit, precum si a cazului in care multimea programelor este vida
2.5. Algoritmul simplex
⎧min c T x
⎪
Consideram PPL ⎨ Ax = b
⎪ x ≥ 0.
⎩
(*) , unde unde A este o matrice cu m linii si n coloane
pentru care avem rang (A) = m < n.
Fie B o baza a problemei. Atunci sistemul de ecuatii Ax = b se poate scrie in forma
B
-1
x = B b – B-1SxS. Notand B-1b = ⎯xB , B-1aj = y Bj , 1 ≤ j ≤ n, rezulta x B = x ' B − ∑ y Bj x j .
j∈S
B
B
S
Solutia de baza corespunzatoare bazei B este data de x =⎯x si x = 0. Evident ca aceasta
solutie de baza este un program daca avem indeplinita conditia B-1b ≥ 0.
Definitie. O baza B care verifica conditia B-1b ≥ 0 se numeste baza primal
admisibila.
Pe de alta parte, functia obiectiv z = cTx poate fi exprimata sub forma:
z = c BT x B + c ST x S = c BT B −1b − (c BT B −1 S − e ST )x S . Notam z ' B = c BT x B , z Bj = c BT y Bj ,1 ≤ j ≤ n , unde
zB reprezinta valoarea functiei obiectiv pentru solutia de baza xB = B-1b , xS = 0. Atunci,
relatia precedenta se scrie si sub forma z = z ' B −∑ (z Bj − c j )x j .
j∈R
Prezentam in continuare enuntul algoritmului simplex primal:
Pasul 1. Se determina o baza primal admisibila B.
Pasul 2. Se calculeaza ⎯xB , ⎯zB , y Bj , 1 ≤ j ≤ n.
Pasul 3. Daca z Bj − c j ≤ 0 pentru orice j ∈ S, atunci STOP: ⎯xB este program optim.
Altfel, se determina multimea S+ definita de {j/j ∈ S , z Bj − c j > 0 } si se trece la pasul
urmator.
Pasul 4. Daca exista j ∈ S+ astfel incat y Bj ≤ 0 , atunci STOP: problema are optim
infinit. Altfel, determinam
max z Bj − c j = z kB − ck .
(
)
k ∈ S+
cu ajutorul criteriului de intrare in baza
Pasul 5. Determinam indicele r ∈ B+ cu ajutorul criteriului de iesire din baza
_
_
B
⎛ x' ⎞ x' B
min ⎜⎜ Bi ⎟⎟ = Br .
⎝ y ik ⎠ y rk
unde B+ = {i/i ∈ B , y ikB > 0 }.
Pasul 6. Se considera noua baza ⎯B obtinuta din B prin inlocuirea coloanei ar cu
coloana ak, si se reia algoritmul de la pasul al doilea, inlocuind B cu ⎯B.
Comentarii
1.
Calculele aferente fiecarei iteratii (fiecarei baze) se trec sub forma unor
tabele numite tabele simplex.
2.
Datorita simplificarii calculelor, si nu numai, se considera ca baza initiala
matricea unitate.
3.
Pasul 3 reprezinta testul de optimalitate.
4.
Pasul 4 arata testul de infinititudine a solutiei si, in caz ca aceasta conditie
nu este indeplinita, se determina noua variabila de baza, cu ajutorul
criteriului de intrare in baza.
5.
Pasul 5 reprezinta criteriul de iesire din baza.
6.
7.
Trecerea de la o baza la alta se face conform formulelor de schimbarea
bazei (caul particular al inlocuirii unui singur vector), conform cu 2.1.
In cazul unei PPL de maxim, apar urmatoarele modificari:
a)
Testul de optimalitate (pasul 3) devine: daca z Bj − c j ≥ 0 pentru
orice j ∈ S, atunci STOP, ⎯xB este program optim. Altfel se
determina multimea S- = {j/j ∈ S , z Bj − c j < 0 } si se trece la pasul
b)
urmator.
Pasul 4: daca exista j ∈ S astfel incat
y Bj ≤ 0 , atunci STOP:
problema are optim infinit. Altfel, determinam k ∈ S- cu ajutorul
criteriului de intrare in baza min z Bj − c j = z kB − c k .
(
)
Tabelul simplex asociat bazei B are in prima coloana variabilele de baza (vectorul
x ), in a doua coloana valorile variabilelor de baza (vectorul ⎯xB), iar in urmatoarele n
coloane vectorii y Bj ,1 ≤ j ≤ n . Pe o linie suplimentara se trec functia obiectiv z = cTx ,
B
valoarea sa in baza B (adica z’B), precum si cantitatile z Bj − c j ,1 ≤ j ≤ n, necesare in aplicarea
algoritmului simplex.
Practic, trecerea de la un tabel la altul se face dupa urmatoarele reguli:
- elementele situate pe linia pivotului se impart la pivot
- elementele situate pe coloana pivotului devin zero, cu exceptia pivotului care devine 1
- celelalte elemente ale tabelului simplex se transforma dupa regula dreptunghiului: daca ne
imaginam dreptunghiul a carui diagonala este determinata de elementul yijB care trebuie
transformat si pivotul y rkB , atunci noua valoare yijB ' se obtine impartind la pivot diferenta
dintre produsul yijB y rkB al elementelor situate pe diagonala considerata mai sus si produsul
y rjB y ikB al elementelor situate pe cealalta diagonala a dreptunghiului.
Exemplu
[max] f = 20 x1 + 10 x2 + 30 x3 + 20 x4
x1 + 2 x2 + x3 + x4 ≤ 1000
x2 + x3 + x4 ≤ 800
x1
+ x3
≤ 500
x1, x2 , x3 , x4 ≥ 0
Se aduce problema la forma standard, adăugând trei variabile de compensare
x5 , x6 , x 7 . Problema devine:
[max] f = 20 x1 + 10 x2 + 30 x3 + 20 x4
=1000
x1 + 2 x2 + x3 + x4 + x5
=800
x2 + x3 + x4 +
+ x6
x1
+ x3
+ x7 =500
x j ≥ 0 , j = 1,7.
Observam ca variabilele x5 , x6 , x 7 . furnizeaza o baza initiala primal admisibila, deci se poate
aplica algoritmul simplex primal. O soluţie iniţială de bază este data de (0, 0, 0, 0, 1000, 800,
500). Prezentam succint mai jos calculele aferente aplicarii algoritmului.
CB
B
XB
0
0
0
a5
a6
a7
0
0
30
a5
a6
a3
0
20
30
a5
a4
a3
20
20
30
a1
a4
a3
1000
800
500
0
500
300
500
15000
200
300
500
21000
200
500
300
23000
B
5 4 3
a1 a2 a3
1 2 1
0 1 1
1 0 1
20 10 30
0 2 0
-1 1 0
1 0 1
-10 10 0
1 1 0
-1 1 0
1 0 1
10 –10 0
1
1 0
0
2 0
0 –1 1
0 –20 0
B
0
0
0
a4 a5
a6
1
1
0
1
0
1
0
0
0
20 0
0
1
1
0
1
0
1
0
0
0
20
0
0
0
1
–1
1
0
1
0
0
0
0
0 –20
0
1 –1
1
1
0
0 –1
1
0 –10 –10
0
a7
0
0
1
0
–1
–1
1
-30
0
–1
1
-10
0
–1
1
-10
1000
800
500
500
300
200
500
Exercitii
Sa se aplice simplex primal pentru rezolvarea urmatoarelor PPL:
(max ) f = 3x 1 + 2x 2 + x 3 + 4x 4 + 3x 5 + 5x 6
⎧ x 1 + 2 x 2 + x 3 + x 4 + 3x 5 + x 6 ≤ 8
⎪2x 1 + 2 x 2 + 3x 3 + x 4 + 3x 5 + 2 x 6 ≤ 15 ,
⎨ 3x + x + 2 x + 2 x + x + 2 x ≤ 11
2
3
4
5
6
⎪ 1
x i ≥ 0, i = 1,...,6
⎩
[min] f = 5 x1 + 4 x 2 + 3 x3
x1 + 2 x2 + 2 x3 ≤ 10
2 x1 + x2
≤8
2 x2 − x3 ≤ 8
x1, x2 , x3 ≥ 0 .
2.6. Determinarea unei baze initiale
⎧min c T x
⎪
Consideram forma standard ⎨ Ax = b .
⎪ x ≥ 0.
⎩
Dupa cum am vazut, algoritmul simplex necesită, pentru pornire, o soluţie admisibilă
de bază. Determinarea acesteia, atunci cand nu este matricea unitate, poate fi un proces de
lunga durata. De aceea, s-au dezvoltat mai multe metode care determina o solutie initiala de
baza pentru problema data. Una dintre aceste metode este metoda celor doua faze, pe care o
descriem succint in continuare.
Presupunem b ≥ 0 si, pentru simplificarea expunerii, consideram ca A nu contine
vectori coloana unitari.
Se construieste o noua PPL auxiliara:
⎧min( x n +1 + ... + x n + m )
⎪
a
, unde xi + n ,1 ≤ i ≤ m, sunt numite variabile artificiale , xa fiind
⎨ Ax + x = b,
⎪ x ≥ 0, x a ≥ 0,
⎩
vectorul de componente xi + n ,1 ≤ i ≤ m .
Pentru aceasta problema, matricea unitate I asociata variabilelor artificiale xa este o
baza primal admisibila, careia ii corespunde programul x = 0 , xa = b. De asemenea,
observam ca functia obiectiv a problemei auxiliare este marginita inferior pe multimea
programelor acestei probleme (un minorant este evident zero) si deci problema are solutii
optime. Se impune asadar rezolvarea problemei auxiliare cu algoritmul simplex primal,
deoarece o baza primal admisibila initiala este disponibila.
Daca optimul problemei auxiliare este strict pozitiv, atunci problema initiala nu are
solutie. In cazul in care optimul problemei auxiliare este este zero, atunci se preia tabelul
optim ca tabel initial pentru problema data. Cu alte cuvinte, baza optima a problemei auxiliare
furnizeaza o baza primal admisibila initiala pentru problema data. Aceasta inseamna ca
metoda descrisa consta in doua etape: in faza I se construieste problema auxiliara si se rezolva
cu simplex primal, iar in faza a doua, se rezolva problema initiala (data) tot cu algoritmul
simplex primal, luind ca baza de pornire, baza optima a problemei auxiliare. Adaugam faptul
ca la trecerea de la o faza la cealalta, se inceraca eliminarea din baza optima a variabilelor
artificiale xa , printr-o iteratie simplex obisnuita.
Exemplu Sa se rezolve problema de programare liniară:
(max ) f = 2x 1 + 3x 2
⎧3x 1 + x 2 ≤ 10
⎪
⎨ x 1 + 4x 2 ≥ 2
⎪⎩ x 1 , x 2 ≥ 0
Aducem mai intai problema la forma standard:
(max ) f = 2x 1 + 3x 2
⎧3x 1 + x 2 + x 3 = 10
⎪
⎨ x 1 + 4x 2 − x 4 = 2
⎪⎩ x 1 , x 2 , x 3 , x 4 ≥ 0
Observam ca termenii liberi sunt pozitivi şi exista deja o coloană a matricii unitate ⎛⎜ 10 ⎞⎟
⎝ ⎠
corespunzătoare variabilei x3. Pentru a obţine şi a doua coloană ⎛⎜ 10 ⎞⎟ , vom aplica metoda
⎝ ⎠
celor doua faze, care presupune introducerea unei variabile artificiale x5 cu coeficientul 1 în a
doua ecuaţie şi rezolvarea unei probleme auxiliare:
(min)g = x 5
3
x
⎧
1 + x 2 + x 3 = 10
⎪
⎨x 1 + 4x 2 − x 4 + x 5 = 2
⎪⎩ x 1 , x 2 , x 3 , x 4 , x 5 ≥ 0
Problema auxiliara se rezolva cu algoritmul simplex primal, luind ca variabile de baza
variabilele x3 si x5. Se obtin astfel în faza intai urmatoarele tabele simplex:
cB
0
1
xB
x3
x5
xB
10
2
2
cB
xB
0
x3
0
x2
xB
19
2
1
2
0
B
B
B
B
B
B
0
x1
3
1
1
1
0
x2
1
4
4
4
0
x3
1
0
0
0
0
x4
0
-1
-1
-1
1
X5
0
1
1
0
0
x1
11
4
1
4
0
0
x2
0
x3
0
1
1
0
0
0
0
x4
1
4
1
−
4
0
1
x5
1
−
4
1
4
-1
Constatam ca s-a obţinut optimul egal cu 0, ceea ce impune trecerea la faza a doua, în care
soluţia optima de bază (x3,x2) astfel obtinuta va fi soluţie iniţială pentru algoritmul simplex
aplicat problemei date. Practic, din tabelul optim al fazei intai, eliminăm coloana variabilei
artificiale x5 si înlocuim valorile coeficienţilor funcţiei obiectiv, ceea ce duce la recalcularea
liniei de jos a tabelului. Vom obtine astfel urmatorul tabel simplex:
2
3
0
0
cB
xB
xB
x1
x2
x3
x4
19
11
1
0
1
0
x3
2
4
4
1
1
1
−
1
0
3
x2
2
4
4
3
5
3
−
−
0
0
2
4
4
B
B
B
In continuare, se aplica simplex primal, algoritm
tabele:
2
cB
xB
xB
x1
0
x3
4
0
2
x1
2
1
4
0
B
B
B
cB
xB
0
x4
xB
4
3
10
3
20
3
B
2
B
x1
B
2
x1
0
1
0
ce conduce la urmatoarea succesiune de
3
x2
-11
4
5
0
x3
1
0
0
0
x4
3
-1
-2
3
x2
11
−
3
1
3
7
−
3
0
x3
1
3
1
3
2
3
0
x4
1
0
0
cB
0
3
B
xB
x4
x2
B
xB
38
10
30
B
2
x1
11
3
7
3
x2
0
1
0
0
x3
4
1
3
0
x4
1
0
0
Soluţia optimă a problemei date este deci x1 = 0 şi x2 = 10 care dă un maxim al
funcţiei egal cu 30.
Exercitii. Sa se aplice metoda celor doua faze pentru rezolvarea urmatoarelor PPL:
(max ) f = 2x 1 + x 2
⎧3x 1 − x 2 ≤ 11
,
⎪
⎨ x 1 + 4x 2 ≥ 2
⎪ x ,x ≥ 0
⎩ 1 2
[min] f = 5 x1 + 4 x 2 + 3x3
x1 + 2 x2 + 2 x3 ≤ 10
2 x1 + x2
≥5
2 x2 − x3 = 3
x1, x2 , x3 ≥ 0 .
Download