1 (38) Trafiksimulering: Grafalgoritmer Michael Hanke Skolan för teknikvetenskap SF1538 Projekt i simuleringsteknik
2 (38) Introduktion Varför grafalgoritmer? Grafer möjliggör en enkel och systematisk modellering av många avancerade problem Många problem kan lösas genom algoritmer på grafer
3 (38) Exempel: Trafiksimulering Ni kan modellera enkla (enkelriktade) vägar: Makroskopiskt med hjälp av konserveringslagar (senare i denna kurs) Mikroskopiskt med hjälp av cellulära automater (i kursen SI1335) Hur kan man modellera ett vägnät? (Anpassade) grafer
4 (38) Andra tillämpningar Elektriska kretsar (MNA-analys; vissa analytiska egenskaper kan karakteriseras genom grafegenskaper) Kraftnät (lastfördelning, styrningsproblem) Paketdirigering (routning) i internet och GSM Hantering av ostrukturerade nät för lösning av partiella differentialekvationer Algoritmer för glesa matriser Lastfördelning för parallella algoritmer
5 (38) Vad är en graf? Definition En riktad graf är ett par (V, E) där V är en ändlig mängd noder och E V V är mängden av kanter. En oriktad graf är ett par (V, E) där V är en ändlig mängd noder och E = {{u, v} u, v V }. För trafiksimuleringar: Noder är viktiga punker i trafiknätet, oftast korsningar men även städer etc. En kant är en väg mellan två noder.
6 (38) Viktad graf Definition En viktad graf är en trippel (V, E, w) där (V, E) är en graf och w : E R är en viktsfunktion. Anmärkningar: Viktfunktionen beskriver viktiga attribut. T ex kantlängden. Viktfunktioner kan även innehäller flera attribut så att w(e) kan vara en vektor. Det är helt möjligt att ha en viktfunktion r definerad på noderna: r : V R.
7 (38) Flera definitioner Definition En väg från en nod v till en nod u är en följd v 0, v 1,..., v k av noder v i V där v = v 0 och u = v k så att (v i 1, v i ) E ({v i 1, v i } E) för i = 1,..., k. En väg v 0, v 1,..., v k är en cycel om v 0 = v k En graf är sammanhängande om det finns minst en väg mellan varje par av noder. En delgraf (V, E ) av (V, E) är en graf med V V and E E V V. Grannarna till noden v V är all u V med (v, u) E.
8 (38) Representation av grafer: Grannmatriser Definition Grannmatrisen A R N N till grafen (V, E) med noderna V = {v 1, v 2,..., v N } är { 1, if (v i, v j ) E, a ij = 0, annars.
9 (38) Anmärkningar Grannmatrisen för en oriktad graf är symmetrisk. För en viktad graf definerar vi den viktade grannmatrisen w(v i, v j ), om (v i, v j ) E, a ij = 0, om i = j,, annars. På datorn identifieras oftast v i med i.
10 (38) Representation av grafer: Implementering Definition En graf kallas för gles om antalet kanter är mycket mindre än kvadraten på antalet noder. Om grafen är inte gles kan grannmatrisen implementeras genom en array. Om grafen är gles använder man vanligtvis en (länkad) lista: För varje v V är grannlistan Adj[v] = {u V (v, u) E}. Matlab använder internt listor för att spara glesa matriser!
11 (38) Olika grafalgoritmer Beräkning av den Snabbaste vägen (Shortest path) Beräkning av en Minimalt uppspännande träd (MST) Beräkning av sammanhängande komponenter Beräkning av transitiv slutning Beräkning av en maximal oberoende mängd (MIS) Grafpartitionering
12 (38) Shortest path: Problem Problem Låt (V, E, e) vara en viktad graf och s, t V två (olika) noder. Bestäm en väg mellan s och t så att summan av alla kantvikter längs vägen är minimal bland alla vägar mellan s och t. Vi antar att grafen är sammanhängande. Vi antar att w(e) > 0 för alla kanter e E. (Varför?) Generaliseringar Single source shortest path Kortaste vägen mellan alla par av noder (Floyd)
13 (38) Shortest path: Dijkstras algoritm Grundidén består i att bestämma avståndet (kortaste vägen) från startnoden till varje nod i grafen. Det gör man successivt: Först bestämmer man avståndet från startpunkten till alla grannar. Sedan väljer man noden med minsta avståndet till startnoden. Sedan uppdateras avståndet mellan valda noden och alla dessa grannar. Sedan väljer man igen noden med minsta avståndet etc.
14 (38) Dijkstras algoritm 1 Låt B = {s}. Sätt g(v) = A(s, v) för alla v V \ B. 2 Välj en nod a V \ B med minimalt avstånd (dvs g(a) = min v V \B g(v)). B := B {a}. 3 Om a = t stop. 4 Uppdatera avståndet för alla grannoder till a: Om v V \ B och (a, v) E så sätt g(v) = min(g(v), g(a) + A(a, v)). 5 Gå till 2.
Exempel Bestäm den kortaste vägen från Frankfurt till München! (Alla bilder tagna från de.wikipedia.org) 15 (38)
Exempel (cont) 16 (38)
Exempel (cont) 17 (38)
Exempel (cont) 18 (38)
Exempel (cont) 19 (38)
Exempel (cont) 20 (38)
Exempel (cont) 21 (38)
Exempel (cont) 22 (38)
Exempel (cont) 23 (38)
Exempel (cont) 24 (38)
25 (38) Bestäm den kortaste vägen Låt p(v) vara föregångare till v på den kortaste vägen. 1 Låt B = {s}, p(s) = 0. Sätt g(v) = A(s, v) för alla v V \ B. 2 Välj en nod a V \ B med minimalt avstånd (dvs g(a) = min v V \B g(v)). B := B {a}. 3 Om a = t stop. 4 Uppdatera avståndet för alla grannoder till a: Om v V \ B och (a, v) E och g(v) > g(a) + A(a, v) så sätt g(v) = g(a) + A(a, v) och p(v) = a. 5 Gå till 2.
26 (38) Komplexitet Stegen 2-5 görs högst n = V gånger. Kritiskt är steg 2 och 4: Om datastrukturen är inte anpassad till problemet så kräver båda stegen O(n) jämförelser (hitta alla v V \ B och beräkna mimimum). Det leder till en komplexitet O(n 2 )! En implementation med hjälp av Fibonacci heap (speciell implementation av en prioritetskö (priority queue)) får man komplexiteten O(n log n + E ).
27 (38) Grafpartitionering Om man vill lösa stora och komplexa problem måste man använda parallella beräkningar Exempel: Detaljerad undersökning av stora vägnät (storstäder eller hela landet) Numeriska metoder för tredimensionella turbulenta flödesproblem
28 (38) PDCs stora dator Cray XT6m Computer at KTH PDC (36384 cores, 237 TFlops)
29 (38) Generisk datorstruktur A collection of P processor-memory pairs Processors communicate over the interconnect We might not know what the interconnects look like Problem All processors should have the same amount of computational work to do. Communication should be minimized ( unproductive work )
30 (38) Lastbalansering som grafproblem Problem Låt (V, E, w, r) vara en viktad oriktad graf med kantvikt w och nodvikt r. P-vägs grafpartitioneringsproblem är att bestämma en partition V = V 1 V 2 V P där V p är parvis disjunkta och v V p r(v) = const, (u,v) E,u V p,v V q(p q) w(u, v) min! Problemet är NP-fullständigt. Tolkning: r motsvarar antalet beräkningar som processorn p V ska göra. w motsvarar kommunikationskostnader mellan processorerna.
31 (38) Recursiv bisection Antag att P är en potens av två. Beräkna rekursivt två-vägs partitioneringar. Egenskaper: Problemet är också NP-fullständigt. För många grafer leder recursive bisection till en nästan optimal P-vägs partitionering. Recursive bisection kan effektivt parallelliseras!
32 (38) Partitineringsmetoder Geometriska metoder Kombinatoriska metoder Spektralmetoder Multilevelmetoder Kombinerade metoder Antag nedan att w(u, v) 1, r(v) 1.
33 (38) Levelized Nested Dissection Välj en startnod v Hitta successivt alla noder som har avståndet 1, 2,... från v. Om halva antalet noder har funnits, stop. Egenskaper: Väldigt snabb algoritm (breadth first traversing) Ger oftast bara dåliga partitioneringar. Därför gör man flera försök (med olika startnoder).
Spectral bisection 34 (38)
35 (38) Idé: Ersätt det diskreta optimeringsproblemet med ett kontinuerligt. För grafen (V, G) definerar vi den diskreta Laplacematrisen L: 1, om i j, (v i, v j ) E, l ij = deg(v i ), om i = j, 0, annars. L är negativt semidefinit, det största egenvärdet är 0. Om grafen är sammanhängande så är storleken på det andra egenvärdet en indikator för hur stark konnektiviteten i grafen är. Eigenvektorn x tillhörande till näststörsta egenvärdet (Fiedler-vektor) är ett mått på avståndet mellan noderna. Bisection: Bestäm medianen m av x; sätt V 1 = {i x(i) > m}, V 2 = V \V 1. Beräkning av x är kostsamt.
Exempel: Diskretisering av en pde 36 (38)
Exempel (cont) 37 (38)
38 (38) Sammanfattning Modellering av nätverksproblem med hjälp av grafer En enkel grafalgoritm En komplex grafalgoritm Tillämpning på routning