Sunteți pe pagina 1din 35

Bazele Cercetărilor Operaționale

- Curs 2-
Cuprins – Curs 2: Drumuri de valoare minimă

1. Preliminarii

2. Algoritmul Dijkstra

3. Exemple de aplicații

4. Recapitulare

camelia.delcea@csie.ase.ro 2
Urmează:

1. Preliminarii

1.1. Problema drumului de valoare minimă


1.2. Etichete și notații

camelia.delcea@csie.ase.ro 3
1. Preliminarii
1.1. Problema drumului de valoare minimă

Fie G = (V, E) un graf finit (orientat, neorientat sau parţial orientat).

Dacă e  E este o muchie cu extremităţile xi şi xj atunci această muchie are o orientare permisă
prin arcele (xi, xj) şi (xj, xi). În acest mod, un graf neorientat este tratat ca graf orientat G = (V, U).
În continuare, ne referim numai la grafuri orientate finite.

Dacă arcul u este dat prin extremităţile sale u = (xi, xj), cu xi, xj  V, valoarea arcului va fi dată prin
notaţiile v(xi, xj) sau vij.

Dacă u este o muchie în graful G = (V, E) atunci v(u) = v(xi, xj) = v(xj, xi), deci pe ambele sensuri
arcele au aceeaşi valoare

camelia.delcea@csie.ase.ro 4
1. Preliminarii
1.1. Problema drumului de valoare minimă

Pentru un drum  între nodul xi şi nodul xj , precizat prin specificarea arcelor componente, se
defineşte valoarea drumului  ca fiind suma valorilor arcelor componente:
v() =  vu  .
u

Din noţiunile introductive ştim că un drum este o succesiune de arce permise și orientate în
acelaşi sens, de la nodul iniţial al arcului u1 către nodul final al arcului uq.

Dacă u1 = (x0, x1), u2 = (x1, x2), ..., uq = (xq-1, xq) sunt arcele date prin extremităţile lor, atunci un
drum poate fi definit şi prin succesiunea de noduri:
 = (x0, x1, x2, ..., xq)
Nodul x0 este extremitatea de start a drumului  iar nodul xq extremitatea finală. Dacă
extremităţile sale coincid (x0 = xq) atunci drumul  este un circuit.

camelia.delcea@csie.ase.ro 5
1. Preliminarii
1.1. Problema drumului de valoare minimă

Un drum este elementar dacă nodurile sale sunt distincte (drumul trece o singură dată prin fiecare
nod al său).

Un drum este simplu dacă arcele sale sunt distincte (drumul trece o singură dată prin fiecare arc
al său). Evident, orice drum elementar este şi simplu. Reciproca nu este, în general, adevărată.

camelia.delcea@csie.ase.ro 6
1. Preliminarii
1.1. Problema drumului de valoare minimă

O problemă: determinarea unui drum elementar (sau a drumurilor elementare), între două noduri
date, de valoare minimă (sau de valoare maximă).

Dacă graful G nu este conex şi nodurile s şi t nu fac parte din aceeaşi componentă conexă sau
orientările pe arce nu permit atingerea nodului t din nodul s, există posibilitatea ca în graful G să
nu existe drumuri de la s la t.

camelia.delcea@csie.ase.ro 7
1. Preliminarii
1.2. Etichete și notații

Eticheta d(i)

Fie s nodul inițial al unui drum ce se dorește a fi aflat și t nodul terminal al acestuia.
Fiecărui nod din graf, i, i se va asocia o variabilă d(i) numită eticheta nodului i.

d(i) reţine valoarea unui drum de la s la i găsit de algoritm până în acel moment

Dacă algoritmul nu a găsit încă un drum de la s la i variabila d(i) are valoarea +∞.

La finalul aplicării metodei, eticheta indică valoarea celui mai „scurt” drum de la nodul s la nodul i.

Pe parcursul aplicării algoritmului etichetele se corectează în sensul micşorării valorilor lor. În


momentul în care o etichetă atinge valoarea minimă ea devine permanentă.

camelia.delcea@csie.ase.ro 8
1. Preliminarii
1.2. Etichete și notații

Indicatorul de precedență PRED(i)

Fiecărui nod din graf, i, iferit de s, i se va asocia o altă variabilă d(i) numită indicator de
precedență cu următoarea semnificaţie: în oricare moment al aplicării algoritmului:

PRED(i) conţine ultimul nod dinaintea lui i pe drumul de la s la i găsit de algoritm până
în acel moment.

Atâta timp cât un asemenea drum nu a fost găsit d(i) = +∞, indicatorul PRED(i) nu este definit el
fiind o locaţie vidă (PRED(i) = ø).

camelia.delcea@csie.ase.ro 9
1. Preliminarii
1.2. Etichete și notații

Listele P și T

În vederea aplicării algoritmului Dijkstra, se vor inițializqaa două liste după cum urmează:

• o listă P în care vom include toate nodurile i pentru care algoritmul a găsit un drum de valoare
minimă de la i la s (lista nodurilor cu eticheta declarată permanentă). La start P se reduce la
nodul de plecare s.
• o listă T în care vom include toate nodurile i care sunt vecine cu noduri din lista P: un nod j
este vecin cu i dacă arcul (i,j) este permis. T este lista nodurilor cu eticheta declarată
temporară.

camelia.delcea@csie.ase.ro 10
1. Preliminarii
1.2. Etichete și notații

Listele P și T

Nodurile cu etichetă permanentă din lista P se selectează din lista T a nodurilor candidate.
Corectarea unei etichete se face după următoarea schemă echivalentă:

camelia.delcea@csie.ase.ro 11
1. Preliminarii
1.2. Etichete și notații

Listele P și T

Dacă d(i) + v(i,j) < d(j) atunci primul drum are o valoare mai mică şi ca urmare va fi reţinut de
algoritm ca fiind cel mai bun drum de la s la j găsit până în acest moment.

Memorarea acestui nou drum se face prin corectarea etichetei d(j) care ia valoarea d(j) = d(i) +
v(i,j) şi actualizarea indicatorului de precedenţă PRED (j): PRED (j) = i.

camelia.delcea@csie.ase.ro 12
Urmează

2. Algoritmul Dijkstra
2.1. START
2.2. Cuprinsul unei iterații
2.3. Condiția de oprire
2.4. Observații

camelia.delcea@csie.ase.ro 13
2. Algoritmul Dijkstra
2.1. START

START: Iniţializăm:
P  s;
T  i V / există arcul permis s, i   U ;
d s   0 ; d i   vs, i  pentru i  T si d i    în rest;
PRED i   s pentru i  T şi PRED  j  nedefinit în rest.

camelia.delcea@csie.ase.ro 14
2. Algoritmul Dijkstra
2.2. Cuprinsul unei iterații

ITERAŢIE:
Pas 1: Dacă lista T e vidă, STOP: algoritmul a găsit toate nodurile ce pot fi atinse din s de-a lungul
unor drumuri de valoare minimă, toate nodurile sunt în lista P şi valorile minime ale drumurilor de la s la aceste
noduri sunt indicate de etichetele corespunzătoare. Identificarea drumului de valoare minimă se face cu ajutorul
indicatorului de precedenţă, din aproape în aproape, de la t (sau de la fiecare nod al grafului) către s.
Dacă T   se trece la pasul 2.
 
Pas 2: Se selectează nodul i   T cu proprietatea: d i   min d i , i  T 
Se transferă nodul i  din lista T în lista P ( i  devine nod cu eticheta permanentă). Drumul de la s la
i  găsit până în momentul selectării este un drum de valoare minimă. Se adaugă la lista T toate nodurile
 
j V  s care nu figurau în această listă, noduri adiacente lui i  pentru care există arcul i  , j U .

camelia.delcea@csie.ase.ro 15
2. Algoritmul Dijkstra
2.2. Cuprinsul unei iterații

 
Pas 3: Pentru fiecare nod j T , vecin cu i  se compară d  j  cu suma d (i* )  v i , j
  
- Dacă d i  v i , j  d  j  se trece la examinarea altui nod din T vecin cu i  ;
- Dacă d i   vi , j   d  j  se fac actualizările:
 

d  j   d i   vi , j  şi
 

PRED  j   i 
după care se trece la examinarea altui nod din lista T vecin cu i  .
După examinarea tuturor vecinilor lui i  din T se revine la Pasul 1 în cadrul unei noi iteraţii.

camelia.delcea@csie.ase.ro 16
2. Algoritmul Dijkstra
2.3. Condiția de oprire

STOP: Algoritmul se termină în următoarele situaţii:


 La Pasul 1: dacă lista T e vidă, T   ;
 La Pasul 2: Dacă ne interesează numai drumul de valoare minimă de la s la un nod t algoritmul descris
se termină în momentul în care nodul selectat este t : i  = t.

camelia.delcea@csie.ase.ro 17
2. Algoritmul Dijkstra
2.4. Observații

NOTĂ:
1) Dacă algoritmul se termină la Pasul 1 şi d(t) = +, în graful G NU există nici un drum de la s la
t (vezi situaţiile din figura 1.13).
2) Aplicarea Algoritmului Dijkstra nu rezolvă doar problema găsirii drumului de valoare minimă
de la s la t ci a TUTUROR drumurilor de valoare minimă de la s la toate celelalte noduri ale
grafului G.

camelia.delcea@csie.ase.ro 18
Urmează

3. Exemple de aplicații
3.1. Aplicația 1 - rezolvată
3.2. Aplicația 2
3.3. Aplicația 3
3.4. Aplicația 4 – rezolvată QM

camelia.delcea@csie.ase.ro 19
3. Exemple de aplicații
3.1. Aplicația 1 - rezolvată

Aplicaţi metoda DIJKSTRA pentru a determina drumurile de valoare minimă de la nodul s la


nodurile ce pot fi atinse din s în graful din figura de mai jos:

camelia.delcea@csie.ase.ro 20
3. Exemple de aplicații
3.1. Aplicația 1 - rezolvată

START: Iniţializăm:
 Listele P  s, T  x, y, z
 d s   0; d x  4, d  y   8, d z   3; d i    în rest;
 PRED i   s pentru i  T şi PRED  j  nedefinit în rest.

ITERAŢIA d(s) d(x) PRED(x) d(y) PRED d(z) PRED d(t) PRED d(w) PRED
(y) (z) (t) (w)
START 0* 4 s 8 s 3 s +∞ - +∞ -

camelia.delcea@csie.ase.ro 21
3. Exemple de aplicații
3.1. Aplicația 1 - rezolvată

Iteraţia 1: Se calculează min d i , i  T   min 4, 8, 3  3  i   z


Transferăm z din lista T în lista P: P  s, z şi includem în lista T nodul t care este vecin cu
i   z : T  x, y, t.
Examinăm toţi vecinii lui i   z din lista T: există un singur vecin, nodul t. Deoarece
d z   vz, t   3  3  6    d t  actualizăm d t   6 şi PRED t   z (valorile actualizate se
trec în tabelul 1 în linia ITERAŢIA 1, celelalte valori nu se modifică).

ITERAŢIA d(s) d(x) PRED(x) d(y) PRED d(z) PRED d(t) PRED d(w) PRED
(y) (z) (t) (w)
START 0* 4 s 8 s 3 s +∞ - +∞ -
IT 1 - 4 s 8 s 3* s 6 z +∞ -

camelia.delcea@csie.ase.ro 22
3. Exemple de aplicații
3.1. Aplicația 1 - rezolvată

Iteraţia 2: Se calculează min d i , i  T   min 4, 8, 6  4  i   x


Actualizăm listele P şi T: P  s, z, x, T  y, t
Observăm că vecinii lui i   x cu etichetă nepermanentă, adică y şi t sunt deja în lista T.
Trecem la corectarea – dacă este cazul – a etichetelor d  y  şi d t  :
 d x   vx, y   4  3  7  8  d  y   actualizăm: d  y   7 şi PRED  y   x
 d x   vx, t   4  1  5  6  d t   actualizăm d t   5 şi PRED t   x .
Celelalte etichete şi indicatori de precedenţă rămân neschimbaţi.

ITERAŢIA d(s) d(x) PRED(x) d(y) PRED d(z) PRED d(t) PRED d(w) PRED
(y) (z) (t) (w)
START 0* 4 s 8 s 3 s +∞ - +∞ -
IT 1 - 4 s 8 s 3* s 6 z +∞ -
IT 2 - 4* s 7 x - - 5 x +∞ -
camelia.delcea@csie.ase.ro 23
3. Exemple de aplicații
3.1. Aplicația 1 - rezolvată

Iteraţia 3: Calculăm min d i , i  T   7, 5  5  i   t .


Actualizăm P  s, z, x, t; T  y.
i   t nu are vecini cu etichetă nepermanentă, nici în T, nici în afara lui T.
În această iteraţie nu are loc nici o corectare de indicatori.

ITERAŢIA d(s) d(x) PRED(x) d(y) PRED d(z) PRED d(t) PRED d(w) PRED
(y) (z) (t) (w)
START 0* 4 s 8 s 3 s +∞ - +∞ -
IT 1 - 4 s 8 s 3* s 6 z +∞ -
IT 2 - 4* s 7 x - - 5 x +∞ -
IT 3 - - - 7 x - - 5* x +∞ -

camelia.delcea@csie.ase.ro 24
3. Exemple de aplicații
3.1. Aplicația 1 - rezolvată

Iteraţia 4: i  y
P  s, z, x, t , y; T  
i   y nu are nici un vecin cu etichetă nepermanentă.
STOP, pentru că T   .

ITERAŢIA d(s) d(x) PRED(x) d(y) PRED d(z) PRED d(t) PRED d(w) PRED
(y) (z) (t) (w)
START 0* 4 s 8 s 3 s +∞ - +∞ -
IT 1 - 4 s 8 s 3* s 6 z +∞ -
IT 2 - 4* s 7 x - - 5 x +∞ -
IT 3 - - - 7 x - - 5* x +∞ -
IT 4 - - - 7* x - - - - +∞ -
STOP 0 4* s 7 x 3 s 5 x +∞ -
camelia.delcea@csie.ase.ro 25
3. Exemple de aplicații
3.1. Aplicația 1 - rezolvată

Drumurile de valoare minimă se construiesc cu ajutorul indicelui de precedenţă şi sunt vizualizate în figura
următoare

camelia.delcea@csie.ase.ro 26
3. Exemple de aplicații
3.2. Aplicația 2

O firmă de mesageria oferă servicii de transport către 11 centre de livrare. Posibilitățile de


transport precum și costurile aferente au fost reprezentate în graful de mai jos:
Să se găsească cele mai ieftine trasee de la firmă la fiecare dintre cele 11 centre de livrare.

camelia.delcea@csie.ase.ro 27
3. Exemple de aplicații
3.3. Aplicația 3
Se dă graful de mai jos.
Să se găsească drumul de valoare minimă de la vârful v1 la vârful v9.

camelia.delcea@csie.ase.ro 28
3. Exemple de aplicații
3.3. Aplicația 4
Se dă graful de mai jos.
Să se găsească drumul de valoare minimă de la nodel 5 la nodul 4.

camelia.delcea@csie.ase.ro 29
3. Exemple de aplicații
3.3. Aplicația 4

Rezolvare utilizând QM:

camelia.delcea@csie.ase.ro 30
3. Exemple de aplicații
3.3. Aplicația 4

Rezolvare utilizând QM:

camelia.delcea@csie.ase.ro 31
3. Exemple de aplicații
3.3. Aplicația 4

Rezolvare utilizând QM:

camelia.delcea@csie.ase.ro 32
3. Exemple de aplicații
3.3. Aplicația 4

Rezolvare utilizând QM:

camelia.delcea@csie.ase.ro 33
4. Recapitulare
Despre ce am discutat astăzi?

• Algoritmul Dijkstra
• Circuit
• Distanța de la nodul inițial la nodul curent, i: d(i)
• Drum elementar
• Drum simplu
• Lista nodurilor permanente, P
• Lista nodurilor temporare, T
• Predecesorul nodului i: PRED(i)

camelia.delcea@csie.ase.ro 34
Mulțumesc!

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