Sunteți pe pagina 1din 9

DRUMURI OPTIME N GRAFURI ORAR ION COZAC

Abstract
We studied the optimum route problem in time-table graphs, in order to develop a web server supporting on-line queries. This paper describes how to solve the following problems: separate train time-tables are given; how to build the entire time-table graph? how to use the maximum allowed distance as restriction criterion in the search process? how to split the time-table graph into two distinct graphs, to improve the efficiency? Our study is based on the model designed by Schulz, Wagner and Zaroliagis.

Keywords: time-table graph, near optimum path, earliest arrival, maximum allowed distance

1. Datele iniiale ale problemei O reea feroviar este modelat cu ajutorul unui graf simetric ponderat G = (X, U, d): X este o mulime finit i nevid de noduri, asociat cu mulimea staiilor reelei; U este o mulime de arce care indic legturi directe ntre staii: dac (x,y) U atunci ntre x i y nu exist alte staii; d este o funcie distan simetric, d : U N*; d(x,y) = d(y,x) pentru orice (x,y) U. Prima problem care trebuie rezolvat este cea a introducerii ct mai comode a datelor despre un orar nou. Pentru fiecare tren se precizeaz: care este traseul acestuia, prin ce staii trece, ora sosirii i plecrii pentru fiecare staie. Pentru un tren oarecare se introduc staia iniial de plecare i staia final de sosire. n acest moment s-ar putea determina un drum de distan minim ntre cele dou staii. Dar nu orice tren parcurge traseul de distan minim dintre cele dou staii. Astfel c, dac traseul trenului difer de cel avnd distana minim, trebuie s precizm un nod intermediar, sau poate chiar dou. n continuare se determin un traseu de distan minim care s treac prin toate nodurile n ordinea dat; n acest scop poate fi folosit algoritmul Dijkstra [1]. Avnd toate staiile de pe parcursul unui tren, se pot preciza pentru fiecare staie ora sosirii i ora plecrii. Staia iniial de plecare nu are asociat o or de sosire, i staia final de sosire nu are asociat o or de plecare. De asemenea, este posibil ca o staie intermediar s nu aib asociate aceste informaii, dac trenul nu are oprire n staia respectiv.

674

2. Modelare cu ajutorul unui graf expandat Exist modelri ale problemei mersului trenurilor disponibile pe Internet. Prezentm n continuare un astfel de model (cf Schulz et al [4]), simplificat i completat pentru a modela ct mai bine unele particulariti ale reelei feroviare din Romnia. S presupunem c avem trei staii: Sa, Sb i Sc, i trei trenuri cu urmtorul program de circulaie: T1: (Sa, 8:00) (Sb, 8:15, 8:20) (Sc, 8:30); T2: (Sb, 12:00) (Sc, 12:45, 12:50) (Sa, 13:10); T3: (Sc, 14:00) (Sa, 14:15, 14:20) (Sb, 14:35). Pentru fiecare staie, i pentru fiecare moment de sosire i plecare, se definete cte un nod n graful expandat. Astfel vom avea urmtoarele noduri: cele asociate staiei Sa: n1(T1,8:00), n2(T2,13:10), n3(T3,14:15), n4(T3,14:20); cele asociate staiei Sb: n5(T1,8:15), n6(T1,8:20), n7(T2,12:00), n8(T3,14:35); cele asociate staiei Sc: n9(T1,8:30), n10(T2,12:45), n11(T2,12:50), n12(T3,14:00). Se definesc arce n graful expandat astfel: arce care indic momente succesive din ruta unui tren: (n1,n5), (n5,n6), (n6,n9), (n7,n10), (n10,n11), (n11,n2), (n12,n3), (n3,n4), (n4,n8); arce care indic legturi cu alte trenuri: (n8,n7), (n8,n6), (n5,n7), (n2,n1), (n2,n4), (n3,n1), (n9,n11), (n9,n12), (n10,n12). n a doua list se includ arcele care se refer la aceeai staie i unesc un vrf de sosire corespunznd unui tren cu un vrf de plecare corespunznd altui tren.

Un exemplu de graf orar

Uneori este necesar s introducem legturi suplimentare n graful expandat, pentru a indica faptul c un tren de legtur trebuie luat dintr-o staie vecin. Exemple: (Ploiesti

675

Vest, Ploiesti Sud), (Bucuresti Nord, Bucuresti Basarab). n aceste situaii legturile trebuie s in seama de timpul necesar pentru a ajunge dintr-o staie n cealalt cu un alt mijloc de transport (de exemplu autobuz). Aceste arce suplimentare vor fi definite astfel: nodul iniial al arcului este asociat unui moment de sosire, i nodul final unui moment de plecare; se vor avea n vedere acele noduri care corespund unui interval de timp mai mare dect cel necesar pentru a parcurge distana dintre cele dou staii. Graful expandat G = (X, U, time, dist) asociat mersului trenurilor este un graf orientat unde: X este mulimea de noduri definite cum s-a artat mai sus; un nod x X este un triplet (s,t,h) cu semnificaia: s staie, t tren, h ora plecrii sau sosirii; U este mulimea de arce definite cum s-a artat mai sus; time : E N ; dist : E N ; time (x,y) = (t(y) t(x) + 1440) mod 1440 dist (x,y) = distana minim de la s(x) la s(y)

t(x) este componenta t a nodului x, s(x) este componenta s a nodului x. Distana minim este determinat n graful G al reelei feroviare. Valorile funciilor time i dist se calculeaz o singur dat, n faza de preprocesare. Fiind date dou staii pl i so, trebuie s se determine mai multe trasee optime (ca i timp de cltorie) de la pl la so. Trebuie s precizm mai exact ce nseamn traseu optim. Considernd staia pl i momentul de plecare h, s se determine un traseu care ne permite s ajungem n cel mai scurt timp n staia so. Dac vom considera diferite ore de plecare, este posibil s avem trasee diferite cu durate diferite de cltorie, toate fiind optime conform precizrii de mai sus. n literatura de specialitate se folosete termenul the earliest arrival problem (Pyrga et al [4]). Criteriul de optim este relativ la momentul plecrii. Dar dac se identific dou trasee diferite, cu momente diferite de plecare, i momentul sosirii coincide, va fi luat n considerare doar acel traseu care are timpul total de cltorie minim. Pentru a determina traseul optim se utilizeaz algoritmul Dijkstra cu cteva modificri.

676

Se determin o mulime S X asociat staiei pl care se refer doar la momente de plecare. Se determin de asemenea o mulime T X asociat staiei so care se refer doar la momente de sosire. Pentru fiecare nod s S se determin un traseu optim de la s la primul nod t care este depistat n T. Pentru dou noduri consecutive n1(s1,t1,h1) i n2(s2,t2,h2) timpul se determin astfel: (1440+h2h1) mod 1440 dac momentele de timp snt date n minute n intervalul [0,1439]. Autorii citai mai sus propun ca n a doua list de arce s se includ acele arce care se refer la aceeai staie, i care unesc dou momente consecutive de timp, indiferent de tipul acestora (plecare sau sosire), la care se adaug un arc care unete ultimul moment de timp cu primul, pentru a da posibilitatea de a obine legturi la momentul trecerii de la o zi la alta. Avantajul acestei abordri este obinerea unui numr redus de arce n graful orar. Dezavantajul apare la gestionarea dificil a situaiilor n care e nevoie s se schimbe un tren, dac se urmrete n acelai timp i un numr minim de schimbri. Deoarece modelul nostru cere s se construiasc legturi ntre orice vrf de sosire i orice vrf de plecare, numrul total numrul total de arce este de cteva ori mai mare. n schimb se gestioneaz mult mai uor situaiile n care e nevoie s se schimbe un tren. Verificri suplimentare permit reducea numrului de arce, selectnd doar staiile unde astfel de schimbri snt ntr-adevr necesare. De exemplu, arcul (n5,n7) nu e necesar deoarece se poate ajunge la staia Sc cu trenul T1 direct, pe cnd folosirea acestui arc ar presupune schimbarea trenului. Un alt exemplu: avem un tren pe ruta Sa Sb Sc, dac am avea un tren pe ruta Sc Sb Sa, nu s-ar justifica o schimbare ntre cele dou trenuri n staia Sb. Este necesar o selecie foarte atent a arcelor care vor defini graful orar. De rezultatul acestei selecii va depinde ntr-o msur foarte mare att calitatea informaiilor furnizate de programul de cutare, ct i eficiena acestuia. Aadar, etapa de preprocesare a datelor este foarte important n astfel de situaii.

677

3. Algoritm de cutare accelerat Deoarece graful orar are un numr foarte mare de vrfuri i arce, unii autori recomand (Schulz et al [3]) construirea unor grafuri pe mai multe nivele, cutarea fcndu-se mai nti n graful cel mai mic, dup aceea n graful de pe nivelul urmtor i aa mai departe. n graful de pe un nivel mai mare se face cutare restrictiv, doar pentru vrfurile aflate n vecintatea celor identificate la nivelul anterior. Propunem n continuare un criteriu mai simplu de restricionare a cutrilor, care nu necesit memorie suplimentar. Iniial se determin distana minim de la staia final la fiecare din celelalte staii, i se rein doar staiile care se afl la o distan care este cu cel mult 50% (de exemplu) fa de distana minim. Aceast selecie se face foarte repede, deoarece graful reelei feroviare este de zeci de ori mai mic fa de graful orar. n continuare, pentru fiecare vrf extras (algoritmul Dijkstra modificat) cutarea continu numai dac distana deja parcurs plus distana minim (rmas de parcurs, determinat anterior) nu depete limita stabilit. Fie pl staia de plecare i so staia de sosire. Trebuie s determinm mai multe rute optime posibile de la pl la so, criteriul de optim fiind timpul total de cltorie. Pentru a rezolva aceast problem folosim o variant a algoritmului Dijkstra. Selectm o submulime S X asociat staiei pl i orice nod este de plecare. Selectm de asemenea o submulime A V asociat staiei so i orice nod este de sosire. Pentru fiecare nod s S determinm o rut optim de la s la primul nod x ntlnit n A. Deoarece graful orar este destul de mare snt necesare tehnici de accelerare a cutrii. Propunem n continuare un criteriu care restrnge cutrile fr a fi nevoie de memorie suplimentar. Mai nti determinm distana minim de la pl la so, pe care o nmulim cu un factor f > 1; obinem astfel md, distana maxim admis. De exemplu, dac acceptm o rut care acoper o distan cu 50% mai mare dect distana minim, atunci f = 1,50. Algoritm MarkStations (variant Dijkstra);

678

Input. G = (X, U, d) graful reelei feroviare; pl, staia de plecare; so, staia de sosire; f, factor de deviere maxim (f > 1). Output. D, lista distanelor de la so la toate celelalte staii; md, distana maxim admis. begin for (each x X) do D[x] := ; D[so] := 0; md := 0; Z := {so}; while (Z ) do begin x := ExtractMin(Z); // x are D[x] distana minim dintre toate nodurile din Z if (x = pl) then md := D[x] f; if (md > 0) and (D[x] > md) then break; for (each y Succ(x)) do begin if (y Z) then Z := Z U {y}; w := D[x] + d(x,y); if (D[y] > w) then D[y] := w; end; end; end (algoritm). Acum sntem pregtii s determinm o rut de la un nod oarecare din S la primul nod ntlnit din A. Algoritm NearOptimumRoute (variant Dijkstra); Input. G = (X, U, time, dist) graful orar; s, nod de plecare; A, set de sosire; D, lista distanelor, determinat anterior; md, distana maxim admis, determinat anterior. Output. R, ruta gsit (lista nodurilor). begin // pentru fiecare y, succesor al lui x

679

for (each x X) do begin P[x] := ; F[x] := ; T[x] := ; end; F[s] := 0; T[s] := t(s); Z := {s}; P[s] := s; while (Z ) do begin x := ExtractMin(Z); if (x A) then break; for (each y Succ(x)) do begin if (y Z) then Z := Z U {y}; wd := F[x] + dist(x,y); if (D[s(y)]+wd > md) then continue; wt := T[x] + time(x,y); if (T(x,y),F(x,y)) > (wt,wd) then begin T[y] := wt; F[y] := wd; P[y] := x; end; end; end; k := 0; R[0] := x; while (x d) do begin x := P[x]; k := k + 1; R[k] := x; end; // Lista R va fi parcurs ulterior n ordine invers end (algoritm). Algoritmul este numit NearOptimumRoute deoarece e posibil ca unele rute s nu fie neaprat optime (din punctul de vedere al timpului de cltorie), deoarece unele rute prea lungi (care dau o distan mai mare dect md) snt abandonate, chiar dac ar putea da timpi de cltorie mai buni. Pare curios, dar Romnia este ara tuturor posibilitilor: exist rute pe distane scurte unde circul puine trenuri, i alte rute pe distane mai lungi dar mai circulate. // x este nodul final // comparare lexicografic // ignorm rute foarte lungi prin y // pentru fiecare y, succesor al lui x // x are costul minim dintre toate nodurile din Z

680

P se folosete pentru memora informaii care vor fi folosite pentru a reconstitui o rut de la d la nodul final. O rut de la d la y folosete x ca nod precedent, deci P[y] = x. T se folosete pentru a memora, pentru fiecare nod y, timpul scurs de la s(d) la s(y). F se folosete pentru a memora, pentru fiecare nod y, distana parcurs de la s(d) la s(y). Aceast list se folosete pentru a verifica dac distana estimat de la pl la so depete sau nu distana maxim admis: D[s(y)] este distana minim de la s(y) la so; wd este distana parcurs de la pl la s(y); wd distana minim de la pl la s(y). Criteriul de optim este dat de cuplul (T, F) astfel: n primul rnd conteaz timpul de cltorie minim, iar n caz de egalitate distana minim. 4. Implementare Algoritmii descrii mai sus au fost inclui ntr-o aplicaie web care poate fi gsit la adresa http://193.226.19.29:1026; pentru implementarea algoritmilor de drum optim am folosit cozi de prioritate (Johnson [2]). Aplicaia este scris n limbajul C i compilat cu GNU C version 4.1.0 . Sistemul de calcul are urmtoarele caracteristici: procesor Intel Celeron la 768 MHz, 128 Mb RAM memorie, i ruleaz un sistem de operare Linux Fedora. Graful reelei CFR are 1964 staii i 4020 arce. Graful orar are 47840 noduri i 224810 arce (1-Jan-2007, www.infofer.ro). Pentru a evalua performana serverului web am cerut s se determine rutele indicate mai jos. Tabelul de mai jos indic: staia de plecare, staia de sosire, distana minim, numrul nodurilor de plecare (numrul de trenuri care pleac din staia de plecare), timpul total de rspuns, timpul mediu de rspuns. n general, timpul total de rspuns depinde de numrul nodurilor de plecare, de distana parcurs de la plecare la sosire, i de ct de repede poate serverul s gseasc o direcie corect spre staia de sosire. Tocmai de aceea am introdus ca i criteriu de restricie distana maxim admis: rutele prea lungi snt abandonate.

681

Evaluarea performanelor serverului web Rute Bucuresti Nord Tirgu Mures 448 km, 105 noduri de plecare Tirgu Mures Bucuresti Nord 448 km, 24 noduri de plecare Bucuresti Nord Timisoara Nord 531 km, 105 noduri de plecare Timisoara Nord Bucuresti Nord 531 km, 76 noduri de plecare Tirgu Mures Dej Calatori 150 km, 24 noduri de plecare Dej Calatori Tirgu Mures 150 km, 54 noduri de plecare Dej Calatori Cluj Napoca 59 km, 54 noduri de plecare Cluj Napoca Dej Calatori 59 km, 62 noduri de plecare Timp de rspuns 0,479 secunde (timp total) 0,004562 secunde (medie) 0,120 secunde (timp total) 0,005 secunde (medie) 0,520 secunde (timp total) 0,004952 secunde (medie) 0,328 secunde (timp total) 0,004316 secunde (medie) 0,098 secunde (timp total) 0,004083 secunde (medie) 0,191 secunde (timp total) 0,003537 secunde (medie) 0,186 secunde (timp total) 0,003444 secunde (medie) 0,220 secunde (timp total) 0,003548 secunde (medie)

BIBLIOGRAFIE: [1] E. Dijkstra A note on two problems in connection with networks / Numerische Mathematik 1, 1959, pp 169-271 [2] D. B. Johnson A note on Dijkstras shortest path algorithm / Journal of ACM 20, 1973, pp 385-388 [3] Evangelia Pyrga, Frank Schulz, Dorothea Wagner, Christos Zaroliagis Toward realistic modeling of time-table information through the time-dependent approach / Electronic Notes on Theoretical Computer Science 92 no 1, 2003 [4] Frank Schulz, Dorothea Wagner, Christos Zaroliagis Using multilevel graph for time-table information on railway systems / Editors: D. Mount and C. Steiri, ALENEX 2002, LNCS 2409, pp 43-59.

682

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