GMOR: Google Maps para la Optimización de Rutas
Universidad de La Laguna Junio 2008
Proyecto Ingeniería Informática
Ayoze Nicolás Fumero Alfonso Director: Juan José Salazar González
GMOR: Google Maps para la Optimización de Rutas
2
GMOR: Google Maps para la Optimización de Rutas
2
GMOR: Google Maps para la Optimización de Rutas
Agradecimientos Agradezco a Juan José Salazar González su apoyo e interés por el proyecto desde el primer día, así como sus consejos y aportaciones a lo largo del desarrollo del mismo. También quiero agradecer a mis padres (Nicolás y Maria) su apoyo incondicional, y su intento continuo por darme todas las facilidades posibles para la realización de la ingeniería informática.
3
GMOR: Google Maps para la Optimización de Rutas
Índice Prólogo................................................................................................................................................. 6 1. Introducción......................................................................................................................................8 1.1. Sistemas de Información Geográfica (SIG)..............................................................................8 1.1.1. Definición..........................................................................................................................8 1.1.2. Historia..............................................................................................................................8 1.2. Google Maps...........................................................................................................................11 1.2.1. Definición........................................................................................................................11 1.2.2. Historia............................................................................................................................11 1.2.3. Google Maps API............................................................................................................12 2. Nuestro caso práctico: Transporte escolar......................................................................................15 2.1. Introducción al VRP............................................................................................................... 15 2.2. Características de los problemas.............................................................................................15 2.2.1. Los clientes..................................................................................................................... 16 2.2.2. Los depósitos...................................................................................................................17 2.2.3. Los vehículos.................................................................................................................. 17 2.3. Formulación matemática.........................................................................................................17 2.3.1. El problema del viajante de comercio (TSP).................................................................. 18 2.3.2. El problema de los m viajantes de comercio (m-TSP)....................................................19 2.3.3. El problema con capacidades (CVRP)............................................................................20 2.4. Descripción de nuestro problema........................................................................................... 21 3. Método de resolución..................................................................................................................... 23 3.1. Algoritmo de Ahorros (Clark & Wright)................................................................................23 3.2. Ejemplo para el algoritmo de ahorros.....................................................................................24 3.2.1. Datos de entrada..............................................................................................................24 3.2.2. Consideraciones a tener en cuenta.................................................................................. 25 3.2.3. Traza del ejemplo............................................................................................................28 3.2.3. Datos de salida................................................................................................................ 30 3.3. Mejoras mediante búsquedas locales......................................................................................31 3.3.1. Optimización 2-Opt.........................................................................................................32 3.3.2. Optimización 3-Opt.........................................................................................................34 3.3.3. Optimización factorial.....................................................................................................36 4. Manual de la aplicación..................................................................................................................38 4.1. Formatos de archivos XML.................................................................................................... 38 4.2. Pantalla principal.................................................................................................................... 41 4.3. Interfaz del mapa digital......................................................................................................... 43 4.3.1. Mapa digital (Parte Superior)..........................................................................................44 4.3.2. Editor XML (Parte Inferior)............................................................................................56 4.4. Rutas....................................................................................................................................... 59 4.5. Requisitos de la aplicación..................................................................................................... 64 5. Futuro............................................................................................................................................. 65 5.1. Ampliaciones del problema.................................................................................................... 65 5.1.1. El problema con flota heterogénea (FSMVRP).............................................................. 65 5.1.2. El problema con ventanas de tiempo (VRPTW).............................................................66 5.2. Otras heurísticas clásicas........................................................................................................ 67 5.2.1 Algoritmo de ahorros basado en matching...................................................................... 67 4
GMOR: Google Maps para la Optimización de Rutas 5.3. Búsquedas locales multi-ruta.................................................................................................. 68 5.3.1 Transferencias cíclicas..................................................................................................... 69 6. Conclusiones...................................................................................................................................70 Bibliografía.........................................................................................................................................72
5
GMOR: Google Maps para la Optimización de Rutas
Prólogo Actualmente los mapas digitales son un elemento cada vez más habitual, y que puede llegar a englobar muchas funciones, como puede ser desde un uso profesional como la cartografía, un uso más personal como podría ser en viajes turísticos, o incluso hasta un uso empresarial como podría ser el insertar publicidad en ellos. Un mapa digital no es más que un almacenamiento de información espacial como dibujos electrónicos hechos a base de elementos gráficos sencillos (líneas, puntos, círculos, etc.) organizados en capas, con el objetivo de ofrecer una salida impresa o por pantalla. Con los avances que se han ido realizando en las tecnologías, estos mapas son cada vez más sofisticados, llegando a lograr una interacción cada vez mayor con ellos. No se limitan a mostrar sólo representaciones de lugares, sino que son capaces de llegar a localizar lugares específicos, trazar rutas,... También cabe destacar que la manera en que muestran la información ha mejorado notablemente ya que pueden llegar a mostrar desde mapas tradicionales con mucha información contenida, hasta mapas con imágenes totalmente reales tomadas desde el aire, o incluso una versión híbrida de éstas dos. La motivación de este proyecto precisamente está enfocada hacia el aprovechamiento de esta mayor interacción actual para lograr una serie de funcionalidades que puedan ser un indicio del potencial que esconden este tipo de software, todo esto a través de una interfaz lo más sencilla e intuitiva posible para que cualquier persona con unos conocimientos básicos pueda sacar provecho. Se pretende aprovechar alguno de los mapas digitales disponibles en internet, en nuestro caso Google Maps, para crear un
entorno que, por una parte, convierta en una tarea fácil el interactuar
con un mapa digital, como puede ser buscar lugares, localizar puntos, almacenar la información, trazar rutas entre un determinado conjunto de puntos,... por otra parte, que sea capaz de obtener una solución bastante buena al planteamiento de un problema en el que se tenga que hallar rutas entre un conjunto de puntos.
6
GMOR: Google Maps para la Optimización de Rutas Para tal fin se propone GMOR, una herramienta informática basada en Google Maps para el diseño de rutas de vehículos. Esta herramienta está compuesta de dos partes. Por un lado contiene una interfaz capaz de interactuar con un mapa digital de forma fácil e intuitiva, de llevar a cabo una serie de operaciones básicas, y capaz de exportar los datos resultantes de las operaciones en el mapa digital mediante estructuras XML. Y por otra, un segundo módulo en el que resolver problemas de diseños de rutas entre un conjunto de puntos, ya sean importados desde el mapa digital o generados de forma aleatoria. Por último, con esta aplicación se intenta realizar una simulación de un problema real de rutas como puede ser el transporte escolar aunque de manera algo simplificada, así como gracias a la tecnología XML dar la posibilidad de integración con otros proyectos. Nuestro deseo es el de llegar a mostrar las amplias posibilidades que pueden llegar a tener el uso de los mapas digitales en problemas reales, y que el prototipo implementado sirva como inspiración para un futuro proyecto más complejo que aborde los problemas de manera más real, y que cubran completamente las necesidades de los demandantes.
7
GMOR: Google Maps para la Optimización de Rutas
1. Introducción 1.1. Sistemas de Información Geográfica (SIG) 1.1.1. Definición
Un Sistema de Información Geográfica (SIG o GIS, en su acrónimo inglés) es una integración organizada de hardware, software, datos geográficos y personal, diseñado para capturar, almacenar, manipular, analizar y desplegar en todas sus formas la información geográficamente referenciada con el fin de resolver problemas complejos de planificación y gestión. También puede definirse como un modelo de una parte de la realidad referido a un sistema de coordenadas terrestre y construido para satisfacer unas necesidades concretas de información. El SIG funciona como una base de datos con información geográfica (datos alfanuméricos) que se encuentra asociada por un identificador común a los objetos gráficos de un mapa digital. De esta forma, señalando un objeto se conocen sus atributos e, inversamente, preguntando por un registro de la base de datos se puede saber su localización en la cartografía. La razón fundamental para utilizar un SIG es la gestión de información espacial. El sistema permite separar la información en diferentes capas temáticas y las almacena independientemente, permitiendo trabajar con ellas de manera rápida y sencilla, y facilitando al profesional la posibilidad de relacionar la información existente a través de la topología de los objetos, con el fin de generar otra nueva que difícilmente podríamos obtener de otra forma. 1.1.2. Historia
Para la geografía, la geología, la topografía, la biología y demás ciencias que hacen uso de la información geográfica los SIG han constituido una verdadera revolución para el conocimiento de los elementos y fenómenos que tienen lugar en la superficie terrestre. En su evolución histórica está mayoritariamente aceptada la existencia de unos periodos más o menos claros y definidos que engloban las distintas fases por las que ha transcurrido la evolución de los SIG desde su aparición hace casi cuarenta años. Primera etapa
La primera etapa se extendería desde las primeras aproximaciones de los años cincuenta hasta 8
GMOR: Google Maps para la Optimización de Rutas mediados de los setenta y se caracteriza por los esfuerzos individuales en el desarrollo y la aplicación de los sistemas. El nacimiento de los SIG va ligado al desarrollo de otros sistemas, de los cuales ellos son claros herederos por su similitud, los sistemas de Cartografía Asistida por Ordenador. Una característica importante de estos primeros pasos es que en todos los casos analizados las personas que iniciaron el desarrollo de estas tecnologías, desconocían realmente que lo que estaban creando eran Sistemas de Información Geográfica. Por un lado encontramos instituciones y otras instancias gubernamentales que ponen en marcha sus iniciativas de manera particular para resolver los problemas derivados de sus actividades relacionadas con el tratamiento de la información geográfica. Por otro lado está el grupo que engloba a las universidades. En ellas también se intentan encontrar nuevos método para el tratamiento de la información espacial. Este grupo busca el desarrollo de sistemas automáticos con los que realizar análisis de datos geográficos y no tanto la producción de cartografía. Lo que ambos grupos buscan es conseguir unas aplicaciones que de forma automática resuelvan cuestiones que hasta la fecha se habían solventado de manera manual. Las iniciativas pioneras se llevaron a cabo en los Canadá, Estados Unidos, y Gran Bretaña. El segundo de ellos es el más significativo en la evolución de los SIG, y no puede compararse con ningún otro lugar, tanto en el ámbito propio de los Sistemas de Información Geográfica como en el de las tecnologías relacionadas. Ese protagonismo estadounidense se prolonga desde los años cincuenta del siglo XX hasta la actualidad. Canadá
Canadá es referente mundial en la historia de los SIG debido al Canadian Geographic Information System
(CGIS), concebido y desarrollado desde 1966 lo que le convierte en el decano de los
Sistemas de Información Geográfica y también el primero que utiliza ese nombre. Estados Unidos
Los hitos más importantes de los SIG en los Estados Unidos son: • Laboratory of Computer Graphics and Spatial Analysis
(LCG). Creado en 1966 fue la
primera iniciativa cuyo objetivo principal era el diseño y desarrollo de software específico para aplicaciones cartográficas. Su principal logro fue el Symap. •
Trabajos de la administración. Es un claro ejemplo de dualidad ya que en la mayoría de los 9
GMOR: Google Maps para la Optimización de Rutas casos se usaban programas propios y específicos en base a las necesidades de cada departamento, pero algunas veces también se requirió software de terceros como el mencionado Symap del LCG. Los SIG más significativos son los del United Status Census Bureau (USCB) y el del United Status Geological Survey • Enviromental Systems Research Institute
(USGS).
(ESRI): No es el único caso que se puede encontrar
dentro del grupo de aportaciones comerciales. Lo que caracteriza a ESRI es su buen olfato comercial, sintetizado en su capacidad de previsión, de visión de futuro, de antelación. Su principal aportación al mundo de los SIG es la creación del estándar mundial en esta tecnología, ArcInfo . Gran Bretaña
Gran Bretaña sigue un modelo muy similar al estadounidense por presentar tanto iniciativas a nivel universitario como de la administración pero sin embargo no tiene ejemplos en el sector privado tan significativos como ESRI en los Estados Unidos. Segunda etapa
Siguiendo con las fases de evolución de los SIG, la segunda etapa se solaparía en sus primeros momentos con la primera, iniciándose hacia mediados de los años setenta y extendiéndose hasta principios de los años ochenta. Esta etapa de desarrollo está caracterizada, en general, por la disminución de la importancia de las iniciativas individuales y un aumento de los intereses a nivel corporativo, especialmente por parte de las instancias gubernamentales y de la administración. Tercera etapa o fase comercial
Inmediatamente después, también a inicios de los años ochenta, se da lo que se ha venido a conocer como fase comercial. Es en este periodo cuando el interés de distintas grandes industrias relacionadas directa o indirectamente con los SIG crece sobremanera, debido a la gran avalancha de productos en el mercado informático internacional que hicieron generalizarse a esta tecnología. Cuarta etapa
El paso siguiente a la etapa comercial para profesionales, se corresponde con la década de los noventa, donde los SIG empezaron a difundirse al nivel del usuario doméstico debido a la 10
GMOR: Google Maps para la Optimización de Rutas generalización de los ordenadores personales o microordenadores. Quinta etapa
En los primeros años del siglo XXI la mejora del rendimiento de los ordenadores debido a los avances tecnológicos, por una parte, y la consolidación, por otra parte, de la necesidad de paquetes informáticos de información geográfica conforman una nueva etapa en la evolución de los SIG, sobre todo con la generalización del uso de Internet, que permite la distribución a nivel mundial de cartografía.
1.2. Google Maps 1.2.1. Definición Google Maps (conocido al principio como Google Local ) es el
nombre de un servicio gratuito de
Google . Es un servidor de aplicaciones de mapas en Web. Ofrece imágenes de mapas desplazables,
así como fotos de satélite del mundo entero e incluso la ruta entre diferentes ubicaciones. 1.2.2. Historia
Fue anunciado por primera vez en Google Blog el 8 de febrero del 2005. Originalmente soportaría sólo a los usuarios de Internet Explorer y Mozilla Firefox , el soporte para Opera y Safari fue agregado el 25 de febrero del 2005. El software estuvo en su fase beta durante 6 meses antes de convertirse en parte de Google Local , el 6 de octubre del 2005. Como en otras aplicaciones Web de Google, se usa un gran número de archivos de Javascript para crear Google Maps. Como el usuario puede mover el mapa, la visualización del mismo se baja desde el servidor. Cuando un usuario busca un negocio, la ubicación es marcada por un indicador en forma de pin, el cual es una imagen PNG transparente sobre el mapa. Para lograr la conectividad sin sincronía con el servidor, Google aplicó el uso de AJAX dentro de esta aplicación.
En abril del 2005, Google añadió un Ride Finder (en español, Ubicador de Vehículo), en el cual una persona puede ubicar un taxi o un transporte público en una gran ciudad en tiempo real. La persona debe hacer click en la barra de Update Position (en español, Actualizar Posición) para encontrar la 11
GMOR: Google Maps para la Optimización de Rutas nueva ubicación del vehículo en cada momento. En junio del 2005, los mapas de carreteras de los Estados Unidos, Puerto Rico, Canadá y el Reino Unido fueron integrados a Google Maps. A mediados de julio del 2005, Google comienza la versión japonesa de Google Maps y Google Local .
En abril del 2005, se crea una vista alternativa a la que se mostraba por el satélite. El mayor responsable de que Google Maps sea una realidad es el QuickBird , un satélite comercial de teledetección. En junio del 2005, las imágenes de alta resolución (o a la máxima ampliación), ya estaban disponible para la mayoría de Canadá y Estados Unidos (incluyendo los estados de Hawaii y Alaska). Además se tienen de otros países en forma parcial como Francia, Irlanda, Italia, Irak, Japón, Bahamas, Kuwait, México, Holanda, etc. Sin embargo, algunas áreas fueron oscurecidas por motivos de seguridad nacional, como el Capitolio, la Casa Blanca y el área 51 . Para el resto del planeta las imágenes se encuentran disponible en baja resolución, excepto para los polos. No todas las fotos mostradas son de satélites, algunas son de ciudades tomadas por aviones que vuelan a bastante altura (sobre los 10.000 metros). Este es el caso de Canarias, donde las fotos que se muestran son propiedad de GrafCan. La información contenida en los mapas mostrados es proveída principalmente por la empresa Navteq, que es considerada en estos momentos la mejor del sector debido a la veracidad de sus datos, y la frecuencia con la que son actualizados sus datos. En el caso de Canarias los datos actuales provienen de la empresa TeleAtlas . El 22 de julio del 2005, Google lanza una vista dual de su Google Maps. Esta vista combina la vista de satélite con mapas ilustrados y los nombres de calles en las imágenes del mundo real. Esto hace más fácil encontrar rutas entre dos puntos. 1.2.3. Google Maps API
Debido a la popularidad que estaba alcanzando Google Maps y a los intentos de personalizar los mapas por parte de los usuarios mediante la ingeniería inversa, Google optó por desarrollar un API para Google Maps, de forma que facilitara a los usuarios el integrar Google Maps en sus webs personales y con sus propios datos.
12
GMOR: Google Maps para la Optimización de Rutas Mediante el uso de la API de Google Maps se puede lograr insertar un completo Google Maps en páginas web externas a Google . Para comenzar, basta con generar una clave personalizada para la página web y el directorio donde se desea insertar el mapa. Se le da a un usuario la posibilidad de crear su propia interfaz para el mapa simplemente introduciendo el código Javascript proporcionado por Google a su página web, y una vez hecho esto, utilizando las funciones Javascript suministradas por la API
para interactuar con el mapa.
La primera versión de la API, no tenía la habilidad para hallar direcciones, por lo que era necesario especificar manualmente la latitud y la longitud del punto requerido, aunque esto fue implementado en versiones posteriores. Aproximadamente por la misma época Yahoo lanzó su propio API para su mapa, que aunque no tenía soporte internacional ya contaba con una herramienta para determinar la geopocisión de un objeto. También cabe destacar que la API de Google Maps es capaz de funcionar ejecutándola localmente, para de este modo facilitar las tareas de debug o depuración durante la implementación de páginas personalizadas. Dentro de esta API podemos escoger entre dos versiones. Por un lado tenemos la gratuita y por otro la destinada a empresas. Básicamente la diferencia entre estas dos versiones viene a ser que si se cuenta con una licencia de empresa, Google proporciona una asistencia total al cliente y la posibilidad de desarrollar aplicaciones de intranet que utilicen la API de Google Maps. Además no se cuenta con las limitaciones en las peticiones a los servidores de Google Maps que si se tienen en la versión gratuita del mismo, las cuales son unas 10.000 peticiones a sus servidores al día en intervalos de 8,64 segundos aproximadamente. En cuanto a la información mostrada en los mapas, cabe destacar que en lugar de usar los mapas de Navteq, al igual que la página de Google Maps, esta API usa
los mapas proporcionados por
TeleAtlas , empresa de origen europeo, que ofrece una opción más económica y que está en pleno
auge, de hecho cada día sus resultados se acercan más a los proporcionados por Navteq.
13
GMOR: Google Maps para la Optimización de Rutas Como caso particular podemos destacar el ocurrido en las Islas Canarias, ya que aunque el callejero mostrado sigue perteneciendo a la empresa TeleAtlas , las imágenes mostradas pertenecen la empresa GrafCan, la cual tiene su propio callejero que llega a ser en algunos aspectos incluso más detallado que el proporcionado por TeleAtlas . De hecho, en lo que se refiere al cálculo de direcciones postales, mientras que TeleAtlas hace una aproximación de la localización de dichas direcciones, GrafCan tiene totalmente localizadas las direcciones en su callejero. Como desventaja, y posible razón de que no se use el callejero de GrafCan, cabe decir que aún dichos callejeros no poseen el sentido de todas las calles, y esto puede ser considerado un elemento indispensable por los responsables de Google ya que es un elemento primordial en sus mapas.
14
GMOR: Google Maps para la Optimización de Rutas
2. Nuestro caso práctico: Transporte escolar 2.1. Introducción al VRP
El problema de distribuir productos desde ciertos depósitos a sus usuarios finales juega un papel central en la gestión de algunos sistemas logísticos y su adecuada planificación puede significar considerables ahorros. Esos potenciales ahorros justifican en gran medida la utilización de técnicas de Investigación Operativa como facilitadoras de la planificación, dado que se estima que los costos del transporte representan entre el 10% y el 20% del costo final de los bienes [1]. En ese sentido, las últimas cuatro décadas han visto un enorme esfuerzo por resolver estos problemas. En 1959, Dantzig y Ramser [2] realizaron por primera vez una formulación del problema para una aplicación de distribución de combustible. Cinco años más tarde, Clarke y Wright [3] propusieron el primer algoritmo que resultó efectivo para su resolución: el popular Algoritmo de Ahorros ( Saving Algorithm ), y del que hablamos en la sección 3.1. A partir de estos trabajos, el área de enrutamiento de vehículos ha crecido de manera explosiva. Por un lado, hacia modelos que incorporan cada vez más características de la realidad, y, por otro lado, en la búsqueda de algoritmos que permitan resolver los problemas de manera más eficiente. Estos modelos y algoritmos deben su éxito, en buena parte, a la evolución de los sistemas informáticos y de los SIGs. El crecimiento en el poder de cómputo y la baja en sus costos, ha permitido disminuir los tiempos de ejecución de los algoritmos. Y el desarrollo de los Sistemas de Información Geográfica resulta fundamental para lograr una adecuada interacción de los modelos y algoritmos con los encargados de realizar la planificación. Pero el interés que reviste el área no es exclusivamente práctico. Los problemas de enrutamiento de vehículos son problemas de optimización combinatoria y pertenecen, en su mayoría, a la clase NP Hard . La motivación académica por resolverlos radica en que no es posible construir algoritmos que en tiempo polinomial resuelvan cualquier instancia del problema (a no ser que P = NP). 2.2. Características de los problemas
A grandes rasgos un problema de enrutamiento de vehículos consiste en, dado un conjunto de clientes y depósitos dispersos geográficamente y una flota de vehículos, determinar un conjunto de rutas de costo mínimo que comiencen y terminen en los depósitos, para que los vehículos visiten a los clientes mientras se respeten sus capacidades y quizás otras restricciones adicionales.
15
GMOR: Google Maps para la Optimización de Rutas Las características de los clientes, depósitos y vehículos, así como diferentes restricciones operativas sobre las rutas, dan lugar a diferentes variantes del problema. En las próximas secciones mostramos algunas; véase [1] para encontrar otras.
2.2.1. Los clientes
Cada cliente tiene una cierta demanda que debería ser satisfecha por algún vehículo. En muchos casos, la demanda es un bien que ocupa espacio en los vehículos y es usual que un mismo vehículo no pueda satisfacer la demanda de todos los clientes en una misma ruta. Un caso equivalente al anterior ocurre cuando los clientes son proveedores y lo que se desea es recoger una mercancía y transportarla hacia el depósito. También podría ocurrir que la mercancía deba ser transportada a los clientes pero que no esté inicialmente en el depósito, sino distribuida en ciertos sitios proveedores. En este caso, los proveedores deben ser visitados antes que los clientes, y el problema es del tipo “recogidas y entregas”. En otros casos la demanda puede verse no como un bien sino un servicio: el cliente simplemente debe ser visitado por el vehículo. Un mismo vehículo podría, potencialmente, visitar a todos los clientes. En otra variante del problema, cada cliente tiene una ubicación y desea ser transportado hacia otro sitio. Aquí la capacidad del vehículo impone una cota sobre la cantidad de clientes que puede transportar simultáneamente. Es usual que cada cliente deba ser visitado exactamente una vez. Sin embargo, en ciertos casos se acepta que la demanda de un cliente sea satisfecha en momentos diferentes y por vehículos diferentes. Los clientes podrían tener restricciones relativas a su horario de servicio. Usualmente estas restricciones se expresan en forma de intervalos de tiempo (llamados ventanas de tiempo ) en los que se puede visitar al cliente. En problemas con varios vehículos diferentes podrían existir restricciones de compatibilidad entre éstos y los clientes. En estos casos, cada cliente sólo puede ser visitado por algunos de los vehículos (por ejemplo, algunos vehículos muy pesados no pueden visitar ciertas localizaciones). 16
GMOR: Google Maps para la Optimización de Rutas También resulta de interés el estudio de problemas donde la demanda de cada cliente no es un número conocido sino una variable aleatoria. Son los llamados problemas con demandas estocásticas.
2.2.2. Los depósitos
Tanto los vehículos como las mercancías a distribuir (si las hubiera) suelen estar ubicadas en depósitos. Usualmente se exige que cada ruta comience y finalice en un mismo depósito, aunque éste podría no ser el caso en algunas aplicaciones (por ejemplo, podría ser que el viaje debiera finalizar en el domicilio del conductor del vehículo y que fuesen dos conductores diferentes los que usan ese vehículo, con lo que el domicilio donde termina dependerá de a qué conductor le toca usarlo ese día). En los problemas con múltiples depósitos cada uno de éstos tiene diferentes características, por ejemplo, su ubicación y capacidad máxima de producción. Podría ocurrir que cada depósito tenga una flota de vehículos asignada a priori o que dicha asignación sea parte de lo que se desea determinar. Los depósitos, al igual que los clientes, podrían tener ventanas de tiempo asociadas. En algunos casos debe considerarse el tiempo necesario para cargar o preparar un vehículo antes de que comience su ruta, o el tiempo invertido en su limpieza al regresar. Incluso, por limitaciones de los propios depósitos, podría querer evitarse que demasiados vehículos estén operando en un mismo depósito a la vez (es decir, la congestión del depósito). 2.2.3. Los vehículos
La capacidad de un vehículo podría tener varias dimensiones, como por ejemplo peso y volumen. Cuando en un mismo problema existen diferentes mercancías a transportar, los vehículos podrían tener varios compartimentos, de modo que la capacidad del vehículo dependa de la mercancía de la que se trate. En general, cada vehículo tiene asociado un costo fijo en el que se incurre al utilizarlo y un costo variable proporcional a la distancia que recorra. Los problemas en que los atributos (capacidad, costo, etc.) son los mismos para todos los vehículos se denominan de flota homogénea , y, si hay diferencias, de flota heterogénea . La cantidad de vehículos disponibles podría ser un dato de entrada o una variable de decisión. El objetivo más usual suele ser utilizar la menor cantidad de vehículos y minimizar la distancia recorrida ocupa un segundo lugar. Regulaciones legales podrían imponer restricciones sobre el tiempo máximo que un vehículo puede estar en circulación e incluso prohibir el pasaje de ciertos vehículos por ciertas zonas. En algunos casos se desea que la cantidad de trabajo realizado por los vehículos (usualmente el tiempo de viaje) no sea muy dispar. En general se asume que cada vehículo recorre una sola ruta en el período de planificación, pero últimamente se han estudiado modelos en los que un mismo vehículo puede recorrer más de una ruta. 2.3. Formulación matemática
En esta sección se formulan algunos de los problemas clásicos y sus extensiones como problemas de Programación Entera. Dichas formulaciones se dan por completitud y para evitar ambigüedad 17
GMOR: Google Maps para la Optimización de Rutas en la definición. La red de transporte por la que circulan los vehículos se modela mediante un grafo ponderado G = (V,A). Los nodos del grafo representan a los clientes y depósitos. En problemas con un depósito y n clientes, el nodo 0 representa al depósito y los nodos 1, . . . , n a los clientes. En algunos casos se agrega una copia del depósito etiquetada con n +1 para simplificar la formulación, siendo en este caso 0 el origen de las rutas y n + 1 es el destino final. Cada arco (i, j) ∈ A representa el mejor camino para ir desde el nodo i hacia el nodo j en la red de transporte y tiene asociado un costo c ij y un tiempo de viaje t ij . Según la estructura de los costos y los tiempos y las características de la red, el grafo puede ser simétrico o asimétrico. Puede suponerse que G es completo, pues entre todo par de lugares de una red de transporte razonable, debería existir algún camino. Denotaremos por N + i y N − i al conjunto de nodos adyacentes e incidentes al nodo i, es decir, N + i = {j ∈ V | (i, j) ∈ A} y N − i = {j ∈ V | (j, i) ∈ A}. 2.3.1. El problema del viajante de comercio (TSP)
En el Problema del Agente Viajero (o TSP por “Travelling Salesman Problem”) se dispone de un solo vehículo que debe visitar a todos los clientes en una sola ruta y a costo mínimo. No suele haber un depósito (y si lo hubiera no se distingue de los clientes), no hay demanda asociada a los clientes y tampoco hay restricciones temporales. El problema puede formularse como: min
∑
i , j ∈ A
s. a.
cij x ij
∑ +
(1.1)
x ij =1
∀ i ∈ V
(1.2)
x ij =1
∀ j ∈ V
(1.3)
∀ S ⊂V
(1.4)
j ∈ N i
∑ -
i∈ N j
∑
+
xij 1
i∈ S , j ∈ N i \S
x ij ∈{0, 1 }
∀ i , j ∈ A .
Esta formulación fue propuesta por Dantzig, Fulkerson y Johnson [4]. Las variables binarias x ij indican si el arco (i, j) es utilizado en la solución, es decir, en la ruta que debe seguir el vehículo. La función objetivo (1.1) establece que el costo total de la solución es la suma de los costos de los arcos utilizados. Las restricciones (1.2) y (1.3) indican que la ruta debe llegar y abandonar cada nodo exactamente una vez. Finalmente, las restricciones (1.4) son llamadas restricciones de eliminación de subrutas e indican que todo subconjunto de nodos S debe ser abandonado al menos una vez. Nótese que si no se impusieran estas restricciones la solución podría constar de más de un ciclo, como se muestra en la figura 1.1. Esta solución viola la restricción (1.4) para S = {0, 1, 2} . Existen diferentes tipos de escritura para las restricciones de eliminación de subrutas. Asumiendo que ∣ A∣=O n2 , esta formulación tiene una cantidad polinomial de variables binarias y O 2n restricciones.
18
GMOR: Google Maps para la Optimización de Rutas
Figura 1.1: Una solución formada por 2 subrutas. El problema puede alternativamente formularse con una cantidad polinomial de restricciones, agregando variables reales u i para i = 1, . . . , n y sustituyendo las restricciones (1.4) por u i − u j nx ij n − 1
∀ i , j ∈ E , i ≠0, j ≠0.
(1.6)
Este modelo alternativo fue propuesto por Miller, Tucker y Zemlin [5] y fuerzan a que las variables reales u i que determinen una cantidad estrictamente creciente a lo largo de la ruta (es decir, u j ≥ u i 1 si j es visitado inmediatamente después que i ). En esta nueva formulación hay O n2 variables binarias, O n variables positivas y O n2 restricciones. Sin embargo, esta formulación no resulta apta para la resolución de problemas de tamaño considerable mediante métodos exactos , pues si bien se disminuye la cantidad de restricciones, la cota que se obtiene resolviendo su relajación lineal resulta en general muy débil. La mayor parte de los problemas de enrutamiento de vehículos son generalizaciones del TSP. En ese sentido, éste puede considerarse el problema de enrutamiento de vehículos más simple. No obstante, pertenece a la clase de problemas NP-Hard [6] y es uno de los Problemas de Optimización Combinatoria más clásico y difundido. 2.3.2. El problema de los m viajantes de comercio ( m-TSP)
El problema de los m agentes viajeros (o m-TSP) es una generalización del TSP en la cual se tiene un depósito y m vehículos. El objetivo es construir exactamente m rutas, una para cada vehículo, de modo que cada cliente sea visitado una vez por uno de los vehículos. Cada ruta debe comenzar y finalizar en el depósito. Una formulación, dada por Miller et al. [5] es la siguiente: min
∑
cij x ij
i , j ∈ A
s.a.
∑
x i0 =
∑
x ij =
-
i ∈ N 0
∑
x 0j m
∑
x ij=1
+
(1.7)
j ∈ N 0
∀ i ∈ V \{0}
(1.8)
u i− u j nx ij n−1
∀ i , j ∈ A,i ≠0, j ≠0
(1.9)
x ij ∈{0, 1 }
∀ i , j ∈ A
-
i ∈ N j
u i 0
+
j ∈ N i
∀ i ∈V \{0} .
19
GMOR: Google Maps para la Optimización de Rutas El modelo es similar al segundo modelo presentado para el TSP. La restricción (1.7) indica que exactamente m vehículos salen del depósito y las (1.8) asegura que cada cliente es un nodo intermedio en exactamente una ruta. Finalmente, con (1.9) se eliminan las subrutas. Modificando (1.9) es fácil incorporar en el problema una limitación sobre el número máximo Q de clientes que pueden estar en una misma ruta. La nueva restricción es: u i−u j Qxij Q −1 Y el nuevo problema pasa a ser el CVRP (que describimos con detalle en la siguiente sección) con demandas unitarias. 2.3.3. El problema con capacidades (CVRP)
El CVRP es una extensión del m-TSP en la cual cada cliente i ∈ V \ {0} tiene asociada una demanda d i y cada vehículo tiene una capacidad Q (la flota es homogénea). En este problema la cantidad de rutas no está fijada de antemano como en el TSP y en el m-TSP, aunque suele haber un número m máximo de vehículos en la flota. d i es su demanda total y r(S) indica la mínima Para un conjunto de clientes S , d S =∑ i ∈ S cantidad de vehículos necesarios para servirlos a todos. En la formulación conocida con el nombre de dos índices , se utilizan las variables binarias x ij para determinar si el arco (i, j) se utiliza o no en la solución. El problema se formula de la siguiente manera: min
∑
cij x ij
(1.10)
i , j ∈ A
s. a.
∑
x i0=
-
-
(1.11)
j ∈ N 0
x ij =
i ∈ N j
∑
x 0j m
+
i ∈ N 0
∑
∑ ∑ +
x ij =1
∀ i ∈V \{0}
(1.12)
∀ S ⊂V \{0}
(1.13)
j ∈ N i
xij r S +
i ∈ S , j ∈ N i \S
x ij ∈{0,1 }
∀ i , j ∈ A
La función objetivo (1.10) es el costo total de la solución. Las restricciones (1.11) indica que m es la cantidad de vehículos utilizados en la solución y que todos los vehículos que parten del depósito deben regresar. La restricción (1.12) aseguran que todo cliente es un nodo intermedio de alguna ruta. Finalmente, la restricción (1.13) actúa como restricción de eliminación de subrutas y a la vez impone que la demanda total de los clientes visitados por un vehículo no puede superar la capacidad Q.
20
GMOR: Google Maps para la Optimización de Rutas Determinar el valor de r(S) requiere la resolución del siguiente problema: r S =min
∑ y
k ∈ K
s. a.
∑ d x i
k
C yk
ik
∀ k ∈ K
i ∈ S
∑ x
k ∈ K
=1
ik
∀ i ∈ S
x ik ∈{0, 1 }
∀ i ∈ S , ∀ k ∈ K
y k ∈{0,1 }
∀ k ∈ K ,
donde K es un conjunto con suficientes vehículos para satisfacer la demanda (por ejemplo, n). Este problema es conocido como Bin Packing Problem (BPP) [7]. Una cota inferior para la cantidad de vehículos está dada por el valor óptimo de la relajación lineal del BPP, que es el entero superior de d S / Q . La formulación es válida incluso cuando se sustituye r(S) por la cota inferior mencionada anteriormente, entero superior de d S / Q , aunque su relajación lineal es más débil que cuando se usa la solución exacta del BPP. En algunos casos se agrega a este problema la restricción de que ninguna ruta puede tener un largo mayor que cierta cota L. Dicha restricción no puede incorporarse a esta formulación, pues las rutas no están individualizadas. Para incorporar esta restricción adicional (u otras como ventanas temporales, etc.) es necesario usar variables con tres índices del tipo x k ij . 2.4. Descripción de nuestro problema
En primer lugar mencionar que a pesar de poder hacer un planteamiento generalizado, nos centraremos en un caso en particular con el objetivo de ser lo más claro posible: el transporte escolar. Se dispone de un conjunto de puntos localizados sobre un mapa, y necesitamos hallar la/s posible/s ruta/s que nos permitan visitar todos los puntos del problema. Estos puntos pueden ser de tres tipos: ● Salida : será el punto desde donde comiencen todas las rutas. En nuestro problema particular diremos que es el depósito donde se encuentran los vehículos que recogerán a los alumnos. Cada uno de estos vehículos cuenta con una capacidad máxima de alumnos que pueda transportar y que no será posible sobrepasar. ● Paradas: serán los puntos por donde las rutas deben pasar y que tendrán una cierta demanda a cumplir. En nuestro problema, en esas paradas se encontrarán los alumnos y la demanda a cumplir indicará el número de alumnos a recoger en dicho punto. ● Llegada : será el punto donde finalicen todas las rutas. En nuestro problema, representará el colegio donde deben ser entregados los alumnos. Con lo expuesto anteriormente podemos decir entonces que el problema consiste en hallar el número de rutas necesarias para recoger a todos los alumnos utilizando para ello unos vehículos con capacidad limitada mediante una solución buena.
21
GMOR: Google Maps para la Optimización de Rutas Por tanto, el problema que más se ajusta a nuestro caso es el problema de enrutamiento de vehículos con restricciones (CVRP) . Hay que destacar que este planteamiento está simplificado, ya que en el caso de querer abordarlo de manera totalmente realista, la complejidad del problema sería mucho mayor debido al gran número de otros factores que habría que tener en cuenta, ver figura a continuación. El objetivo de este proyecto no es el de resolver un problema totalmente real sino mostrar el potencial que pueden ofrecer los SIGs a la resolución de problemas de rutas de vehículos en el mundo real (es decir, en logística).
Figura 1.2: Complejidad de los problemas.
22
GMOR: Google Maps para la Optimización de Rutas
3. Método de resolución 3.1. Algoritmo de Ahorros (Clark & Wright)
Uno de los algoritmos más difundidos para el CVRP es el Algoritmo de Ahorros de Clarke y Wright [3]. Si en una solución dos rutas diferentes (0, . . . , i, 0) y (0, j, . . . , 0) pueden ser combinadas formando una nueva ruta (0, . . . , i, j, . . . , 0) como se muestra en la figura 2.1, el ahorro (en distancia) obtenido por dicha unión es sij =c i0 c 0j − cij
(2.1)
Figura 2.1: Dos rutas antes y después de ser unidas En la nueva solución los arcos (i, 0) y (0, j) no serán utilizados y se agregará el arco (i, j). En este algoritmo se parte de una solución inicial y se realizan las uniones que den mayores ahorros siempre que no violen las restricciones del problema. Existe una versión paralela en la que se trabaja sobre todas las rutas simultáneamente, y otra secuencial que construye las rutas de una en una. Algoritmo de Ahorros (Versión paralela)
Paso 1 (inicialización). Para cada cliente i construir la ruta (0, i, 0) . Paso 2 (cálculo de ahorros). Calcular sij para cada par de clientes i y j. Paso 3 (mejor unión). Sea si j = maxs ij , donde el máximo se toma entre los ahorros que no han sido considerados aún. Sean r i y r j las rutas que contienen a los clientes i y j respectivamente. Si i es el último cliente de r i y j * es el primer cliente de r j y la combinación de r i y r j es factible, combinarlas. Eliminar si j de futuras consideraciones. Si quedan ahorros por examinar ir al paso 3, si no terminar. ∗
∗
∗
∗
∗
∗
∗
∗
∗
∗
∗
∗
∗
Algoritmo de Ahorros (Versión secuencial)
Paso 1 (inicialización). Para cada cliente i construir la ruta (0, i, 0) . Paso 2 (cálculo de ahorros). Calcular sij para cada par de clientes i y j. Paso 3 (selección). Si todas las rutas fueron consideradas, terminar. Si no, seleccionar una ruta que aún no haya sido considerada. 23
GMOR: Google Maps para la Optimización de Rutas Paso 4 (extensión). Sea (0, i, . . . , j, 0) la ruta actual. Si no existe ningún ahorro conteniendo a i o a j, ir al paso 3. Sea s k i o s jl el máximo ahorro conteniendo a i (o a j). Si k * o l es el último (o primer) cliente de su ruta y la combinación de dicha ruta con la actual es factible, realizar dicha combinación. Eliminar s k i o s jl de futuras consideraciones. Ir al paso 4. ∗
∗
∗
∗
∗
Dado que en la definición de sij solamente interviene la ubicación de los clientes i y j, todos los ahorros pueden calcularse una sola vez al comienzo de la ejecución del algoritmo. En la versión secuencial podría calcularse los ahorros a medida que son necesarios. Si el máximo ahorro es negativo, la combinación de las rutas aumentará la distancia recorrida pero disminuirá la cantidad de rutas de la solución (y por lo tanto la cantidad de vehículos utilizados). Dependiendo de las particularidades de cada problema, debe decidirse si realizar o no ese tipo de combinaciones. Se ha observado que utilizando la definición original de ahorro se suele generar algunas rutas circulares (ver figura 2.2) lo cual puede ser negativo. Para solucionar este problema algunos autores [13, 14, 15] proponen redefinir el ahorro como: sij =c i0 c 0j − λcij
(2.2)
donde λ es un parámetro que penaliza la unión de rutas con clientes lejanos (llamado parámetro de forma o shape parameter ). Dicho parámetro puede utilizarse también para generar un conjunto de soluciones diferentes mediante la ejecución repetida del algoritmo con diferentes valores de λ. En general ocurre que al comienzo de la ejecución del algoritmo dos alternativas pueden parecer equivalentes y, sin embargo, la elección tiene un gran impacto en la solución final. Las soluciones obtenidas con el Algoritmo de Ahorros pueden, en general, ser mejoradas mediante operadores de búsqueda local como el algoritmo 3-opt [16], esto lo tratamos en la sección 3.3.
Figura 2.2: Un ejemplo de rutas circulares y radiales. 3.2. Ejemplo para el algoritmo de ahorros
A continuación, se ilustra cómo funciona el algoritmo implementado sobre un pequeño ejemplo. 3.2.1. Datos de entrada
Los datos inicialmente disponibles son: ● n = 4 clientes {1,2,3,4 } ●
El depósito será el punto 0 24
GMOR: Google Maps para la Optimización de Rutas ●
Las demandas para cada uno de los clientes son:
●
La matriz de distancias o costes es:
●
La capacidad de los vehículos es 20.
0 2 2 0 c ij = 3 2 2 4 2 4
d i = 0,5,13,12,8 3 2 0 4.5 5
2 4 4.5 0 3
2 4 5 3 0
Figura 3.1: Situación inicial. 3.2.2. Consideraciones a tener en cuenta Estado inicial
El primer paso que se realiza es el calcular el conjunto de rutas iniciales, que no es más que asignar cada uno de los puntos a una ruta diferente, tal y como se muestra en la figura 3.2.
Figura 3.2: Estado inicial. 25
GMOR: Google Maps para la Optimización de Rutas Sobrecarga de vehículos
Una vez tenemos el estado inicial, el siguiente paso es empezar a realizar las fusiones de las diferentes rutas, ya que se trata de realizar conexiones entre diferentes rutas para obtener una mejor solución que la inicial. Para esto calculamos el ahorro que obtendríamos al fusionar las diferentes rutas que tenemos actualmente, actualmente, mediante la fórmula (2.1).
Figura 3.3: Ejemplo para la fusión i = 1 y j = 2. En el caso de que sij 0 dicha fusión debe ser tenida en cuenta. Pero en estas posibles fusiones hay que tener en cuenta la restricción que se nos impone con la capacidad limitada de los vehículos. Por ejemplo, en el caso de intentar la unión entre los puntos 2 y 3 obligamos a que el vehículo cargue d 2d 3= 25 unidades, y esto es imposible por que Q = 20.
Figura 3.4: Fusión entre los puntos 2 y 3. dado que en los datos iniciales hemos dicho que la capacidad de los vehículos es 20, esta ruta no es factible y por lo tanto no se debe considerar. 26
GMOR: Google Maps para la Optimización de Rutas Puntos Internos
Un punto, el cual no es el primero ni el último en una de las rutas actuales, no puede ser considerado para realizar posibles fusiones. Por ejemplo, como se puede ver en la figura 3.5, el punto 2 no cuenta con un arco desde o hasta el depósito. Por tanto si2 o s 2j no deben ser consideradas a la hora de fusionar rutas.
Figura 3.5: Puntos internos. Puntos que se encuentren en la misma ruta
Si los puntos sugeridos por la fórmula del ahorro son extremos de la misma ruta, la operación de fusión no puede llevarse a cabo, ya que en ese caso se formarían subrutas y esto no debe estar permitido. Por ejemplo, en la figura 3.6 se muestra que si llegásemos a unir los puntos 1 y 3, se da como resultado una subruta, por tanto el ahorro de fusionar estos puntos nunca debería tenerse en cuenta.
Figura 3.6: Formación de subrutas.
27
GMOR: Google Maps para la Optimización de Rutas 3.2.3. Traza del ejemplo Inicialización
Paso 1: Calculamos el estado inicial anteriormente descrito. Paso 2: Calculamos los valores de ahorro para cada par de puntos del problema. Paso 3: Se construye una lista con todos los valores de ahorros ordenados de mayor a menor, cuanto mayor es el valor de ahorro, más conveniente es la ruta. En nuestro ejemplo los valores iniciales se pueden ver en la figura 3.7.
Figura 3.7: Valores de ahorros iniciales.
Iteración 1
Tomamos el primer valor de la lista de ahorros, ya que es el más prometedor.
28
GMOR: Google Maps para la Optimización de Rutas Comprobando las consideraciones antes mencionadas vemos que: d 12= d 1 d 2=18 20=Q ● Ambos puntos son extremos en sus rutas. ● Ambos puntos no pertenecen a la misma ruta. Por tanto, ya que cumplen esas tres condiciones, la fusión de ambas rutas puede llevarse a cabo. La solución que obtenemos tiene un coste de 11, y en ella quedan unidos los puntos 1 y 2 tal y como se puede ver en la figura 3.9. ●
Figura 3.9: Iteración 1. Iteración 2
Continuamos tomando el resto de valores de la lista de ahorros en los que no se encontraban los puntos ya fusionados.
Y nuevamente hacemos las mismas comparaciones: d 34= d 3 d 4= 20Q ● Ambos puntos son extremos en sus rutas. ● Ambos puntos no pertenecen a la misma ruta. Por tanto, ya que cumplen esas tres condiciones, la fusión de ambas rutas puede llevarse a cabo. La solución que obtenemos tiene un coste de 10, y en ella quedan unidos los puntos 3 y 4 tal y como se puede ver en la figura 3.10. ●
29
GMOR: Google Maps para la Optimización de Rutas
Figura 3.10: Iteración 2. Tras esta iteración, ya no nos quedan más posibles fusiones debido a que todos los puntos están contenidos en alguna ruta. Iteración 3
En esta iteración trabajamos con las dos rutas anteriormente calculadas. Por tanto la única fusión posible es entre 2 y 3.
En esta ocasión, al hacer las comprobaciones pertinentes obtenemos que: d 23= d 2 d 3=38 Q ● Ambos puntos son extremos en sus rutas. ● Ambos puntos no pertenecen a la misma ruta. Por tanto, al no cumplirse la restricción de la capacidad limitada de los vehículos, dicha fusión no puede llevarse a cabo, y dado que ya no tenemos más posibles fusiones, la ejecución termina aquí. ●
3.2.3. Datos de salida
La solución que obtenemos es entonces la mostrada en la figura 3.11.
30
GMOR: Google Maps para la Optimización de Rutas
Figura 3.11: Solución final. Ruta 1: ● ● ●
Coste:11 Demanda: 18 Secuencia: 0 – 1 – 2 – 0
Ruta 2: ● ● ●
Coste: 10 Demanda: 20 Secuencia: 0 – 3 – 4 – 0
3.3. Mejoras mediante búsquedas locales
En este punto hablamos sobre las mejoras implementadas en la aplicación, y que pueden ser usadas conjuntamente o por separado, para mejorar las soluciones proporcionados por el algoritmo de Ahorros de Clarke & Wright. Una vez que se tiene una solución para el problema, se puede intentar mejorarla mediante algún procedimiento de búsqueda local. Para cada solución s se define un conjunto de soluciones vecinas N(s). Un procedimiento de Búsqueda Local parte de una solución s, la reemplaza por una solución s* ∈ N s de menor costo y repite el procedimiento hasta que la solución no pueda ser mejorada. Al terminar, se obtiene una solución localmente óptima respecto a la definición de la vecindad. Para obtener s puede buscarse la mejor solución de N(s) (estrategia best improvement ) o simplemente tomar la primera solución de N(s) que mejore el costo (estrategia first improvement ). Usualmente se define N(s) como las soluciones que pueden obtenerse aplicando a s alguna regla o procedimiento sencillo que consiste en intercambiar los arcos de la solución. Estos intercambios para el CVRP pueden clasificarse en intercambios de una ruta e intercambios multi-ruta. En los intercambios de una ruta los clientes que se visitan no cambian después de la aplicación del operador, lo que varía es el orden en que se realizan las visitas. En los intercambios multi-ruta, además de cambios en el orden de las visitas suele modificarse el conjunto de clientes visitados en cada ruta. ∗
31
GMOR: Google Maps para la Optimización de Rutas 3.3.1. Optimización 2-Opt
Este método intenta obtener una mejor solución para una ruta dada. Básicamente, lo que se pretende lograr con este algoritmo de optimización es la eliminación de cruces entro los arcos que unen los puntos de una ruta. Para ello, elimina dos arcos de la ruta e intenta reconectarlos de la mejor manera posible, tal y como se muestra en la siguiente figura 3.12.
Figura 3.12: 2-Opt. En la parte izquierda de la figura 3.12, tenemos la ruta original con los dos arcos, que intentan ser optimizados, marcados. En la parte derecha tenemos una solución alternativa, que podría resultar mejor. Para ser más concretos, este algoritmo funciona de la siguiente manera. Sean dos arcos de una misma ruta, cuyos puntos son (i, i + 1) y (j, j + 1) , tal que i < j, con unos costes asociados , tal y como se muestra c i , i 1 y c j , j1 y con un conjunto de arcos entre ambos arcos llamado P en la figura 3.13.
32
GMOR: Google Maps para la Optimización de Rutas
Figura 3.13: Estado inicial. Si se da la condición de que el coste del camino desde i hasta j + 1 es mayor que el coste desde i a en dirección contraria, y más el coste desde i + 1 hasta j + j, más el coste del conjunto de arcos P c i , i1 c j , j 1c ij c j1,i 1 P en dirección contraria, entonces hemos 1, o lo que es lo mismo, P encontrado un camino más óptimo que el que teníamos en la solución actual,. Por tanto deberemos eliminar los arcos (i, i + 1) y (j, j + 1) y sustituirlos por los arcos (i, j) e (i + 1, j + 1) teniendo en cuenta que debemos invertir el sentido en el conjunto de arcos que van desde i + 1 hasta j, (es decir, ), tal y como se muestra en la figura 3.14. P
Figura 3.14: Después de optimizar. Esta operación se debe repetir para cada par de arcos que contenga la ruta, teniendo en cuenta que i debe ser menor que j, hasta que no se puedan realizar más intercambios en la solución en estudio. Este algoritmo se ejecuta tras cada iteración del algoritmo de Ahorros de Clarke & Wright, con lo que logramos que cada vez que se fusionan dos rutas, consigamos un mejor camino entre los puntos, en el caso de que sea posible. La complejidad de este algoritmo es O n2 .
33
GMOR: Google Maps para la Optimización de Rutas 3.3.2. Optimización 3-Opt
Este algoritmo, al igual que el anterior, intenta encontrar una mejor ruta entre un conjunto de puntos dados. Su objetivo es similar también al algoritmo 2-Opt, aunque en este caso se trata de un algoritmo un poco más complejo, ya que las operaciones en lugar de hacerlas con dos arcos, se llevan a cabo con tres arcos simultáneamente. Por tanto, lo que hace este algoritmo es eliminar tres arcos e intentar buscar un camino más óptimo reconectándolos de manera alternativa, tal y como podemos ver en la figura 3.15.
Figura 3.15: 3-Opt. El dibujo en la izquierda de la figura 3.15 sería la ruta hallada por el algoritmo de Ahorros, ruta actual, mientras que los dos siguientes dibujos vendrían a ser posibles alternativas al camino obtenido, y que podrían resultar mejor que el primero. Por tanto, la operación a realizar para encontrar caminos alternativos es la siguiente. Dados tres arcos cuyos puntos son (i ,i +1), (j, j +1) y (k, k + 1) , tal que i < j < k , con unos costes asociados c i , i 1 , c j , j 1 y c k , k 1 , tal y como se puede ver en la figura 3.16.
34
GMOR: Google Maps para la Optimización de Rutas
Figura 3.16: Estado inicial. Si se da la condición de que la suma de los costes de los tres arcos que estamos tratando de optimizar es mayor que la suma del coste del arco que va de i a j + 1, más el coste del arco que va de j a k + 1, y más el coste del arco que va de k a i + 1, o lo que es lo mismo, c i , i 1c j , j 1 c k ,k 1 c i , j1 c j,k 1 c k ,i 1 entonces hemos encontrado un camino mejor que el que teníamos en la solución actual. Por tanto deberemos eliminar los arcos (i, i + 1) , (j, j + 1) y (k, k + 1), y sustituirlos por los arcos (i, j + 1) , (j, k + 1) y (k, i + 1) teniendo en cuenta que en este algoritmo no tenemos que cambiar el sentido a ningún camino entre estos arcos, tal y como pasaba en el algoritmo anterior, ver figura 3.17.
35
GMOR: Google Maps para la Optimización de Rutas
Figura 3.17: Después de la optimización. Esta operación se debe repetir para todos los arcos del camino en estudio, teniendo en cuenta que i debe ser menor que j y j debe ser menor que k , y hasta que no se puedan realizar más intercambios en el camino en estudio. Al igual que el algoritmo anterior (2-Opt), éste se ejecuta también tras cada iteración del algoritmo de Ahorros de Clarke & Wright, con lo que logramos que cada vez que se fusionan dos rutas, consigamos un mejor camino entre los puntos, en el caso de que sea posible. En este caso el algoritmo tiene una complejidad O n3 . 3.3.3. Optimización factorial
Este algoritmo, a diferencia de los dos anteriores, no trata de encontrar una mejor ruta sino que encuentra la ruta más óptima para un conjunto de puntos dados. Su objetivo es el de encontrar la mejor ruta que une todos los puntos pertenecientes a la ruta pasada. Para ello, lo que el algoritmo hace es comprobar una por una cada una de las posibles soluciones al problema, es decir, comprueba cada uno de los posibles caminos que unen todos los puntos.
36
GMOR: Google Maps para la Optimización de Rutas
Figura 3.18: Optimización Factorial. En la figura 3.18 vemos un ejemplo de esta optimización. El primer dibujo sería la ruta que se le ha facilitado al algoritmo, mientras que el resto de dibujos son el resto de posibles rutas, y que este algoritmo calcula para encontrar la de menor coste. La operación para encontrar caminos alternativos en este algoritmo es la siguiente. Al algoritmo se le pasa la lista de puntos que forman la ruta que se quiere optimizar, y éste mediante llamadas recursivas construye todas las posibilidades pero de manera que no se puedan repetir puntos en la solución actual, es decir, la primera solución que hallará será en el orden que se le suministre la lista de puntos. Una vez tiene todos los puntos en una posible solución, comprueba si es la mejor solución alcanzada y si es así entonces la almacena por si llega a ser la más óptima. En estos cálculos los puntos de salida y llegada sólo se tienen en cuenta al calcular el coste de la ruta, ya que estos puntos tienen un papel que es permanente y de ahí que no entren en las posibles permutaciones. La complejidad de este algoritmo es por tanto O n ! . Dada la carga computacional que esto supone, en un principio optamos por que esta optimización sólo se ejecutase con conjuntos de puntos de poco tamaño ( n < 8 puntos), pero finalmente se dejó la elección de ese parámetro al propio usuario, el cual puede modificarla en cualquier momento. Este tipo de optimización se engloba dentro de los denominados métodos exactos . En este tipo de metodologías, suele resolverse alguna relajación del problema y utilizarse un esquema de ramificación y acotamiento al estilo del método Branch and Bound [10]. También se han propuesto algoritmos basados en Programación Dinámica que aceleran los cálculos mediante una relajación del espacio de estados. Por otro lado, hay diversas implementaciones del método de Generación de Columnas , que han resultado especialmente efectivas para problemas con ventanas de tiempo muy ajustados. Para un completo compendio de métodos exactos para problemas de enrutamiento de vehículos, puede consultarse los trabajos de Laporte y Norbert [11] y de Laporte [12].
37
GMOR: Google Maps para la Optimización de Rutas
4. Manual de la aplicación 4.1. Formatos de archivos XML
Esta aplicación utiliza varios formatos de archivos según la opción escogida. Estos formatos se diferencian entre sí en que se les va añadiendo información adicional según se va tratando el problema. A continuación se describen estos formatos en el orden natural en el que se va añadiendo dicha información adicional. Formato 1
Este formato es el que se carga en la interfaz de mapa digital para que ésta muestre una serie de puntos en dicho mapa. La estructura viene a ser la mostrada a continuación:
En este formato cada uno de los elementos marker representan un punto en el mapa , y el significado de sus campos es el siguiente: • lat : Indica la latitud del punto en cuestión. • lng : Indica la longitud del punto en cuestión. • postal : Indica la dirección postal asignada al punto. • com: Contiene un comentario aclaratorio para el punto en cuestión. • list : Contiene una lista de cero o más elementos que representa según el tipo de nodo lo siguiente: ➢ Salida: no se tiene en cuenta, ya que en la salida no se recogen alumnos. 38
GMOR: Google Maps para la Optimización de Rutas Parada: contiene una lista donde cada elemento consta de dos valores separados por un guión, el primer valor es la etiqueta de uno de los puntos de llegada, y el segundo valor la cantidad de alumnos que se dirigen a ese destino (destino-alumnos). ➢ Llegada: no se tiene en cuenta, ya que en la llegada se descargan los vehículos. type: Indica el tipo del punto en cuestión. Los diferentes tipos son: ➢ Salida: cuando queremos indicar que este punto es el inicio de la ruta. ➢ Parada: cuando queremos indicar que este es uno de los puntos por donde debemos pasar. ➢ Llegada: cuando queremos indicar que este punto es el final de la ruta. label : Indica el número identificador de referencia (código) asociado al punto. Es un número irrepetible (único) dentro de este archivo XML, y será usado para definir rutas. ➢
•
•
Formato 2
Este formato es el que obtenemos una vez hemos calculado la matriz de distancias para los puntos del problema. La estructura viene a ser la misma que la del formato 1 pero añadiendo la información referente a la matriz de distancias, y es como sigue:
39
GMOR: Google Maps para la Optimización de Rutas A este nuevo formato se le añade lo que viene comprendido entre las etiquetas distances , y donde cada elemento row representa una fila en la matriz de distancias de un problema, siendo label una referencia al punto al que pertenecen esas distancias y elements dichas distancias. Esta matriz no tiene que ser simétrica, ya que hay calles con sentido de circulación único. Nota: Éste es el fichero de entrada para el
botón “Abrir” del programa principal.
Formato 3
Este formato es el que obtenemos una vez hemos calculado una solución al problema planteado, es decir, la estructura es similar a la anterior pero añadiendo unos nuevos elementos que nos indican la o las rutas resultantes de los problemas, quedándonos por tanto:
40
GMOR: Google Maps para la Optimización de Rutas En este nuevo formato se añade, con respecto a los anteriores, lo que está comprendido entre las etiquetas routes , y donde cada uno de sus elementos route nos indica la ruta mediante una secuencia de puntos a seguir. Contiene un atributo problem que indica a que problema pertenece de los que tenemos en el archivo XML, y un atributo points que indica los puntos que pertenecen a la ruta en cuestión mediante la etiqueta label que se encuentra dentro de este archivo XML. Nota: Éste es el fichero que se obtiene al usar el botón “Guardar” de la parte de la aplicación que
calcula las rutas. 4.2. Pantalla principal
La pantalla principal de la aplicación consta de tres partes bien diferenciadas, ver figura 4.1.
Figura 4.1: Pantalla principal. La primera de las partes corresponde a la toolbar . En ella encontramos opciones generales y de navegación por la aplicación, como pueden ser las optimizaciones que queremos utilizar, un acceso directo a la ayuda,... Esto se explicará a continuación. La segunda parte contiene las dos funciones principales de la aplicación. Por un lado el acceso a la parte que nos muestra la interfaz del mapa digital, y por otra el acceso que nos lleva a la pantalla de resolución de problemas de cálculo de rutas. Estas dos partes se describen más adelante. La tercera parte viene a ser una pequeña ayuda que nos va indicando en cada momento las opciones que tenemos disponibles para realizar, y lograr de esta forma que la interfaz (además de ser sencilla) sea también clara. ToolBar
Tal y como se dijo anteriormente, en esta zona se encuentran las opciones que se pueden considerar más generales de la aplicación. Las opciones que tenemos disponibles de izquierda a derecha son las siguientes: 41
GMOR: Google Maps para la Optimización de Rutas ● Pantalla Principal :
●
Nos permite volver a la pantalla principal. En el caso de haber abierto un archivo XML, nos dará la posibilidad de resolver otro problema de ese mismo archivo o volver a la pantalla principal. Opciones : Esta opción nos permite especificar las optimizaciones que queremos utilizar en el algoritmo de Ahorros de Clark & Wright. Las posibles optimizaciones que tenemos son: la 2-Opt, la 3-Opt y la optimización factorial, a la cual se le puede especificar el número máximo del conjunto de puntos al que se le debe ejecutar dicha optimización. Es recomendable que dicho parámetro no sea excesivamente grande ya que esto implicaría un número mayor de operaciones a realizar con la consecuente ralentización de la ejecución del algoritmo. Por defecto, están todas las optimizaciones habilitadas y el valor para la optimización factorial es de 8, como se puede ver en la siguiente figura. También nos permite especificar una semilla para el generador aleatorio de problemas (por defecto se usa la hora del ordenador, lo que no permite repetir la generación consecutiva de un mismo problema).
● Ayuda:
Nos permite acceder a la ayuda del programa. En ella se explican todas las opciones básicas de la aplicación de manera más simplificada que en este capítulo. También contiene una breve descripción de los formatos de archivos XML utilizados por la aplicación. En concreto, el contenido de esta ayuda es:
● Acerca de :
Contiene información básica de la aplicación, como puede ser el autor o la versión actual. 42
GMOR: Google Maps para la Optimización de Rutas 4.3. Interfaz del mapa digital
Esta interfaz se encuentra a su vez dividida en dos partes. En la parte superior tenemos el mapa digital junto con todas las operaciones o informaciones relacionadas con éste. En la parte inferior disponemos de un sencillo editor XML, que nos permite interactuar con el mapa digital en modo texto, es decir, nos permite modificar la información que está mostrando el mapa actualmente. Estas dos partes se pueden observar en las figuras 4.3 y 4.4.
Figura 4.3: Parte del Mapa Digital.
Figura 4.4: Parte del Editor XML. También se dispone de un menú superior, en el que se engloban algunas opciones dependiendo de si afectan al mapa digital o al editor XML.
43
GMOR: Google Maps para la Optimización de Rutas 4.3.1. Mapa digital (Parte Superior)
Esta sección esta dividida a su vez en dos zonas. A la izquierda tenemos un panel donde en su parte superior se nos muestran datos correspondientes a las opciones elegidas en el apartado del menú superior que engloba las operaciones a realizar sobre el mapa, como pueden ser campos a rellenar, acciones a realizar,... A la derecha tenemos el propio mapa digital. Menú general
Las opciones que podemos encontrar en este menú son las que están relacionadas con la información que tenemos cargada en el mapa digital en un momento dado. Estas opciones son las que se muestran en la figura 4.5.
Figura 4.5: Opciones del menú superior para el mapa digital. A continuación, pasamos a describir cada una de ellas. Copiar a XML La finalidad de esta opción es pasar todos los puntos que actualmente tenemos creados en el mapa digital a formato XML, para a continuación mostrarlos a través del editor XML situado en la parte inferior de la pantalla. Hay que tener en cuenta que con esta opción, los datos que tengamos en el editor XML en ese momento serán borrados para añadir los datos procedentes del mapa digital. Añadir a XML El objetivo de esta opción es muy similar a la explicada en el apartado anterior, es decir, pasa todos los puntos que actualmente tenemos creados en el mapa digital a formato XML, para a continuación mostrarlos a través del editor XML situado en la parte inferior de la pantalla. En este caso los datos que puede haber en ese momento en el editor XML no serán borrados, sino que los nuevos datos procedentes del mapa digital se añadirán a los ya existentes en el editor XML. Como consecuencia puede suceder que una misma localización aparezca dos veces en el XML cuando se trate de un punto en el mapa que ya estaba en el XML. La herramienta controla esto internamente para evitar duplicidades, pero pequeñísimas discrepancias pueden ser clasificadas como puntos diferentes cuando son un mismo punto, o a un mismo punto cuando son dos, y en estos casos se visualiza un mensaje.
44
GMOR: Google Maps para la Optimización de Rutas Fijar Punto La finalidad de esta opción es la de crear un punto en el mapa por medio de su dirección postal. Para ello, una vez que seleccionamos la opción, en el panel “Opciones” se mostrarán una serie de campos, tal y como se puede ver en la figura 4.6.
Figura 4.6: Fijar Punto. Los campos a rellenar para realizar la operación son: ● Municipio : Se especifica el municipio de la localización donde se quiere fijar el punto. Por ejemplo: San Cristóbal de La Laguna. ● Calle : Se especifica la calle de la localización donde se quiere fijar el punto. Por ejemplo: Heraclio Sánchez. ● Número: Se especifica el número de la localización donde se quiere fijar el punto. Por ejemplo: 5. Hay que tener en cuenta que cuanto más completa sea la información con la que se rellenan los campos, se tendrá una mayor probabilidad de encontrar la dirección deseada. Por ejemplo, no es lo mismo simplemente poner como municipio “La Laguna” que poner “San Cristóbal de La Laguna”. Se debe tener precaución con la información suministrada si no se quiere obtener un resultado erróneo.
Ruta entre dos puntos Esta opción nos permite visualizar un posible camino entre dos puntos de los que tenemos fijados en el mapa. 45
GMOR: Google Maps para la Optimización de Rutas Su modo de empleo es como sigue. Una vez hemos elegido esta opción, se nos mostrará en el panel “Opciones” la figura 4.7.
Figura 4.7: Ruta entre dos puntos. El primer paso tras ver estas indicaciones es escoger un color de entre los posibles. Este color será el de la ruta dibujada entre los dos puntos que se escogerán. El segundo paso es escoger los puntos entre los que queremos que se visualice la ruta. Para ello, basta con simplemente hacer click en el primer punto, con lo que en el panel “Opciones” veremos el contenido de la figura 4.8, y una vez hecho esto hacer nuevamente click sobre el punto que queremos que sea el final de la ruta.
Figura 4.8: Ruta entre dos puntos (2). Una vez realizados estos pasos deberemos obtener un resultado en el mapa digital similar al de la figura 4.9.
Figura 4.9: Ruta entre dos puntos (3).
En el panel “Opciones” tendremos la posibilidad de borrar las rutas que tenemos dibujadas en el mapa, ver figura 4.10.
46
GMOR: Google Maps para la Optimización de Rutas
Figura 4.10: Ruta entre dos puntos (4). Otra posibilidad para borrar las rutas pero de manera individual es haciendo click sobre ellas. Si lo hacemos se nos mostrará un botón en el panel “Info” que nos permite borrar dicha ruta. Matriz de distancias Esta opción nos permite calcular la matriz de distancias entre todos los puntos que pertenecen a un problema determinado. Para ello, una vez hemos escogido esta opción se nos solicita escoger, en el panel “Opciones”, uno o más pares de puntos salida-llegada para calcular una o más matrices.
Mediante el botón “Añadir Matriz” introducimos las matrices de distancias que queremos hallar. Y una vez tenemos introducida alguna se habilita el botón “Iniciar Cálculo de Matrices”, el cual una vez se ejecuta nos muestra en el panel “Opciones” un mensaje de espera y una barra de progreso en la cual se nos indica el tanto por ciento de la operación a realizar, y el tiempo estimado para su finalización en cada una de las matrices que se quieren calcular, como en la figura 4.11.
47
GMOR: Google Maps para la Optimización de Rutas
Figura 4.11: Matriz de distancias. Durante el proceso de la obtención de las diferentes distancias no se debe hacer ninguna otra operación. Se debe esperar hasta que éste finalice. El proceso puede tardar hasta horas dependiendo del número de localizaciones y de la velocidad de la conexión a internet. Importante: Una vez haya acabado de calcular la matriz de distancias, se cargará en el editor XML una estructura XML con la que crearemos un fichero para guardar a disco, y de este modo nos servirá como entrada para la parte de la aplicación donde se resuelven los problemas de cálculo de ruta, ver figura 4.12.
Figura 4.12: Fichero XML con matriz de distancias. Debido a la limitación impuesta que supone el uso de la API de Google Maps de forma gratuita, no se puede realizar un número excesivamente rápido de peticiones a sus servidores. En concreto, Google permite a los usuarios de su API para Google Maps gratuita una petición a sus servidores cada 8,64 segundos, lo que nos permite realizar unas 10.000 peticiones a sus servidores al día. Para intentar clarificar esto, supongamos que tenemos un problema que contiene 100 puntos. Si queremos calcular la matriz de distancias, tendremos que calcular 100 x 100 distancias, o lo que es lo mismo, deberemos realizar 10.000 peticiones a los servidores de Google Maps. Si tenemos en cuenta que el tiempo necesario para petición es de 8,64 segundos, entonces el tiempo que nos tomará calcular la matriz de distancias es de 10.000 x 8,46 = 84.600 segundos, y si lo pasamos a horas 23 horas y media. Por lo que este proceso implica prácticamente 1 día.
48
GMOR: Google Maps para la Optimización de Rutas Dibujar Ruta Esta opción nos permite que una vez obtenida una solución, mediante el calculador de rutas de la aplicación, a uno o varios problemas de rutas planteados dibujarlo en el mapa digital. Para ello, una vez hemos ejecutado la opción se nos invita a escoger el fichero XML en el cual hemos almacenado la solución del problema en cuestión, ver figura 4.13.
Figura 4.13: Escoger fichero con rutas. Tras escoger el archivo donde tenemos una o más soluciones y presionar el botón “Aceptar”, en el caso de tener información previamente cargada en el mapa, se nos preguntará si queremos conservarla o eliminarla antes de cargar la solución. Una vez hemos respondido la pregunta anterior, se nos permitirá elegir en el panel de “Opciones” que soluciones de las que contiene el archivo XML queremos dibujar en el mapa.
Para ello, debemos añadir una o más soluciones mediante el botón “Añadir Ruta”, y una vez hecho esto se habilitará el botón “Dibujar Rutas”, que tal y como su nombre indica dibujará las soluciones escogidas en el mapa. Una vez hecho lo anterior deberemos esperar a que se terminen de dibujar todas las rutas que componen la solución, por lo que tenemos que esperar a que la aplicación así lo indique mediante un mensaje que se mostrará al usuario. A continuación, se nos mostrará en el panel de “Opciones” la posibilidad de limpiar completamente el mapa de las rutas dibujadas, aunque tal y como ya se mencionó en la opción de rutas entre dos puntos, estas rutas pueden ser borradas manualmente haciendo click sobre ellas.
49
GMOR: Google Maps para la Optimización de Rutas El resultado que se debe obtener una vez acabado el proceso debe ser similar al de la figura 4.14.
Figura 4.14: Rutas dibujadas sobre mapa digital. Panel izquierdo (Opciones e Info)
Este panel situado a la izquierda del mapa digital tiene la función de apoyar las operaciones a realizar sobre éste, aunque también algunas relacionadas con el editor XML, y que serán descritas más adelante. Está dividido en dos subpaneles. En la parte superior tenemos el panel “Opciones”, que ya ha sido ampliamente descrito en punto anterior, y su función principal es la de indicar las instrucciones para realizar las operaciones del menú sobre el mapa digital o sobre el editor XML. En la parte inferior, nos encontramos con el subpanel “Info” cuya funcional principal, tal y como su nombre indica, es la de proporcionar información. En concreto, la información que muestra este panel esta relacionada con los puntos fijados en el mapa de la siguiente manera: 50
GMOR: Google Maps para la Optimización de Rutas Cuando hacemos click en un punto que tenemos fijado en el mapa digital, se abre una ventana sobre ese punto como la mostrada en la figura 4.15.
Figura 4.15: Ventana de los puntos. En esa ventana podemos observar que tenemos varios campos bien diferenciados. En la parte superior, tenemos lo que vendría a ser la dirección postal donde tenemos fijado el punto. Justo debajo, las geocoordenadas del punto y su identificador. Luego tenemos un cuadro llamado Comentario cuya función es la de tener textos que sirvan de información adicional para el punto (por ejemplo en la figura 4.15 estamos indicando el número de la parada que se le asignó a ese punto). Y por último, tenemos otro cuadro llamado Demandas en el cual podemos tener una lista de pares de números (por ejemplo para nuestro problema podría tratarse del numero de alumnos a recoger en dicho punto, y podrían ser 12 alumnos a la parada 2 y 14 alumnos a la parada 3 como podemos ver también en la figura 4.15). Independientemente de los campos antes descritos, contamos con un botón “Borrar”, el cual permite borrar el punto del mapa digital. Una vez explicada la información que tiene asociada cada punto, podemos pasar a explicar en profundidad la función que tiene el panel “Info”. 51
GMOR: Google Maps para la Optimización de Rutas Cada vez que se hace click sobre un punto, a parte de mostrarse la ventana anteriormente descrita, en el panel “Info” se cargan todos los datos referentes a ese punto, como se muestra en la figura 4.16.
Figura 4.16: Panel “Info”. Este panel se encarga de leer la información que se puede ver en la ventana del punto junto con alguna adicional, y nos da la posibilidad de modificarla como queramos, es decir, añadir datos a la dirección o modificarla, añadir comentarios, cantidades a la lista de demandas,... En concreto los campos que contiene este panel “Info” son los siguientes: ● Dirección : Contiene la dirección donde ha sido fijado el punto. ● Comentario : Contiene comentarios aclaratorios sobre el punto. ● Añadir Demandas : Da la posibilidad de añadir o modificar elementos de la lista de demandas. Si se desea añadir un elemento, bastará con seleccionar el campo nuevo, escoger el destino de la ruta, escribir una cantidad en el recuadro alumnos y presionar el botón “Guardar”. En el caso de querer modificar, la operación a realizar es similar, salvo que en lugar de nuevo, deberemos especificar la posición de la lista que queremos modificar. 52
GMOR: Google Maps para la Optimización de Rutas ● Eliminar Demandas : En el
caso de querer eliminar una demanda, deberemos seleccionar la posición a eliminar y presionar el botón “Borrar”. ● Tipo: En este campo podemos modificar el tipo asignado al punto, estos tipos pueden ser “Salida”, “Parada” y “Llegada”, por defecto al crear un punto el tipo asignado es el de Parada. Para cambiar entre los distintos tipo basta con seleccionar uno en la lista y presionar el botón “Cambiar”. Hay que tener en cuenta que para que los cambios realizados sean permanentes, se debe utilizar el botón “Guardar” de cada una de las secciones del panel “Info”, de otro modo algunos campos de la información del punto no serán actualizados. Nótese que cada localización tiene además una referencia interna “label” que no es modificable por que es un contador interno. Tampoco se muestran los campos de las geocoordenadas en este panel pero pueden ser modificados moviendo el punto arrastrándolo con el cursor del ratón, explicado más adelante. Mapa digital
El mapa digital cuenta con varios controles que nos permiten realizar operaciones sobre él de forma directa. Zoom y movimientos El primero de ellos se encuentra en la parte izquierda del mismo, y no permite movernos por el mapa en cualquier dirección o realizar zoom sobre la zona centrada actualmente, ver figura 4.17.
Figura 4.17: Control para el movimiento y el zoom.
53
GMOR: Google Maps para la Optimización de Rutas Tipos de mapas También se dispone en la parte superior derecha del mapa de otro control, el cual nos permite visualizar los distintos tipos de mapas facilitados por Google Maps. Los diferentes tipos de mapas son tres. El primero de ellos es un mapa como los que habitualmente se tienen, mediante dibujos, ver figura 4.18. En este tipo de mapas se dispone de gran cantidad de información.
Figura 4.18: Mapa normal. La segunda opción disponible es la de visualizar imágenes que provienen directamente de las tomadas por un satélite, o en ocasiones por un avión que vuela a grandes alturas, ver figura 4.19. En este otro tipo, no se dispone de tanta información escrita como en el anterior pero al tratarse de imágenes reales, la información visual es mucho mayor.
Figura 4.19: Mapa por satélite. Por último, tenemos lo que sería una versión híbrida de los dos mapas anteriores, en la que podemos ver toda la información que era mostrada en el primer tipo de mapa situada encima de las imágenes proporcionadas por los satélites. Por tanto podemos decir que este último tipo contiene las ventajas de los dos anteriores: por un lado contiene mucha información escrita, y por otro también cuenta con la información visual gracias a las imágenes reales, ver figura 4.20. 54
GMOR: Google Maps para la Optimización de Rutas
Figura 4.20: Mapa híbrido. Menú popup También está disponible un menú que se muestra utilizando el botón derecho del ratón, ver figura 4.21.
Figura 4.21: Menú Popup. Las operaciones que se pueden realizar desde este menú son las siguientes: ● Acercarse : nos permite aumentar el zoom en el mapa. ● Alejarse : nos permite disminuir el zoom en el mapa. ● Centrar mapa aquí : nos permite centrar el mapa en el punto donde se haya hecho click para mostrar este menú. ● Poner marca aquí : nos permite fijar un punto donde se haya hecho click para mostrar este menú. Con esta opción, si el punto se fija en un lugar conocido se le añade la dirección por defecto del lugar, que puede ser modificada luego, tal y como se mencionó en el apartado del panel “Info”.
55
GMOR: Google Maps para la Optimización de Rutas Cabe destacar, que aunque estas opciones se parezcan al primer control descrito en este punto, no es así, ya que mientras que los controles anteriores están orientados al punto donde se encuentra centrado el mapa, estas opciones están orientadas al punto donde se encuentra el cursor. Con este control logramos simplificar algunas operaciones al usuario de la aplicación. Puntos Aunque ya se han mencionado prácticamente todas las características de ellos en los anteriores puntos, falta una característica por describir. Esta característica es la que nos da la posibilidad de mover los puntos por el mapa. Para ello, basta con mantener el botón del ratón pulsado sobre uno de los puntos que tenemos fijados en el mapa, y sin soltar el botón de ratón moverlo hacia la posición que deseamos. Conviene tener presente que cuando cambiamos la localización de un punto, si llega a modificarse la dirección que actualmente contiene por otra, la aplicación nos mostrará un mensaje de advertencia y nos permitirá decidir si conservar la dirección postal que tenía o cambiarla por la nueva dirección. Ver figura 4.22.
Figura 4.22: Mensaje de advertencia.
4.3.2. Editor XML (Parte Inferior)
En esta segunda zona, tal y como comentamos anteriormente, contamos con un sencillo editor para los archivos XML de la aplicación, para lo cual se cuenta con algunas opciones básicas como pueden ser: cortar, copiar, pegar,... También se cuenta con unas cuantas opciones que se pueden realizar desde el menú general, en la parte superior de la interfaz. Menú general
Las opciones que podemos encontrar en este menú son las que están relacionadas con la información que tenemos cargada en el editor XML en un momento dado. Estas opciones son las que se muestran en la figura 4.23.
56
GMOR: Google Maps para la Optimización de Rutas
Figura 4.23: Menú Archivo XML . A continuación pasamos a describir cada una de ellas. Copiar a mapa La finalidad de esta opción es pasar todos los puntos que actualmente tenemos cargados en el editor XML al mapa digital. Para ello, se deberá leer el contenido del editor XML y a continuación crear los puntos con los atributos que tienen cada uno de los elementos de la estructura XML en el mapa digital situado en la parte superior de la pantalla. Hay que tener en cuenta que con esta opción los datos que tengamos en el mapa digital en ese momento serán borrados para añadir los datos procedentes del editor XML. Añadir a mapa El objetivo de esta opción es muy similar a la explicada en el apartado anterior, es decir, lee todos los puntos que actualmente tenemos cargados en el editor XML, para a continuación crear por cada uno de los elementos de la estructura XML un punto en el mapa digital, teniendo en cuenta los atributos de dicho elemento del XML. Aunque en este caso tenemos la particularidad de que los puntos que puede haber en ese momento en el mapa digital no serán borrados, sino que los nuevos puntos procedentes del editor XML se añadirán a los ya existentes en el mapa digital. Abrir archivo Esta opción del menú nos permite cargar el contenido de archivos XML de nuestra aplicación que tenemos almacenados en nuestro disco duro. Para ello, una vez escogida la opción se nos muestra en el panel “Opciones” un diálogo para escoger el archivo que queremos cargar en el editor XML. Ver figura 4.24.
Figura 4.24: Abrir archivo. Una vez escogido el archivo XML que queremos cargar bastará con presionar el botón “Aceptar”, y tendremos la información del archivo cargada en el editor XML. 57
GMOR: Google Maps para la Optimización de Rutas Hay que destacar que con esta opción si no se dispone de ningún punto creado en el mapa digital, se cargan los datos simultáneamente en el editor XML y en el mapa digital. Esto se indica en el panel “Opciones” una vez se ha terminado la operación con éxito. Ver figura 4.25.
Figura 4.25: Cargado (1). Si se da el caso de que ya hay puntos creados en el mapa digital, entonces la aplicación sólo cargará el contenido de dicho archivo XML en el editor XML, indicándolo con el siguiente mensaje en el panel “Opciones”, ver figura 4.26.
Figura 4.26: Cargado (2). Nota: En el caso de que se esté usando el Microsoft Internet Explorar 6 o superior se mostrará un
mensaje de advertencia (ver figura 4.27) debido al hecho de que por defecto, este navegador no es capaz de cargar los archivos XML desde el disco duro como consecuencia de las políticas de seguridad que tiene. Por lo que para resolver este problema hay que dirigirse al menú “Herramientas”, luego a “Opciones de internet”, pestaña de “Opciones avanzadas”, y en la parte de seguridad deshabilitar la opción “Habilitar compatibilidad con XMLHTTP nativo”.
Figura 4.27: Mensaje advertencia. Editor de texto
Tal y como se ha dicho anteriormente, la aplicación posee un sencillo editor de texto que nos permite realizar cambios en los datos actualmente cargados y reflejar dichos cambios en el propio mapa digital. Este editor podemos dividirlo en dos partes. En la parte superior tenemos un pequeño menú que contiene algunas opciones básicas, mientras que en la parte inferior tenemos el área de texto donde será cargado el contenido de los archivos XML.
58
GMOR: Google Maps para la Optimización de Rutas Menú superior Este menú contiene algunas operaciones básicas para la edición de texto que pueden resultar muy útiles. Ver figura 4.28.
Figura 4.28: Operaciones básicas. Dichas opciones son las siguientes, de izquierda a derecha: ● Cortar : borrar el texto que este seleccionado. ● Copiar : copia el texto que este seleccionado. ● Pegar : pega un texto que haya sido copiado anteriormente a continuación de donde se encuentre el cursor. ● Deshacer : deshace las últimas operaciones realizadas sobre el texto que contiene el editor. ● Rehacer : vuelve a hacer las últimas operaciones deshechas mediante la anterior opción sobre el texto que contiene el editor. ● Outdent : borra un tabulado. ● Indent : añade un tabulado. Nota: En navegadores como por ejemplo el Mozilla FireFox , las opciones de cortar, copiar y
pegar
no están disponibles debido a políticas de seguridad del propio navegador. Aunque es posible disponer de estas opciones con el botón derecho del ratón. Área de texto Esta parte simplemente carga el contenido de los archivos XML para poder ser editado por el usuario. Ver figura 4.29.
Figura 4.29: Área de texto.
4.4. Rutas
Esta segunda interfaz viene a ser como la segunda parte de la aplicación, ya que si en el mapa digital fijamos una serie de puntos sobre el mapa, con esta segunda interfaz hallamos una o varias 59
GMOR: Google Maps para la Optimización de Rutas rutas que recorran todos esos puntos, para más tarde volver al mapa digital y mostrar la solución encontrada. En esta interfaz se nos proporcionan un conjunto de opciones, tales como, cargar ficheros, hallar las soluciones, visualizarlas,...
Figura 4.30: Interfaz de Rutas. En esta interfaz, como se puede ver, seguimos contando con una pequeña sección que nos orienta en el uso de la aplicación. Además tenemos una serie de botones que realizan las operaciones, y que aunque al inicio no están todos habilitados, a medida que vamos usándolos se irán activando los botones oportunos. Las operaciones que realizan estos botones más en profundidad se explican a continuación. Abrir La función de este botón es la de cargar en la aplicación una archivo XML que contiene un problema de rutas, es decir, que además de tener una lista de puntos, posee también la matriz de distancias para todos esos puntos. Hay que tener en cuenta que los problemas que se quieren cargar deben tener como requisito indispensable un punto que sea la salida, y otro que sea la llegada. De otro modo el problema no se podría llegar a resolver, ya que el planteamiento inicial seria incorrecto. También hay que 60
GMOR: Google Maps para la Optimización de Rutas asegurarse que la demanda de un cliente nunca llegue a ser mayor que la capacidad de un vehículo, ya que en nuestro problema un cliente sólo puede ser visitado una vez. Si elegimos esta opción, a continuación se habilitan los botones de “Calcular” y “Calcular paso a paso”. Generar La finalidad de está opción es la de generar un problema de rutas aleatorio. El objetivo de este problema aleatorio no es otro que el de realizar pruebas sobre el algoritmo implementado en la aplicación, y así comprobar los resultados proporcionados por el mismo. Los problemas que se generan con está opción, han sido calculados aproximadamente para que siempre devuelvan soluciones lo suficientemente complejas, varias rutas que contengan varios puntos, y que siempre sean resolubles (las demandas de los clientes nunca sobrepasen las capacidades de los vehículos). Para que los resultados que se obtengan con esta opción sean lo suficientemente buenos para valorar las soluciones devueltas por el algoritmo, el número total de puntos puede oscilar desde 10 a 50 puntos, las capacidades de los vehículos desde 20 a 40, y las demandas de los clientes como máximo serán ¼ de la capacidad de los vehículos para el problema actual. Cuando se usa esta opción de generar el problema aleatoriamente se habilitan los botones de Calcular y Calcular paso a paso, pero el resultado obtenido por el algoritmo no se podrá almacenar en un fichero, ya que esto podría provocar que el usuario intente cargar dicho resultado en el mapa digital, con lo que se podrían provocar errores debido a que no están pensadas para ello (las geocoordenadas no tienen sentido en el mundo real). Calcular Una vez hemos cargado en memoria un problema, ya sea desde un archivo XML proporcionado por la interfaz de mapa digital, o desde un problema generado aleatoriamente, se habilitará este botón. Su función es la de ejecutar el algoritmo de Ahorros de Clarke & Wright sobre el problema cargado y utilizar las optimizaciones escogidas por el usuario, anteriormente descritas en este manual. En el caso de que el problema haya sido leído desde un archivo XML cuando presionamos este botón se nos abrirá una ventana en la que tenemos que escoger el problema que vamos a resolver, de los que hay en el archivo XML, y la capacidad de los vehículos que se utilizará para dicho problema. Una vez se ha ejecutado esta opción, se habilitará el botón que nos permite previsualizar el resultado en el propio visualizador de la aplicación, y así evaluar la solución devuelta por la aplicación antes de su carga en el mapa digital. También se activará el botón de “Guardar”, para 61
GMOR: Google Maps para la Optimización de Rutas almacenar la solución en un fichero XML, pero esto dependerá de si el problema fue cargado desde un fichero proporcionado por la parte del mapa digital, o fue un problema generado aleatoriamente. Calcular paso a paso Al igual que la anterior opción, una vez hemos cargado en memoria un problema, ya sea desde un archivo XML proporcionado por la interfaz de mapa digital, o desde un problema generado aleatoriamente, se habilitará este botón. Su función es llevar a cabo la ejecución de una única iteración del algoritmo de Ahorros de Clarke & Wright. Por tanto realiza la misma operación que el botón “Calcular” pero con la particularidad que con cada pulsación se consigue que se ejecute una iteración del algoritmo. Hay que tener en cuenta que esta opción se debe ejecutar antes que la del botón “Calcular”, ya que de lo contrario, se ejecutaría el problema hasta llegar a una solución. También es posible que tras ejecutar 1 o más veces esta opción, ejecutemos la de “Calcular” para realizar el resto de iteraciones automáticamente. Guardar Esta opción nos permite almacenar en un archivo XML una solución al problema planteado. Para ello añadirá a la información que ya fue cargada previamente las rutas que conforman la solución obtenida. Este botón no se habilitará tras la resolución de un problema si éste fue generado aleatoriamente, tal y como se ha dicho anteriormente. Visualizar La finalidad de esta opción es la de permitirnos previsualizar las soluciones proporcionadas por la aplicación sin tener que cargarlas en el mapa digital. O también, si el problema fue generado aleatoriamente simplemente visualizar la solución generada para valorarla. Una vez ejecutamos esta opción, se nos muestra una ventana (ver figura 4.31) con todos los datos relevantes del problema planteado.
62
GMOR: Google Maps para la Optimización de Rutas
Figura 4.31: Visualizador. Como se puede ver, esta ventana se divide en dos partes. Por un lado, tenemos una visualización simplificada de la solución del problema, y por otro, tenemos un panel “Opciones” con todos los datos mostrados en la parte izquierda, de manera que si desmarcamos dichas opciones, conseguimos que no sean mostradas en el dibujo de la izquierda, resultando útil para cuando los problemas son excesivamente grandes y no es posible ver todas las rutas con claridad. Los campos que podemos elegir si queremos que se muestren o no son: el nombre de los puntos (color rojo), las demandas de los clientes (color azul) y cada una de las rutas. Para cada una de las rutas que estén dibujadas en el mapa, en el panel “Opciones”, se muestra el coste de dicha ruta y la cantidad de elementos que transporta el vehículo que recorre dicha ruta. En lo referente al dibujo, el punto verde es la salida, el azul es la llegada, y el conjunto de puntos rojos son las diferentes paradas por donde tienen que pasar los vehículos. El resto de colores se corresponden con los campos descritos para el panel “Opciones”. Este visualizador se habilita una vez hemos ejecutado el botón “Calcular” para que de este modo podamos ver el resultado obtenido tras la ejecución. Para el caso de esta opción, no importa si el problema ha sido generado aleatoriamente o ha sido cargado desde un archivo XML proporcionado 63
GMOR: Google Maps para la Optimización de Rutas por la interfaz del mapa digital. También es posible abrir este visualizador cuando usamos la opción de “Calcular paso a paso”, con lo que conseguimos ver cómo se va resolviendo el problema paso a paso, lo que supone una ayuda importante a la hora de ver si el algoritmo funciona correctamente. Por último decir que debajo del panel donde se muestra el dibujo simplificado de la solución, tenemos la capacidad de los vehículos para el problema planteado. 4.5. Requisitos de la aplicación
Los requisitos de esta aplicación no son muy extensos, pero si indispensables para su correcto funcionamiento. Estos requisitos son: ● Tener instalado un navegador web capaz de interpretar el lenguaje Javascript , tales como Mozilla Firefox , Microsoft Internet Explorer , Opera,... ● Tener instalado Microsoft .NET Framework 1.1 o superior . ● Conexión a internet.
64
GMOR: Google Maps para la Optimización de Rutas
5. Futuro 5.1. Ampliaciones del problema
Dado que, tal y como se ha dicho anteriormente, el problema no trata situaciones totalmente reales, las ampliaciones que a continuación exponemos están enfocadas precisamente a obtener un mayor realismo. A continuación, se describen unas ampliaciones del problema inicial que añaden algunos otros factores al problema, haciéndolo más verídico. 5.1.1. El problema con flota heterogénea (FSMVRP)
En los problemas con flota heterogénea los costos y capacidades de los vehículos varían, existiendo un conjunto T = {1, . . . , |T|} de tipos de vehículo. La capacidad de los vehículos k ∈ T es q k y su costo fijo (si lo tuvieran) es f k . Los costos y tiempos de viaje para cada tipo de vehículo son c k ij y t k ij respectivamente. Se asume que los índices de los vehículos están ordenados en forma creciente por capacidad (es decir, q k ≤ q k para k 1 , k 2 ∈ T , k 1 k 2 ). 1
2
En la siguiente formulación de flujo de vehículos de tres índices [8] se agrega un índice para discriminar entre los tipos de vehículos. min
f ∑ ∑ ∈ k
+
j ∈ N 0
k T
s. a.
k
x 0j
∑ ∑
∑ ∑ ∈ ∈ k T i , j
k
k
c ij xij
(1.15)
A
k
x ij =1
∀ j ∈ V \{0}
(1.16)
∀ i ∈V , ∀ k ∈ T
(1.17)
k ∈T i ∈ A+ j
∑
∑
k
x ij −
+
j ∈ N i
k
x ij =0
-
j ∈ N i
r 0=0
(1.18) ∣T ∣
r j− r i d jq
∑ x −q∣ ∣ k ij
T
k ∈ T
r j
∑ ∑ ∈ -
∀ i ∈V \{0} , ∀ j ∈ N + i (1.19)
k ¿
qk x ij
∀ j ∈ V \{0}
(1.20)
k T i ∈ N j k
x ij ∈{0, 1 }
∀ i , j ∈ A , ∀ k ∈T
r j0
∀ j ∈ V
Las variables binarias x k ij indican si el arco (i, j) es utilizado por el vehículo k y las variables r i positivas indican la carga acumulada en la ruta correspondiente hasta el nodo i (inclusive). La función objetivo (1.15) mide el costo total de la solución incluyendo costos fijos y variables. Las restricciones (1.16) establecen que todo cliente debe ser visitado por algún vehículo. En (1.17) se indica que si un vehículo de tipo k visita al nodo i, entonces un vehículo del mismo tipo debe abandonarlo. Las restricciones (1.18) y (1.19) fijan los valores de las variables r i y actúan como restricciones de eliminación de subrutas, mientras que la capacidad de los vehículos se impone en 65
GMOR: Google Maps para la Optimización de Rutas (1.20). En esta formulación se asume que la cantidad de vehículos de cada tipo es ilimitada. El problema correspondiente se denomina Fleet Size and Mix Vehicle Routing Problem (o FSMVRP). No solo se debe decidir las rutas, sino la composición de la flota de vehículos a utilizar. Usualmente, al tratar con problemas de flota heterogénea, se opta por utilizar este modelo aún cuando en algunos casos no refleja la realidad. Si la cantidad de vehículos disponibles de cada tipo k fuera v k , conocida de antemano, debería agregarse las restricciones
∑
k
x 0j v k
+
∀ k ∈ T
j ∈ N 0
5.1.2. El problema con ventanas de tiempo (VRPTW)
En esta variante del problema, además de capacidades, cada cliente i ∈ V \ {0} tiene asociada una ventana de tiempo [ ei , l i ] que establece un horario de servicio permitido para que un vehículo llegue a él y un tiempo de servicio o retraso si . Si (i, j) es un arco de la solución y t i y t j son las horas de llegada a los clientes i y j, las ventanas de tiempo implican que necesariamente debe cumplirse t i ≤ l i y t j ≤ l j . Por otro lado, si t ie i , entonces el vehículo deberá esperar hasta que el cliente “abra” y necesariamente t j=e i si t ij . Utilizando los nodos 0 y n + 1 para representar al depósito y el conjunto K para representar a los vehículos (no a los tipos de vehículos como en la sección anterior), el problema se formula para una flota de vehículos, posiblemente heterogénea, de la siguiente manera [9]: min
∑ ∑ ∈ ∈
k K i , j
s. a.
k
k
c ij x ij
(1.21)
A
∑ ∑ -
k
xij =1
∀ i ∈ V ∖ {0, n 1 }
(1.22)
∀ k ∈ K
(1.23)
∀ k ∈ K , i ∈V ∖ {0, n 1 }
(1.24)
∀ k ∈ K
(1.25)
∀ i , j ∈ V \{0, n + 1} , k ∈ K
(1.26)
∀ i ∈V ∖ {0, n1 } , k ∈ K
(1.27)
k ∈ K j ∈ N i
∑
k
x 0j=1
+
j ∈ N 0
∑ x − ∑ k ij
+
j ∈n i
k
x ji =0
-
j ∈ N i
d ∑ ∑ \{0,n+1} i
i∈ V
+
k
x ij q
k
j ∈ N i
k
k
k
k
y j − y i s i t ij − M 1− x ij k
e i y i l i k
∀ i , j ∈ A , k ∈ K
k
∀ i ∈ V ∖{0, n 1 } , k ∈ K
x ij ∈{0,1 } y i 0
Las variables x k ij indican si el arco (i, j) es recorrido por el vehículo k . Las variables y k i indican la hora de llegada al cliente i cuando es visitado por el vehículo k (si el cliente no es visitado por dicho vehículo el valor de la variable no tiene significado). La función objetivo (1.21) es el costo total de las rutas. 66
GMOR: Google Maps para la Optimización de Rutas La restricción (1.22) indica que todos los clientes deben ser visitados. Las restricciones (1.23) y (1.24) determinan que cada vehículo k ∈ K recorre un camino de 0 a n + 1. La capacidad de cada vehículo es impuesta en (1.25). Siendo M una constante lo suficientemente grande, la restricción (1.26) asegura que si un vehículo k viaja de i a j, no puede llegar a j antes que y i s it k ij , y actúan además como restricciones de eliminación de subrutas. Finalmente, los límites de las ventanas de tiempo son impuestos en (1.27). 5.2. Otras heurísticas clásicas
Otras de las posibles ampliaciones en un futuro para este proyecto, podría pasar por implementar algunas otras heurísticas clásicas que han sido planteadas para el CVRP. Un ejemplo se explica en el siguiente punto. 5.2.1 Algoritmo de ahorros basado en matching
Cuando en el Algoritmo de Ahorros se decide unir dos rutas r i y r j , se está descartando otras uniones posibles en las que participan r i o r j (porque i y j dejan de ser extremos en la nueva ruta). La unión que da el máximo ahorro podría, en algunos casos, hacer que las uniones que permanecen factibles no sean buenas. Elegir siempre el máximo ahorro es una estrategia demasiado voraz. En el Algoritmo de Ahorros Basado en Matching se decide la unión a realizar considerando como afecta ésta a las posibles uniones en iteraciones posteriores. Para esto, se considera un grafo que tiene a todas las rutas como nodos y un arco entre dos nodos p y q cuyo peso es el ahorro obtenido si las rutas correspondientes se combinan (siempre que la combinación sea factible). Un Matching de peso máximo sobre dicho grafo da un conjunto de combinaciones a realizar que es globalmente bueno. Algoritmo de Ahorros Basado en Matching Paso 1 (inicialización):
Para cada cliente i construir la ruta (0, i, 0) .
Paso 2 (cálculo
de los ahorros): Actualizar s pq para cada par de rutas p y q que pueda ser combinado manteniendo la factibilidad. Si ningún par de rutas puede ser combinado, terminar. Paso 3 (matching): Resolver un problema de Matching de peso máximo sobre un grafo cuyos nodos son las rutas de la solución actual y en el cual hay un arco entre las rutas p y q con peso s pq si su combinación es factible. Paso 4 (uniones): Dado el Matching de peso máximo, combinar todo par de rutas p y q tal que el arco (p, q) pertenezca al Matching . Ir a 2. Hallar un Matching de Peso Máximo en un grafo puede resolverse en tiempo polinomial en la cantidad de nodos del grafo [17]. Pero, por un lado, el grafo tiene tantos nodos como rutas haya en la solución (inicialmente hay n 2 rutas) y, por otro lado, se halla un nuevo Matching en cada iteración. Entonces, para problemas grandes puede ser conveniente hallar el Matching en forma aproximada mediante alguna heurística. En la figura 5.1 se muestra una posible solución parcial de 5 rutas, el grafo asociado y la nueva solución inducida por el Matching de Peso Máximo que es {(1, 3), (4, 5)} . El ahorro total es de 17. Supongamos que el vehículo no tiene capacidad para satisfacer la demanda de ninguna combinación 67
GMOR: Google Maps para la Optimización de Rutas de tres de las rutas originales. Si se hubiera ejecutado el Algoritmo de Ahorros clásico, se hubiera combinado primero las rutas 3 y 4 y luego las 2 y 5, obteniendo un ahorro total de 15.
Figura 5.1: Iteración de un algoritmo de ahorros basado en Matching. En la propuesta de Desrochers y Verhoog [18] y de Altinkemer y Gavish [19], al combinar dos rutas, no solamente se considera la posibilidad de insertar una al final de la otra como en el Algoritmo de Ahorros original, sino todas las posibilidades de armar una nueva ruta con los clientes de ambas. Entonces, si S p y S q son los conjuntos de clientes de las rutas p y q, el ahorro por combinarlas se define como s pq=t S pt S q −t S p ∪S q , donde t(S) indica el costo de una solución óptima para el TSP sobre el conjunto de clientes S . Con esta definición no sólo se hace costoso el cálculo de los ahorros, sino que además éstos deben ser re-calculados en cada nueva iteración. Cuando la cantidad de clientes en cada ruta es grande conviene realizar el cálculo de s pq en forma aproximada. En las uniones dadas por el Matching de peso máximo una misma ruta no participa en más de una unión (porque los arcos correspondientes forman un Matching en el grafo). Sin embargo, podría ser ventajoso que la ruta resultante de una unión sea inmediatamente unida con otra. Resulta conveniente, entonces, no realizar todas las uniones dadas por el Matching de peso máximo, sino solamente algunas. Una opción es combinar sólo las rutas que correspondan al arco de mayor peso del Matching [18]. Otra alternativa para realizar las uniones de manera más gradual es conectar los nodos del grafo sobre el que se calcula el Matching con nodos ficticios con pesos tales que se priorice la inclusión de algunos de estos últimos en el Matching [19]. Así, no todos los arcos del Matching se corresponderán con uniones de rutas. En la propuesta de Wark y Holt [20] el ahorro puede definirse de la forma usual descrita en el algoritmo clásico de Ahorros, o puede modificarse para privilegiar las uniones que estén lejos de ser infactibles (por ejemplo, si la ruta resultante está lejos de llenar la capacidad del vehículo o lejos de la máxima distancia permitida). Cuando no hay más combinaciones de rutas que sean factibles, algunas rutas son divididas probabilísticamente, lo que permite proseguir la búsqueda de soluciones. 5.3. Búsquedas locales multi-ruta
Otra posible ampliación que proponemos es la de implementar búsquedas locales pero en esta ocasión multi-rutas, es decir, buscan la mejor solución intercambiando nodos entre las diferentes rutas que forman la solución final. 68
GMOR: Google Maps para la Optimización de Rutas Van Breedam [40] propuso dos operadores para intercambiar clientes entre un par de rutas. En el operador String Relocation , una secuencia de m nodos es transferida de una ruta a la otra manteniendo el orden en la ruta original. En operador String Exchange una ruta envía una secuencia de m clientes a la otra y esta última envía otra secuencia de n clientes a la primera. Simbólicamente se denota con (m, 0) a cada String Relocation y con (m, n) a cada String Exchange. En las Figuras 5.2(a)-(b) se muestra un intercambio SR (2, 0) y en 5.2(c)-(d) se ilustra un intercambio SE (2, 1).
Figura 5.2: String Relocation y String Exchange. 5.3.1 Transferencias cíclicas
Las transferencias cíclicas, introducidas por Thompson y Psaraftis [42], son intercambios multi-ruta que intentan eliminar clientes de una ruta y reubicarlos en otra de manera cíclica. Si R={r 1 , , r m } es el conjunto de rutas de la solución y ρ : R → R es una permutación cíclica de ⊆ algún subconjunto Rb (con R |Rb| = b), la transferencia de exactamente k clientes de cada ruta r ∈ Rb a la ruta ρ(r) es una k -transferencia b-cíclica. Cuando Rb = R se habla de k -transferencias cíclicas. Dado un valor de k , buscar una k -transferencia cíclica que mejore la solución actual, puede formularse como el problema de hallar un ciclo de costo negativo en un grafo dirigido G = (V,A,W). Los nodos de G corresponden a conjuntos de k clientes que están en una misma ruta de la solución: V ={ s / s ⊂ r i ,∣ s∣=k , r i ∈ R } . El conjunto de arcos A={ si , s j / si ⊂ Ri , s j ⊂ R j , Ri ≠ R j , R j ∪ s i ∖ s j es factible } indica las transferencias factibles. El arco si , s j representa la transferencia que elimina los clientes si de Ri , los agrega a R j y elimina s j de R j . El costo de un arco si , s j es el incremento del costo en la ruta R j si se realiza la transferencia, es decir, w si , s j =t R j ∪ s i ∖ s j donde t(S) es el costo de un TSP óptimo sobre el conjunto de clientes S . Todo ciclo en G tal que sus nodos corresponden a conjuntos de clientes en rutas diferentes, representa una k -transferencia cíclica. Dicha transferencia mejora la solución si el peso del ciclo correspondiente es negativo. Encontrar un ciclo de costo negativo con las características deseadas es NP-Hard [42]. Incluso G no puede ser construido en tiempo polinomial: implica resolver un TSP.
∣ A∣es O m2 n2k y calcular w si , s j
69
GMOR: Google Maps para la Optimización de Rutas
6. Conclusiones Las principales motivaciones para abordar este proyecto han sido la investigación en el ámbito de los mapas digitales, y observar el beneficio que esta tecnología puede suponer para la resolución de problemas reales. Como ya se ha mencionado anteriormente, no era objetivo de este proyecto el resolver un problema totalmente real, con todos los factores que ello conlleva, sino mostrar mediante un problema simplificado la capacidad que tiene este tipo de tecnología para permitir plantearlo y, una vez resuelto, mostrar la solución a dicho problema. Es por ello, que este proyecto se puede considerar que está más centrado en los mapas digitales, aunque no por ello descuida la parte encargada de resolver los problemas. Mapas digitales
Tal y como hemos podido ver, las funciones proporcionadas por la API de Google Maps nos han permitido personalizar nuestro mapa digital en gran medida. Podemos decir que se ha cumplido satisfactoriamente con nuestras expectativas, ya que no sólo se limita a movernos por un mapa mundial, sino que además nos permite obtener datos de suma importancia para los problemas que pretendemos resolver, como puede ser la distancia para calcular la matriz de distancias entre una serie de puntos que pertenecen a un problema. También cabe destacar la cantidad de datos que contienen dichos mapas, no siendo aún totalmente completos, y que nos permiten conocer los nombres de las calles, los sentidos de circulación, las localizaciones exactas de las carreteras,... Destacar también la posibilidad de agregar puntos al mapa de forma totalmente dinámica lo que nos permite plantear un problema en el mapa de forma sencilla. Por último, debemos decir que las limitaciones que Google impone para el uso de su API gratuitamente empañan un poco los resultados obtenidos, ya que estas limitaciones están orientadas hacia la consulta de sus servidores por lo que en algunas operaciones debemos respetar intervalos de tiempo entre las distintas consultas a sus servidores. Esto provoca que dichas operaciones se prolonguen considerablemente en el tiempo. Por otra parte, esto es totalmente comprensible ya que ofrecer un servicio gratuito de esta magnitud debe ser un trabajo considerable. Resolución de problemas de enrutamiento
En lo que se refiere al cálculo de soluciones en los problemas planteados en el mapa digital, a pesar de no ser nuestra principal motivación para la realización del proyecto, podemos decir que los resultados obtenidos son considerablemente buenos. Para esta parte del proyecto decidimos consultar la literatura y llevar a cabo la implementación de algunos algoritmos clásicos en la resolución de este tipo de problemas. Debido a esto nos decidimos por el algoritmo de ahorros de Clarke & Wright ( Savings Algorithm ) con el que logramos obtener soluciones a los problemas de enrutamiento de vehículos con capacidad limitada (CVRP) totalmente viables, y que podían ser representados en el mapa digital correctamente. Debido a que las solución obtenidas con el algoritmo anteriormente mencionado, a pesar de ser correctas, estaban bastante lejos de ser óptimas se optó por implementar una serie de mejoras. Estas 70
GMOR: Google Maps para la Optimización de Rutas mejoras en concreto son la 2-Opt, 3-Opt y la factorial. Gracias a ellas las soluciones que ahora se obtienen son mucho mejores, llegando a ser óptimas en muchos casos, sobretodo a nivel local de cada una de las rutas. Por último decir que, para confirmar que estas mejoras y el algoritmo funcionaban correctamente añadimos a la aplicación un debugger , que nos permite crear problemas generados aleatoriamente y visualizar los resultados obtenidos, con lo que podemos observar por ejemplo como se eliminan los cruces en las soluciones obtenidas mediante la mejora 2-Opt. Como conclusión, el trabajo desarrollado durante este proyecto confirma que la tecnología informática disponible actualmente, combinando tanto mapas digitales como algoritmos de optimización, permiten el desarrollo e implementación de prototipos informáticos que pueden ayudar notablemente a decisores que deban resolver problemas de logística tales como el diseño de rutas de transporte escolar, recogida y entrega de mercancías y/o personas, rutas para visitar clientes, etc.
71
GMOR: Google Maps para la Optimización de Rutas
Bibliografía [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15] [16] [17] [18]
Toth, P., Vigo, D.: An Overview of Vehicle Routing Problems. Monographs on Discrete Mathematics and Applications. In: The Vehicle Routing Problem. SIAM (2000) 1–26 Dantzig, G., Ramser, J.: The truck dispatching problem. Management Science 6 (1959) 8091 Clarke, G., Wright, W.: Scheduling of vehicles from a central depot to a number of delivery points. Operations Research 12 (1964) 568–581 Dantzig, G., Fulkerson, D., Johnson, S.: Solution of a large scale traveling salesman problem. Operations Research 2 (1954) 393–410 C. Miller, A. Tucker, R. Zemlin: Integer programming formulation of traveling salesman problems. Journal of the ACM 7 (1960) 326–329 Garey, M., Johnson, D.: Computers and intractability: a guide to the theory of NPcompleteness. W. H. Freeman and Company (1979) Martello, S., Toth, P.: Knapsack problems: algorithms and computer implementations. John Wiley and Sons (1990) Golden, B., Assad, A., Levy, L., Gheysens, F.: The fleet size and mix vehicle routing problem. Computers & Operations Research 11 (1984) 49– 66 Cordeau, F., Desaulniers, G., Desrosiers, J., Solomon, M., Soumis, F.: The VRP with time windows. Technical Report Cahiers du GERAD G-99-13, École des Hautes Études Commerciales de Montréal (1999) Nemhauser, G., Wolsey, L.: Integer and Combinatorial Optimization. John Wiley & Sons (1988) Laporte, G., Nobert, Y.: Exact algorithms for the vehicle routing problem. Annals of Discrete Mathematics 31 (1987) 147–184 Laporte, G.: The vehicle routing problem: an overview of exact and approximate algorithms. European Journal of Operational Research 59 (1992) 345–358 Yellow, P.: A computational modification to the savings method of vehicle scheduling. Operational Research Quarterly 21 (1970) 281–283 Golden, B., Magnanti, T., Nguyen, H.: Implementing vehicle routing algorithms. Networks 7(1977) 113–148 Gaskell, T.: Bases for vehicle fleet scheduling. Operational Research Quarterly 18 (1967) 281–295 Lin, S.: Computer solutions of the traveling salesman problem. Bell System Technical Journal 44 (1965) 2245–2269 Gabow, H.: An efficient implementation of Edmonds’ algorithm for maximum matching on graphs. Journal of the ACM 23 (1976) 221–234 Desrochers, M., Verhoog, T.: A matching based savings algorithm for the vehicle routing problem. Technical Report Cahiers du GERAD G-89-04, ´École des Hautes ´Études Commerciales de Montréal (1989) 72