Hvad er algoritmen bag den korteste vej?


Spørg Scientariet

I 'Spørg Scientariet' kan du stille spørgsmål om alt inden for teknologi og naturvidenskab. Redaktionen udvælger indsendte spørgsmål og finder den bedste ekspert til at svare.

Nu kan du også udfordre dine venner med ekspert-spørgsmål fra Scientariet i Ingeniørens Facebook-quiz "Så ka' du lære det!".

Klik for at deltage i quizzen og test dine venner.


Læs mere om

Dokumentation

Af Julie Maria Callesen, lørdag 05. mar 2011 kl. 09:00

Edvard Korsbæk vil gerne kende algoritmen, der løser problemet om at finde den korteste vej:

"Da jeg læste til ingeniør for mange år siden, blev det sagt, at problemet med at finde den kortest mulige vej mellem forskellige byer ikke var løsbart, og formodentligt heller ikke ville blive det.

I dag kan jeg jo bruge en tilfældig GPS - det virker sådan set udmærket! Mit spørgsmål er: Hvordan fungerer algoritmen bagved egentligt beskrevet i forståelig prosa?"


Henning Christiansen, professor i Datalogi på Roskilde Universitet med speciale i Intelligente Systemer, svarer.

"Det er heldigvis en gal oplysning, spørgeren her har fået fat i. Problemet med korteste eller hurtigste vej kan løses effektivt og elegant med en algoritme, som blev publiceret af E.W. Dijkstra (1930–2002) i 1959.

Denne algoritme er et skoleeksempel på såkaldt dynamisk programmering: man starter med at konstruere løsninger på simplere problemer og udvider dem gradvist, til man står med en løsning til det oprindelige problem.

Princippet for algoritmen er, at man finder korteste veje fra sit startpunkt ud til alle byer i større og større omegne indtil destinationen kommer med. Vi kan forklare det springende punkt i algoritmen i forhold til figuren.



Lad os sige, vi gerne vil til Rom, og at vi på et tidspunkt har fundet de korteste veje fra vort startpunkt ud til to byer A og B med længder 1018 og 1015, og at vi nu overvejer at finde en korteste vej til byen C. Hvis vi nu forlænger vejen til A videre til C får vi en vej med længde 1021, som ser ud til at være en god kandidat, i alt fald bedre end den via B.

Men se nu den by som er markeret med "?", hvorfor er den med på billedet, den ligger tilsyneladende i den helt gale retning. Det kan være den befinder sig et sted i Midtsverige, men at de der har en fin teleport-forbindelse til by C, og så kunne det jo være det gav anledning til en endnu kortere vej til C og i sidste ende til Rom.

Så vi finder hele tiden forslag til korteste veje, som evt. kan erstattes af bedre, og når vi så er sikre på, at en vej ud til f.eks. by A ikke kan forbedres mere, så kan vi begynde at se, om vi fra A kan foreslå gode veje ud til dens naboer, f.eks. C. Og sådan fortsætter vi til C=Rom.

Bruger vi Dijkstras algoritme efter bogen, koster det i værste fald ét check af hvert eneste vejstykke, så som A–C og B–C, på landkortet, hvilket i mange tilfælde er effektivt nok (det kan vises, at tidsforbruget er proportionalt med n x log(n), hvor n er antallet af vejstykker).

Det er interessant, at algoritmen er fremtidssikret ved at den også kan behandle teleporte. Lige nu er der ikke så mange teleporte i funktion, men vi kan genkende fænomenet, når Rejseplanen sender os i den gale retning for at springe på et lyntog.

Algoritmen kan optimeres ved at foretage analyser af landkortet i forvejen, så man får kontrol over, hvor langt man skal søge bagud og til siderne for eventuelle teleporte, lyntog eller motorveje. Man kan så at sige nøjes med at søge i et passende tykt pølseformet område ned over Europa, når man vil hurtigt til Rom, fremfor at søge ud i alle hjørner og kroge efter teknologier, som ikke er opfundet endnu.

Rejseplanen i Danmark benytter software udviklet af Hafas i Tyskland, og selvom "der Hafas-Algorithmus" er patenteret og hemmeligholdt, kan man få det indtryk, at den er en optimeret version af Dijkstras som skitseret."



05. mar 2011 kl 09:33

Hans Schou

Hemmeligt patent?

Er det krigsmateriel?
"Bekendtgørelse af lov om hemmelige patenter":
https://www.retsinformation.dk...6219

Man kan ikke tage patent på noget der er patenteret. Hvis et patent så er hemmeligholdt, så er det først hvis man søger om samme patent, at finder ud af at det allerede er patenteret.

Det virker som om der må være en detalje om "der Hafas-Algorithmus" patent, der ikke er nævnt.


05. mar 2011 kl 09:53

Dan True

A*

Vil lige tilføje: Det alment kendte navn af denne version af Djikstra's algoritme, er A* (A stjerne). Det er under dette navn I vil have lettest ved at finde mere info på fx wikipedia.

Det skal lige siges at Google Maps også med stor sikkerhed bruger denne.


05. mar 2011 kl 10:52

Michael Jensen

Handelsrejsende

Tror det Spørger tænker på med uløseligt problem er den med en handelsrejsendes ruteplanlægning til adskillige byer. Det at finde den korteste rute rundt til et antal byer, og hvilken rækkefælge de skal besøges i.


05. mar 2011 kl 14:23

Claus Pedersen

Re: A*

Vil lige tilføje: Det alment kendte navn af denne version af Djikstra's algoritme, er A* (A stjerne). Det er under dette navn I vil have lettest ved at finde mere info på fx wikipedia.



Det skal lige siges at Google Maps også med stor sikkerhed bruger denne.

A* giver i princippet det samme, men er bare hurtigere at bruge såfremt man har en god heuristics function til den.

Jeg ville også mene at breadth-first search var et godt bud, hvis der ikke anvendes heuristics.


05. mar 2011 kl 16:27

avatar

Svante Jørgensen

Re: Handelsrejsende

Tror det Spørger tænker på med uløseligt problem er den med en handelsrejsendes ruteplanlægning til adskillige byer. Det at finde den korteste rute rundt til et antal byer, og hvilken rækkefælge de skal besøges i.

Mener du The Traveling Salesman Problem? http://en.wikipedia.org/wiki/T...blem

Det er ikke uløseligt, det er bare NP-hårdt - dvs. at der ingen "smarte" løsninger er, og man bliver nød til enten at afprøve og sammenligne alle mulige kombinationer eller bruge en heuristik der hurtigt kan finde en "god" løsning (ikke nødvendigvis den bedste, men tæt på).


05. mar 2011 kl 18:08

Niels Berg Olsen


07. mar 2011 kl 07:26

avatar

Peter Makholm

Re: A*

Det skal lige siges at Google Maps også med stor sikkerhed bruger denne.
Nu ved jeg ikke hvad din kilde er, men der findes bedre optimerings-teknikker end bare A*.

Jeg tror de bruger en form for highway-node routing, ganske sikker også med en form for forudberegninger på områder af knuder (for eksempel Arc Flags). Begge dele kan kombineres med A*, men giver nok bedre bidrag end bare A*.

Og så anvender de ganske givet også at søge begge veje i grafen, hvilket halverer antalet af knuder der skal betragtes.


07. mar 2011 kl 07:45

avatar

Poul-Henning Kamp

Re: A*


Jeg tror de bruger en form for highway-node routing, [...]

Sidst jeg hørt om det, brugte de en mesh-model der er baseret på "den længste relevante vejstrækning" på det lokale "kontinent" og en grundlæggende viden om at jorden er rund.

Grunden til at man får de der "svøm over Stillehavet" ting, er at deres algoritme ikke terminerer særlig hurtigt hvis der ikke er noget mesh.

Poul-Henning


07. mar 2011 kl 08:50

Leif Neland

Re: A*


Grunden til at man får de der "svøm over Stillehavet" ting, er at deres algoritme ikke terminerer særlig hurtigt hvis der ikke er noget mesh.

Poul-Henning

Jeg tror nærmere det er nogle programmører, der morer sig med disse rutevejledninger. Frem for blot "Sorry Dave, I cannot do that", når folk beder om en rute fra Kina til USA.

Der er næppe nogen, der seriøst har brug for den rutevejledning.


07. mar 2011 kl 11:25

Yoel Pedersen


07. mar 2011 kl 12:44

Peter Juul Noer

Re: Handelsrejsende

Tror det Spørger tænker på med uløseligt problem er den med en handelsrejsendes ruteplanlægning til adskillige byer. Det at finde den korteste rute rundt til et antal byer, og hvilken rækkefælge de skal besøges i.

Mener du The Traveling Salesman Problem? http://en.wikipedia.org/wiki/T...blem

Det er ikke uløseligt, det er bare NP-hårdt - dvs. at der ingen "smarte" løsninger er, og man bliver nød til enten at afprøve og sammenligne alle mulige kombinationer eller bruge en heuristik der hurtigt kan finde en "god" løsning (ikke nødvendigvis den bedste, men tæt på).

Det kan løses smart og hurtigt med et "self organising map" (neuralt netværk). Der er ingen garanti for at man får den mest optimale løsning, men en god løsning kan findes på få sekunder, selv med 10k + byer.


08. mar 2011 kl 12:05

avatar

Johnny Kristensen

Måske bruger GPS'en for få itterationer

Har først for nyligt fået en GPS og er stort set tilfreds.
Dog undre jeg mig over nogle af dens ruteforslag.
Hvis man drejer fra ruten, kan den godt regne ud at man med den nye (selvvalgte rute) er 10 minutter hurtigere fremme.

Hvorfor fandt den ikke denne rute selv?

Jeg ved godt at antallet af løsniger er ret stort, og at den derfor må begrænse sig, men jeg taler ikke oom små smutveje, men landeveje.

Eller når man skal fra a til b, og der går en landevej mellem disse, så foreslår den at man midt mellem byerne drejer fra og kører af smalle skovveje (mange skarpe sving, flere med hajtænder) for så at komme tilbage til samme landevej man startede på blot et par km længere fremme.
Det er meget hurtige at fortsætte af landevejen, for man kan jo ikke køre 80 igennem et kryds, eller dreje fra med 80 vel?

Det er en Garmin, ved ikke om andre har disse underholdende ruter.

@johnny


08. mar 2011 kl 17:48

Poul Pedersen

Re: Måske bruger GPS'en for få itterationer

Det er meget hurtige at fortsætte af landevejen, for man kan jo ikke køre 80 igennem et kryds, eller dreje fra med 80 vel?

Nu kan Garmin jo ikke vide om du er typen der først kører ind i en rundkørsel når der ikke er flere biler i miles omkreds, så du kan nok ikke klandre dem for at have en gennemsnitlig holdning til hvor lang tid trafikale manøvrer tager kontra lidt omvej ad lige vej.


08. mar 2011 kl 18:10

avatar

Johnny Kristensen

Re: Måske bruger GPS'en for få itterationer

Nu kan Garmin jo ikke vide om du er typen der først kører ind i en rundkørsel når der ikke er flere biler i miles omkreds, så du kan nok ikke klandre dem for at have en gennemsnitlig holdning til hvor lang tid trafikale manøvrer tager kontra lidt omvej ad lige vej.

Det er jo ikke det der er tilfældet :-)

Den foreslår en rute gennem skoven og tilbage igen, forventet ankomst 12:30
Jeg kører lige ud og så beregner den ny rute: ny forventet ankomst 12:20

Den kunne jo bare fra starten have valgt den rute den selv beregner som den hurtigste, det er det der er valgt i opsætningen :-)

@johnny


10. mar 2011 kl 10:14

Thomas Haugland

Re: Handelsrejsende

Tror det Spørger tænker på med uløseligt problem er den med en handelsrejsendes ruteplanlægning til adskillige byer. Det at finde den korteste rute rundt til et antal byer, og hvilken rækkefælge de skal besøges i.

Mener du The Traveling Salesman Problem? http://en.wikipedia.org/wiki/T...blem

Det er ikke uløseligt, det er bare NP-hårdt - dvs. at der ingen "smarte" løsninger er, og man bliver nød til enten at afprøve og sammenligne alle mulige kombinationer eller bruge en heuristik der hurtigt kan finde en "god" løsning (ikke nødvendigvis den bedste, men tæt på).

Det er ikke korrekt at man skal sammenligne alle kombinationsmulighederne for at finde den bedste løsning. Branch-and-bound vil fravælge kombinationer hvis "prisen" for en delløsning er højere end en kendt løsning.

Eksempel: 20 byer, der er fundet en løsning (alle byer) hvor ruten er på 300 km. Hvis man undersøger en rute som giver mere end 300 km. efter at have besøgt mindre end de 20 byer, så er alle kombinationer med denne "del-rute" ikke interessante.

Problemet er selvfølgelig, at man ikke kan give garantier om hvor mange kombinationer der skal undersøges.


11. mar 2011 kl 12:41

avatar

Mogens Ludvigsen

Hemmeligt patent eller ej

Hvis jeg forstår artiklen korrekt er det mere end 20 år siden denne ansøgning om patent er indleveret - såeh uanset om patentet er/var hemmeligt eller ej, eller om det er /var en militær hemmelighed kan det ikke krænkes.

Dette er tilfælder idet et patent - pånær lægemidler - højst kan have virkning, dvs, være i kraft i 20 år.


23. mar 2011 kl 11:20

Henning Christiansen

Om traveling salesman

Dette problem er som flere skriver i den hårde afdeling. Ikke desto mindre har en af mine kolleger, Keld Helsgaun, opnået imponerende resultater med heuristisk baserede algoritmer, med op millioner af byer (!). Se
http://www.akira.ruc.dk/~keld/...LKH/


23. mar 2011 kl 22:28

avatar

Jane Hoffmann

Forbedring af Dijkstras algoritme

Måske et sidespring, men jeg vil spørge, om der er nogle, der ved, om det kan bruges til noget i praksis, hvis man forbedrer Dijsktras algoritme for korteste vej problemet med positive vægte. Og hvilket forhold for E/V er typisk for f.eks. de grafer, man bruger til kort, f.eks. i GPS'er, og de grafer, man bruger mht. netværk (internettet). Altså, hvor E = antal kanter, og V = antal knuder i grafen.

Hvor stor en forbedring skal man lave, for at det kan bruges til noget, og hvad er tætheden af en graf (E/V), hvor det kan bruges til noget ?

Jeg har lavet en ny datastruktur. Selv om den ikke er optimal for worst case, så kan man godt forvente, at den opfører sig optimalt, og derfor er der en svag chance for, at jeg kan forbedre Dijkstras algoritme på den binære heap, men jeg har ikke haft tid til at teste det endnu.

Jeg har dog bevist, at en optimal datastruktur kun kan forbedre Dijkstras algoritme meget meget lidt i praksis, fordi den forventede køretid er meget forskellig fra worst case.

De algoritmer, man bruger i praksis, de har heuristikker, men er det ikke kun fordi, det vil tage for lang tid at afprøve alle muligheder, eller har jeg misforstået det ? Vil det så overhovedet kunne bruges til noget at forbedre Dijsktra ?

Jeg har brugt et halvt års tid på at opfinde min datastruktur, som man kan forvente, der opfører sig optimalt, så det kunne jo være sjovt, hvis den kan bruges til noget, nu når jeg har brugt så meget tid på at opfinde den.

Er der nogle, der ved, om der er andre problemer end Dijkstras algoritme, hvor en optimal datastruktur kan gøre en forskel ?

Mvh. Jane Hoffmann






21. apr 2011 kl 21:45

avatar

Michael Deichmann

Re: Måske bruger GPS'en for få itterationer

Har først for nyligt fået en GPS
Johnny, nu har jeg en ældre Tom-Tom, og der kan man vælge forskellige strategier: Hurtigste vej, korteste vej, Undgå motorveje, Max hastighed, cykel og gåben.
Din Garmain virker som om den er sat til at finde den korteste vej og ikke den hurtigste.


22. apr 2011 kl 08:49

Ebbe Tranberg

ECO-route

Jeg tror nærmere at det er Garmins ECO-route, der kort fortalt regner med at man bruger mindre brændstof hvis man kører ad en vej der tillader lavere hastigheder.

Navigons "smukkeste rute" leder en gennem alle de gamle bygader i stedet for at blive på omfartsvejen,


22. apr 2011 kl 11:57

avatar

Johnny Kristensen

Re: Måske bruger GPS'en for få ....

Det er hurtigste rute der er valgt, og uden øko :-)

Jeg har holdt lidt øje med dens ruter, og der er (mindst) 2 ting der gør at det ikke er den hurtigste rute den foreslår.

Den ene er nok svær at undgå, den foreslår tit meget små og krogede veje med mange sving hvor man skal sætte farten ned, og dette vælger den istedet for brede landeveje med forkørselsret, den tror de andre er genveje, nok fordi den lidt kortere strækning * samme hastighed giver en kortere tid.
Det er helt sikkert ikke let at lave en algoritme der tager højde for det.

Den anden ting er her hvor jeg tror den stopper søgningen for tidligt.
Hvis jeg afviger fra den foreslåede rute, beregner den en ny ud fra hvor jeg er, og denne nye rute regner den selv frem til at den er hurtigere end den gamle.
En årsag kunne måske være at nogle trafikmeldinger er tager med i beregningen da den laver den oprindelige rute, men de er væk da jeg kommer til det punkt hvor jeg afviger fra ruten.
Jeg vil prøve, næste gang, at lade den finde ruten selv, inden jeg fraviger, bare for at se om den selv kan se den nye rute.

@johnny


Ny i debatten? Opret en brugerkonto