Algoritmo de búsqueda de ruta de triangulación A * (TA *)

11

Necesito ayuda para entender el algoritmo Triángulo A * (TA *) que describe Demyen en su trabajo Efficient Triangulation-Based Pathfinding , en las páginas 76-81.

Describe cómo adaptar el algoritmo A * regular para la triangulación, para buscar otras rutas posiblemente más óptimas, incluso después de alcanzar / expandir el nodo final. El A * normal se detiene cuando el nodo final se expande, pero esta no siempre es la mejor ruta cuando se usa en un gráfico triangulado. Este es exactamente el problema que estoy teniendo.

El problema se ilustra en la página 78, Figura 5.4: ingrese la descripción de la imagen aquí

Entiendo cómo calcular los valores g y h presentados en el documento (página 80).

Y creo que la condición de detención de búsqueda es:

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

donde currentNode es el nodo de búsqueda extraído de la lista abierta (cola de prioridad), que tiene la puntuación f más baja. shortestDistanceFound es la distancia real de la ruta más corta encontrada hasta ahora.

Pero, ¿cómo excluyo las rutas encontradas previamente de futuras búsquedas? Porque si vuelvo a buscar, obviamente encontrará la misma ruta. ¿Restablezco la lista cerrada? Necesito modificar algo, pero no sé qué es lo que necesito cambiar. El documento carece de pseudocódigo, por lo que sería útil.

Morrowless
fuente

Respuestas:

3

No he implementado esto, pero mientras lo leo, creo que harías algo como esto:

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 diferencia es que incluso si encuentra un camino hacia la meta, no es necesariamente el camino más corto . Pero seguirá mejorando los límites superiores en el camino más corto, lo que significa que no tendrá que abrir todos los nodos. Finalmente, su conjunto abierto debería estar vacío, y la mejor ruta que haya encontrado hasta ahora debería ser la más corta.

El costo g modificado que describe parece una gran subestimación, por lo que soy escéptico sobre lo bien que funciona en la práctica.

celion
fuente
Hmm, podría estar equivocado, pero lo estoy interpretando como la condición de detención en lugar de la condición para agregar a la lista abierta. Lo siguiente suena como la condición para agregar a la lista abierta: "Como nota al margen, un hijo de un estado de búsqueda no se generará para un triángulo adyacente en particular si un estado correspondiente a ese triángulo ya es un antepasado de ese estado. la exclusión se puede hacer porque nunca eliminará una ruta óptima, solo una que podría acortarse al eliminar parte de ella, como se indica en el Teorema 4.3.4 ".
Morrowless