Matematické metody optimalizace Tomáš Vaníček Katedra inženýrské informatiky Stavební fakulta ČVUT Thákurova 7, Praha 6 Dejvice, b407
Hledání nejkratší cesty Praha Plzeň ČB Strakonice Zdice Písek Tábor Protivín Číčenice Volary Lenora
Přes Budějovice je to 250 km Praha Plzeň ČB Strakonice Zdice Písek Tábor Protivín Číčenice Volary Lenora
Přes Plzeň jen 240 km Praha Plzeň ČB Strakonice Zdice Písek Tábor Protivín Číčenice Volary Lenora
Takhle je to jen 235 km Praha Plzeň ČB Strakonice Zdice Písek Tábor Protivín Číčenice Volary Lenora
Je to už opravdu nejkratší cesta? Těch možných cest je docela dost Chce to nějaký systém, jak je prozkoumat
Dijskrův algoritmus Praha 0 Plzeň ČB Strakonice Zdice Písek Tábor Protivín Číčenice Volary Lenora
Dijskrův algoritmus Praha 0 Plzeň ČB Strakonice Zdice 50 Písek Tábor 90 Protivín Číčenice Volary Lenora
Dijskrův algoritmus Praha 0 Plzeň 110 ČB Strakonice Zdice 50 Písek 150 Tábor 90 Protivín Číčenice Volary Lenora
Dijskrův algoritmus Praha 0 Plzeň 110 ČB 150 Strakonice Zdice 50 Písek 140 Tábor 90 Protivín Číčenice Volary Lenora
Dijskrův algoritmus Praha 0 Plzeň 110 ČB 150 Strakonice 160 Zdice 50 Písek 140 Tábor 90 Protivín Číčenice Volary Lenora
Dijskrův algoritmus Praha 0 Plzeň 110 ČB 150 Strakonice 160 Zdice 50 Písek 140 Tábor 90 Protivín 145 Číčenice Volary Lenora
Dijskrův algoritmus Praha 0 Plzeň 110 ČB 150 Strakonice 160 Zdice 50 Písek 140 Tábor 90 Protivín 145 Číčenice 155 Volary Lenora
Dijskrův algoritmus Praha 0 Plzeň 110 ČB 150 Strakonice 160 Zdice 50 Písek 140 Tábor 90 Protivín 145 Číčenice 155 Volary 240 Lenora
Dijskrův algoritmus Praha 0 Plzeň 110 ČB 150 Strakonice 160 Zdice 50 Písek 140 Tábor 90 Protivín 145 Číčenice 155 Volary 215 Lenora
Dijskrův algoritmus Praha 0 Plzeň 110 ČB 150 Strakonice 160 Zdice 50 Písek 140 Tábor 90 Protivín 145 Číčenice 155 Volary 215 Lenora
Dijskrův algoritmus Praha 0 Plzeň 110 ČB 150 Strakonice 160 Zdice 50 Písek 140 Tábor 90 Protivín 145 Číčenice 155 Volary 215 Lenora
Dijskrův algoritmus Praha 0 Plzeň 110 ČB 150 Strakonice 160 Zdice 50 Písek 140 Tábor 90 Protivín 145 Číčenice 155 Volary 215 Lenora
Kořenový strom nejkratších cest Praha 0 Plzeň 110 ČB 150 Strakonice 160 Zdice 50 Písek 140 Tábor 90 Protivín 145 Číčenice 155 Volary 215 Lenora
Několik definic Graf – uspořádaná dvojice množin (V,E) V – konečná množina vrcholů (vertex, node) E – množina hran (edge) - některých dvojic vrcholů Orientovaný graf- V množině E jsou uspořádané dvojice
Definice Sled – Posloupnost v 0 e 1 v 1 e 2 … e n v n, kde e i = {v i-1,v i } Cesta – sled, ve kterém se neopakují vrcholy Hranové ohodnocení grafu – funkce z E do R (jeden graf může mít více ohodnocení) Délka cesty – součet délek hran Nejkratší cesta
Dijskrův algoritmus Zadán graf (V,E), ohodnocení d:E-R, počáteční vrchol P, koncový vrchol K Vrcholu P přiřaď vzd(P):=0, ostatním vzd(v):=moc Najdi vrchol v s minimálním vzd(P), který není hnědý Obarvi v na hnědo Pro všechny sousedy w vrcholu v spočítej vzd(v)+d(v,w), je-li to méně než vzd(w), uprav vzd(w) Pokud není vrchol K hnědý, pokračuj třetím řádkem.
Příklad použití algoritmu Graf a ohodnocení zadáno seznamem hran Praha-Zdice d({A,Z}) = 50 Zdice-Plzeň d({Z,P}) = 60 Plzeň-Strakonice d({P,S}) = 50 Praha-Tábor d({A,T}) = 90 Tábor-České Budějovice d({T,C}) = 60 Zdice-Písek d({Z,I}) = 100 Tábor-Písek d({T,I}) = 50 Písek-Protivín d({I,R}) = 5 Strakonice-Proeivín d({S,R}) = 30 Protivín-Číčenice d({R,Č}) = 10 Číčenice-České Budějovice d({Č,C}) = 40 České Budějovice - Volary d({C,V}) = 90 Číčenice-Volary d({Č,V}) = 60 Strakonice-Lenora d({S,L}) = 80 Volary-Lenora d({V,L}) = 10 Počáteční vrchol A, koncový vrchol L
Průběh algoritmu VrcholVzdPředchozí vrchol A 0 Z Moc P T C I S R Č V L
Průběh algoritmu VrcholVzdPředchozí vrchol A 0 Z 50A P Moc T 90A C Moc I S R Č V L
Průběh algoritmu VrcholVzdPředchozí vrchol A 0 Z 50A P 110Z T 90A C Moc I 150Z S Moc R Č V L
Průběh algoritmu VrcholVzdPředchozí vrchol A 0 Z 50A P 110Z T 90A C 150T I 140T S Moc R Č V L
Průběh algoritmu VrcholVzdPředchozí vrchol A 0 Z 50A P 110Z T 90A C 150T I 140T S 160P R Moc Č V L
Průběh algoritmu VrcholVzdPředchozí vrchol A 0 Z 50A P 110Z T 90A C 150T I 140T S 160P R 145I Č Moc V L
Průběh algoritmu VrcholVzdPředchozí vrchol A 0 Z 50A P 110Z T 90A C 150T I 140T S 160P R 145I Č 155R V Moc L
Průběh algoritmu VrcholVzdPředchozí vrchol A 0 Z 50A P 110Z T 90A C 150T I 140T S 160P R 145I Č 155R V 240C L Moc
Průběh algoritmu VrcholVzdPředchozí vrchol A 0 Z 50A P 110Z T 90A C 150T I 140T S 160P R 145I Č 155R V 215Č L Moc
Průběh algoritmu VrcholVzdPředchozí vrchol A 0 Z 50A P 110Z T 90A C 150T I 140T S 160P R 145I Č 155R V 215Č L 240S
Průběh algoritmu VrcholVzdPředchozí vrchol A 0 Z 50A P 110Z T 90A C 150T I 140T S 160P R 145I Č 155R V 215Č L 225V
Průběh algoritmu VrcholVzdPředchozí vrchol A 0 Z 50A P 110Z T 90A C 150T I 140T S 160P R 145I Č 155R V 215Č L 225V
Nejkratší cesta z A do L je L-V-Č-R-I-T-A 225km VrcholVzdPředchozí vrchol A 0 Z 50A P 110Z T 90A C 150T I 140T S 160P R 145I Č 155R V 215Č L 225V