Algoritm de căutare D*

Versiunea actuală a paginii nu a fost încă examinată de colaboratori experimentați și poate diferi semnificativ de versiunea revizuită pe 25 septembrie 2021; verificarea necesită 1 editare .

Algoritmul de căutare D* (pronunțat „De Star” ) este oricare dintre cei trei algoritmi de căutare incrementală înrudiți :

Toți cei trei algoritmi de căutare rezolvă aceleași probleme de planificare a traseului , inclusiv planificarea cu ipoteze de spațiu liber [7] când robotul trebuie să navigheze la coordonatele țintei date pe un teren necunoscut. Face ipoteze despre o parte necunoscută a terenului (de exemplu, că nu există obstacole pe acesta) și găsește calea cea mai scurtă de la coordonatele sale curente la coordonatele țintei în aceste ipoteze. Robotul urmează apoi calea. Când observă informații noi pe hartă (de exemplu, obstacole necunoscute anterior), adaugă aceste informații pe harta sa și, dacă este necesar, replanifică o nouă cale cea mai scurtă de la coordonatele curente la coordonatele țintă date. Se repetă procesul până când atinge coordonatele țintă sau determină că coordonatele țintă nu pot fi atinse. Când traversați un teren necunoscut, pot fi adesea descoperite noi obstacole, așa că această replanificare trebuie să fie rapidă. Algoritmii de căutare incrementali (euristici) accelerează căutarea unor secvențe de probleme de căutare similare, folosind experiența rezolvării problemelor anterioare pentru a accelera căutarea celei curente. Presupunând că coordonatele țintă nu se modifică, toți cei trei algoritmi de căutare sunt mai eficienți decât căutările A* repetate .

D* și variantele sale au fost utilizate pe scară largă pentru robotul mobil și vehiculul de navigație autonom . Sistemele moderne se bazează, de obicei, pe D* ușor , mai degrabă decât pe originalul sau concentrat . De fapt, chiar și laboratorul lui Stenz folosește un D* [8] ușor mai degrabă decât originalul în unele implementări . Astfel de sisteme de navigație includ sistemul prototip testat pe roverele Marte Opportunity și Spirit și sistemul de navigație al câștigătorului DARPA Urban Challenge , ambele dezvoltate la Universitatea Carnegie Mellon .

Originalul D* a fost introdus în 1994 de Anthony Stentz . Numele D* provine de la termenul „ D ynamic A* ” deoarece algoritmul se comportă ca A * [2] , cu excepția faptului că costul arcului se poate modifica pe măsură ce algoritmul rulează .

Operațiuni

Principalele operațiuni ale lui D* sunt descrise mai jos.

La fel ca algoritmul lui Dijkstra și A* , D* menține o listă de noduri de evaluat, cunoscută sub numele de listă OPEN . Nodurile sunt marcate ca având una dintre mai multe stări:

Extensie

Algoritmul funcționează prin selectarea iterativă a unui nod dintr-o listă DESCHISĂ și evaluarea acestuia. Apoi propagă modificările nodului către toate nodurile învecinate și le plasează în lista OPEN . Acest proces de distribuție se numește „expansiune” . Spre deosebire de A* canonic , care urmează o cale de la început până la sfârșit, D* începe să caute înapoi de la nodul țintă. Fiecare nod extins are un indicator înapoi care se referă la următorul nod care duce la țintă și fiecare nod știe costul exact pentru țintă. Când nodul de pornire este următorul nod care se extinde, algoritmul este terminat și calea către obiectiv poate fi găsită prin simpla urmărire a backtick-urilor.

Depășirea obstacolelor

Când se găsește un obstacol pe calea dată, toate punctele afectate sunt din nou plasate pe lista DESCHIS , de data aceasta marcată SUS . Cu toate acestea, înainte de a crește costul unui nod BOOSTER , algoritmul își verifică vecinii și examinează dacă poate reduce costul nodului. În caz contrar, starea UP este propagată către toți descendenții nodurilor, adică nodurilor care au backpointeri. Aceste noduri sunt apoi evaluate și starea UP este transmisă, formând o undă. Când un nod UP poate fi redus, backpointer-ul său este actualizat și transmite starea DOWN vecinilor săi. Aceste unde SUS și JOS sunt inima lui D* .

Până în acest moment, undele nu pot atinge un număr de alte puncte. Prin urmare, algoritmul a funcționat numai cu punctele care sunt afectate de o modificare a valorii.

Un alt punct mort

De data aceasta este imposibil să ieși din impas atât de elegant. Niciunul dintre puncte nu poate găsi un nou traseu prin vecin până la destinație. Așa că continuă să-și propage aprecierea. Puteți găsi doar puncte în afara canalului care pot duce la o destinație de-a lungul unui traseu viabil. Așa se dezvoltă două valuri BOTTOM , care se extind în puncte marcate ca inaccesibile cu noi informații despre rută.

Pseudocod

while ( ! openList . isEmpty ()) { point = openList . getFirst (); extinde ( punct ); }

Extinde

void expand ( Punctul curent ) { boolean isRidicare = esteRidicare ( Punctul curent ); cost dublu ; pentru fiecare ( vecin în Punct curent . getVecini ()) { if ( isRaise ) { dacă ( vecin . Punct următor == Punct curent ) { vecin . setNextPointAndUpdateCost ( Punctul curent ); openList . adaugă ( vecin ); } else { cost = vecin . calculeCostVia ( currentPoint ); if ( cost < vecin . getCost ()) { currentPoint . setMinimumCostToCurrentCost (); openList . adauga ( punct curent ); } } } else { cost = vecin . calculeCostVia ( currentPoint ); if ( cost < vecin . getCost ()) { vecin . setNextPointAndUpdateCost ( Punctul curent ); openList . adaugă ( vecin ); } } } }

Verificați pentru ridicare

boolean isRaise ( punct ) { cost dublu ; if ( punct . getCurrentCost () > punct . getMinimumCost ()) { pentru fiecare ( vecin în punct . getNeighbors ()) { cost = punct . calculateCostVia ( vecin ); if ( cost < punct . getCurrentCost ()) { punct . setNextPointAndUpdateCost ( vecin ); } } } punct de întoarcere . getCurrentCost () > punct . getMinimumCost (); }

Opțiuni

Focalizat D*

După cum sugerează și numele, focalizat D* este o extensie a lui D* care utilizează o euristică pentru a focaliza propagarea SUS și JOS în direcția robotului. Astfel, doar stările importante sunt actualizate, la fel cum A* calculează doar costurile pentru unele noduri.

Ușor D*

Lightweight D* nu se bazează pe D* original sau focalizat , dar implementează același comportament. Este mai ușor de înțeles și se poate face în mai puține linii de cod, de unde și numele Lightweight D* . Funcționează la fel de bine ca D* concentrat . Lightweight D* se bazează pe LPA* [5] care a fost introdus de König și Likhachev cu câțiva ani mai devreme. Lumină D*

Cost minim comparativ cu costul actual

Este important ca D* să facă distincția între costurile curente și cele minime. Primele sunt importante doar în timpul colectării, în timp ce cele din urmă sunt decisive deoarece sortează lista DESCHISĂ . Funcția care returnează costul minim este întotdeauna cel mai mic cost pentru punctul curent, deoarece este prima intrare din lista DESCHIS .

Note

  1. Anthony Stentz (1994). „ Planificare optimă și eficientă a traseului pentru medii parțial cunoscute ”. Proceedings of the International Conference on Robotics and Automation : 3310-3317. CiteSeerX  10.1.1.15.3683 .
  2. 1 2 E. Stentz (1995). „ Algoritm D* focalizat pentru reprogramare în timp real ”. 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). „ Un cadru formal pentru determinarea euristică a căilor de cost minim .” Tranzacții IEEE privind știința sistemelor și cibernetică . SSC-4(2): 100-107. DOI : 10.1109/TSSC.1968.300136 .
  4. Sven Koenig, Maxim Lihaciov (2005). „ Replanificare rapidă a navigației într-o zonă necunoscută ”. Tranzacții în Robotică . 21 (3): 354-363. CiteSeerX  10.1.1.65.5979 . DOI : 10.1109/tro.2004.838026 .
  5. 1 2 Sven Koenig, Maxim Lihaciov, David Fursey (2004). „ Planificarea pe tot parcursul vieții A* ”. Inteligența artificială . 155 (1-2): 93-146. DOI : 10.1016/j.artint.2003.12.001 .
  6. G. Ramalingam, Thomas W. Reps (1996). „ Algoritm incremental pentru generalizarea problemei găsirii celei mai scurte căi ”. Jurnalul de algoritmi . 21 (2): 267-305. CiteSeerX  10.1.1.3.7926 . DOI : 10.1006/jagm.1996.0046 .
  7. Sven Koenig, Yuri Smirnov, Craig Tovey (2003). „ Frontiere de performanță pentru planificare pe teren necunoscut ”. Inteligența artificială . 147 (1-2): 253-279. DOI : 10.1016/s0004-3702(03)00062-6 .
  8. D. Wooden (2006).Planificarea traseului pentru roboții mobili bazați pe grafice(teză). Institutul de Tehnologie din Georgia .

Link -uri