transport grafuri

17
Lucrarea 8. Aplicaţii ale teoriei grafurilor la rezolvarea problemelor de transport 8.1 Generalităţi Aplicând teoria grafurilor se pot rezolva o multitudine de probleme care implică reţele de transport ca de exemplu: - problema comis voiajorului; - problema drumului de cost minim; - problema fluxului maxim; - problema arborelui de valoare optimă; - probleme de afectare. 8.1.1. Drumuri de valoare optimă într-un graf Probleme de transport ca: lungimea drumului minim dintre două localităţi, costul parcurgerii unei rute, capacitatea transportată pe o rută au ca rezolvare optimizarea drumurilor într-un graf. Din cauza varietăţii nelimitate, în general, a grafurilor, nu există un algoritm care să rezolve orice problemă în timp util, dar s-au elaborat o mulţime de algoritmi, fiecare fiind cel mai eficace pentru anumite cazuri. A. Algoritmul Bellman – Kalaba Algoritmul se aplică în cazul unor grafuri finite fără circuite de valoare negativă (pentru problema de minim) sau fără circuite de valoare pozitivă (pentru problema de maxim) şi găseşte drumurile de valoare minimă (maximă) de la toate nodurile grafului la un nod oarecare, fixat. Dacă se doreşte determinarea drumurilor de valoare minimă (maximă) între oricare două noduri se aplică algoritmul, pe rând, pentru fiecare nod al grafului.

Upload: dragos-nicu

Post on 21-Jan-2016

178 views

Category:

Documents


5 download

TRANSCRIPT

Page 1: Transport Grafuri

Lucrarea 8. Aplicaţii ale teoriei grafurilor la rezolvarea problemelor de transport

8.1 Generalităţi

Aplicând teoria grafurilor se pot rezolva o multitudine de probleme care implică reţele de transport ca de exemplu:

- problema comis voiajorului;- problema drumului de cost minim;- problema fluxului maxim;- problema arborelui de valoare optimă;- probleme de afectare.

8.1.1. Drumuri de valoare optimă într-un graf

Probleme de transport ca: lungimea drumului minim dintre două localităţi, costul parcurgerii unei rute, capacitatea transportată pe o rută au ca rezolvare optimizarea drumurilor într-un graf.

Din cauza varietăţii nelimitate, în general, a grafurilor, nu există un algoritm care să rezolve orice problemă în timp util, dar s-au elaborat o mulţime de algoritmi, fiecare fiind cel mai eficace pentru anumite cazuri.

A. Algoritmul Bellman – KalabaAlgoritmul se aplică în cazul unor grafuri finite fără circuite de valoare

negativă (pentru problema de minim) sau fără circuite de valoare pozitivă (pentru problema de maxim) şi găseşte drumurile de valoare minimă (maximă) de la toate nodurile grafului la un nod oarecare, fixat. Dacă se doreşte determinarea drumurilor de valoare minimă (maximă) între oricare două noduri se aplică algoritmul, pe rând, pentru fiecare nod al grafului.

Formularea problemei este următoarea: fiind dat un graf valuat G (X, A, p) şi un vârf fixat xn X se cere să se determine drumul ˝d˝ de la un vârf oarecare x i la vârful xn pentru care valoarea drumului, p(d) să fie minimă.

Algoritmul care rezolvă această problemă foloseşte următoarele noţiuni şi propoziţii (care nu vor fi demonstrate);

- matricea extinsă a valorilor arcelor, V vijƒ unde:

(8.1)

- mi(k) – valoarea minimă a drumului d de la xi la xh considerat în mulţimea

drumurilor de cel mult k arce;

Page 2: Transport Grafuri

- mi – valoarea minimă a drumului de la xi la xh considerat în mulţimea tuturor drumurilor, indiferent de numărul de arce.

Propoziţia 1: Pentru orice k N*:

(8.2)

Propoziţia 2: Dacă există k N* pentru care mi(k) mi

(k1 ) pentru orice ,

atunci:

a) (8.3)

b) (8.4)

Din cele de mai sus rezultă următorul algoritm pentru determinarea vectorului

:

1. Se construieşte matricea V pentru graful dat.

2. Se adaugă matricei V liniile suplimentare , astfel:

a. Linia coincide cu , adică ;

b. Presupunând completată linia se completează linia

conform propoziţiei 1;

c. Se continuă aplicarea pasului 2. b până la obţinerea a două linii ,

identice.

3. Se adună linia i din V cu linia urmărindu-se rezultatul minim care

se poate obţine; să presupunem că acesta este:

(8.5)

atunci primul arc din drumul minim de la xi la xn este (xi, xj); în continuare se adună

linia j din V cu reţinând noua valoare minimă aflată pe coloana k – al

doilea arc este (xj, xk) ş.a.m.d.

Observaţie:În cazul rezolvării unei probleme de maxim algoritmul se modifică astfel:- relaţia (8.1) devine:

(8.1’)

- relaţia (8.2) devine:

(8.2’)

Observaţie: Pentru rezolvarea aceleiaşi probleme mai este cunoscut algoritmul lui Ford generalizat şi Ford simplificat. De asemenea sunt accesibile pachete de programe ca de exemplu AB/QM sau WINQSB care rezolvă astfel de probleme.

Page 3: Transport Grafuri

Exemplul 1. În graful din figura 8.1 nodurile reprezintă 5

localităţi iar valorile arcelor - costul transportului unei mărfi între localităţile respective. Se cere determinarea rutei pentru care costul transportului de la x1 la x5

să fie minim.

Figura 8.1. Graful transporturilor de marfă între 5 localităţi

Primii doi paşi ai algoritmului Kruskal au fost aplicaţi pentru completarea tabelului 8.1.

Tabelul 8.1. Realizarea tabelului pentru rezolvarea algoritmului Kruskal – drum de valoare minimă

X1 X2 X3 X4 X5

X1 0 2 8 2X2 0 12 2X3 9 0 3 1X4 0 10X5 0

mi(1) 2 1 10 0

mi(2) 4 2 1 10 0

mi(3) 4 2 1 10 0

Pasul 3. La această etapă aplicarea algoritmului conduce cu uşurinţă la determinarea drumului de valoare minimă format din arcele (x1, x2) şi (x2, x5)

Acelaşi rezultat se obţine şi prin scrierea şi rularea modelului folosind modulul Network Modeling/Shortest Path Problem din pachetul de programe WINQSB aşa cum se poate uşor urmării în imaginile din figura 8.2.

Exemplul 2. Considerând acelaşi graf din figura 8.1, în care nodurile reprezintă staţiile de încărcare ale unei reţele de transport iar valorile arcelor - capacităţile de transport între staţii, se pune problema determinării drumului de capacitate maximă de la staţia x1 la staţia x5.

X4

X5

2

8

2

9

3

12

1

2

10

X1

X2

X3

Page 4: Transport Grafuri

a. fereastra iniţială pentru introducerea datelor sub formă tabelară

b. fereastra secundară pentru stabilirea nodurilor, iniţial şi final

c. soluţia complexă a problemei sub formă tabelară

d. drumul de valoare minimă sub formă tabelarăFigura 8.2. Rezolvarea problemei folosind modulul

Network Modeling/Shortest Path Problem din pachetul de programe WINQSB

Tabelul 8.2. Realizarea tabelului pentru rezolvarea algoritmului Kruskal – drum de valoare maximă

X1 X2 X3 X4 X5

X1 0 2 8 2 -X2 - 0 - 12 2X3 - 9 0 3 1X4 - - - 0 10X5 - - - - 0

mi(1) - 2 1 10 0

mi(2) 12 22 13 10 0

mi(3) 24 22 31 10 0

mi(4) 39 22 31 10 0

mi(5) 39 22 31 10 0

Page 5: Transport Grafuri

Paşii 1 şi 2 ai algoritmului au condus la datele din tabelul 8.3 iar aplicarea pasului 3 conduce la drumul de valoare maximă: d (x1, x3), (x3, x2), (x2, x4), (x4, x5)

8.1.2. Arbori de valoare optimă

Studiul arborilor este justificat de existenţa în practică a unui număr mare de probleme care pot fi modelate astfel, ca de exemplu:

- construirea unor reţele de aprovizionare (apă, energie, gaze etc.) a unor puncte de consum de la un punct central;

- construirea unor căi de acces (comunicaţie) între mai multe puncte izolate; - desfăşurarea unui joc strategic;- luarea deciziilor în mai multe etape (arbori decizionali);- organigramele întreprinderilor.În toate aceste probleme se doreşte ca, dintre muchiile unui graf valuat

neorientat, să se extragă arborele optim (minim/maxim).

8.1.3. Algoritmul Kruskal

Problema pe care o rezolvă acest algoritm este următoarea: fiind dat un graf G neorientat, conex şi valuat se urmăreşte extragerea din G a unui arbore parţial pentru care suma valorilor muchiilor să fie minimă.

Pentru simplificare se presupune, iniţial că între oricare două vârfuri ale grafului G există o muchie şi că toate valorile muchiilor sunt diferite două câte două. Fie A a1, a2,..., am iar valoarea muchiei aj este p (aj) pj. Vom presupune că p1 p2 ... pm. La această situaţie se poate ajunge prin renumerotarea nodurilor şi a muchiilor.

Algoritmul Kruskal pentru determinarea arborelui minimal are următorii paşi:1. Se alege muchia a1 de valoare minimă2. Se alege muchia a2 de valoare minimă din mulţimea muchiilor rămase3. Fie S a1, a24. Dintre muchiile rămase se alege muchia de valoare minimă care nu

formează cicluri cu muchiile din S. Dacă nu există o muchie a r atunci algoritmul se încheie şi soluţia problemei este S. Dacă există o muchie ar se trece la pasul următor

5. Se stabileşte noua valoare a lui şi se reia algoritmul de la

pasul 4 până când se ating toate vârfurile grafului

Observaţie Pentru probleme de maxim în algoritm se înlocuieşte minim cu maxim.

Page 6: Transport Grafuri

Exemplul 3. Pentru graful neorientat valuat din figura 8.3, care reprezintă a reţea de distribuţie iar valorile arcelor – costul transportului, se cere determinarea arborelui minimal.

Pentru aplicarea algoritmului se face o re-notare a mulţimii arcelor astfel:

Figura 8.3. Exemplu de graf neorientat valuat

Aplicarea algoritmului conduce cu uşurinţă la arborele minimal

de valoare p(S) 13.

Acelaşi rezultat se obţine şi prin scrierea şi rularea modelului folosind modulul Network Modeling/Minimal Spaning Tree Problem din pachetul de programe WINQSB aşa cum se poate uşor urmării în imaginile următoare.

a. fereastra iniţială pentru introducerea datelor sub formă tabelară

b. soluţia problemei sub formă tabelarăFigura 8.4. Rezolvarea problemei folosind modulul Network Modeling/Minimal

Spaning Tree Problem din pachetul de programe WINQSB

8.1.3. Flux maxim într-o reţea de transport

Un graf orientat valuat G (X, U, c) se numeşte reţea de transport dacă satisface următoarele condiţii:

a. există un vârf unic a X în care nu intră nici un arc sau -(a) unde -(a) este mulţimea arcelor care intră în vârful a;

b. există un vârf unic b X din care nu iese nici un arc, sau (b) unde (b) este mulţimea arcelor care ies din b;

c. G este conex şi există drumuri de la a la b.

3

X2

6

8

7

5

1 2

94

X3X1

X5 X4

Page 7: Transport Grafuri

Vârful a se numeşte intrarea reţelei, vârful b - ieşirea reţelei, iar numărul nenegativ c(u) se numeşte capacitatea arcului u U.

Definiţie O funcţie f: U R, astfel încât f(u) 0, () uU se numeşte flux în reţeaua de transport G cu capacitatea c, dacă sunt îndeplinite condiţiile:

C. condiţia de conservare a fluxului:Pentru () xX cu x ≠ a, x ≠ b, suma fluxurilor pe arcele care intră în x este

egală cu suma fluxurilor pe arcele care ies din x, adică:

(8.6)

M. condiţia de mărginire a fluxului:Pentru orice arc al reţelei, valoarea fluxului nu poate depăşi capacitatea

arcului respectiv: (8.7)

Exemplul 4. Se dă mulţimea nodurilor:

, şi cea a arcelor:

u u1 u2 u3 u4 u5 u6 u7 u8 u9 u10 u11 u12 u13 u14

c(u) 10 8 7 2 5 2 3 4 3 1 8 6 5 4

f(u) 8 4 3 2 5 2 3 2 3 0 1 4 5 3

Figura 8.5. Exemplu de graf orientat valuat

Definiţie: Pentru orice mulţime de vârfuri A X se defineşte o tăietură de suport A prin mulţimea arcelor care intră în mulţimea A şi se notează:

(8.8)

Similar se defineşte mulţimea arcelor care ies din A:

(8.9)

2 (4)

1

2

3

4

5

6

b

8 (10)

4 (8)

5 (5)

3 (7)

2 (2)

2 (2)

3 (3)

3 (3)0 (1)

4 (6)

5 (5)

3 (4)1(8)

a

Page 8: Transport Grafuri

Capacitatea tăieturii de suport A, -(A), se notează cu c(-(A)) şi este egală cu suma capacităţilor arcelor care fac parte din tăietura considerată:

(8.10)

În problemele de determinare a fluxului maxim într-o reţea de transport se lucrează cu tăieturi care conţin <ieşirea reţelei> (b) şi nu conţin <intrarea reţelei> (a).

Figura 8.6. Exemplu de graf orientat valuat

Exemplul 5. Se dau nodurile din tăietura suport: A = {3,4,5,b}, mulţimea arcelor care intră în tăietura suport: ω-(A) = {(1,4), (1,3), (2,3), (6,b)} şi mulţimea arcelor care ies din tăietura suport: ω+(A) = {(5,6)}.

Rezolvare:Ţinând cont de datele iniţiale rezultă capacitatea tăieturii suport:c(ω-(A)) = 5 + 7 + 2 + 4 = 18.

Teorema 1. Fiind dată o reţea de transport cu intrarea a şi ieşirea b şi un flux f, are loc egalitatea:

(8.11)

unde fb este fluxul la ieşirea reţelei.Teorema, care arată că fluxul la intrarea în reţea este egal cu cel de la ieşirea

din reţea, se demonstrează, evident, ţinând seama de condiţia conservării fluxului.

Teorema 2. Pentru o reţea de transport G (X,U,c) cu intrarea a şi ieşirea b şi un flux f:

(8.12)

unde A X, a A, b A.Această teoremă arată că fluxul la ieşirea din reţeaua de transport este egal

cu suma fluxurilor tăieturii de suport A minus suma fluxurilor pe arcele care ies din mulţimea A de vârfuri şi este mai mică cel mult egală cu capacitatea tăieturii de suport A.

1

2

3

4

6

8 (10)

4 (8)

5 (5)

3 (7)

2 (2)

2 (4)

2 (2)

3 (3)

3 (3)0 (1)

4 (6)

5 (5)

3 (4)1(8)

5 ba

Page 9: Transport Grafuri

Exemplul 6. Pentru graful din figura 8.5. să se calculeze fluxul la ieşirea din reţeaua de transport.

Rezolvare:

Algoritmul pentru determinarea fluxului maxim la ieşirea dintr-o reţea de transport (Ford-Fulkerson) este următorul:

Pasul 1. Se pleacă de la un flux iniţial care verifică condiţiile de conservare în fiecare vârf şi de mărginire pe fiecare arc (de exemplu de la fluxul având componente nule pe fiecare arc al reţelei).

Pasul 2. Se determină lanţurile nesaturate de la a la b (lanţurile pe care fluxul poate fi mărit). Se utilizează pentru aceasta următorul procedeu de etichetare:

a) Se marchează intrarea a cu ;b) Un vârf x fiind marcat, se va marca:- cu x oricare vârf y nemarcat cu proprietatea că arcul u (x,y) este

nesaturat, adică f(u) c(u);- cu –x oricare vârf y nemarcat cu proprietatea că arcul u (y,x) are flux

nenul, adică f(u) 0;Dacă prin acest procedeu de marcare se etichetează ieşirea b, atunci fluxul fb

obţinut la pasul curent nu este maxim şi se trece la pasul 3.Dacă nu se mai poate marca ieşirea b, atunci fluxul obţinut este maxim şi

problema este rezolvată: STOP.Pasul 3. Se va considera un lanţ format din vârfuri etichetate (ale căror

etichete au semnele sau -) care uneşte a cu b (care poate fi uşor de găsit dacă se urmăresc etichetele vârfurilor în sensul de la b către a). Fie v acest lanţ. Se notează cu v mulţimea arcelor (x,y) ale lui v unde marcajul lui y are semnul , deci care sunt orientate în sensul de la a către b şi cu v - mulţimea arcelor (x,y) ale lui v, unde marcajul lui x are semnul -, deci care sunt orientate în sensul de la b către a.

Se calculează:

(8.13)

Din modul de etichetare rezultă 0.Se va mării cu fluxul pe fiecare arc u v şi se va micşora cu fluxul pe

fiecare arc cu u v-, obţinând la ieşire un flux mărit cu . Se revine la pasul 2.Teorema 3. Algoritmul Ford-Fulkerson are un număr finit de paşi pentru orice

reţea de transport cu capacităţi numere întregi. În momentul în care prin procedeul de etichetare nu se mai poate eticheta ieşirea reţelei se obţine fluxul maxim în reţea. Mulţimea arcelor care unesc vârfurile etichetate cu cele la care nu s-a mai putut continua etichetarea formează o tăietură de capacitate minimă.

Page 10: Transport Grafuri

Corolar. Pentru orice reţea de transport valoarea maximă a fluxului la ieşire este egală cu capacitatea minimă a unei tăieturi de suport A, cu

Exemplul 7. Pentru acelaşi graf din figura 8.5.v = {a,2,6,b}v+ = {(a,2), (2,6), (6,b)}v- = Φε1 = minuєv +{c(u) – f(u)} = min {4,2,1} = 1

Figura 8.7. Graful reţelei de transport

Se majorează cu 1 fluxurile pe toate arcele care aparţin mulţimii v+.

Figura 8.8. Graful reţelei de transport cu fluxurile mulţimii v+ majorate cu 1

v = {a,2,6,5,4,b}v+ = {(a,2), (2,6), (5,4), (4,b)}v- = {(5,6)}ε1 = minuєv

+ [c(u) – f(u)] = min {3,1,1,2} = 1ε2 = min uєv

- [f(u)] = 1ε = min (ε1, ε2) = 1Se majorează cu 1 fluxurile pe arcele care aparţin mulţimii v+ şi se

micşorează cu 1 fluxurile pe arcele care aparţin mulţimii v-.

5

8 (10)

5 (8)

5 (5)

3 (7)

2 (2)

3 (4)

2 (2)

3 (3)

3 (3)0 (1)

4 (6)

5 (5)

4 (4)1(8)

+

+a +2

+4

-6

+5

2

b

6

4

a 3

1

5 (5)1

2

3

4

5 b

8 (10)

4 (8)

3 (7)

2 (2)

2 (4)

2 (2)

3 (3)

3 (3) 0 (1)

4 (6)

5 (5)

3 (4)1(8)

+

+a +2

+6

6

a

Page 11: Transport Grafuri

Algoritmul ia sfârşit deoarece nu se mai poate eticheta ieşirea b. Conform teoremei 3, s-a obţinut fluxul maxim la ieşirea din reţea fb = 14.

Se observă că mulţimea vârfurilor neetichetate determină o tăietură de capacitate minimă, egală chiar cu fluxul maxim din reţea.

Figura 8.9. Graful reţelei de transport cu fluxurile mulţimii v+ majorate cu 1 şi cu cele ale mulţimii v- micşorate cu 1

Problema de transport

Se pune problema maximizării cantităţii totale de marfă care poate fi transportată de la depozitele D1, D2,..., Dm, în care se găsesc cantităţile a1, a2,..., am, către consumatorii C1, C2,..., Cn, care au necesarul b1, b2,..., bn cunoscându-se capacităţile maxime de transport, cij, pe fiecare rută (de la depozitul D i la consumatorul Cj).

Aceasta este o problemă de flux maxim în reţeaua de transport G (X,U,c), unde:

(8.14)

(8.15)

(8.16)

în condiţia de echilibru:

Exemplul 8. Să se găsească planul de transport pentru a transporta o cantitate maximă de marfă de la trei depozite în care se găsesc cantităţile: a1 = 60, a2 = 24, a3 = 36 la trei consumatori care au necesarul: b1 = 33, b2 = 19, b3 = 18, cunoscând capacităţile de transport:

cij C1 C2 C3

3

4

5

6

b

8 (10)

6 (8)

5 (5)

3 (7)

2 (2)

4 (4)

2 (2)

3 (3)

3 (3)1 (1)

5 (6)

5 (5)

4 (4)0(8)

+

+a

+a

+1

2

1

a

Page 12: Transport Grafuri

D1 12 21 46D2 15 18 34D3 9 26 12

Folosind algoritmul Ford-Fulkerson se obţine următoarea soluţie pentru fluxul maxim în reţeaua de transport determinată de cele 3 depozite şi 3 consumatori.

Figura 8.10. Graful reţelei de transport cu fluxurile mulţimii v+ majorate cu 1 şi cu cele ale mulţimii v- micşorate cu 1

Aceeaşi valoare a fluxului maxim în reţea, de 60, este obţinută şi cu modulul Maximal Flow Problem din pachetul WINQSB pentru care principalele ferestre sunt prezentate în figura 8.11.

a. fereastra iniţială pentru introducerea datelor sub formă tabelară

b. soluţia complexă a problemei sub formă tabelară

c. drumul de valoare minimă sub formă grafică

49(60)

15(24)

6(36)

12(12)

19(21)

18(46)

15(15)

0(18)

0(34)6(9)0(26)

0(12)

33(33)

19(19)

18(18)

a

D1

D2

D3

C1

C2

C1

b

Page 13: Transport Grafuri

Figura 8.11. Rezolvarea problemei folosind modulul Maximal Flow Problem din pachetul de programe WINQSB