Dal momento che specificare una posizione target appropriata potrebbe essere complicato in molte situazioni, vale la pena considerare il seguente approccio basato su mappe di griglia di occupazione 2D. Viene comunemente definita "iterazione del valore" e, combinata con gradiente-discesa / salita, fornisce un algoritmo di pianificazione del percorso semplice e abbastanza efficiente (a seconda dell'implementazione). Per la sua semplicità, è noto nella robotica mobile, in particolare per i "robot semplici" che navigano in ambienti interni. Come suggerito sopra, questo approccio fornisce un mezzo per trovare un percorso lontano da una posizione iniziale senza specificare esplicitamente una posizione target come segue. Si noti che è possibile specificare una posizione target, se disponibile. Inoltre, l'approccio / algoritmo costituisce una prima ricerca,
Nel caso binario, la griglia griglia di occupazione 2D è quella per celle di griglia occupate e zero altrove. Nota che questo valore di occupazione può anche essere continuo nell'intervallo [0,1], tornerò su quello sotto. Il valore di una determinata cella della griglia g i è V (g i ) .
La versione base
- Supponendo che la cella della griglia g 0 contenga la posizione iniziale. Impostare V (g 0 ) = 0 e inserire g 0 in una coda FIFO.
- Prendere la prossima griglia di celle g io dalla coda.
- Per tutti i vicini g j di g i :
- Se g j non è occupato e non è stato visitato in precedenza:
- V (g j ) = V (g i ) +1
- Mark g j come visitato.
- Aggiungi g j alla coda FIFO.
- Se non viene ancora raggiunta una determinata soglia di distanza, continuare con (2.), altrimenti continuare con (5.).
- Il percorso si ottiene seguendo la pendenza più ripida a partire da g 0 .
Note sul passaggio 4.
- Come indicato sopra, il passaggio (4.) richiede di tenere traccia della distanza massima coperta, che è stata omessa nella descrizione sopra per motivi di chiarezza / brevità.
- Se viene fornita una posizione target, l'iterazione viene interrotta non appena viene raggiunta la posizione target, ovvero elaborata / visitata come parte del passaggio (3.).
- Ovviamente è anche possibile elaborare semplicemente l'intera mappa della griglia, vale a dire continuare fino a quando tutte le celle (libere) della griglia sono state elaborate / visitate. Il fattore limitante è ovviamente la dimensione della griglia-mappa insieme alla sua risoluzione.
Estensioni e ulteriori commenti
L'equazione di aggiornamento V (g j ) = V (g i ) +1 lascia molto spazio per applicare tutti i tipi di euristica aggiuntiva tramite il ridimensionamento V (g j )o il componente aggiuntivo al fine di ridurre il valore per alcune opzioni di percorso. La maggior parte, se non tutte, tali modifiche possono essere incorporate in modo piacevole e generico usando una griglia con valori continui da [0,1], che costituisce effettivamente una fase di pre-elaborazione della griglia iniziale binaria. Ad esempio, aggiungendo una transizione da 1 a 0 lungo i limiti degli ostacoli, "l'attore" rimane preferibilmente libero da ostacoli. Una tale griglia-mappa può, ad esempio, essere generata dalla versione binaria mediante sfocatura, dilatazione ponderata o simili. L'aggiunta di minacce e nemici come ostacoli con un ampio raggio di sfocatura, penalizza i percorsi che si avvicinano a questi. Si può anche usare un processo di diffusione sulla griglia globale in questo modo:
V (g j ) = (1 / (N + 1)) × [V (g j ) + sum (V (g i ))]
dove " somma " si riferisce alla somma su tutte le celle della griglia vicine. Ad esempio, invece di creare una mappa binaria, i valori iniziali (interi) potrebbero essere proporzionali all'entità delle minacce e gli ostacoli presentano minacce "piccole". Dopo aver applicato il processo di diffusione, i valori della griglia dovrebbero / devono essere ridimensionati su [0,1] e le celle occupate da ostacoli, minacce e nemici dovrebbero essere impostate / forzate su 1. Altrimenti il ridimensionamento nell'equazione di aggiornamento potrebbe non funziona come desiderato.
Esistono molte variazioni su questo schema / approccio generale. Gli ostacoli, ecc. Potrebbero avere valori piccoli, mentre le celle della griglia libere hanno valori elevati, che possono richiedere una pendenza nell'ultimo passaggio a seconda dell'obiettivo. In ogni caso, l'approccio è, IMHO, sorprendentemente versatile, abbastanza facile da implementare e potenzialmente piuttosto veloce (soggetto a dimensioni / risoluzione della griglia della mappa). Infine, come con molti algoritmi di pianificazione del percorso che non assumono una posizione target specifica, esiste l'ovvio rischio di rimanere bloccati in vicoli ciechi. In una certa misura, potrebbe essere possibile applicare fasi di post-elaborazione dedicate prima dell'ultima fase per ridurre questo rischio.
Ecco un'altra breve descrizione con un'illustrazione in Java-Script (?), Sebbene l'illustrazione non abbia funzionato con il mio browser :(
http://www.cs.ubc.ca/~poole/demos/mdp/vi.html
Maggiori dettagli sulla pianificazione sono disponibili nel seguente libro. L'iterazione del valore è discussa in modo specifico nel capitolo 2, sezione 2.3.1 Piani a lunghezza fissa ottimali.
http://planning.cs.uiuc.edu/
Spero che aiuti, cordiali saluti, Derik.