¿Cómo funciona el algoritmo de Google Maps?

# 1
Desde este enlace: el algoritmo de Dijkstra:
El algoritmo de Dijkstra es un algoritmo para encontrar las rutas más cortas entre nodos en un gráfico, que puede representar, por ejemplo, redes de carreteras. Fue concebido por el informático Edsger W. Dijkstra en 1956 y publicado tres años después.

# 2
Desde este enlace:
El algoritmo simple y elegante que hace posible Google Maps
# 2.1
“¿Cuál es la forma más corta de viajar de Rotterdam a Groninga?”, Dijo Dijkstra. “Es el algoritmo para el camino más corto, que diseñé en unos 20 minutos”.
Google Maps hace esto por nosotros ahora y ni siquiera pensamos en la tarea compleja que podría ser. Los problemas de ruta más corta, una característica clave de la teoría de gráficos con una gran cantidad de aplicaciones bastante obvias en el mundo real, se vuelven increíblemente profundos muy rápido. ”
# 2.2
“Esto es lo que hace que Google Maps dé vueltas, o al menos alguna variación de él . Realmente, es lo que hace posible la búsqueda de rutas: la inteligencia suficiente para ver a través del ruido”.

Una nota al margen:
Si está investigando sobre este tema, necesita el algoritmo Dijkstra de variación / extensión exacta de otros como Microsoft y otros también, los siguientes enlaces pueden ser útiles:
a) ¿Qué algoritmos calculan las direcciones desde el punto A al punto B en un mapa?
b) Hacer el camino más corto aún más rápido
c) Calcular la ruta más corta: A * Search Meets Graph Theory, A * search Algoritmo

La mejor de las suertes.

En ausencia de una respuesta de alguien en el equipo de Google Maps, me siento obligado, en base a mis credenciales que enumero al final de esta publicación, a actualizar mi respuesta para proporcionar más detalles y claridad. La publicación con ediciones de Iddo Gino ciertamente merece una buena cantidad de vistas y votos positivos, pero la publicación de Iddo aún subestima la complejidad de la tecnología de mapeo y navegación. Estoy publicando detalles aquí para aclarar cuánto más compleja es esta pregunta que un simple algoritmo de Dijkstra puede resolver. Dijkstra es solo una pequeña parte de ella. A * es aún menos importante. Para los aficionados a los algoritmos, todo lo que Dijkstra agrega a la tecnología de mapas es la idea de usar una cola prioritaria. (Disculpas, no puedo resistir esto: http://www.drdobbs.com/architect …).

Comencemos con la pregunta original: ¿Cómo funciona el algoritmo de Google Maps? La pregunta es engañosa porque los mapas y los sistemas de navegación tienen muchos algoritmos que incluyen:

  • Algoritmos de indexación espacial y algoritmos de geometría computacional para organizar los datos del mapa y recuperarlos de manera eficiente.
  • Algoritmos para dibujar mapas (por ejemplo, coordenadas de latitud y longitud del proyecto, rellenar los polígonos, nombres de lugares para calles, ciudades, negocios, parques, …).
  • Algoritmos para comprender las consultas de los usuarios (NLU o NLP)
  • Algoritmos para procesar señales GPS (en las cuales soy mucho menos experto que en otros temas aquí)
  • Algoritmos para realizar lo que se llama geocodificación, convirtiendo direcciones en puntos (o polígonos) en un mapa.
  • Algoritmos para realizar geocodificación inversa, convirtiendo puntos en direcciones usando algoritmos de punto en polígono (otro ejemplo de usar geometría computacional).

Llegaré a los algoritmos de cálculo de ruta, pero permítanme mencionar más de los otros aspectos complejos de los mapas y la navegación, especialmente aquellos relevantes para calcular rutas.

  • Recopilación y organización de los datos: pueden provenir de muchas fuentes diferentes. Solo un ejemplo de un problema muy complejo que surge de eso es la geometría muy desordenada que resulta cuando las coordenadas del mapa de dos fuentes (latitud, longitud) están en ligero desacuerdo, especialmente polígonos y líneas. Además de los datos sobre carreteras, se necesitan datos sobre direcciones, negocios, parques, centros comerciales e instituciones.
  • Iddo menciona “costos”. Sí, eso es importante y nada trivial por varias razones. Los costos son los “pesos” en los bordes del gráfico para usar la terminología de la teoría de gráficos, pero calcular esos pesos con precisión es complejo. Estas son algunas partes complejas de la determinación de costos:
  • Recopilar y utilizar datos de tráfico para que sea menos probable que se elijan carreteras lentas en el cálculo de la ruta.
  • Estimación de costos futuros cuando la ruta es larga y se maneja en el futuro.
  • Tiempo para viajar a través de intersecciones de caminos. Todos los productos de navegación tienen en cuenta las diferencias de tiempo necesarias para realizar diferentes giros en una intersección porque los tiempos pueden variar significativamente: los giros a la izquierda generalmente tardan mucho más que los giros a la derecha, pero no siempre. Y las muchas y complejas variedades de configuraciones de intersecciones hacen que este sea un problema difícil.
  • Los parámetros adicionales a considerar son los costos de combustible y la complejidad de la ruta. Si una ruta con pocas vueltas es solo un poco más larga que una ruta con muchas vueltas, es probable que sea una mejor opción para el conductor.
  • Mencioné las intersecciones. El siguiente diagrama puede proporcionar una idea de lo difícil que es lidiar con las intersecciones porque no se permiten todos los giros. Las restricciones que se muestran deben estar codificadas en el gráfico utilizado por el algoritmo de cálculo de ruta.
  • Bien, hablaré sobre los algoritmos de cálculo de ruta, pero recuerden que es solo un componente de muchos en el mapa y la tecnología de navegación. Como algunos han mencionado, calcular una ruta a lo largo de un mapa grande puede ser costoso y lento. Por lo tanto, se necesitan optimizaciones de Dijkstra:

    • UNA*. A * ha sido un concepto muy importante en la IA tradicional, y muchos algoritmos de cálculo de ruta lo incluyen. Pero, en mi experiencia en el desarrollo de algoritmos, A * ofrece solo una pequeña mejora en el rendimiento, quizás un 30%. Para otras aplicaciones en IA, los gráficos pueden ser muy diferentes de tal manera que el A * ofrece una ventaja de rendimiento mayor, pero no mucho para las redes de carreteras.
    • Bidireccional. Esta es una optimización algo más efectiva y casi todos los algoritmos de cálculo de ruta en la industria la usan, pero no principalmente por la ventaja de rendimiento que brinda. Significa que la ruta se calcula tanto hacia adelante desde el origen (con Dijkstra, A *, enrutamiento basado en el alcance, jerarquías de carreteras, jerarquías de contracción u otros métodos) y hacia atrás desde el destino. Al igual que A *, la técnica reduce el área buscada, pero lo que es más importante, algunos algoritmos más importantes (los que usan jerarquías de carreteras) requieren que funcione. Pero los cálculos de rutas bidireccionales traen sus propias complicaciones: el algoritmo debe determinar cuándo las dos búsquedas se han encontrado en un punto en una ruta óptima o casi óptima y eso es más complejo de lo que parece.
    • Usando la jerarquía de la red de carreteras. Esta es la optimización de rendimiento más importante y se utilizó hace mucho tiempo en compañías como Etak de una manera práctica pero no académicamente formal. Mi invento y mi trabajo sobre el enrutamiento basado en el alcance llevaron el concepto a la academia y generaron más algoritmos de producción de investigaciones como las jerarquías de carreteras y las jerarquías de contracción. Desde que el autor principal de los artículos sobre Jerarquías de autopistas, Peter Sanders, dio una charla en Google, se ha especulado que Google ha utilizado las Jerarquías de autopistas:
    • Atajos Este concepto reemplaza las secuencias de aristas con aristas simples en la preparación del gráfico. El concepto se usó en la industria antes de publicar mi artículo y lamento no tener espacio para mencionarlo en Trabajo adicional en mi documento. La gente de Karlsruhe en Alemania aprovechó al máximo los atajos en las Jerarquías de Carreteras y las Jerarquías de Contracción.
    • Otros problemas que afectan los algoritmos:
    • Incluso si ignoramos el rendimiento, Dijkstra no resuelve todos los problemas. Un problema es la dependencia del tiempo. A veces, los algoritmos deben permitir que los costos en los bordes cambien dependiendo del tiempo que la ruta lleve al usuario a un punto particular en las carreteras.
    • Por ejemplo, la carretera podría estar cerrada en un momento determinado.
    • O se podría predecir que el tráfico empeorará.
  • La mayoría de los algoritmos rápidos requieren procesamiento en los datos del mapa antes de que se calculen las rutas, pero algunos de los datos que afectan ese “preprocesamiento” cambian rápidamente, por ejemplo, datos de tráfico. Es muy difícil determinar qué parte del problema se resuelve en el preprocesamiento y qué parte se resuelve durante el cálculo de la ruta y cómo se resuelve.
  • Este diagrama muestra un poco de historia de los algoritmos:

    Una lista final de complejidades que enfrentan las tecnologías de mapas y navegación:

    • Orientación: ¿cómo se instruye al usuario en la ruta y cuándo?
    • Detectar cuando el conductor se ha salido de la ruta y necesita una nueva ruta.
    • Requisitos especiales según el tipo de transporte.
    • Bicicletas que no pueden usar legalmente todos los caminos.
    • Vehículos eléctricos que deben cargarse a lo largo de la ruta.
    • Uso de trenes y autobuses.
    • Viajes que combinan diferentes modos de transporte, incluido caminar
  • ¿Dónde estacionará el vehículo? Eso no es trivial en centros urbanos como San Francisco.
  • ¿Qué sucede si el dispositivo de navegación (por ejemplo, un teléfono celular) solo puede contener datos de mapas para áreas cercanas pero el conductor está en un viaje largo que a veces sale de la red celular?
  • Mantener los datos del mapa actualizados en teléfonos celulares.
  • Diferencias entre estados y países que afectan
    • Reglas para el uso de carreteras.
    • Lenguaje y sistemas de direccionamiento soportados por geocodificación.
  • Datos de mapas en 3D: organización y visualización. Complejos algoritmos gráficos en 3D aquí.
  • Mis credenciales:

    • Trabajé en una de las primeras compañías en proporcionar mapas digitales para los conductores, calcular rutas para ellos y usar el GPS para proporcionar orientación: Etak.
    • Trabajé en el inicio, Airflash, que desarrolló algunas de las primeras aplicaciones de mapas y navegación para teléfonos celulares.
    • Escribí el artículo antes mencionado para el Dr. Dobbs.
    • Desarrollé algoritmos de cálculo de ruta en Wavemarket (ahora llamados Location Labs)
    • Escribí un artículo muy citado e importante sobre el tema del cálculo de ruta. Aquí está toda la historia: la respuesta de Ron Gutman a ¿Cuál es el mejor algoritmo de programación que hayas creado?
    • Trabajé en mapeo en Yahoo.
    • Trabajé en mapas y navegación usando GPS y teléfonos móviles en Telenav, donde leí muchos documentos sobre el tema del cálculo de rutas.
    • Algunas patentes relacionadas.

    Google Maps utiliza el algoritmo A * para encontrar la ruta más corta y las rutas alternativas en tiempo real. El algoritmo A * es una forma avanzada de Breadth primera búsqueda . Evita el camino costoso y elige el camino más prometedor. Es un algoritmo muy inteligente. Se usa como el camino más corto en situaciones de la vida real, como en mapas, juegos donde puede haber muchos obstáculos. Está formulado en términos de gráficos ponderados en el caso de Google Map, este peso es el tiempo de viaje . A partir de un nodo específico (nodo de origen) de un gráfico, construye un árbol de rutas a partir de ese nodo, expandiendo las rutas un paso a la vez, hasta que una de sus rutas termina en el nodo de destino predeterminado.

    En cada iteración de su ciclo principal, A * necesita determinar cuáles de sus rutas parciales se expandirán en una o más rutas más largas. Lo hace en base a una estimación del costo (tiempo total necesario) para ir al nodo objetivo. Específicamente, A * selecciona la ruta que minimiza.

    [matemáticas] f (n) = g (n) + h (n) [/ matemáticas]

    donde n es el nodo de destino en la ruta, g ( n ) es el costo de la ruta desde el nodo de inicio a n, y h ( n ) es una heurística que estima la ruta más corta desde el origen hasta el destino. La heurística es específica del problema. En este caso, es tiempo de llegar a algún lado.

    Sinceramente, no tengo idea de qué algoritmos utiliza Google Maps, así que creo que debería dejar de escribir esto … 😐 Pero hay algunas cosas que vale la pena mencionar aquí.

    1) Estamos hablando de un servicio que tiene millones de usuarios . Esto significa automáticamente que probablemente hagan algo complejo. Bueno, tal vez las ideas básicas implementadas en el sistema se mencionan aquí y allá (o tal vez en documentos académicos), pero los detalles son ciertamente secretos comerciales.

    2) Cuando se trata de aplicaciones del mundo real, generalmente no estamos interesados ​​en la solución óptima / mejor. El algoritmo de Dijkstra devuelve la mejor (o más corta) ruta. A Google realmente no le importa si se informa o no la ruta más corta, siempre que la ruta informada sea lo suficientemente buena (digamos 1 o 2 minutos más lento).

    3) El algoritmo de Dijkstra funciona en cualquier gráfico. Es decir, cualquier gráfico sin sentido de aspecto feo ensamblado al azar. Pero Google Maps solo trata con redes viales bastante bien estructuradas. Para empezar, las redes de carreteras son (casi) gráficos planos . Eso significa que puede dibujar todos los bordes de la red en una hoja de papel de modo que ningún borde cruce otro. Ahora, ¿hay mejores algoritmos para gráficos planos? Parece que sí 🙂
    Algoritmos de ruta más corta más rápidos para gráficos planos

    Entonces, ¿está Google usando el algoritmo de Dijkstra? No lo sé, pero apuesto a que la respuesta es NO.

    Es esencialmente A * con tiempos de viaje como pesos, pero con restricciones adicionales, como los tiempos de espera pronosticados para turnos. Además, se simplifica al tratar de usar las arterias principales para distancias más largas para reducir el espacio de búsqueda del gráfico. Además, hay una gran cantidad de almacenamiento en caché de rutas, ya que alguien probablemente ha sido el camino que deseaba antes. Los tiempos de viaje en estas rutas se pueden actualizar con datos de tráfico / tiempo de viaje de usuarios y otras fuentes.

    Google nunca ha declarado públicamente qué algoritmo usa para las consultas P2P. Aunque el estado actual de la literatura en términos de tiempos de consulta es el algoritmo de etiquetado Hub.

    El algoritmo de etiquetado de Hub proporciona las consultas más rápidas para redes de carreteras estáticas, pero requiere una gran cantidad de ram para ejecutarse (18 GiB)

    El enrutamiento del nodo de tránsito es un poco más lento, aunque solo requiere alrededor de 2 GiB de memoria y tiene un tiempo de preprocesamiento más rápido.

    Las jerarquías de contracción proporcionan un buen equilibrio entre tiempos de preprocesamiento rápidos, requisitos de poco espacio (0.4 GiB) y tiempos de consulta rápidos.

    Ninguno de los algoritmos es completamente dominante …

    En realidad, no siempre te da el camino más corto. Encuentra la mejor ruta dependiendo de varias condiciones como el tráfico, el modo de transporte y, por supuesto, la longitud total de la ruta.

    En cuanto a la parte del algoritmo, no creo que Google haya revelado lo que realmente se usa, pero si tuviera que adivinar, tendría que ser una implementación del algoritmo de búsqueda A *. [Https: //en.m. wikipedia.org/wiki/…]

    Parece que Google también pesa en la información que está capturando de otros mapas, usuarios. Así es como determina si puede completar su propina más rápido si usa una ruta alternativa.