Está en la página 1de 73

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

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 (USGS).

• Enviromental Systems Research Institute (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 ∑ cij x ij (1.1)
i , j∈ A

s. a. ∑ +
x ij =1 ∀ i∈V (1.2)
j ∈N  i

∑ -
x ij =1 ∀ j ∈V (1.3)
i∈ N  j 

∑ +
xij 1 ∀ S ⊂V (1.4)
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 0j m (1.7)
i∈ N 0  j ∈ N 0 

∑ -
x ij = ∑ +
x ij =1 ∀ i ∈V \{0} (1.8)
i∈ N  j  j ∈ N i 

u i−u j nx ij n−1 ∀ i , j∈ A , i≠0, j≠0 (1.9)


x ij ∈{0, 1} ∀i , j∈ A
u i0 ∀ 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.

Para un conjunto de clientes S, d S =∑ d i es su demanda total y r(S) indica la mínima


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 = ∑ +
x 0j m (1.11)
i∈ N 0  j ∈ N 0 

∑ -
x ij = ∑ +
x ij =1 ∀ i∈V \{0} (1.12)
i∈ N  j  j ∈ N i 

∑ +
xij r S  ∀ S ⊂V \{0} (1.13)
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 ∈K

s. a. ∑ d i x ik C yk ∀k ∈K
i∈ S

∑ xik =1 ∀ i∈S
k ∈K

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 kij .

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 ∗ =max s 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: d i = 0,5, 13,12, 8

 
0 2 3 2 2
2 0 2 4 4
● La matriz de distancias o costes es: c ij = 3 2 0 4.5 5
2 4 4.5 0 3
2 4 5 3 0
● La capacidad de los vehículos es 20.

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, 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 2d 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=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 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
c i , i1 y c j , j1 y con un conjunto de arcos entre ambos arcos llamado P , tal y como se muestra
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
j, más el coste del conjunto de arcos  P en dirección contraria, y más el coste desde i + 1 hasta j +
1, o lo que es lo mismo,  P c i ,i1c j , j 1c ij c j1,i1 
P en dirección contraria, entonces hemos
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,

P ), tal y como se muestra en la figura 3.14.

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1c j , j 1c k ,k 1c i , j1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:

<markers>
<marker lat="28.483158198194182" lng="-16.32346272468567" postal="Camino del
Medio, Spain" com="" list="" type="Salida" label="0" />
<marker lat="28.481328725656038" lng="-16.321359872817993" postal="Av Astrofisico
Francisco Sanchez, 38206 San Cristóbal de la Laguna, Spain" com="" list="3-5"
type="Parada" label="1" />
<marker lat="28.484148363410558" lng="-16.320748329162598" postal="Calle
Leocadio Machado, 38203 San Cristóbal de la Laguna, Spain" com="" list="3-7"
type="Parada" label="2" />
<marker lat="28.482818710839805" lng="-16.325318813323975" postal="Av de la
República de Venezuela, 38206 San Cristóbal de la Laguna, Spain" com="" list=""
type="Llegada" label="3" />
</markers>

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:
<markers>
<!-- Tabla generada el 23/1/2008 a las 16:55 horas -->
<distances length="4">
<row label=”0” elements="0,520,1011,568"/>
<row label=”1” elements="491,0,809,685"/>
<row label=”2” elements="1496,812,0,637"/>
<row label=”3” elements="859,685,637,0"/>
</distances>
<marker lat="28.483158198194182" lng="-16.32346272468567" postal="Camino del
Medio, Spain" com="" list="" type="Salida" label="0" />
<marker lat="28.481328725656038" lng="-16.321359872817993" postal="Av Astrofisico
Francisco Sanchez, 38206 San Cristóbal de la Laguna, Spain" com="" list="3-5"
type="Parada" label="1" />
<marker lat="28.484148363410558" lng="-16.320748329162598" postal="Calle
Leocadio Machado, 38203 San Cristóbal de la Laguna, Spain" com="" list="3-7"
type="Parada" label="2" />
<marker lat="28.482818710839805" lng="-16.325318813323975" postal="Av de la
República de Venezuela, 38206 San Cristóbal de la Laguna, Spain" com="" list=""
type="Llegada" label="3" />
</markers>

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:
<markers>
<routes>
<route problem=”0” points="0,4,2,1,3"/>
</routes>
<distances length="5">
<row label=”0” elements="0,429,762,1176,656"/>
<row label=”1” elements="282,0,333,771,680"/>
<row label=”2” elements="615,333,0,438,1014"/>
<row label=”3” elements="874,771,438,0,938"/>
<row label=”4” elements="658,680,1014,683,0"/>
</distances>
<marker lat="28.484723597986779" lng="-16.324675083160400" postal="Calle
Marcelino Perdomo Reyes, 38206 San Cristóbal de la Laguna, Spain" com=""
list="" type="Salida" label="0"/>
<marker lat="28.482969594243151" lng="-16.325125694274902" postal="Av de la
República de Venezuela, 38206 San Cristóbal de la Laguna, Spain" com=""
list="3-5" type="Parada" label="1"/>
<marker lat="28.481743660350865" lng="-16.325190067291260" postal="Av de
Bartolomé Cairasco, 38206 San Cristóbal de la Laguna, Spain" com="" list="3-7"
type="Parada" label="2"/>
<marker lat="28.481243852449428" lng="-16.320748329162598" postal="Av Astrofisico
Francisco Sanchez, 38206 San Cristóbal de la Laguna, Spain" com="" list=""
type="Llegada" label="3"/>
<marker lat="28.483563695548227" lng="-16.320705413818359" postal="Calle
Leocadio Machado, 38203 San Cristóbal de la Laguna, Spain" com="" list="3-4"
type="Parada" label="4"/>
</markers>

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 kij y t kij 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 ∑ x 0j ∑ ∑
k k k k
c ij xij (1.15)
+
k∈T j ∈ N 0  k ∈T i , j ∈ A

s. a. ∑ ∑ x kij =1 ∀ j∈V \{0} (1.16)


k ∈T i∈ A+  j 

∑ +
x kij − ∑ -
x kij =0 ∀ i∈V , ∀ k ∈T (1.17)
j ∈N  i j∈ N i 

r 0=0 (1.18)
r j−r id jq∣T∣ ∑ xijk −q∣T∣ ∀ i∈V \{0} , ∀ j∈N + i (1.19)
k∈T

k
r j ∑ ∑ (1.20)
¿
qk x ij ∀ j∈V \{0}
k∈T i ∈ N  j
-

k
x ∈{0, 1}
ij ∀i , j∈ A , ∀ k ∈T
r j0 ∀ j∈V

Las variables binarias x kij 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
∑ +
x k0j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 ie 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
c ij x ij (1.21)
k∈ K  i , j ∈ A

s. a. ∑ ∑ xijk =1 ∀ i ∈V ∖ {0, n1} (1.22)


k ∈ K j ∈ N - i

∑ +
x k0j=1 ∀ k ∈K (1.23)
j ∈N  0

∑ +
k
x ij − ∑ -
k
x ji =0 ∀ k ∈K , i∈V ∖ {0, n1} (1.24)
j ∈n  i j∈ N i

∑ di ∑ +
k
x ij q
k
∀ k ∈K (1.25)
i∈V \{0,n+1} j∈ N  i

y kj − y ki s it ijk −M 1−x kij  ∀ i , j∈V \{0, n + 1} , k ∈ K (1.26)


k
e i y i l i ∀ i ∈V ∖ {0, n1}, k ∈ K (1.27)
k
x ij ∈{0, 1} ∀i , j∈A , k ∈K
k
y i 0 ∀ i∈V ∖ {0, n1}, k ∈ K

Las variables x kij indican si el arco (i, j) es recorrido por el vehículo k. Las variables y ki
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 it kij , 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 pt  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 ⊆ R (con |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: ∣A∣es O m2 n2k  y calcular w  si , s j 
implica resolver un TSP.

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] 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
[2] Dantzig, G., Ramser, J.: The truck dispatching problem. Management Science 6 (1959) 80-
91
[3] Clarke, G., Wright, W.: Scheduling of vehicles from a central depot to a number of delivery
points. Operations Research 12 (1964) 568–581
[4] Dantzig, G., Fulkerson, D., Johnson, S.: Solution of a large scale traveling salesman
problem. Operations Research 2 (1954) 393–410
[5] C. Miller, A. Tucker, R. Zemlin: Integer programming formulation of traveling salesman
problems. Journal of the ACM 7 (1960) 326–329
[6] Garey, M., Johnson, D.: Computers and intractability: a guide to the theory of NP-
completeness. W. H. Freeman and Company (1979)
[7] Martello, S., Toth, P.: Knapsack problems: algorithms and computer implementations. John
Wiley and Sons (1990)
[8] Golden, B., Assad, A., Levy, L., Gheysens, F.: The fleet size and mix vehicle routing
problem. Computers & Operations Research 11 (1984) 49– 66
[9] 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)
[10] Nemhauser, G., Wolsey, L.: Integer and Combinatorial Optimization. John Wiley & Sons
(1988)
[11] Laporte, G., Nobert, Y.: Exact algorithms for the vehicle routing problem. Annals of
Discrete Mathematics 31 (1987) 147–184
[12] Laporte, G.: The vehicle routing problem: an overview of exact and approximate algorithms.
European Journal of Operational Research 59 (1992) 345–358
[13] Yellow, P.: A computational modification to the savings method of vehicle scheduling.
Operational Research Quarterly 21 (1970) 281–283
[14] Golden, B., Magnanti, T., Nguyen, H.: Implementing vehicle routing algorithms. Networks
7(1977) 113–148
[15] Gaskell, T.: Bases for vehicle fleet scheduling. Operational Research Quarterly 18 (1967)
281–295
[16] Lin, S.: Computer solutions of the traveling salesman problem. Bell System Technical
Journal 44 (1965) 2245–2269
[17] Gabow, H.: An efficient implementation of Edmonds’ algorithm for maximum matching on
graphs. Journal of the ACM 23 (1976) 221–234
[18] 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
GMOR: Google Maps para la Optimización de Rutas

[19] Altinkemer, K., Gavish, B.: Parallel savings based heuristics for the delivery problem.
Operations Research 39 (1991) 456–469
[20] Wark, P., Holt, J.: A repeated matching heuristic for the vehicle routing problem. Journal of
Operational Research Society 45 (1994) 1156–1167
[40] Breedam, A.V.: Improvement heuristics for the vehicle routing problem based on simulated
annealing. European Journal of Operational Research 86 (1995) 480–490
[42] Thompson, P., Psaraftis, H.: Cyclic transfer algorithms for multivehiclerouting and
scheduling problems. Operations Research 41 (1993) 935–946

73