Algoritmo di triangolazione A * (TA *)


11

Ho bisogno di aiuto per capire l'algoritmo Triangle A * (TA *) che è descritto da Demyen nel suo paper Efficient Triangulation-Based Pathfinding , alle pagine 76-81.

Descrive come adattare l'algoritmo A * normale alla triangolazione, per cercare altri percorsi forse più ottimali, anche dopo che il nodo finale è stato raggiunto / espanso. Il normale A * si interrompe quando il nodo finale viene espanso, ma questo non è sempre il percorso migliore quando viene utilizzato in un grafico triangolato. Questo è esattamente il problema che sto riscontrando.

Il problema è illustrato a pagina 78, Figura 5.4: inserisci qui la descrizione dell'immagine

Capisco come calcolare i valori ge h presentati nel documento (pagina 80).

E penso che la condizione di arresto della ricerca sia:

if (currentNode.fCost > shortestDistanceFound)
{
    // stop
    break;
}

dove currentNode è il nodo di ricerca spuntato dall'elenco aperto (coda di priorità), che ha il punteggio f più basso. shortestDistanceFound è la distanza effettiva del percorso più breve trovato finora.

Ma come posso escludere i percorsi precedentemente trovati dalle ricerche future? Perché se faccio di nuovo la ricerca, troverà ovviamente lo stesso percorso. Devo ripristinare l'elenco chiuso? Ho bisogno di modificare qualcosa, ma non so che cosa devo cambiare. Il documento manca di pseudocodice, quindi sarebbe utile.

Risposte:


3

Non l'ho implementato, ma mentre lo leggo, penso che faresti qualcosa del genere:

shortestDistance = infinity
do A* with modified g cost
    if node.fCost > shortestDistance (section 5.5)
        don't open node
    if node.isGoal()
        run funnel algorithm (string pulling)
        update shortestDistance

La differenza è che anche se trovi un percorso verso l'obiettivo, non è necessariamente il percorso più breve . Ma continuerai a migliorare i limiti superiori sul percorso più breve, il che significa che non dovrai aprire tutti i nodi. Alla fine il tuo set aperto dovrebbe essere vuoto e il percorso migliore che hai trovato finora dovrebbe essere il più breve.

Il costo g modificato che descrive sembra un grande sottovalutazione, quindi sono scettico su quanto funzioni in pratica.


Hmm, potrei sbagliarmi, ma lo sto interpretando come condizione di arresto piuttosto che come condizione per l'aggiunta all'elenco aperto. Quanto segue sembra la condizione per l'aggiunta all'elenco aperto: "Come nota a margine, un figlio di uno stato di ricerca non verrà generato per un particolare triangolo adiacente se uno stato corrispondente a quel triangolo è già un antenato di quello stato. l'esclusione può essere fatta perché non eliminerà mai un percorso ottimale, solo uno che potrebbe accorciarlo rimuovendo parte di esso, come affermato nel Teorema 4.3.4. "
Morrowless
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.