Esta web utiliza cookies para que podamos ofrecerte la mejor experiencia de usuario posible. La información de las cookies se almacena en tu navegador y realiza funciones tales como reconocerte cuando vuelves a nuestra web o ayudar a nuestro equipo a comprender qué secciones de la web encuentras más interesantes y útiles.
Problema Inicial.
- Los repartidores no utilizan la ruta óptima de reparto, teniendo en cuenta el tráfico en tiempo real.
- Como consecuencia, tardan más en realizar una cantidad X de repartos, lo cual supone una ineficiencia que redunda en menor beneficio.
Cuestiones Involucradas.
- Aplicación interactiva
- Modelo de Optimización
- Cloud
Solución.
- Creación de una aplicación que encuentre la ruta óptima de reparto teniendo en cuenta el tráfico en tiempo real.
Desarrollo del proyecto Optimizador de Rutas de Reparto
Obtención de los datos
De cara a poder plantear este proyecto hay que varios puntos clave:
- Poder geolocalizar los textos que indiquen los usuarios.
- Encontrar la ruta entre ambos puntos.
- Descubrir la distancia en tiempo real para ese trayecto.
Para ello, he tenido que trabajar con la API de Cartociudad que, aunque solo esté disponible en España, sirve para hacer pruebas. Con esta API he geolocalizado los puntos y he encontrado las rutas de viaje para pintarlas en el mapa.
Sin embargo, los tiempos de viaje ofrecidos por Cartociudad no son asimétricas, es decir, que el tiempo de viaje de A a B es el mismo que de B a A. Esto no es cierto en muchos casos, puesto que no todas las calles son de doble sentido.
Así pues, para extraer la información de tiempos de viaje he tenido que utilizar la API de Goolge Maps.
Optimización de la ruta Óptima
Al tratarse de un proceso intensivo en recursos, la optimización de la ruta óptima se realiza en otro servidor. Más concretamente, he elegido usar Cloud Run ya que facilitaría la escalabilidad de la aplicación de una forma sencilla.
Asimismo, el proceso de optimización de la ruta lo he realizado en Python usando un modelo de optimización de Recocido Simulado. Si bien este modelo no asegura encontrar el mínimo global de la ruta, genera muy buenos resultados en tiempos de ejecución cortos. Además, para pocos puntos de reparto (como es la aplicación) la computación no supone un problema y el mínimo global está casi garantizado.
Graficar la ruta Óptima
Tras hacer la petición al endpoint donde se aloja el servicio de optimización de rutas, recibiremos un vector de ruta, siendo cada valor el número de nodo del problema. Con este vector simplemente debemos encontrar las rutas a realizar y usar los datos de rutas obtenidos previamente para realizar la graficación de la propuesta del modelo.
Este mapa lo he creado en Leaflet para permitir una interactividad con el mismo para, por ejemplo, poder ver la aplicación dónde ha ubicado en el mapa cada uno de los puntos que hemos indicado.
Asimismo, a fín de demostrar la validéz del resultado, devuelvo también la matriz de distancias, por si el usuario querria probar diferentes rutas alternativas.