Sunteți pe pagina 1din 11

CURSUL 5

TEMA 2: PROBLEME DE RUTARE (ROUTING PROBLEMS)


2.2 Problema postasului chinez (abreviat CPP Chinese Postman Problem)
A. Enunt si model matematic.
Exemplul 1 In figura 1 este data o schita a unei zone din Delta Dunarii. Muchiile
corespund unor canale pe care se poate circula cu ambarcatiuni usoare iar nodurile
reprezinta lacuri sau puncte de ramificatie. Nodul A este locatia unui lac mai mare pe
malul caruia un intreprinzator a construit un hotel cu debarcader.Proprietarul se gandeste
sa ofere clientilor sai o croaziera in care sa fie strabatute toate cele zece canale indicate
in schita.Pentru fiecare canal in parte, el a stabilit timpul mediu de traversare (in minute)
luand in considerare lungimea canalului, largimea acestuia, adancimea apei si nu in
ultimul rand particularitatile peisajului inconjurator.
Deoarece trebuie parcurse toate canalele este clar ca durata croazierei nu poate fi mai
mica decat suma timpilor individuali de traversare si este egala cu aceasta daca si numai
daca toate canalele ar putea fi parcurse o singura data. Daca aceasta posibilitate nu
exista, apare in mod natural urmatoarea problema de optimizare:
Care ar fi traseul cu durata cea mai mica si ce canale ar trebui traversate de mai
multe ori asa incat croaziera sa se sfarseasca in locul din care a pornit.
8

10

15

20

15

5
6

B
10
A

Figura 1
Exemplul este o concretizare a problemei postasului chinez al carei enunt standard este
urmatorul:
Un postas ridica de la oficiu corespondenta de distribuit, parcurge strazile din zona
repartizata lui si imparte corespondenta destinatarilor dupa care se intoarce la
locul de plecare. Cum ar trebui sa se deplaseze postasul pentru ca distanta totala
parcursa sa fie minima?

CPP se modeleaza cu ajutorul unui graf in care:


- muchiile reprezinta strazile de parcurs;
- nodurile semnifica extremitatile strazilor.
Intr-unul din noduri se afla oficiul din care pleaca si in care se intoarce postasul.
Bineinteles, graful trebuie sa fie conex, aceasta insemnand ca oricare doua noduri
diferite sunt conectate printr-un lant de muchii.
Fiecare muchie este insotita de o valoare numerica cu semnificatia de lungime a strazii
reprezentate (sau de timp de parcurgere sau cost al deplasarii)
Reamintim ca:
- un lant este o succesiune de muchii in care fiecare muchie are o extremitate in
comun cu muchia precedenta si cealalta extremitate in comun cu muchia urmatoare.
Extremitatile lantului sunt extremitatile libere ale primei si ultimei muchii din
succesiune.
De exemplu in graful din figura 1 succesiunea:
ABED
este un lant compus din trei muchii, cu extremitatile A si D.
- un ciclu este un lant ale carui extremitati coincid. Un ciclu elementar este un
ciclu cu proprietatea ca nodurile prin care trece sunt diferite.
De exemplu, tot in figura 1, succesiunea:
AFDEFBA
este un ciclu, dar neelementar deoarece trece prin F de doua ori. El este reuniunea a doua
cicluri elementare A F B A si F D E F.
Este clar acum ca deplasarea postasului din oficiu pe toate strazile si inapoi se
formalizeaza printr-un ciclu care contine toate muchiile grafului strazilor. Un asemenea
ciclu se va numi traseu postal. Valoarea ( lungimea, timpul sau costul) unui traseu
postal este, prin definitie, suma valorilor muchiilor alcatuitoare.
Cu aceste pregatiri, CPP se reformuleaza astfel:
Fiind dat un graf conex G, ale carui muchii au fost valorizate, sa se determine un
traseu postal T* cu plecarea si intoarcerea intr-un nod dat si cu valoarea minima.

Deoarece un traseu postal contine toate muchiile grafului, valoarea sa nu poate fi mai
mica decat suma valorilor tuturor muchiilor si este egala cu aceasta numai daca traseul
contine fiecare muchie o singura data. Or, aceasta nu se intampla intotdeauna!
Vom da urmatoarea:
Definitie. Un graf conex in care exista posibilitatea traversarii tuturor muchiilor sale o
singura data, cu plecarea si intoarcerea in acelasi nod, se va numi graf eulerian iar un
ciclu care indica aceasta posibilitate se va numi ciclu eulerian.
Din cele de mai sus rezulta ca intr-un graf eulerian solutia CPP este data de un ciclu
eulerian. Practic nu avem ce optimiza! Singurele chestiuni care se pun sunt:
- cum se recunoaste daca graful este eulerian;
si, in caz afirmativ:
- cum se construieste algoritmic un ciclu eulerian.
Daca nu exista posibilitatea traversarii tuturor muchiilor o singura data, altfel spus, daca
graful conex dat nu este eulerian, unele muchii vor fi parcurse de mai multe ori in fapt
doar de doua ori! astfel ca valoarea unui traseu postal va depasi suma valorilor tuturor
muchiilor cu exact suma valorilor muchiilor traversate repetat! In aceasta situatie avem
realmente o problema de optimizare: aceea de a determina traseul postal in care suma
valorilor muchiilor traversate repetat sa fie minima!
Exemplul 2. Suma valorilor muchiilor grafului din figura 1 este de 102 minute.
Deoarece, dupa cum se va vedea, nu exista posibilitatea traversarii celor zece canale o
singura data cu plecarea si intoarcerea in A croaziera va dura cu siguranta mai mult,
intrucat unele canale vor fi circulate de doua ori. O propunere (nu si cea mai buna) ar
fi traseul:
ABEDCEFBAFDCA
in care se merge de doua ori pe canalele A B si C D. Durata croazierei ar fi de
102 + 10 + 15 = 127 minute
In schimb, in graful din figura 2 se poate circula pe toate muchiile o singura data cu
plecarea si intoarcerea in acelasi nod. In acest caz, indiferent de valorile muchiilor,
solutia CPP este data de un ciclu eulerian, ca de exemplu:
ABCDEBDFECA
Exista si alte posibilitati de traversare unica, ca de exemplu:

ABCDFEDBECA
A

F
Figura 2

B. Solutia CPP in grafuri euleriene


Grafurile euleriene se recunosc foarte usor in baza urmatorului rezultat:
Teorema 1 (Euler) Un graf conex este eulerian daca si numai daca gradul fiecarui nod
(adica numarul muchiilor avand o extremitate in nodul respectiv) este un numar par.
Dupa cum s-a mai spus, solutia CPP intr-un graf eulerian este data de un ciclu eulerian.
Pentru constructia unui asemenea ciclu avem nevoie de o alta caracterizare a grafurilor
euleriene:
Teorema 2. (Veblen) Un graf conex este eulerian daca si numai daca el este o
reuniune de cicluri elementare disjuncte.
Exemplul 3. Graful din figura 2 este eulerian in baza teoremei 1: nodurile A si F au
gradul 2 iar nodurile B,C,D,E au gradul 4.O descompunere a grafului in cicluri
elementare este data in figura 3. Descompunerea nu este unica!

Ciclul C1

A
Ciclul C2

A
Ciclul C3
A

Figura 3
Identificarea unui ciclu eulerian intr-un graf eulerian se face cu ajutorul urmatoarei
proceduri simple:
- fixam un nod s1 din care incepe si in care se va sfarsi ciclul eulerian;
- plecam din s1 si cautam sa parcurgem cat mai multe muchii avand grija ca:
- fiecare muchie sa fie traversata o singura data;
- sa nu trecem de mai multe ori prin acelasi nod.
Deoarece graful este conex, mai devreme sau mai tarziu vom reveni in s1 obtinand un
ciclu elementar C1. Daca C1 contine toate muchiile grafului, acesta va fi ciclul eulerian
cautat. In caz contrar:
- eliminam din graf toate muchiile ciclului C1, apoi fixam un nod s2 prin care trece
C1 si care este extremitate pentru cel putin o muchie nestearsa. Plecam din s2 si cautam
sa traversam o singura data! cat mai multe dintre muchiile ramase. La revenirea in s2
am obtinut un al doilea ciclu elementar C2, disjunct de C1 (adica fara muchii commune)
- procesul continua fie dintr-un nod intermediar al lui C1 fie dintr-unul al ciclului
C2 obtinand un al treilea ciclu C3 s.a.m.d.
In final se obtine o descompunere a grafului in cicluri elementare disjuncte C1 ,
C2 , , Cp (teorema 2 ne asigura ca asa se va intampla!) un ciclu Ci avand drept origina
un nod intermediar al unuia dintre ciclurile anterior generate C1 , C2 sau Ci-1. Atentie:
descompunerea nu este unica!
- se trece la concatenarea ciclurilor C1 , C2 , , Cp intr-un ciclu eulerian. Pentru
simplitate sa presupunem ca sunt numai doua cicluri C1 si C2:
- ciclul C1 incepe si se termina intr-un nod s1;

- ciclul C2 are originea intr-un nod s2 prin care trece C1 (atentie: s2 poate sa
coincida cu s1!)
Plecam din s1 traversand muchiile ciclului C1 intr-un sens fixat. O data ajunsi in s2
parasim C1 si parcurgem intr-un sens fixat muchiile ciclului C2. La revenirea in s2
continuam deplasarea pe muchiile ciclului C1 pana cand ajungem in nodul s1 de unde am
plecat.
Evident, schema descrisa este generalizabila la mai mult de doua cicluri.
Exemplul 4. In figura 4 este vizualizata o alta descompunere in cicluri elementare a
grafului eulerian din figura 2 urmata de concatenarea acestora intr-un ciclu eulerian.
A
Ciclul C1
C

Ciclul C2
E

Ciclul C3

Concatenarea
intr-un ciclu
eulerian

Figura 4
Foarte important:
Rezolvarea oricarei CPP incepe prin a stabili daca graful muchiilor de traversat G este
sau nu este eulerian. Pentru aceasta se calculeaza gradele tuturor nodurilor grafului G.
Daca toate nodurile au gradul par, graful G este eulerian si solutia CPP indifferent de
valorile muchiilor este data de un ciclu eulerian. Constructia acestuia se face conform
instructiunilor mai sus prezentate.
In caz ca exista si noduri de grad impar, problema principala este de a identifica acele
muchii care vor fi traversate de doua ori astfel incat suma valorilor lor sa fie cat mai
mica.

C. Solutia CPP in grafuri care nu sunt euleriene


Un argument foarte simplu ne convinge ca intotdeauna numarul nodurilor de grad
impar este par si ca urmare exista posibilitatea imperecherii lor.
Urmatorul algoritm rezolva CPP in situatia in care graful G nu este eulerian graful
contine noduri de grad impar.
Pasul 1. Pentru fiecare pereche de noduri de grad impar x si y se identifica lantul
de muchii cu extremitatile x si y cu cea mai mica valoare (lantul poate fi si o simpla
muchie!) Lantul identificat se numeste lant de cuplare al nodurilor x si y.
Pasul 2. Pentru fiecare posibilitate de cuplare doua cate doua a nodurilor de grad
impar se calculeaza suma valorilor lanturilor de cuplare si se retine combinatia in care
suma este minima. Aceasta va fi cuplajul de valoare minima al nodurilor de grad
impar.
Pasul 3. Se construieste un nou graf G* derivat din graful G prin inlocuirea
fiecarei muchii din lanturile de cuplare ale cuplajului de valoare minima al nodurilor de
grad impar cu doua muchii identice ca valoare. Este usor de vazut ca G* este un graf
eulerian.
Pasul 4. Cu procedura descrisa in sectiunea B se identifica un ciclu eulerian T*
in graful eulerian G*. In raport cu graful original G, T* este un traseu postal de
valoare minima. (Bineinteles ca in G* pot exista mai multe cicluri euleriene. Toate
conduc la solutii ale CPP cu aceeasi valoare minima!)
Observatii:
- pentru identificarea lanturilor de cuplare dintre nodurile de grad impar (pasul 1)
exista algoritmi specializati. In aplicatiile noastre identificarea acestor lanturi se va face
prin simpla inspectie
- tot asa, pentru determinarea cuplajului de valoare minima al nodurilor de grad
impar exista un algoritm specializat. In aplicatiile noastre, identificarea acestui cuplaj se
va face prin examinarea tuturor posibilitatilor de cuplare. Astfel:
- daca in graful G exista numai doua noduri de grad impar vom avea o
singura posibilitate de cuplare;
- daca in graful G sunt patru noduri de grad impar a, b,c d ele se pot cupla
doua cate doua in trei moduri:
a cu b si c cu d ; a cu c si b cu d ; a cu d si b cu c
- mai departe sase noduri se pot cupla in 15 moduri diferite iar in general,
2k noduri (k 1) se pot cupla in

(2k )!
moduri.
2 k k!

Exemplul 5. Vom rezolva problema data in exemplul 1.


- Graful din figura 1 nu este eulerian deoarece nodurile A,B,C,D au gradul 3
(impar)
- Pasul 1: prin simpla inspectie identificam lanturile de cuplare dintre nodurile
A,B,C si D - vezi figura 5a).

10

19

AB

AC
11

ACED
13

BEC

BED
14

A
Lanturile de cuplare
si valorile lor:
B

*
CED
Figura 5a)

- Pasul 2: determinam cuplajul de valoare minima al nodurilor de grad impar


A,B,C,D examinand toate posibilitatile de cuplare. vezi figura 5b).

Posibilitati de cuplare Valoarea cuplajului


A cu B si C cu D

10 + 14 = 24

A cu C si B cu D

5 + 13 = 18

A cu D si B cu C

19 + 11 = 30

Figura 5b)

cuplajul de valoare minima

- Pasul 3: construim graful eulerian G* dubland muchiile lanturilor de cuplare din


cuplajul de valoare minima: A C si B E D , vezi figura 6.
F

E
Graful eulerian G*
B
A

Figura 6
- Pasul 4: descompunem G* in cicluri elementare disjuncte vezi figura 7
F

D
Ciclul C2
E

E
B

Ciclul C3

Ciclul C1
A

Concatenare

Figura 7
Concatenarea celor trei cicluri conduce la traseul postal de valoare minima T*:
ACEBFDEBACDEFA
In concluzie:

Timpul minim de traversare a celor zece canale cu plecarea si intoarcerea in


A este de
102 + 18 = 120 minute
si necesita parcurgerea de doua ori a canalelor A C , B E si E D. Un posibil
program al croazierei este dat de traseul postal T*.
TEMA
A
1. In figura 8 este data o schita a strazilor situate
intr-o zona de mare interes istoric si cultural a
municipiului Iasi.Un turist, situat in punctul A doreste D
sa parcurga cele 14 strazi si sa se intoarca in punctul de
plecare A. Determinati cel mai scurt traseu care
satisface doleantele turistului. Este necesar sa se indice
G
distantele de parcurs?

Figura 8
2. Graful din figura 9
vizualizeaz o reea de strzi. n fiecare
noapte un echipaj de poliie trebuie s
patruleze pe toate strzile veghind la
respectarea linitii i a ordinii publice.
Din motive evidente se dorete
determinarea traseului de lungime
minim. Valorile numerice nscrise pe
muchii reprezint distane (n sute de
metri). Secia de poliie locul de
plecare i ntoarcere al patrulei este
localizat n nodul a.

a
4

e
1

3. Graful din figura 10 reprezint stilizat o


reea de zece trasee turistice care leag cabanele
A,B,...,G. Traseele sunt lungi i destul de
obositoare astfel c o persoan plecat dimineaa
de la o caban oarecare pe un traseu oarecare
trebuie s nnopteze pentru odihn i refacere
la cabana de la cellalt capt al traseului parcurs.
Un turist intenioneaz s parcurg toate aceste

2
g

11
Figura 9

B
D

C
E
G

F
Figura 10

trasee cte unul pe zi cu plecarea i ntoarcerea n cabana A. n cte zile se poate


face aceast excursie? (este vorba de durata minim...) Ce trasee vor trebui parcurse de
mai multe ori.?