EcoViaggio: Travel responsibly, leave a greener tomorrow 🌍

Inspiración 💡

La idea que sirvió de inspiración para el desarrollo de este proyecto viene de Bizaway, una de las empresas patrocinadores que propuso como reto un optimizador de viajes para grupos centrado especialmente en el impacto medioambiental, lo que suponía un desafío estimulante y motivador.

Objetivo de la aplicación 🎯

La meta de la aplicación era optimizar desde el punto de vista de la huella de carbono los viajes realizados por un grupo de personas (de número indefinido) con un destino común, teniendo en cuenta que el lugar de partida de cada uno puede ser diferente. En función del lugar de partida, los viajeros deberán agruparse para minimizar el uso de vehículos privados, y llegar a su destino contaminando lo menos posible.

¿Cómo lo hemos construido? 🏗️

Para el diseño e implementación de las páginas se utilizó React en combinación con Bootstrap para facilitar el diseño responsivo y consistente. Por otro lado, el backend se implementó en Python, que realiza las peticiones a la API de OpenStreetMaps y los cálculos de la ruta óptima, que se obtienen a partir de un grafo interno generado con la API de Amadeus y acceso a la base de datos de Renfe . Toda esta funcionalidad de hace accesible al frontend mediante FastAPI.

Desafíos a los que nos enfrentamos 🐲

A lo largo de las 30 horas disponibles para programar, surgieron varios retos que hubo que afrontar para poder sacar el proyecto adelante. Los retos se pueden dividir principalmente en 2:

  • La obtención de todos los datos necesarios para realizar los cálculos en el backend: Mientras el acceso a rutas en coche era sencillo a través de APIs como OpenStreetMaps, la información relativa al transporte público era muy escasa o de díficil acceso mediante servicios de código abierto. Debido a que está información era la de mayor interés para el proyecto, se necesitó invertir una gran cantidad de tiempo para la recolección y preprocesado de datos.

  • El diseño del algoritmo para el cálculo de la ruta más corta: Mientras la mitad del equipo se ocupaba del punto anterior, la otra mitad estuvo diseñando el algoritmo para la optimización. La condición de que el número de personas era indefinido complicó de sobremanera la optimización de la ruta, para lo que tuvimos que aplicar nuestro conocimiento del grado de Matemáticas.

Otro reto que apareció más adelante fue la comprobación y análisis de las diferentes licencias que utilizaban las librerías, imágenes, fuentes, frameworks y otras herramientas que hemos utilizado, conocimiento que era necesario para elegir de manera adecuada y consciente la licencia que tendría nuestro proyecto, aspirando así también al premio del GPUL.

Logros de los que estamos orgullosos 🌟

  • Pese a no ser nuestro primer Hackaton, la dificultad del proyecto elegido ha sido mayor que la del año pasado, además de disponer de menos horas. Por tanto, estamos muy contentos de haber sido capaces de desarrollar este proyecto con dichas limitaciones.

  • La división del trabajo durante todo el desarrollo ha sido muy eficiente, comenzando con los dos problemas mencionados más arriba, para después seguir separando diferentes tareas como el desarrollo del frontend, la solución de problemas en el backend o el análisis de las diferentes licencias de las herramientas utilizadas.

  • El desarrollo del algoritmo para la optimización de las rutas incluyó diferentes conocimientos que mezclan las áreas de Matemáticas e Informática, como por ejemplo, clustering o análisis de grafos, como el camino más corto o el problema de viajante de comercio, lo que resultó muy satisfactorio al ser estudiantes del Doble Grado en Ingeniería Informática y Matemáticas.

  • Los datos disponibles sobre el transporte público, especialmente trenes, son bastante escasos, y no existen APIs sencillas que utilizar. Para superar esta limitación, usamos un dataset disponible en la página de Renfe que nos aportó las coordenadas de cada estación. Se establecieron las conexiones entre estas estaciones y se generó un grafo que, en conjunto con los datos de aviones, permitió proporcionar una ruta minimizando las emisiones utilizando transporte público.

¿Qué hemos aprendido? 🤓

Pese a lo limitado del tiempo, una experiencia como esta siempre proporciona nuevos conocimientos y experiencias que servirán en el futuro, como por ejemplo:

  • Acceso a la base de datos de vuelos de Amadeus.
  • Uso de la API de OpenMaps.
  • Uso de networkx para análisis de rutas en grafos.
  • Uso de FastAPI para ofrecer datos al frontend desde el backend.
  • Uso de React y React-Bootstrap.
  • Distintas licencias de software libre y compatibilidad entre ellas.

Futuras mejoras 📈

  • La inclusión de una base de datos de transporte público más completa, tanto a nivel europeo como nacional, que permita la creación de rutas más coherentes y realistas.
  • La mejora del algoritmo de optimización, teniendo en cuenta otros factores o más restricciones.
  • Considerar otras restricciones como la posición inicial de los viajeros, la duración de los trayectos y los horarios de los mismos o la conexión real de medios de transporte en las estaciones.
Share this project:

Updates