Documente Academic
Documente Profesional
Documente Cultură
Curs Programare
Curs Programare
Cercetari operationale
October 6, 2009
Regula dreptunghiului
Regula dreptunghiului reprezintă un algoritm de reducere a coloanelor unei
matrici pentru a obţine o formă simplificată, echivalentă a acesteia. O
coloană este redusă dacă are toate elementele egale cu 0, mai puţin unul
egal cu 1. Elementul pe a cărui poziţie va ramâne valoarea 1 se numeşte
element pivot. Regula dreptunghiului implementează o succesiune de
transformări liniare pe linii.
Regula dreptunghiului:
1 Se alege un element pivot diferit de zero. Acesta se marchează prin
ı̂ncercuire. Fie (i, j ) poziţia acestuia.
Regula dreptunghiului:
1 Se alege un element pivot diferit de zero. Acesta se marchează prin
ı̂ncercuire. Fie (i, j ) poziţia acestuia.
2 Elementele de pe coloana pivotului vor deveni 0.
Regula dreptunghiului:
1 Se alege un element pivot diferit de zero. Acesta se marchează prin
ı̂ncercuire. Fie (i, j ) poziţia acestuia.
2 Elementele de pe coloana pivotului vor deveni 0.
3 Elementele de pe linia pivotului se ı̂mpart la elementul pivot.
Regula dreptunghiului:
1 Se alege un element pivot diferit de zero. Acesta se marchează prin
ı̂ncercuire. Fie (i, j ) poziţia acestuia.
2 Elementele de pe coloana pivotului vor deveni 0.
3 Elementele de pe linia pivotului se ı̂mpart la elementul pivot.
4 Restul elementelor matricii se calculează după regula dreptunghiului,
adică:
aij alk − alj aik
alk ←
aij
unde alj si aik reprezintă ’colţurile’ dreptunghiului format din
elementul pivot aij şi elementul de calculat alk după cum se vede ı̂n
figura de mai jos.
Regula dreptunghiului:
1 Se alege un element pivot diferit de zero. Acesta se marchează prin
ı̂ncercuire. Fie (i, j ) poziţia acestuia.
2 Elementele de pe coloana pivotului vor deveni 0.
3 Elementele de pe linia pivotului se ı̂mpart la elementul pivot.
4 Restul elementelor matricii se calculează după regula dreptunghiului,
adică:
aij alk − alj aik
alk ←
aij
unde alj si aik reprezintă ’colţurile’ dreptunghiului format din
elementul pivot aij şi elementul de calculat alk după cum se vede ı̂n
figura de mai jos.
Exemplu
Programare liniară
Formularea problemei canonice.
Programare liniară
Formularea problemei canonice.
Programare liniară
Formularea problemei canonice.
Programare liniară
unde
a11 a12 ... a1n
a21 a22 ... a2n
A =
...
, X = (x1 , x2 , ..., xn )
... ... ...
am1 am2 ... amn
şi C = (c1 , c2 , ..., cn ).
Problema generală
Problema generală
Problema generală
Problema generală
Problema generală
Problema generală
Problema generală
Algoritmul simplex
Algoritmul simplex
Algoritmul simplex
Algoritmul simplex
Algoritmul simplex
unde
α1 ,m+1 > 0,
β1 βi
= min ,
α1 ,m+1 αi ,m+1
cu
αi ,m+1 > 0.
Algoritmul simplex
Care sunt valorile funcţiei obiectiv pentru cele două soluţii admisibile de
bază?
f (X1 )
f (X2 )
adică:
Algoritmul simplex
f (X1 ) = C1 β1 + C2 β2 + ... + Cm βm .
β1
f (X2 ) = C2 β2 − α2 ,m+1 + ...
α1 ,m+1
β1
... + Cm βm − αm ,m+1 + ...
α1 ,m+1
β1
... + Cm+1 .
α1 ,m+1
Algoritmul simplex
β1
f (X2 ) = C2 β2 + ... + Cm βm + Cm+1 −
α1 ,m+1
β1
− (C2 α2 ,m+1 +... + Cm αm ,m+1 ).
α 1 ,m + 1
Algoritmul simplex
f (X2 ) = f (X1 ) − C1 β1 +
β1
+ [Cm+1 − (C2 α2 ,m+1 +...
α1 ,m+1
... + Cm αm ,m+1 )]
Algoritmul simplex
Mai departe:
β1
f (X2 ) = f (X1 ) + ·
α 1 ,m + 1
not. fm+1
z }| {
· Cm+1 − C1 α1 ,m+1 +C2 α2 ,m+1 +... + Cm αm ,m+1
Algoritmul simplex
Aşadar
β1
f (X2 ) = f (X1 ) + (Cm+1 − fm+1 ) .
α1 ,m+1
Când e X2 soluţie mai bună decât X1 ? Atunci când
β1
(Cm+1 − fm+1 ) > 0
α1 ,m+1
Algoritmul simplex
Dar
β1
≥0
α 1 ,m + 1
aşa că trebuie să avem:
( Cm + 1 − fm + 1 ) > 0
adică
Cm+1 > fm+1 .
Algoritmul simplex
Cj − fj ≤ 0, ∀j = 1, n
(condiţiile de optimalitate)
Algoritmul simplex
Algoritmul simplex
Situatii speciale 1
Maxim ∞:
Dacă există o singură coloană pentru care diferenţa cj − fj e pozitivă iar
elementele coloanei sunt negative ı̂nseamnă că maximul funcţiei e infinit.
Situaţii speciale 2
Solutii degenerate
Dacă avem de ales ı̂ntre două rapoarte minime egale se aplică ordonarea
lexicografică:
se compară elmentele celor 2 linii pentru care rapoartele sunt egale,
fiecare ı̂mparţit la potenţialul pivot
Situaţii speciale 2
Solutii degenerate
Dacă avem de ales ı̂ntre două rapoarte minime egale se aplică ordonarea
lexicografică:
se compară elmentele celor 2 linii pentru care rapoartele sunt egale,
fiecare ı̂mparţit la potenţialul pivot
comparaţia se face luând ı̂n considerare ordonarea lexicografică, adică
se compară componentele celor 2 linii două câte 2 ı̂ncepând de la
stânga spre dreapta
Situaţii speciale 2
Solutii degenerate
Dacă avem de ales ı̂ntre două rapoarte minime egale se aplică ordonarea
lexicografică:
se compară elmentele celor 2 linii pentru care rapoartele sunt egale,
fiecare ı̂mparţit la potenţialul pivot
comparaţia se face luând ı̂n considerare ordonarea lexicografică, adică
se compară componentele celor 2 linii două câte 2 ı̂ncepând de la
stânga spre dreapta
se alege pivotul de pe linia pe care apare primul element mai mic
decât corespondentul său de pe cealaltă linie.
Situaţii speciale 2
Solutii degenerate
Dacă avem de ales ı̂ntre două rapoarte minime egale se aplică ordonarea
lexicografică:
se compară elmentele celor 2 linii pentru care rapoartele sunt egale,
fiecare ı̂mparţit la potenţialul pivot
comparaţia se face luând ı̂n considerare ordonarea lexicografică, adică
se compară componentele celor 2 linii două câte 2 ı̂ncepând de la
stânga spre dreapta
se alege pivotul de pe linia pe care apare primul element mai mic
decât corespondentul său de pe cealaltă linie.
soluţia obţinută este degenerată
Situaţii speciale 3
Soluţii multiple
Atunci când numărul zerourilor de pe linia cj − fj ı̂n cazul unei soluţii
optime este mai mare decât numărul necunoscutelor principale
ı̂nseamnă că problema poate avea mai multe soluţii optime care se
determină alegând element pivot pe rând de pe coloanele respective.
Situaţii speciale 3
Soluţii multiple
Atunci când numărul zerourilor de pe linia cj − fj ı̂n cazul unei soluţii
optime este mai mare decât numărul necunoscutelor principale
ı̂nseamnă că problema poate avea mai multe soluţii optime care se
determină alegând element pivot pe rând de pe coloanele respective.
Soluţia generala a problemei se scrie ca şi combinaţie liniară convexă
a soluţiilor determinate.
Situaţii speciale 4
Problemă de minim
Dacă se cere minimizarea funcţiei scop singura modificare apare la
condiţia de optimalitate: cj − fj ≥ 0, ∀j = 1, 2, ..., n
Se alege pivot de pe coloana pe care diferenţa cj − fj este cea mai
mare in modul.
Formularea economică
Formularea economică
Formularea matematică
Formularea matematică
Conditia de echilibru
m n
∑ ai = ∑ bj
i =1 j =1
Formularea matematică
Conditia de echilibru
m n
∑ ai = ∑ bj
i =1 j =1
Rezolvarea problemei
Algoritmul distributiv
Pentru rezolvarea problemei enunţate se va formula un algoritm numit
algoritmul distributiv, etapele căruia se parcurg comod prin considerarea
unui tabel asociat problemei de transport. În tabelul cu două intrări se
evidenţiază pe linii datele referitoare la furnizori şi pe coloane se
evidenţiază datele referitoare la beneficiari.
Rezolvarea problemei
Algoritmul distributiv
Pentru rezolvarea problemei enunţate se va formula un algoritm numit
algoritmul distributiv, etapele căruia se parcurg comod prin considerarea
unui tabel asociat problemei de transport. În tabelul cu două intrări se
evidenţiază pe linii datele referitoare la furnizori şi pe coloane se
evidenţiază datele referitoare la beneficiari.
Bj
cij ui + vj
Fi
± xij
Rezolvarea problemei
Rezolvarea problemei
cu condiţia de echilibru:
m n
∑ ai = ∑ bj
i =1 j =1
Rezolvarea problemei
Rezolvarea problemei.
Exemplu
La doi furnizori se află acelaşi tip de produs ı̂n cantităţile: 80 buc. la primul (F1 )
şi 140 buc. la al doilea (F2 ). Trei beneficiari solicită acest produs ı̂n cantităţile
60, 90, 70. Costurile unitare de transport sunt prezentate ı̂n matricea:
2 3 5
C =
4 1 2
Rezolvarea problemei
xij ≥ 0 i = 1, 2, j = 1, 3
f = 2 x11 + 3 x12 + 5x13 + 4x21 + x22 + 2x23 → min
Rezolvarea problemei
B F B1 B2 B3 Cant
2 3 5
Fi 80
x11 x12 x13
4 1 2
F2 140
x21 x22 x23
Cant 60 90 70 230230
Rezolvarea problemei
Rezolvarea problemei
Rezolvarea problemei
Rezolvarea problemei
Rezolvarea problemei
Rezolvarea problemei
Algoritmul distributiv:
Etapa 1. Se determină o soluţie iniţială de bază.
Rezolvarea problemei
Algoritmul distributiv:
Etapa 1. Se determină o soluţie iniţială de bază.
Etapa 2. Se verifică optimalitatea soluţiei.
Rezolvarea problemei
Algoritmul distributiv:
Etapa 1. Se determină o soluţie iniţială de bază.
Etapa 2. Se verifică optimalitatea soluţiei.
Etapa 3. Se ı̂mbunătăţeşte soluţia.
Rezolvarea problemei
Algoritmul distributiv:
Etapa 1. Se determină o soluţie iniţială de bază.
Etapa 2. Se verifică optimalitatea soluţiei.
Etapa 3. Se ı̂mbunătăţeşte soluţia.
Etapa 4. Se repetă etapele 2,3 până când toate condiţiile de optimalitate
vor fi ı̂ndeplinite.
Rezolvarea problemei
Algoritmul distributiv:
Etapa 1. Se determină o soluţie iniţială de bază.
Etapa 2. Se verifică optimalitatea soluţiei.
Etapa 3. Se ı̂mbunătăţeşte soluţia.
Etapa 4. Se repetă etapele 2,3 până când toate condiţiile de optimalitate
vor fi ı̂ndeplinite.
Etapa 5. Se scrie soluţia optimă şi se calculează valoarea minimă a lui f .
Verificarea optimalitatii
Verificarea optimalitatii
Condiţia de optimalitate:
după rezolvarea sistemului trebuie să aibă loc inegalităţile:
Verificarea optimalitatii
Condiţia de optimalitate:
după rezolvarea sistemului trebuie să aibă loc inegalităţile:
Exemplu
Rezolvarea problemei
Etapa 3.
Dacă cel puţin o condiţie de optimalitate nu este ı̂ndeplinită
ci0 j0 < ui0 + vj0 ı̂nseamnă că soluţia nu este optimă şi ea trebuie
ı̂mbunătăţită ı̂n sensul că necunocuta secundară xi0 j0 care e zero, trebuie
să devină necunoscută principală. Aceasta se realizează prin adunarea la
zero a unei cantităţi α unde α se determină astfel ı̂ncât toate ecuaţiile care
au necunoscuta xi0 j0 să rămână satisfăcute, xi0 j0 = 0 + α.
Rezolvarea problemei
Dacă se adună α ı̂ntr-un loc atunci α trebuie să se scadă din alt loc.
Rezolvarea problemei
Dacă se adună α ı̂ntr-un loc atunci α trebuie să se scadă din alt loc.
Scăderile se vor putea face doar de la necunoscutele care au valori
pozitive (sunt necunoscute principale).
Rezolvarea problemei
Dacă se adună α ı̂ntr-un loc atunci α trebuie să se scadă din alt loc.
Scăderile se vor putea face doar de la necunoscutele care au valori
pozitive (sunt necunoscute principale).
operaţiile de adunare / scădere se vor face ı̂ntr-un aşa zis ,,ciclu de
căsuţe” format dintr-o succesiune de căsuţe, prima de la care se
pleacă fiind căsuţă liberă, toate celelalte fiind căsuţe ocupate.
Rezolvarea problemei
Dacă se adună α ı̂ntr-un loc atunci α trebuie să se scadă din alt loc.
Scăderile se vor putea face doar de la necunoscutele care au valori
pozitive (sunt necunoscute principale).
operaţiile de adunare / scădere se vor face ı̂ntr-un aşa zis ,,ciclu de
căsuţe” format dintr-o succesiune de căsuţe, prima de la care se
pleacă fiind căsuţă liberă, toate celelalte fiind căsuţe ocupate.
În acest mod se obţine o nouă soluţie care este mai bună decât
vechea soluţie, adică valoarea funcţiei pentru noua soluţie este mai
mică decât valoarea funcţiei pentru soluţia anterioară.
Exemplu
v1 = 1 v2 = 5 v3 = 10
4 4 2 8 3 13
u1 = 3 100
100 · ·
1 1 5 5 2 10
u2 = 0 300 250
50 − 250 + ·
3 −2 2 2 7 7
u3 = −3 200
· + 0 − 200
150 250 200
50
Cazuri speciale
Solutii degenerate
Daca la calculearea solutiei initiale, la un furnizor si la un beneficiar se
epuizeaza, respectiv se completeaza cantitatile in acelasi timp pentru
a se evita ’pierderea’ unei necunoscute principale, una din casutele de
pe coloana sau linia respectiva se va completa cu 0 si va fi
considerata casuta ocupata;
Cazuri speciale
Solutii degenerate
Daca la calculearea solutiei initiale, la un furnizor si la un beneficiar se
epuizeaza, respectiv se completeaza cantitatile in acelasi timp pentru
a se evita ’pierderea’ unei necunoscute principale, una din casutele de
pe coloana sau linia respectiva se va completa cu 0 si va fi
considerata casuta ocupata;
Daca in cadrul unui ciclu de casute avem mai multe valori minime
egale in casutele cu semn negativ, doar una din ele va deveni casuta
libera, restul fiind completate cu zerouri si considerate casute
principale.
Cazuri speciale
Solutii degenerate
Daca la calculearea solutiei initiale, la un furnizor si la un beneficiar se
epuizeaza, respectiv se completeaza cantitatile in acelasi timp pentru
a se evita ’pierderea’ unei necunoscute principale, una din casutele de
pe coloana sau linia respectiva se va completa cu 0 si va fi
considerata casuta ocupata;
Daca in cadrul unui ciclu de casute avem mai multe valori minime
egale in casutele cu semn negativ, doar una din ele va deveni casuta
libera, restul fiind completate cu zerouri si considerate casute
principale.
Daca unul din cazurile de mai sus apare, solutia obtinuta va fi
degenerata (vom avea necunoscute principale cu valoarea 0).
Cazuri speciale
Solutii degenerate
Daca la calculearea solutiei initiale, la un furnizor si la un beneficiar se
epuizeaza, respectiv se completeaza cantitatile in acelasi timp pentru
a se evita ’pierderea’ unei necunoscute principale, una din casutele de
pe coloana sau linia respectiva se va completa cu 0 si va fi
considerata casuta ocupata;
Daca in cadrul unui ciclu de casute avem mai multe valori minime
egale in casutele cu semn negativ, doar una din ele va deveni casuta
libera, restul fiind completate cu zerouri si considerate casute
principale.
Daca unul din cazurile de mai sus apare, solutia obtinuta va fi
degenerata (vom avea necunoscute principale cu valoarea 0).
Cazuri speciale
Solutii degenerate
Daca la calculearea solutiei initiale, la un furnizor si la un beneficiar se
epuizeaza, respectiv se completeaza cantitatile in acelasi timp pentru
a se evita ’pierderea’ unei necunoscute principale, una din casutele de
pe coloana sau linia respectiva se va completa cu 0 si va fi
considerata casuta ocupata;
Daca in cadrul unui ciclu de casute avem mai multe valori minime
egale in casutele cu semn negativ, doar una din ele va deveni casuta
libera, restul fiind completate cu zerouri si considerate casute
principale.
Daca unul din cazurile de mai sus apare, solutia obtinuta va fi
degenerata (vom avea necunoscute principale cu valoarea 0).
Observatie
Numarul necunoscutelor principale trebuie sa fie constant (m + n − 1).
Rodica Ioana LUNG () Cercetari operationale October 6, 2009 52 / 52