Søgealgoritme D*

Den aktuelle version af siden er endnu ikke blevet gennemgået af erfarne bidragydere og kan afvige væsentligt fra den version , der blev gennemgået den 25. september 2021; verifikation kræver 1 redigering .

Søgealgoritmen D* (udtales "De Star" ) er en af ​​tre relaterede inkrementelle søgealgoritmer :

Alle tre søgealgoritmer løser de samme sti-planlægningsantagelser problemer, herunder planlægning med frirumsantagelser [7] , når robotten skal navigere til givne målkoordinater i ukendt terræn. Den gør antagelser om en ukendt del af terrænet (f.eks. at der ikke er nogen forhindringer på den) og finder den korteste vej fra sine nuværende koordinater til målets koordinater under disse antagelser. Robotten følger derefter stien. Når den observerer ny information på kortet (for eksempel hidtil ukendte forhindringer), tilføjer den denne information til sit kort og om nødvendigt planlægger den en ny korteste vej fra de aktuelle koordinater til de givne målkoordinater. Den gentager processen, indtil den når målkoordinaterne eller bestemmer, at målkoordinaterne ikke kan nås. Ved krydsning af ukendt terræn kan der ofte opdages nye forhindringer, så denne omplanlægning skal være hurtig. Inkrementelle (heuristiske) søgealgoritmer fremskynder søgningen efter sekvenser af lignende søgeproblemer ved at bruge erfaringen med at løse tidligere problemer til at fremskynde søgningen efter den aktuelle. Forudsat at målkoordinaterne ikke ændres, er alle tre søgealgoritmer mere effektive end gentagne A* -søgninger .

D* og dens varianter er blevet meget brugt til mobile robotter og autonome navigationskøretøjer . Moderne systemer er normalt baseret på den lette , snarere end den originale eller fokuserede D* . Faktisk bruger selv Stenz's laboratorium en letvægts snarere end den originale D* [8] i nogle implementeringer . Sådanne navigationssystemer omfatter prototypesystemet, der er testet på Mars-roverne Opportunity og Spirit , og navigationssystemet fra vinderen af ​​DARPA Urban Challenge , begge udviklet ved Carnegie Mellon University .

Den originale D* blev introduceret i 1994 af Anthony Stentz . Navnet D* kommer fra udtrykket " Dynamic A * " , fordi algoritmen opfører sig som A * [2] , bortset fra at bueomkostningerne kan ændre sig , efterhånden som algoritmen kører .

Operationer

De vigtigste funktioner for D* er beskrevet nedenfor.

Ligesom Dijkstras algoritme og A * vedligeholder D* en liste over noder, der skal evalueres, kendt som OPEN-listen . Noder er markeret som havende en af ​​flere tilstande:

Udvidelse

Algoritmen fungerer ved iterativt at vælge en node fra en OPEN-liste og evaluere den. Den udbreder derefter nodens ændringer til alle tilstødende noder og placerer dem på OPEN-listen . Denne distributionsproces kaldes "udvidelse" . I modsætning til den kanoniske A* , som følger en sti fra start til slut, begynder D* at søge baglæns fra målknuden. Hver udvidet knude har en tilbagemarkør, der refererer til den næste knude, der fører til målet, og hver knude kender den nøjagtige pris for målet. Når startknuden er den næste knude, der udvides, er algoritmen færdig, og stien til målet kan findes ved blot at følge backticks.

Overvinde forhindringer

Når en forhindring findes på den givne sti, placeres alle berørte punkter igen på OPEN-listen , denne gang markeret OP . Inden prisen på en BOOSTER-knude øges , tjekker algoritmen dog sine naboer og undersøger, om den kan reducere omkostningerne ved knudepunktet. Ellers spredes UP -tilstanden til alle efterkommere af noder, det vil sige noder, der har backpointere. Disse noder evalueres derefter, og UP -tilstanden transmitteres og danner en bølge. Når en OP-knude kan reduceres, opdateres dens backpointer og videregiver NED -tilstanden til dens naboer. Disse OP- og NED -bølger er hjertet af D* .

På dette tidspunkt kan bølgerne ikke røre en række andre punkter. Derfor fungerede algoritmen kun med punkter, der er påvirket af en værdiændring.

Endnu en blindgyde

Denne gang er det umuligt at bryde dødvandet så elegant. Ingen af ​​punkterne kan finde en ny rute gennem naboen til destinationen. Så de bliver ved med at udbrede deres påskønnelse. Du kan kun finde punkter uden for kanalen, der kan føre til en destination langs en levedygtig rute. Sådan udvikler sig to BUNDbølger , som udvider sig til punkter, der er markeret som utilgængelige med ny ruteinformation.

Pseudokode

while ( ! openList . isEmpty ()) { point = openList . getFirst (); udvide ( punkt ); }

Udvid

void expand ( currentPoint ) { boolean isRaise = isRaise ( currentPoint ); dobbelt pris ; for hver ( nabo i currentPoint . getNeighbors ()) { if ( isRaise ) { if ( neghbor . NextPoint == currentPoint ) { neighbor . setNextPointAndUpdateCost ( currentPoint ); åben liste . tilføje ( nabo ); } andet { cost = nabo . calculateCostVia ( currentPoint ); if ( cost < nabo . getCost ()) { currentPoint . sætMinimumCostToCurrentCost (); åben liste . tilføje ( aktuelt punkt ); } } } andet { cost = nabo . calculateCostVia ( currentPoint ); if ( cost < nabo . getCost ()) { nabo . setNextPointAndUpdateCost ( currentPoint ); åben liste . tilføje ( nabo ); } } } }

Tjek for opløftning

boolean isRaise ( point ) { double cost ; if ( point . getCurrentCost () > point . getMinimumCost ()) { for each ( nabo i punkt . getNeighbors ()) { cost = point . calculateCostVia ( nabo ); if ( cost < point . getCurrentCost ()) { point . setNextPointAndUpdateCost ( nabo ); } } } returpunkt . _ getCurrentCost () > punkt . getMinimumCost (); }

Indstillinger

Fokuseret D*

Som navnet antyder, er fokuseret D* en forlængelse af D* , der bruger en heuristik til at fokusere udbredelsen af ​​OP og NED i retning af robotten. Det er således kun vigtige tilstande, der opdateres, ligesom A* kun beregner omkostninger for nogle noder.

Letvægts D*

Letvægts D* er ikke baseret på original eller fokuseret D* , men implementerer den samme adfærd. Det er nemmere at forstå og kan gøres på færre linjer kode, deraf navnet Lightweight D* . Den fungerer lige så godt som fokuseret D* . Lightweight D* er baseret på LPA* [5] , som blev introduceret af König og Likhachev et par år tidligere. Lys D*

Minimumsomkostning sammenlignet med nuværende omkostning

Det er vigtigt for D* at skelne mellem nuværende og minimumsomkostninger. Førstnævnte er kun vigtige under indsamling, mens sidstnævnte er afgørende, fordi de sorterer OPEN-listen . Funktionen, der returnerer minimumsomkostningerne, er altid den laveste omkostning for det aktuelle punkt, da det er den første post i OPEN-listen .

Noter

  1. Anthony Stentz (1994). " Optimal og effektiv stiplanlægning for delvist kendte miljøer ". Proceedings of the International Conference on Robotics and Automation : 3310-3317. CiteSeerX  10.1.1.15.3683 .
  2. 1 2 E. Stentz (1995). “ Fokuseret D* algoritme til omlægning i realtid ”. Proceedings of the International Joint Conference on Artificial Intelligence : 1652-1659. CiteSeerX  10.1.1.41.8257 .
  3. Peter Elliot Hart, Niels John Nilsson, Bertram Raphael (1968). " En formel ramme for den heuristiske bestemmelse af minimumsomkostningsstier ." IEEE- transaktioner om systemvidenskab og kybernetik . SSC-4(2): 100-107. DOI : 10.1109/TSSC.1968.300136 .
  4. Sven Koenig, Maxim Likhachev (2005). " Hurtig omplanlægning af navigation i et ukendt område ". Transaktioner i robotteknologi . 21 (3): 354-363. CiteSeerX  10.1.1.65.5979 . DOI : 10.1109/tro.2004.838026 .
  5. 1 2 Sven Koenig, Maxim Likhachev, David Fursey (2004). “ Livstidsplanlægning A* ”. Kunstig intelligens . 155 (1-2): 93-146. DOI : 10.1016/j.artint.2003.12.001 .
  6. G. Ramalingam, Thomas W. Reps (1996). " Inkrementel algoritme til generalisering af problemet med at finde den korteste vej ". Journal of Algorithms . 21 (2): 267-305. CiteSeerX  10.1.1.3.7926 . DOI : 10.1006/jagm.1996.0046 .
  7. Sven Koenig, Yuri Smirnov, Craig Tovey (2003). " Ydelsesgrænser for planlægning i ukendt terræn ". Kunstig intelligens . 147 (1-2): 253-279. DOI : 10.1016/s0004-3702(03)00062-6 .
  8. D. Wooden (2006).Vejplanlægning for grafbaserede mobile robotter(afhandling). Georgia Institute of Technology .

Links