Soy un verdadero fanático de la velocidad si se trata de algoritmos y de los complementos que hice para un juego.Alternativas más rápidas al algoritmo de Dijkstra para el sistema de GPS
La velocidad es ... un poco ... no es satisfactoria. Especialmente mientras manejas con un automóvil y no sigues tu camino, el camino tiene que ser recalculado ... y lleva un tiempo, así que el GPS del juego está acumulando muchas señales de "sentido incorrecto" (y acumulando las señales significa más cálculos después, para cada movimiento equivocado) porque quiero un sistema rápido y en vivo, que se actualiza constantemente.
he cambiado el algoritmo antiguo (algunos simples aplicación Dijkstra) para impulsar :: de Dijkstra para calcular una ruta desde el nodo A al nodo B
(lista de nodos total es de alrededor de ~ nodos 15k con ~ conexiones de 40k, por curiosidad la gente aquí es el mapa: http://gz.pxf24.pl/downloads/prv2.jpg (12 MB), los bordes en las líneas rojas son los nodos),
pero en realidad no aumentó en velocidad. (Al menos no notablemente, tal vez 50 ms).
La información que se almacena en la matriz de nodos es:
The ID of the Node,
The position of the node,
All the connections to the node (and which way it is connected to the other nodes, TO, FROM, or BOTH)
Distance to the connected nodes.
Tengo curiosidad por si alguien sabe algunas alternativas más rápidas en C/C++? ¿Alguna sugerencia (+ ejemplos de código?) Son apreciadas.
Si alguien está interesado en el proyecto, aquí está (fuente + binarios):
https://gpb.googlecode.com/files/RouteConnector_177.zip
En este video se puede ver lo que el sistema GPS es como:
http://www.youtu.be/xsIhArstyU8
Como puede ver, la ruta roja se está actualizando lentamente (bueno, para nosotros, los jugadores, es lenta).
(Bytheway: los espacios entre las líneas rojas se han solucionado hace mucho tiempo: p)
¿Has probado A *? Es por el algoritmo de búsqueda de ruta basado en heurística más común (ciertamente el más simple). Y en una situación similar a un GPS, la heurística de "distancia en línea recta" generalmente funciona bastante bien. – biziclop
@biziclop does boost tiene una implementación A *? No puedo encontrar nada | google = a * boost o a * algorythm boost –
La segunda posibilidad de optimización viene del hecho de que en una situación de recalculo GPS su destino siempre es el mismo y su fuente no está lejos de la iteración anterior, por lo que si almacena el más corto ruta desde el cálculo anterior, solo necesita buscar hasta llegar a un nodo que ya está en esa lista. – biziclop