C'è un grande avvertimento quando si usa D *, D * -Lite o uno qualsiasi degli algoritmi incrementali in questa categoria (e vale la pena notare che questo avvertimento è raramente menzionato in letteratura). Questi tipi di algoritmi utilizzano una ricerca inversa. Cioè, calcolano i costi verso l'esterno dal nodo obiettivo, come un'ondulazione che si diffonde verso l'esterno. Quando i costi dei bordi cambiano (ad es. Aggiungi o rimuovi un muro nel tuo esempio), tutti hanno varie strategie efficienti per aggiornare solo il sottoinsieme dei nodi esplorati (aka "visitati") che sono interessati dalle modifiche.
Il grande avvertimento è che la posizione di questi cambiamenti rispetto alla posizione dell'obiettivo fa un'enorme differenza per l'efficienza degli algoritmi. Ho mostrato in vari articoli e la mia tesi che è del tutto possibile che la peggiore delle prestazioni di uno di questi algoritmi incrementali sia peggiore del buttare via tutte le informazioni e ricominciare da capo con qualcosa di non incrementale come il semplice vecchio A *.
Quando le informazioni sui costi modificate si avvicinano al perimetro del fronte di ricerca in espansione (la regione "visitata"), pochi percorsi devono cambiare e gli aggiornamenti incrementali sono rapidi. Un esempio pertinente è un robot mobile con sensori collegati al suo corpo. I sensori vedono solo il mondo vicino al robot, e quindi i cambiamenti sono in questa regione. Questa regione è il punto di partenza della ricerca, non l'obiettivo, quindi tutto funziona bene e gli algoritmi sono molto efficienti nell'aggiornamento del percorso ottimale per correggere le modifiche.
Quando le informazioni sui costi modificate sono vicine all'obiettivo della ricerca (o il tuo scenario vede le posizioni di cambio obiettivo, non solo l'inizio), questi algoritmi subiscono un rallentamento catastrofico. In questo scenario, è necessario aggiornare quasi tutte le informazioni salvate, poiché l'area modificata è così vicina all'obiettivo che quasi tutti i percorsi precalcolati passano attraverso le modifiche e devono essere rivalutati. A causa del sovraccarico di memorizzare ulteriori informazioni e calcoli per eseguire aggiornamenti incrementali, una nuova valutazione su questa scala è più lenta di un nuovo inizio.
Poiché il tuo scenario di esempio sembra consentire all'utente di spostare qualsiasi muro desideri, questo problema si presenterà se usi D *, D * -Lite, LPA *, ecc. Le prestazioni temporali del tuo algoritmo saranno variabili, a seconda dell'utente ingresso. In generale, "questa è una brutta cosa" ...
Ad esempio, il gruppo di Alonzo Kelly alla CMU aveva un fantastico programma chiamato PerceptOR che cercava di combinare robot di terra con robot aerei, tutti condividendo informazioni sulla percezione in tempo reale. Quando hanno tentato di utilizzare un elicottero per fornire aggiornamenti dei costi in tempo reale al sistema di pianificazione di un veicolo terrestre, hanno riscontrato questo problema perché l'elicottero poteva volare davanti al veicolo terrestre, vedendo cambiamenti di costo più vicini all'obiettivo e quindi rallentando giù i loro algoritmi. Hanno discusso di questa interessante osservazione? No. Alla fine, il migliore che riuscirono a fare fu far volare l'elicottero direttamente sopra il veicolo terrestre, rendendolo l'albero dei sensori più costoso al mondo. Certo, sono meschino. Ma è un grosso problema di cui nessuno vuole parlare - e dovrebbero,
Ci sono solo una manciata di articoli che ne discutono, principalmente da parte mia. Di articoli scritti dagli autori o dagli studenti degli autori degli articoli originali elencati in questa domanda, posso pensare solo a uno che menziona effettivamente questo problema. Likhachev e Ferguson suggeriscono di provare a stimare la scala degli aggiornamenti richiesti e di svuotare le informazioni memorizzate se si ritiene che l'aggiornamento incrementale richieda più tempo di un nuovo inizio. Questa è una soluzione abbastanza sensata, ma ce ne sono anche altre. Il mio dottorato di ricerca generalizza un approccio simile in una vasta gamma di problemi computazionali e sta andando oltre lo scopo di questa domanda, tuttavia potresti trovare utili i riferimenti poiché ha una panoramica completa della maggior parte di questi algoritmi e altro. Vedi http://db.acfr.usyd.edu.au/download.php/Allen2011_Thesis.pdf?id=2364 per dettagli.