Vous êtes sur la page 1sur 137

Instituto Superior Politécnico José Antonio Echeverría

Facultad de Ingeniería Informática

Nueva versión de la biblioteca de heurísticas de


construcción para Problemas de Planificación de Rutas de
Vehículos

Trabajo de diploma para optar por el título de Ingeniería en Informática

Autor: Lucia Díaz Subi

Tutores: Dr.C. Isis Torres Pérez


Facultad Ingeniería Informática (CUJAE)
itorres@ceis.cujae.edu.cu

Consultante: Dr.C. Alejandro Rosete Suárez


Facultad Ingeniería Informática (CUJAE)
rosete@ceis.cujae.edu.cu

La Habana, Cuba
9 de junio de 2016
Declaración de autoría

Declaro que soy el único autor de este trabajo y autorizo al Complejo de Investigaciones
Tecnológicas Integradas (CITI) y a la Facultad de Ingeniería Informática para que hagan
el uso que estimen pertinente con este trabajo.
Para que así conste firmo la presente a los 2 días del mes de junio del 2016.

Lucia Díaz Subi


Firma del autor

MSc. Isis Torres Pérez


Firma del primer tutor
Dedicado a mis padres, mi hermano y mi abuela Magaly.
Agradecimientos

Cuando de dar gracias se trata nunca se sabe por donde empezar sólo por miedo a
dejar de mencionar a alguien.
Una vez leí que la diferencia entre la escuela y la vida es que en la escuela primero
aprendes la lección y luego te ponen una prueba, pero en la vida te mandan la prueba
y luego aprendes la lección. Por eso doy gracias a todas las personas que de una forma
u otra han formado parte de mis pruebas y mis lecciones de vida.
A mi mamá por enseñarme a ser cada día más independiente, porque la mujer que
soy hoy se lo debo a ella. Por hacerme saber que no hay obstáculos si se tiene voluntad y
que puedo hacer lo que me proponga y más. Gracias por tus sacrificios desmedidos y por
dedicar tu vida a la mía. Te Amo.
A mi papá por no ser solo eso sino mi amigo y mi apoyo incondicional en todo mo-
mento. Nunca dudes de tus convicciones como padre porque a pesar de no haber tenido
un ejemplo, hacerlo mejor que tú sería casi imposible. Eres el mejor, Te Amo.
A mi hermano gracias por ser mi motor porque ser la mayor para mi implica mucha
responsabilidad y por eso siempre he querido ser un ejemplo para ti. Eres mi sol, Te
Adoro.
A mi abuela Magaly gracias por estar siempre tan pendiente de mi, por complacerme
y consentirme tanto. Porque se que soy tu vida y esta es mi forma de agradecerte tanta
dedicación, haciendo que estes orgullosa de mi, Te adoro.
A mis abuelos Olga y Pastor por siempre preocuparse por mi y estar pendientes de
todos mis logros los Quiero Mucho.
A mi tía y madrina Marilyn gracias por ser como mi segunda mamá. Gracias por
siempre estar tan pendiente de mi, por apoyarme y ayudarme siempre que lo he necesita-
do. Gracias por tus consejos y por tu amor, Te Quiero Mucho.
A mis tías Baby, Elízabeth y Xiomara por siempre preocuparse por mi las quiero mu-
cho. A mis primos Javier, Daniela, Eilen, Robertico, Leyanis y Leynier por tantos lindos
momentos juntos sobre todo en la niñez los quiero mucho.
Sin duda para la formación de una persona además de la familia siempre hay mu-
cho más; profesores, compañeros, amigos, conocidos que han puesto su granito de
arena a lo largo del camino recorrido. Por eso quiero agradecer:
A mis amigos Maylin, Jan y Lisset por demostrarme que la distancia puede impedir
un beso, un abrazo, pero no un sentimento. Gracias por siempre preocuparse por mi y
apoyarme en todo lo que hago los Quiero Mucho.
A mi amiga Elízabeth por compartir a mi lado estos cinco años, que se dicen fácil
pero no. Gracias por ser compañera de estudios, amiga, confidente, consejera y hasta
paño de lágrimas en muchas ocasiones. Gracias por ayudarme a no rendirme cuando
sentía que era imposible continuar. Nunca olvidaré todo lo vivido, Te Quiero Mucho.
A Alexander, a pesar de lo ocurrido, gracias por todo y por tanto.
A mi tutora y Dra.C Isis Torres Pérez por ser más que eso, por siempre hacerme
saber que puedo contar con ella no solo en lo profesional sino también en lo personal.
Por tantos consejos, por su dedicación y entrega en todo lo que hace, sin duda alguna le
debo la profesional que soy hoy, Muchas Gracias.
Al Dr.C. Alejadro Rosete Suárez por ganarse mi cariño y admiración. Gracias por la
motivación y todas las orientaciones siempre que lo he necesitado.
Al grupo de Investigación de Optimización y Metaheurística del CTTI, a todos los
que lo integran, los nuevos y los que ya se han ido: a los tutores Jenny y David, a los ya
graduados Rosaly, Massiel, Tony y en especial a Arístides por tantos consejos y ayuda
incondicional cuando apenas empezaba, gracias por hacerme sentir en familia. A mis
compañeros Migue, Daylen, Aicih y Cynthia por todos los buenos momentos compartidos.
A mis amigas Majela, Heydi y Daily gracias por siempre estar ahí para mi, por todos
los lindos, divertidos y locos momentos juntas las quiero mil.
A los profes Claudia, Lisandra, Wenny y Eduardo por las orientaciones brindadas en
cada duda, Gracias.
Una gratitud infinita a la profe de PSCT Marlen por su dulsura y dedicación en todo
lo que hace. Nunca la olvidaré.
A la profe Mayi mil gracias por su preocupación y dedicación este útimo año.
A todo el colectivo de profesores del CEIS que han colaborado en cada materia im-
partida durante estos cinco años para hacer de mi una profesional.
En general a todos los que no menciono y han contribuido en mi formación como
persona, estudiante y profesional.
Resumen

Un tipo concreto de problemas de optimización son los denominados problemas de


optimización combinatoria, dentro de los mismos se encuentran los Problemas de Planifi-
cación de Rutas de Vehículos (VRP). Estos problemas consisten en servir a un conjunto de
clientes dispersos geográficamente con una flota de vehículos. Su objetivo de minimizar
los costos en distancia de los recorridos, siempre y cuando se satisfagan las restricciones
del problema. Las situaciones prácticas del mundo real provocan el surgimiento de dife-
rentes variantes de este problema donde cada una incorpora nuevas características. Desde
la primera formulación de los VRPs, una gran cantidad de métodos han sido propuestos
para su resolución. Estas propuestas emplean heurísticas de construcción como una alter-
nativa para obtener de forma rápida y sencilla una primera solución cercana al óptimo. Sin
embargo, la gran mayoría de estas heurísticas solo pueden ser explotadas en la variante
más clásica de VRP: el Problema de Planificación de Rutas de Vehículos con Capacidades
(CVRP). En la actualidad existen pocas bibliotecas que implementan métodos heurísticos
para resolver los VRPs. Actualmente se cuenta con una biblioteca de heurísticas de cons-
trucción para el TTRP, denominada BHCTTRP, que contiene cuatro heurísticas adaptadas
a este problema. En este documento se presenta una nueva versión de la biblioteca, que
incorpora dos nuevas variantes de problemas de planificación de rutas de vehículos: VRP
con Múltiples Depósitos y VRP con Flota Heterogénea y dos nuevas heurística de cons-
trucción: la Heurística de Inserción en Paralelo de Christofides, Mingozzi y Toth y la
Heurística de Inserción de Kilby. Por el alcance de esta nueva versión de la biblioteca se
ha decidido modificar su nombre por el de Biblioteca de Heurísticas de Construcción para
Problemas de Planificación de Rutas de Vehículos (BHCVRP).

Palabras claves: Algoritmos heurísticos, BHCVRP, Heurísticas de Construcción, Pro-


blemas de Planificación de Rutas de Vehículos.
Summary

Vehicle Routing Problems (VRPs) are important problems of combinatorial optimiza-


tion. These problems consist in designing the optimal set of routes with the smallest cost,
in such way that the constraints are satisfied. Since the first formulation of the VRPs, a
large quantity of methods has been proposed for its resolution. Most of the proposals use
heuristic of construction as an alternative to obtain in a quick and simple way a first near
solution to the optimal. However, these heuristics cannot be used to solve other variants of
VRP. At present there are few libraries that implement heuristic methods to solve VRPs.
One of these libraries is called BHCTTRP containing four heuristics adapted for Truck
and Trailer Routing Problem (TTRP). This work presents a new version of the library,
which incorporates two new variants vehicle routing problem: Multi-Depot Vehicle Rou-
ting Problem and Heterogenous Fleet Vehicle Routing Problem and two new construc-
tion heuristic: Heuristics Parallel Insertion Christofides, Mingozzi and Toth and Heuristic
Insertion Kilby. For the scope of this new version of the library it has decided to chan-
ge its name to Library of Construction Heuristics for solving Vehicle Routing Problems
(BHCVRP).

Keywords: heuristic algorithms, BHCVRP, constructive heuristic, Vehicle Routing Pro-


blems.
Índice general

Introducción 1

1. Fundamentos teóricos 8
1.1. Introducción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
1.2. Problemas de optimización . . . . . . . . . . . . . . . . . . . . . . . . . 8
1.2.1. Problema de planificación de rutas de vehículos . . . . . . . . . . 10
1.2.2. Variantes de planificación de rutas de vehículos . . . . . . . . . . 12
1.3. Algoritmos heurísticos . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
1.3.1. Heurísticas de construcción . . . . . . . . . . . . . . . . . . . . 18
1.4. Bibliotecas que implementan métodos heurísticos . . . . . . . . . . . . . 24
1.5. Biblioteca de Heurísticas de Construcción para el TTRP . . . . . . . . . 28
1.5.1. Vista de la arquitectura de BHCTTRP . . . . . . . . . . . . . . . 28
1.5.2. Deficiencias en BHCTTRP . . . . . . . . . . . . . . . . . . . . . 29
1.6. Conclusiones parciales . . . . . . . . . . . . . . . . . . . . . . . . . . . 32

2. Diseño de la solución 34
2.1. Introducción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
2.2. Modificaciones en la arquitectura de BHCVRP . . . . . . . . . . . . . . 34
2.2.1. Nuevas variantes de planificación de rutas de vehículos en BHCVRP 36
2.2.2. Nuevas heurísticas de construcción en BHCVRP . . . . . . . . . 40
2.2.3. Otras modificaciones en BHCVRP . . . . . . . . . . . . . . . . . 44
2.3. Nueva versión de BHCVRP . . . . . . . . . . . . . . . . . . . . . . . . . 45
2.3.1. Capa Application . . . . . . . . . . . . . . . . . . . . . . . . . . 47
2.3.2. Capa JDK . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
2.4. Patrones de diseño . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
2.4.1. Patrón Singleton . . . . . . . . . . . . . . . . . . . . . . . . . . 58

I
2.4.2. Patrón Factory Method . . . . . . . . . . . . . . . . . . . . . . . 59
2.4.3. Otros patrones de diseño . . . . . . . . . . . . . . . . . . . . . . 61
2.5. BHCVRP como un servicio web . . . . . . . . . . . . . . . . . . . . . . 63
2.5.1. Herramientas y tecnologías utilizadas . . . . . . . . . . . . . . . 65
2.5.2. BHCVRP_WebService . . . . . . . . . . . . . . . . . . . . . . . 66
2.6. Conclusiones parciales . . . . . . . . . . . . . . . . . . . . . . . . . . . 72

3. Análisis experimental 73
3.1. Introducción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
3.2. Descripción de los experimentos . . . . . . . . . . . . . . . . . . . . . . 73
3.2.1. Descripción de las instancias . . . . . . . . . . . . . . . . . . . . 74
3.2.2. Configuración de los experimentos . . . . . . . . . . . . . . . . . 77
3.3. Análisis de los resultados . . . . . . . . . . . . . . . . . . . . . . . . . . 81
3.3.1. Resultados obtenidos con BHCVRP para las heurísticas de cons-
trucción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
3.3.2. Comparación con los resultados de BHCTTRP . . . . . . . . . . 99
3.3.3. Toma de decisiones para utilizar BHCVRP . . . . . . . . . . . . 104
3.4. Conclusiones parciales . . . . . . . . . . . . . . . . . . . . . . . . . . . 106

Conclusiones 108

Recomendaciones 110

Referencias 111

Anexo A. Diagramas de secuencia del patrón Factory Method 120

Anexo B. Resultados de los procedimientos en la comparación de las heurísticas 122


Índice de tablas

1.1. Características de las variantes VRP. . . . . . . . . . . . . . . . . . . . . 14


1.2. Comparación de bibliotecas de clases que implementan métodos heurísticos. 27

2.1. Descripción de los paquetes de la Capa Application. . . . . . . . . . . . . 47


2.2. Descripción de los paquetes de la Capa JDK. . . . . . . . . . . . . . . . 47
2.3. Descripción de las clases que integran el paquete problem_VRP. . . . . . 49
2.4. Descripción de las clases que integran el paquete heuristic_VRP (I). . . . 52
2.5. Descripción de las clases que integran el paquete heuristic_VRP (II). . . . 54
2.6. Descripción de las clases que integran el paquete factory_pattern. . . . . . 56
2.7. Descripción de las operaciones de BHCVRP_WebService. . . . . . . . . 68
2.8. Descripción de las clases que integran el paquete web_service. . . . . . . 71

3.1. Descripción de las instancias CVRP. . . . . . . . . . . . . . . . . . . . . 74


3.2. Descripción de las instancias MDVRP. . . . . . . . . . . . . . . . . . . . 75
3.3. Descripción de las instancias HFVRP. . . . . . . . . . . . . . . . . . . . 76
3.4. Descripción de las instancias TTRP. . . . . . . . . . . . . . . . . . . . . 77
3.5. Resumen de los resultados en las 16 instancias CVRP (I). . . . . . . . . . 83
3.6. Resumen de los resultados en las 16 instancias CVRP (II). . . . . . . . . 84
3.7. Resumen de los resultados en las 16 instancias HFVRP (I). . . . . . . . . 87
3.8. Resumen de los resultados en las 16 instancias HFVRP (II). . . . . . . . . 88
3.9. Resumen de los resultados en las 22 instancias MDVRP (I). . . . . . . . . 91
3.10. Resumen de los resultados en las 22 instancias MDVRP (II). . . . . . . . 92
3.11. Resumen de los resultados en las 21 instancias TTRP (I). . . . . . . . . . 95
3.12. Resumen de los resultados en las 21 instancias TTRP (II). . . . . . . . . . 96
3.13. Rankings de las heurísticas para las cuatro variantes VRP. . . . . . . . . . 98
3.14. Resumen de los resultados en las 21 instancias TTRP en BHCTTRP [1]. . 100

III
3.15. Resultados de la prueba de Wilcoxon en la comparación con los algorit-
mos de BHCTTRP en cuanto a costo. . . . . . . . . . . . . . . . . . . . 102
3.16. Resultados de la prueba de Wilcoxon en la comparación con los algorit-
mos de BHCTTRP en cuanto a tiempo. . . . . . . . . . . . . . . . . . . . 103
Índice de figuras

1.1. Relaciones de las clases de complejidad [2]. . . . . . . . . . . . . . . . . 10


1.2. Representación gráfica de un VRP. . . . . . . . . . . . . . . . . . . . . . 11
1.3. Clasificación de los algoritmos aproximados [3]. . . . . . . . . . . . . . . 15
1.4. Ejemplo de dos rutas que pueden ser combinadas [4]. . . . . . . . . . . . 20
1.5. Ejemplo de una solución utilizando el Algoritmo de Barrido [5]. . . . . . 23
1.6. Diagrama de la estructuración en capas de BHCTTRP [1]. . . . . . . . . 29
1.7. Diagrama de clases del paquete problema_data de BHCTTRP [1]. . . . . 30
1.8. Diagrama de clases del paquete controller_heuristics de BHCTTRP [1]. . 31
1.9. Diagrama de clases del paquete construction_heuristics de BHCTTRP [1]. 32

2.1. Vista de la arquitectura de BHCVRP. . . . . . . . . . . . . . . . . . . . . 46


2.2. Diagrama de clases del paquete problem_VRP. . . . . . . . . . . . . . . 48
2.3. Diagrama de clases del paquete heuristic_VRP (Vista I). . . . . . . . . . 50
2.4. Diagrama de clases del paquete heuristic_VRP (Vista II). . . . . . . . . . 51
2.5. Diagrama de clases del paquete heuristic_VRP (Vista III). . . . . . . . . 53
2.6. Diagrama de clases del paquete heuristic_VRP (Vista IV). . . . . . . . . 53
2.7. Diagrama de clases del paquete heuristic_VRP (Vista V). . . . . . . . . . 54
2.8. Diagrama de clases del paquete factory_pattern. . . . . . . . . . . . . . . 55
2.9. Diagrama de clases genérico del patrón Singleton. . . . . . . . . . . . . . 58
2.10. Implementación del patrón Singleton en la clase StrategyHeuristic. . . . . 59
2.11. Diagrama de clases genérico del patrón Factory Method. . . . . . . . . . 59
2.12. Implementación del patrón Factory Method para las heurísticas de cons-
trucción. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
2.13. Diagrama de secuencia del patrón Factory Method para las heurísticas de
construcción. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
2.14. Conjunto de protocolos para servicios web [6]. . . . . . . . . . . . . . . 64

V
2.15. Diagrama de actividades del funcionamiento de BHCVRP. . . . . . . . . 67
2.16. Arquitectura de BHCVRP_WebService. . . . . . . . . . . . . . . . . . . 69
2.17. Diagrama de clases del paquete web_service. . . . . . . . . . . . . . . . 70

3.1. Gráficas del comportamiento de las heurísticas en costo y tiempo en la


variante CVRP. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86
3.2. Gráficas del comportamiento de las heurísticas en costo y tiempo en la
variante HFVRP. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90
3.3. Gráficas del comportamiento de las heurísticas en costo y tiempo en la
variante MDVRP. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94
3.4. Gráficas del comportamiento de las heurísticas en costo y tiempo en la
variante TTRP. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97
3.5. Comportamiento de las heurísticas implementadas en BHCTTRP en cuan-
to al costo de las soluciones. . . . . . . . . . . . . . . . . . . . . . . . . 101
3.6. Comportamiento de las heurísticas implementadas en BHCTTRP en cuan-
to al tiempo de ejecución. . . . . . . . . . . . . . . . . . . . . . . . . . . 103
3.7. Árbol de decisión para la variante MDVRP. . . . . . . . . . . . . . . . . 105
Introducción

El problema de distribuir productos desde ciertos depósitos a sus usuarios finales


desempeña un papel central en la gestión de los sistemas logísticos y su adecuada pla-
nificación puede acarrear considerables ahorros. Esos potenciales ahorros justifican en
gran medida la utilización de técnicas de Investigación de Operaciones como facilitado-
ras 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. Un correcto manejo de estos problemas
puede producir ahorros considerables en los costos totales de transportación. Por lo ge-
neral, esta mejora radica en la planificación eficiente de las rutas de los vehículos, que
determinará como visitar a los clientes para satisfacer sus necesidades [7]. Esto da lugar
a un problema de optimización combinatoria denominado Problema de Planificación de
Rutas de Vehículos (Vehicle Routing Problem, VRP) [4, 8].
A grandes rasgos un VRP consiste en dado un conjunto de clientes dispersos geo-
gráficamente y una flota de vehículos dispuesta desde un depósito o varios, determinar el
conjunto de rutas de costo mínimo que satisfagan las restricciones del problema [4]. Estos
problemas datan del año 1959, donde Dantzig y Ramser [8] lo introducen y lo describen
como una variante generalizada del Problema del Viajante de Comercio (Traveling Sales-
man Problem, TSP) [9]. Los autores diseñaron una aplicación real para la distribución de
gasolina a las estaciones de servicio y propusieron una formulación matemática. Cinco
años después, Clarke y Wright propusieron el primer algoritmo que resultó efectivo para
resolver este problema, el Algoritmo de Ahorros [10]. De esta manera se inician grandes
investigaciones y trabajos en el área de planificación de rutas de vehículos. Por una parte,
hacia la definición de modelos que incorporen cada vez más características de la vida real,
y por otra, en la búsqueda de algoritmos que permitan resolver los problemas de manera
eficiente [11].

1
2

Los modelos básicos que se proponen son usados para resolver situaciones prácticas
y pueden ser extendidos a diferentes variantes que atienden diversas problemáticas reales
del mundo de la logística y el transporte [12, 13, 14]. Ejemplos de aplicaciones prácti-
cas de VRP son visibles en las rutas de los ómnibus, el transporte obrero, la recolección
de basura, la distribución del periódico y del correo, entre otros. Estas situaciones co-
tidianas, cada una con sus características, puede ser modelada a partir de las diferentes
variantes de VRP que existen. Tal es el caso del Problema de Planificación de Rutas de
Vehículos con Capacidades (Capacitated VRP, CVRP) [15], el Problema de Planifica-
ción de Rutas de Vehículos con Múltiples Depósitos (Multi-Depot VRP, MDVRP) [16],
el Problema de Planificación de Rutas de Vehículos con Flota Heterogénea (Heterogenous
Fleet VRP, HFVRP) [17], el Problema de Planificación de Rutas de Camiones y Remol-
ques (Truck and Trailer Routing Problem, TTRP) [18], el Problema de Planificación de
Rutas de Vehículos con Ventanas de Tiempo (VRP with Time Windows, VRPTW) [13],
entre otras [19, 20, 21].
Los problemas de planificación de rutas de vehículos por lo general son complejos de
resolver para instancias en las que el número de clientes es grande, debido al esfuerzo
computacional requerido y a que los mismos pertenecen a la clase de problemas NP-
duro [13]. Los problemas clasificados en esta categoría son aquellos que no han podido
ser reducidos a problemas NP y se consideran muy difíciles de resolver [22]. Con el fin
de resolver dichos problemas, en ocasiones es necesario comprometer algunos requisitos
de optimalidad y construir una estructura de control que aunque no garantice encontrar
la respuesta óptima casi siempre encuentre una buena solución. Por tal razón, es muy
común utilizar en este tipo de problemas algoritmos heurísticos como las heurísticas y las
metaheurísticas [3].
En el caso de las heurísticas su propósito es guiar el proceso de búsqueda en la di-
rección más provechosa sugiriendo qué camino tomar cuando hay más de uno disponible
[15]. En especial se usa el término heurístico para referirse a un procedimiento que trata
de aportar soluciones a un problema con un buen rendimiento, en lo referente a la calidad
de las soluciones y a los recursos empleados; es decir, son métodos sencillos que pro-
porcionan soluciones satisfactorias a un problema dado mediante algoritmos específicos
[11]. Las heurísticas pueden usarse para ofrecer la solución final del problema o bien son
aplicables dentro del contexto del uso de las metaheurísticas.
3

Las heurísticas pueden ser clasificadas en dos grupos: heurísticas de construcción y


heurísticas de mejora [23]. Las heurísticas de contrucción consisten en construir literal-
mente paso a paso una solución del problema [23], mientras que las de mejora parten de
una solución y reparan las rutas previamente construidas para conseguir una determinada
mejoría [5]. Algunas de las heurísticas constructivas clásicas más utilizadas para resolver
los VRPs son: el Algoritmo de Ahorros [10], el Algoritmo de Barrido [11], la Heurística
de Inserción en Paralelo de Christofides, Mingozzi y Toth [24], la Heurística de Asigna-
ción Generalizada de Fisher y Jaikumar [15], la Heurística de Inserción de Kilby [5], la
Heurística de Inserción Secuencial de Mole & Jameson [25], entre otras [4, 5, 26].
Debido a la necesidad de resolver este tipo de problemas (problemas de optimización)
utilizando tales algoritmos y a su vez favorecer la reutilización de sus códigos; se ha-
ce conveniente agruparlos dentro de componentes de software. En la actualidad existen
escasas bibliotecas que implementan métodos heurísticos tanto para la resolución de pro-
blemas de planificación de rutas de vehículos como para la resolución de otros problemas
de optimización. Entre estas bibliotecas se encuentran:

METSlib es una biblioteca que implementa varios de los algoritmos metaheurísticos


básicos de la literatura [27].

Biblioteca para los problemas de planificación del inventario marítimo MIRPs (MIR-
PLib) [28].

MALLBA es una biblioteca que contiene esqueletos para la optimización combi-


natoria (incluye métodos de resolución genéricos, exactos, heurísticos e híbridos)
[29].

Biblioteca de código abierto para búsqueda heurística (Hipster) [30].

BiCIAM es una biblioteca de clases que implementa un modelo unificado de algo-


ritmos metaheurísticos mono-objetivo y multi-objetivo [31].

Biblioteca de heurísticas de búsqueda local para el problema de planificación de


rutas de vehículos (VRPH) [32].

MOMHLib++ biblioteca diseñada para la implementación de metaheurísticas multi-


objetivos [33].
4

Biblioteca de Heurísticas de Construcción para el Problema de Planificación de


Rutas de Camiones y Remolques (BHCTTRP) [1].

Open Metaheuristics es una biblioteca diseñada para realizar una búsqueda de apren-
dizaje adaptada en el diseño de metaheurísticas [34].

De las bibliotecas antes mencionadas, las que permiten resolver problemas de planifi-
cación de rutas de vehículos son BiCIAM [31], METSlib [27], MOMHLib++ [33], Open
Metaheuristics [34], VRPH [32], MALLBA [29] y BHCTTRP [1]. De ellas BHCTTRP
es la única que permite hacerlo a través de heurísticas de construcción pero solo son apli-
cables a la variante del TTRP [18]. En la literatura, en general, se evidencia la carencia
de bibliotecas de heurísticas para la resolución de los problemas de optimización com-
binatoria; principalmente el desarrollo de las bibliotecas está dirigido a los algoritmos
metaheurísticos.
La investigación realizada sobre las estrategias de solución aplicadas en algunas de
las variantes VRP, por ejemplo CVRP [15], VRPTW [13], TTRP [18], MDVRP [16] y
HFVRP [17], arrojó que la variante más tratada es CVRP y que para la construcción de
la solución inicial los autores utilizan principalmente métodos heurísticos definidos a su
consideración. Esto sucede aún cuando pueden utilizar las heurísticas de construcción
clásicas, dado que se conoce que las mismas obtienen buenos resultados para este tipo de
problemas. Por último, existen insuficiencias en cuanto a la cantidad de adaptaciones de
las heurísticas a las distintas variantes de este problema, debido a que no se consideran
las características propias de cada uno de estos problemas.
La Biblioteca de Heurísticas de Construcción para el Problema de Planificación de
Rutas de Camiones y Remolques (BHCTTRP) es una propuesta realizada en el proyecto
de Optimización y Metaheurística del CITI [1]. Esta biblioteca está desarrollada en Java
y contiene la adaptación de algunas heurísticas de construcción clásicas para la variante
TTRP. La biblioteca constituye un gran aporte en la resolución de este problema hacien-
do uso de heurísticas de construcción clásicas, aunque su diseño está restringido pues no
contempla las características de otras variantes de planificación de rutas de vehículos. Por
esta razón, la obtención de buenas soluciones para otros VRPs sigue siendo limitada. Es
importante señalar que actualmente las bibliotecas presentan dificultades con la interope-
rabilidad de sus códigos, este problema limita sus usos y BHCTTRP es un ejemplo de
esto.
5

A partir de la situación antes descrita se plantea como problema a resolver la exis-


tencia de deficiencias en la arquitectura de BHCTTRP para la incorporación de nuevas
variantes de planificación de rutas de vehículos.
El objeto de estudio en el presente trabajo se enmarca en los problemas de optimiza-
ción combinatoria y los algoritmos heurísticos. En el caso del campo de acción se enfoca
en los Problemas de Planificación de Rutas de Vehículos y las heurísticas de construcción.
Para dar solución al problema planteado se traza como objetivo general: Desarrollar
una nueva versión de la biblioteca de heurísticas de construcción que resuelva distintos
problemas de planificación de rutas de vehículos mediante el uso heurísticas de construc-
ción.
Para dar cumplimiento al objetivo general se definen los siguientes objetivos especí-
ficos con sus respectivas tareas:

1. Fundamentar el marco teórico investigativo sobre los problemas de planificación


de rutas de vehículos, el uso de los algoritmos heurísticos para su resolución y las
formas de agrupar estos algoritmos para su reutilización.

Realizar búsquedas bibliográficas con el objetivo de identificar las caracterís-


ticas que se presentan en los problemas de planificación de rutas de vehículos
en la actualidad.

Realizar búsquedas bibliográficas con el fin de hacer un estudio de la litera-


tura referente a los resultados obtenidos para los VRPs usando como vía de
resolución los algoritmos heurísticos.

Realizar un análisis de los componentes de software existentes para la resolu-


ción de VRPs haciendo uso de algoritmos heurísticos.

2. Rediseñar la arquitectura de la biblioteca de clases para la utilización de heurísticas


de construcción en otras variantes VRP.

Analizar la versión de BHCTTRP propuesta anteriormente para determinar


qué cambios se deben realizar.

Diseñar las modificaciones necesarias en la arquitectura para permitir la in-


corporación de nuevas variantes de planificación de rutas de vehículos y heu-
rísticas de construcción.
6

Brindar las funcionalidades de la nueva versión de la biblioteca como un ser-


vicio web que permita la explotación de sus algoritmos en aplicaciones desa-
rrolladas en diferentes tecnologías.

3. Adaptar nuevas heurísticas de construcción para otros problemas de planificación


de rutas de vehículos.

Analizar nuevas heurísticas de construcción en cuanto a su funcionamiento


para su incorporación en la nueva versión de la biblioteca.

Seleccionar las heurísticas de construcción que se van a incorporar a la biblio-


teca para resolver las distintas variantes VRP.

Implementar las clases y métodos para adaptar las heurísticas seleccionadas


teniendo en cuenta las nuevas características que presenta las variantes de
VRPs a incorporar.

4. Validar el funcionamiento de las heurísticas adaptadas a través de un conjunto de


experimentos con instancias de la literatura.

Definir los escenarios para cada uno de los experimentos con las heurísticas
adaptadas.

Analizar los resultados obtenidos con cada experimento utilizando pruebas


estadísticas no parametricas.

Comparar los resultados actuales obtenidos para la variante TTRP con los
resultados obtenidos en la versión anterior de la biblioteca para las heurísticas
de construcción que estaban implementadas.

El cumplimiento del objetivo general tiene como valor práctico un aporte significa-
tivo en la resolución de diferentes problemas de planificación de rutas de vehículos. No
obstante es importante decir que los resultados del trabajo que se presentan tienen valor
científico y tecnológico pues se pone a disposición de la comunidad científica un compo-
nente de software que brinda nuevos algoritmos para la resolución de VRPs. Esta bibliote-
ca de heurísticas permite la colaboración con otras aplicaciones que usan metaheurísticas
o con sistemas de información geográficos que brindan servicios de planificación de ru-
tas de vehículos. Por último, mencionar que este trabajo ha sido presentado en distintos
eventos obteniendo premios.
7

Para alcanzar los objetivos mencionados el trabajo de diploma se encuentra estructu-


rado en tres capítulos. Además, se adicionan otras secciones de importancia, como son
las conclusiones, recomendaciones, la bibliografía consultada y, finalmente los anexos.
El Capítulo 1: “Fundamentos teóricos” presenta una revisión detallada del estado
del arte sobre los problemas de planificación de rutas de vehículos, sus características
y variantes. Además, se describen algunas de las heurísticas de construcción más utili-
zadas en estos problemas. El Capítulo 2: “Diseño de la solución” se dedica a describir
la solución mediante la vista de la arquitectura de la biblioteca de clases y los patrones
implementados. Otros elementos como la adaptación realizada de los nuevos algoritmos
incorporados se explican en este capítulo. El Capítulo 3: “Análisis experimental” se de-
dica a la validación de la solución mediante un conjunto de experimentos. Se presentan
los resultados alcanzados y un análisis del comportamiento de las heurísticas aplicando
pruebas estadísticas no paramétricas.
Capítulo 1

Fundamentos teóricos

1.1. Introducción
En este capítulo se describen los aspectos teóricos de la investigación que se encuen-
tran relacionados con los problemas de optimización combinatoria. Específicamente, se
abordan los problemas de planificación de rutas de vehículos y sus variantes; además
de los métodos heurísticos como principal alternativa para resolver estos problemas. En
particular se hace énfasis en las heurísticas de construcción y en las bibliotecas que im-
plementan estos métodos. Además, se describe el diseño de la arquitectura de BHCTTRP
para la resolución del Problema de Planificación de Rutas de Camiones y Remolques
utilizando heurísticas constructivas.

1.2. Problemas de optimización


La toma de decisiones está presente en la mayoría de las actividades que se realizan
diariamente. A medida que el mundo se torna más complejo y competitivo, el proceso
de toma de decisiones se debe realizar de forma racional y óptima. En la vida real son
innumerables las aplicaciones donde se requiere optimizar antes de seleccionar la mejor
opción [35]. La optimización consiste en hallar la mejor solución posible a un determi-
nado problema, ya sea con el propósito de maximizar o minimizar una función o varias
funciones objetivos del problema teniendo en cuenta sus restricciones [36].
Los problemas de optimización se pueden clasificar de acuerdo al número de objeti-
vos que tratan de resolver: en problemas de optimización mono-objetivo y problemas de
optimización multi-objetivo. La diferencia principal consiste en el número de funciones

8
CAPÍTULO 1. FUNDAMENTOS TEÓRICOS 9

objetivos a analizar, pues los mono-objetivo buscan obtener la mejor solución ya sea un
máximo o un mínimo a partir de un criterio determinado. En cambio en la optimización
multi-objetivo puede no existir una solución que sea la mejor con respecto a todas las
funciones objetivos y lo que se obtiene no es una única solución sino un conjunto de
soluciones conocidas como soluciones del Frente de Pareto [37].
En la vida cotidiana se pueden encontrar multitud de problemas reales que pueden ser
tratados como problemas de optimizacion que exigen obtener una solución. Algunos de
los que se pueden citar son: determinar el plan de costo mínimo para repartir mercancías a
clientes, realizar la asignación óptima de trabajadores a un conjunto de tareas ó encontrar
la configuración óptima en una red de telecomunicaciones. Estos problemas presentan
una característica común, tratan de optimizar un determinado valor y por esta razón son
conocidos como problemas de optimización [38].
En el ámbito de la optimización los problemas lineales se consideran los más fáciles
de resolver, donde tanto la función objetivo como las restricciones son expresiones linea-
les. La mayoría de estos problemas pueden ser resueltos con métodos exactos como el
método Simplex [39], aunque existen otras variantes de este método que son empleadas
para situaciones más específicas. Por ejemplo: Simplex Dual [39], Programación Lineal
Paramétrica [39], Técnica de Ramificación y Acotamiento [39], entre otros. Sin embargo,
la mayor parte de los problemas estan categorizados como problemas de optimización
difíciles de resolver [23].
Los problemas de optimización se clasifican en diferentes clases según su complejidad
[2]. En la Figura 1.1 se muestra la relación existente entre estas clases:

P: son los problemas que pueden ser resueltos por algoritmos que toman un tiempo
polinomial en resolverlos.
NP: son los problemas que pudieran ser resueltos por un algoritmo no determinís-
tico en un tiempo polinomial.
NP-completo: son los problemas que no se le ha encontrado un algoritmo que en-
cuentre el estado óptimo en un tiempo polinomial; pero no se ha probado que pueda
existir, para al menos un problema.
CAPÍTULO 1. FUNDAMENTOS TEÓRICOS 10

NP-duro: son los problemas que si son problemas NP-completo que no han podi-
do ser reducidos a problemas NP. Se consideran presuntamente intratables o muy
difíciles de resolver.

Figura 1.1: Relaciones de las clases de complejidad [2].

La existencia de una gran cantidad y variedad de problemas NP-duro que aparecen en


la práctica y que necesitan ser resueltos de forma eficiente, impulsó el desarrollo de pro-
cedimientos para encontrar buenas soluciones aunque no fuesen óptimas. Estos métodos
se denominan heurísticos o aproximados [23].

1.2.1. Problema de planificación de rutas de vehículos

El Problema del Viajante de Comercio (Travelling Salesman Problem, TSP) [40] cons-
tituye la situación general y de partida para formular otros problemas combinatorios más
complejos, aunque más prácticos, como los de planificación de rutas de vehículos. El TSP
se puede describir como: dadas n ciudades y el costo ci j que se obtiene al viajar de una
ciudad a otra, se debe encontrar la ruta de costo mínimo para visitarlas todas pasando solo
una vez por cada una de ellas, y regresando a la ciudad de partida [40]. En ese sentido, el
TSP puede considerarse el problema de planificación de rutas más simple. No obstante,
pertenece a la clase de problemas NP-duro y es uno de los problemas de optimización
combinatoria más difundido [4, 41].
La distribución de bienes y servicios, es la actividad que modelan los problemas de
planificación de rutas de vehículos que aparecen en la literatura como Problema de Plani-
ficación de Rutas de Vehículos (Vehicle Routing Problems, VRP) [42]. A grandes rasgos
un VRP consiste en dado un conjunto de clientes dispersos geográficamente y una flota de
vehículos dispuesta desde un depósito o varios, determinar el conjunto de rutas de costo
CAPÍTULO 1. FUNDAMENTOS TEÓRICOS 11

mínimo que satisfagan las restricciones del problema [4, 9]. A continuación en la Figura
1.2 se muestra un ejemplo gráfico de un VRP.

Figura 1.2: Representación gráfica de un VRP.

Los clientes tienen cierta demanda que debe ser satisfecha por los vehículos. En mu-
chos casos, la demanda es un bien que ocupa lugar 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.
En otros casos la demanda no es un bien sino un servicio: el cliente simplemente debe
ser visitado por el vehículo. Los clientes poden presentar restricciones relativas a su ho-
rario de servicio y usualmente estas restricciones se expresan en forma de intervalos de
tiempo (llamados ventanas de tiempo) en los que se puede arribar al cliente [13, 14]. En
problemas con vehículos diferentes pueden existir restricciones de compatibilidad entre
éstos y los clientes. Por ejemplo, algunos vehículos muy pesados no pueden ingresar en
ciertas localidades. En estos casos, cada cliente sólo puede ser visitado por algunos de los
vehículos [18, 43].
Tanto los vehículos como las mercancías a distribuir (si las hubiese) suelen estar ubi-
cadas en depósitos. Usualmente se exige que cada ruta comience y finalice en un mismo
depósito, aunque puede darse el caso en algunas situaciones prácticas donde el recorrido
finaliza en un punto diferente al de inicio [17]. En los problemas con múltiples depósitos
cada uno de estos tiene diferentes características, por ejemplo, su ubicación, la cantidad y
la capacidad de sus vehículos.
Por último, cada vehículo tiene asociado un costo variable proporcional a la distancia
que recorra. Los problemas en donde la capacidad es la misma 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. En general
CAPÍTULO 1. FUNDAMENTOS TEÓRICOS 12

se asume que cada vehículo recorre una sola ruta en el período de planificación aunque
existen variantes donde un vehículo puede realizar más de un recorrido [19].
En las últimas cuatro décadas se ha realizado un enorme esfuerzo por resolver estos
problemas. En 1959, Dantzig y Ramser [8] realizaron por primera vez una formulación del
problema para una aplicación de distribución de combustible. Cinco años más tarde, Clar-
ke y Wright [10] proponen el primer algoritmo que resultó efectivo para su resolución: el
popular Algoritmo de Ahorros. A partir de estos trabajos, el área de la planificación de
rutas de vehículos ha crecido de manera exponencial. Por un lado, hacia la definición de
modelos que incorporen cada vez más características de la realidad, y por otro lado hacia
la búsqueda de algoritmos que permitan resolver los problemas de manera eficiente [4].
Como consecuencia de las características de la vida real, han surgido nuevas variantes
de planificación de rutas de vehículos. En el siguiente epígrafe se describen algunas de
las variantes más abordadas en la literatura.

1.2.2. Variantes de planificación de rutas de vehículos

Los modelos básicos que se proponen para los VRP son usados para resolver situa-
ciones prácticas y pueden ser extendidos a diferentes variantes que atienden diversas pro-
blemáticas reales del mundo de la logística y el transporte [12, 13, 14]. Ejemplos de
aplicaciones prácticas del VRP son visibles en las rutas de los ómnibus, la recolección
de basura, la distribución del periódico y del correo, entre otros [19, 20, 44]. Estas si-
tuaciones, cotidianas cada una con sus características, puede ser modelada a partir de las
diferentes variantes VRP que existen o de la fusión de las mismas. A continuación se
describen algunas de estas variantes:
Problema de Planificación de Rutas de Vehículos con Capacidades (Capacitated
VRP, CVRP) [15, 45]: es la variante clásica del problema de planificación de rutas de
vehículos, donde se incluyen las restricciones de capacidad de los vehículos. Esta res-
tricción establece que la demanda total de los clientes en cada ruta no puede exceder la
capacidad del vehículo utilizado para realizar dicha ruta. Además, cada cliente posee una
demanda específica para ser atendida. En otras palabras, el CVRP es el problema en don-
de un conjunto de vehículos idénticos, localizados en un depósito central, deben satisfacer
la demanda de los clientes, sujeto a las restricciones de capacidad de los vehículos.
Problema de Planificación de Rutas de Vehículos con Múltiples Depósitos (Multi-
CAPÍTULO 1. FUNDAMENTOS TEÓRICOS 13

Depot VRP, MDVRP) [16, 46]: es una extensión del VRP clásico (CVRP) donde de igual
forma cada vehículo debe comenzar y terminar su ruta en el mismo depósito. Esta variante
incorpora varios depósitos con ubicaciones diferentes. Cada depósito cuenta con una flota
limitada de vehículos con capacidad restringida, utilizada para repartir los productos re-
queridos por los clientes, cuya localización y demanda es también conocida de antemano.
Según se explica en [47], si los clientes están agrupados alrededor de los depósitos, en-
tonces el problema puede modelarse como CVRPs independiente. Sin embargo, si los
clientes y los depósitos están mezclados, el problema de planificación debe ser resuelto
en dos fases. Inicialmente se asignan los clientes a los depósitos y luego se determinan
los recorridos a realizar por cada depósito para visitar a los clientes asignados.
Problema de Planificación de Rutas de Camiones y Remolques (Truck and Trailer
Routing Problem, TTRP) [18, 43]: en esta variante se considera el uso de remolques como
parte de la flota de vehículos (comúnmente excluido en estos problemas). Este problema
presenta otras particularidades como la definición de dos tipos de cliente debido a las
restricciones de accesos que pueden existir en las ubicaciones de los mismos. Por esta
razón, existen clientes que son accedidos con el camión y el remolque (vehículo completo)
conocidos como clientes de vehículo completo o VC y otros que son accedidos por el
camión solamente sin el remolque denominados clientes de camión puro o TC. En las
soluciones de este tipo de problemas se pueden diseñar tres tipos de rutas en función de
los clientes que se visiten y del vehículo utilizado.
Problema de Planificación de Rutas de Vehículos con Flota Heterogénea (Hetero-
genous Fleet VRP, HFVRP), también conocida como MFVRP [16] o FSMVRP [17]: en
esta variante los vehículos de la flota presentan características y/o capacidades diferentes.
La capacidad heterogénea de la flota de vehículos se debe considerar para determinar las
rutas a construir, ya que un vehículo más grande podrá realizar una ruta más larga o que
tenga mayor concentración de demanda. La cantidad de vehículos de cada tipo es limitada
y existe un costo fijo o un costo por unidad de distancia recorrida asociado a cada tipo de
vehículo.
CAPÍTULO 1. FUNDAMENTOS TEÓRICOS 14

Problema de Planificación de Rutas de Vehículos con Ventanas de Tiempo (VRP


with Time Windows, VRPTW) [13, 14]: esta variante se considera una extensión del CVRP
porque además de considerar las capacidades, incorpora como restricción que cada cliente
tiene asociada una ventana de tiempo. Esta restricción establece un horario de servicio en
el que los vehículos pueden arribar a los cliente. Además, se define un tiempo de servicio
que indica el tiempo que demora en realizar el servicio al cliente. El objetivo de este
problema radica en minimizar la distancia total de los repartos de manera que se pueda
satisfacer la demanda de todos los clientes posibles respetando sus ventanas de tiempo.
En la Tabla 1.1 se muestran algunas de las variantes clásicas de la literatura explicadas
anteriormente, donde se aglomeran las características o restricciones distintivas de cada
una de ellas, para lograr una mejor comprensión de las diferencias. Como se puede apre-
ciar todas las variantes tiene restricción de capacidad y en función de las características
del problema cada variante incorpora nuevas restricciones o formas de resolución.

Tabla 1.1: Características de las variantes VRP.

Restricciones

Variantes Restricción de Varios Flota Tipos Ventanas


Capacidad Depósitos Heterogénea de Clientes de Tiempo

CVRP [15, 45] X


MDVRP [16, 46] X X
HFVRP [16, 17] X X
TTRP [18, 43] X X
VRPTW [13, 14] X X

A medida que surgen nuevas características en los problemas de la vida real surgen
nuevas variantes, como son: el Problema de Planificación de Rutas de Vehículos Periódico
(Periodic VRP, PVRP) [19], el Problema de Planificación de Rutas de Vehículos con
Entregas Divididas (Split Delivery VRP, SDVRP) [20], el Problema de Planificación de
Rutas de Vehículos Estocástico (Stochastic VRP, SVRP) [21], Problema de Planificación
de Rutas de Vehículos con Devoluciones (VRP with Backhauls, VRPB) [44], el Problema
de Planificación de Rutas de Vehículos con Instalaciones de Satélites (VRP with Satellite
Facilities, VRPSF) [48], entre otras. Además, en ocasiones se requiere la fusión de las
variantes antes mencionadas para lograr satisfacer una situación del mundo real.
Los problemas de planificación de rutas de vehículos por lo general son complejos
de resolver para instancias en las que el número de clientes es grande, debido al esfuer-
CAPÍTULO 1. FUNDAMENTOS TEÓRICOS 15

zo computacional requerido y a que pertenecen a la clase de problemas NP-duro [13].


Con el propósito de dar solución a estos problemas, en ocasiones es necesario compro-
meter algunos requisitos de optimalidad y construir una estructura de control que aunque
no garantice encontrar la respuesta óptima casi siempre encuentre una buena solución.
Por tal razón, es muy común utilizar en este tipo de problemas algoritmos heurísticos o
aproximados; como las heurísticas y las metaheurísticas [3]. En el siguiente epígrafe se
describen algunos de los algoritmos más abordados en la literatura.

1.3. Algoritmos heurísticos


La necesidad de resolver problemas cada vez de mayor complejidad propicia el sur-
gimiento de los métodos aproximados. Estos métodos son capaces de obtener buenas
soluciones aunque no necesariamente la solución óptima. Estos métodos, donde la rapi-
dez del proceso es tan importante como la calidad de la solución obtenida, se clasifican
según [3] como se muestra en la Figura 1.3.

Figura 1.3: Clasificación de los algoritmos aproximados [3].

En el caso de las heurísticas están hechas a medida y diseñadas para resolver un pro-
blema y/o instancia específica y las metaheurísticas son algoritmos de propósito general
que se pueden utilizar para resolver cualquier problema de optimización [3]. A diferencia
de los métodos exactos mencionados en el epígrafe 1.2, un método heurístico no tiene una
base matemática formal que lo sustente. Estos métodos se desarrollan por intuición.
CAPÍTULO 1. FUNDAMENTOS TEÓRICOS 16

La heurística es un término que se deriva de la palabra griega “heuriskein” que sig-


nifica encontrar o descubrir. También su origen se debe a la famosa exclamación de Ar-
químedes, heurika (“lo encontré”) y se usa en el ámbito de la optimización para describir
una clase de algoritmos de resolución de problemas [23]. El propósito de una heurística es
guiar el proceso de búsqueda en la dirección más provechosa sugiriendo qué camino to-
mar cuando hay más de uno disponible [15]. En especial, se usa el término heurístico para
referirse a un procedimiento que trata de aportar soluciones a un problema con un buen
rendimiento, en lo referente a la calidad de las soluciones y a los recursos empleados;
es decir, son métodos sencillos que proporcionan soluciones satisfactorias a un problema
dado mediante algoritmos específicos [11]. La idea más genérica del término heurística
está relacionada con la tarea de resolver inteligentemente problemas reales usando el co-
nocimiento disponible [49]. De acuerdo con lo planteado por Reeves en [50] el término
heurística se define de la siguiente forma:
“Una técnica heurística (o simplemente una heurística) es un método que busca bue-
nas soluciones (es decir, soluciones cercanas al óptimo) a un costo computacional razo-
nable sin poder garantizar optimalidad”.
Existen muchas heurísticas de naturaleza muy diferente, por lo que es complicado
dar una clasificación general. Además, ellas son diseñadas para un problema específico
sin posibilidad de generalización o aplicación a problemas similares [23]. Algunos casos
especiales de heurística son:

Heurísticas de construcción: consisten en construir literalmente paso a paso una so-


lución del problema. Usualmente son métodos deterministas y suelen estar basados
en la mejor elección en cada iteración [23].

Heurísticas de mejora: parten de una solución y hacen intercambios de clientes


en las rutas para mejorar las soluciones, es decir, reparan las rutas previamente
construidas para conseguir una determinada mejoría [5].

Con frecuencia las heurísticas se basan en ideas bastante simples, de sentido común,
acerca de la forma en que se debe buscar una buena solución. Estas ideas deben ajustarse
al problema específico de interés. Por lo general, cada método se diseña para abordar un
tipo específico de problema en vez de una variedad de aplicaciones [39]. Durante muchos
años esta situación derivó en que para desarrollar un método heurístico, un equipo de
CAPÍTULO 1. FUNDAMENTOS TEÓRICOS 17

Investigación de Operaciones necesitaba comenzar desde cero. Luego, era necesario ajus-
tarse al problema bajo consideración, siempre que no existiera un algoritmo disponible
para encontrar una solución óptima. Este panorama ha cambiado en años relativamente
recientes [39].
En los últimos años han aparecido una serie de métodos bajo el nombre de metaheu-
rísticos con el propósito de obtener mejores resultados que los alcanzados por los heu-
rísticos tradicionales. El término metaheurística fue introducido por Fred Glover en 1986
[51]. Las metaheurísticas son una clase de métodos aproximados que están diseñados para
resolver problemas difíciles de optimización combinatoria. Estos algoritmos son procedi-
mientos iterativos que guían una heurística subordinada combinando de forma inteligente
distintos conceptos para explorar el espacio de búsqueda [23].
Las metaheurísticas se aplican cuando no hay un método exacto de resolución al pro-
blema, o requiere mucho tiempo de cálculo y/o memoria, o cuando no se conoce la so-
lución óptima. A diferencia de los métodos exactos las metaheurísticas permiten hacer
frente a los problemas de gran tamaño mediante la búsqueda de soluciones satisfactorias
en un plazo de tiempo razonable. El uso de las metaheurísticas en muchas aplicaciones
muestra su eficiencia y eficacia para resolver problemas grandes y complejos [51].
Los algoritmos metaheurísticos se pueden clasificar también según distintos criterios.
Cada uno de estos criterios brinda una idea de la filosofía y procedimientos en que se
basan cada una de ellas [52]:

Inspiradas o no en la naturaleza: Esta clasificación es intuitiva basada en los oríge-


nes y no es muy significativa, dada la dificultad en clasificar algunas metaheurísticas
sobre todo nuevas metaheurísticas híbridas. Algunos ejemplos de inspiración han
sido los algoritmos evolutivos o genéticos [53], los sistemas artificiales inmunoló-
gicos de la biología [54], las colonias de hormigas y abejas [23], la optimización
de enjambre de partículas o inteligencia de enjambre en diferentes especies y el
recocido simulado de la física [55].

Basadas en poblaciones o en una única solución: algoritmos basados en una sola


solución, también llamados basados en trayectorias (Búsqueda Local [3], Recocido
Simulado [55], Búsqueda Tabú [56]), manipulan y transforman la solución descri-
biendo una trayectoria en el espacio de soluciones durante el proceso de búsqueda.
En el caso de los basados en poblaciones (Enjambre de Partículas [3], Algoritmos
CAPÍTULO 1. FUNDAMENTOS TEÓRICOS 18

Evolutivos [53]) toda una población de soluciones va evolucionado. Las metaheu-


rísticas basadas en una sola solución están orientadas a la explotación, pero no
tienen el poder de intensificar la búsqueda en determinadas regiones. Las basadas
en poblaciones están orientadas a la exploración, que permiten una mayor diversi-
ficación en el espacio de soluciones.

Mono-objetivo o multi-objetivo: las metaheurísticas mono-objetivo son aquellas que


buscan dar solución a una única función objetivo, mientras que las metaheurísticas
multi-objetivo buscan dar solución a dos o más funciones objetivo. En este último
caso no se obtiene una sola solución si no un conjunto de soluciones que forman la
solución y se les conoce como soluciones del Frente de Pareto [57].

Para dar cumplimiento a uno de los objetivos trazados, en el siguiente acápite se ex-
plican las heurísticas constructivas.

1.3.1. Heurísticas de construcción

Una heurística es un método sencillo que proporciona soluciones satisfactorias a un


problema dado mediante un algoritmo específico [11]. Las heurísticas pueden ser cla-
sificadas en dos grupos: heurísticas de construcción y heurísticas de mejora [23]. Las
heurísticas de construcción pueden usarse para ofrecer la solución final del problema o
bien son aplicables dentro de un contexto de uso de las metaheurísticas. Un caso concreto
es en la obtención de la solución incial dentro de una metaheurísticas.
Los procedimientos constructivos empiezan desde una solución vacía. Son métodos
donde la solución se crea seleccionando nodos sucesivamente con algún criterio hasta que
construyen la solución factible. Según [5, 9] las heurísticas de construcción se dividen en
cuatro grupos, estos son:

Heurísticas basadas en ahorros: siguen un proceso de intercambio de nodos reali-


zado por los ahorros que se producen sustituyendo nodos en la ruta por otros que
aún no están, respetando siempre las restricciones. El algoritmo propuesto por Clar-
ke and Wright [10], conocido también con el nombre de Ahorro, es el más popular
en esta categoria. Además, de la versión sequencial y paralela de este algoritmo se
puede mencionar la variante basada en Matching [4].
CAPÍTULO 1. FUNDAMENTOS TEÓRICOS 19

Heurísticas de inserción o basadas en costes: son los métodos más comunes para
construir un conjunto de rutas iniciales [25]. Se construye una solución mediante
sucesivas inserciones de nodos. A partir de una sub-ruta se trata de determinar cuál
es el nodo a incluirse a continuación. Además del clásico Vecino más cercano, se
encuentra la Heurística de Inserción Secuencial de Mole & Jameson [25], la Heurís-
tica de Inserción en Paralelo de Christofides, Mingozzi y Toth [24] y la Heurística
de Inserción de Kilby [5].

Métodos basados en ruta primero - asignar después: estos métodos proceden en


dos fases, donde primero se determina el recorrido para visitar a todos los clientes
resolviendo un TSP [40]. Por lo general la ruta resultante no respeta las restricciones
del problema y finalmente se particiona en varias rutas de forma tal que cada ruta sea
factible [4]. Algunos algoritmos que siguen este procedimiento son: los Algoritmos
de Pétalos [58].

Métodos basados en asignar primero - ruta después: estos métodos también pro-
ceden en dos fases. Primero se busca generar grupos de clientes que pertenezcan a
una misma ruta en la solución final. Luego, para cada grupo se crea una ruta que
visite a todos sus clientes y se determina el orden en que serán visitados los clien-
tes en esa ruta. Por lo tanto, construir las rutas para cada grupo es un TSP [40]
que dependiendo de la cantidad de clientes en el grupo se puede resolver de forma
exacta o aproximada [4]. Algunos algoritmos que siguen este procedimiento son: el
Algoritmo de Gilett-Miller [59], conocido como Algoritmo de Barrido (Sweep) y
la heurística de Asignación Generalizada propuesta por Fisher y Jaikumar [15].

La mayoría de las heurísticas de construcción existentes están pensadas para la varian-


te más simple de planificación de rutas de vehículos, es decir, CVRP. Por esta razón, es
necesario realizar adaptaciones a estos métodos constructivos para su utilización en otras
variantes. A continuación, se describen algunas de las heurísticas más significativas para
el Problema de Planificación de Rutas de Vehículos:

1.3.1.1. Algoritmo de Ahorros (Save Algorithm)

El algoritmo de Ahorros fue propuesto por Clarke y Wright en 1964 [10] y resultó
ser el primer algoritmo efectivo para la resolución de un VRP, siendo uno de los más
CAPÍTULO 1. FUNDAMENTOS TEÓRICOS 20

difundidos. Este algoritmo plantea que 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 1.4.

Figura 1.4: Ejemplo de dos rutas que pueden ser combinadas [4].

El ahorro (en distancia) obtenido por dicha unión se calcula como se muestra en (1.1):

si j = ci0 + c0 j − ci j (1.1)

pues en la nueva solución los arcos (i, 0) y (0, j) no son utilizados y se agrega 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 una a una [4]. Según [60, 61] la versión paralela de este algoritmo en
la práctica es mucho mejor que la versión secuencial.
Básicamente los pasos del algoritmo para cada versión son los siguientes [4, 5, 61]:

1. Inicialización: Para cada cliente i construir la ruta (0, i, 0).

2. Cálculo de ahorros: Calcular si j para cada par de clientes i y j.

Versión secuencial

3. Selección: Si todas las rutas fueron consideradas, terminar. Si no, seleccionar una ruta
que aún no haya sido considerada.

4. Extensión: Sea (0, i, . . . , j, 0) la ruta actual. Si no existe ningún ahorro conteniendo


a i o a j, ir a 3. Sea sk∗ 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 sk∗ i (o s jl ∗ ) de futuras
consideraciones. Ir al paso 4.
CAPÍTULO 1. FUNDAMENTOS TEÓRICOS 21

Versión paralela

3. Mejor unión: Sea si∗ j∗ = máx si j , donde el máximo se toma entre los ahorros que
no han sido considerados aún. Sean ri y r j las rutas que contienen a los clientes i∗
y j∗ respectivamente. Si i∗ es el último cliente de ri∗ y j∗ es el primer cliente de
r j∗ y la combinación de ri∗ y r j∗ es factible, combinarlas. Eliminar si∗ j∗ de futuras
consideraciones. Si quedan ahorros por examinar ir al paso 3, si no terminar.

Las soluciones obtenidas con el Algoritmo de Ahorros, en general, pueden ser mejo-
radas mediante procedimientos de mejora como el algoritmo 3-opt [62].

1.3.1.2. Heurística de Inserción Secuencial de Mole & Jameson

Esta es una heurística de inserción que utiliza dos medidas para decidir el próximo
cliente a insertar en la solución parcial. Por un lado, para cada cliente no visitado se
calcula la mejor posición a partir de la ecuación (1.2) para ubicarlo en la ruta actual
teniendo en cuenta solamente las distancias y sin reordenar los nodos que ya están en la
ruta.

i(w) = arg mı́n c1 (vi , w).i=0,...,t (1.2)

Se define en la ecuación (1.3) que calcula el costo de insertar un cliente w entre vi y


vi+1 de la siguiente forma:


w,vi+1 − λ cvi ,vi+1 si es factible la inserción
 c +c
vi ,w
c1 (vi , w) = (1.3)
 ∞ si no es factible la inserción

Si se utiliza solamente la medida c1 para decidir el próximo cliente a insertar, es


probable que los clientes lejanos al depósito no sean tenidos en cuenta sino hasta las
iteraciones finales del algoritmo, es decir, cuando sean las únicas alternativas factibles. Por
lo tanto, es necesario utilizar un incentivo adicional para la inserción de clientes lejanos al
depósito. Este incentivo no es más que la medida de urgencia c2 que busca el cliente que
maximiza la medida y se lo inserta en la posición dada por el mínimo valor de c1 . Para
cada cliente w el cálculo de c2 se define en (1.4) como:

c2 (vi , w) = µc0w − c1 (vi , w) (1.4)


CAPÍTULO 1. FUNDAMENTOS TEÓRICOS 22

Además, es necesario que las inserciones que se realicen sean factibles, o sea, que no
se incumplan las restricciones del problema. Cuando ninguna inserción es factible y si
aún quedan clientes sin visitar, se selecciona un cliente al azar para comenzar una nueva
ruta. Los pasos del algoritmo son los siguientes:

1. Creación de una ruta: Si todos los clientes pertenecen a alguna ruta, terminar. Si
no, seleccionar un cliente no visitado w y crear la ruta r = (0, w, 0).

2. Inserción: Obtener w∗ utilizando (1.2). Insertar w∗ luego de vi(w∗ ) en r.

3. Optimización: Aplicar el algoritmo 3-opt sobre r. Ir al paso 2.

1.3.1.3. Heurística de Barrido (Sweep)

La Heurística de Barrido es una heurística basada en asignar primero - ruta después.


Estos métodos trabajan en dos fases: primero forman grupos de clientes y luego constru-
yen las rutas para cada grupo. En este Algoritmo de Barrido los grupos se forman girando
una semirrecta con origen en el depósito e incorporando a los clientes “barridos” por dicha
semirrecta hasta que se viole la restricción de capacidad. Luego, en cada grupo, los clien-
tes se ordenan resolviendo un TSP [40] de forma exacta o aproximada en dependencia de
la cantidad de clientes en el grupo.
Este algoritmo puede aplicarse en problemas donde cada cliente i está dado por sus
coordenadas polares (ρi , θi ) en un sistema que tiene al depósito como origen y la distancia
entre clientes se define como la distancia euclídea. A continuación se muestran los pasos
del algoritmo.

1. Inicialización: Ordenar los clientes según θ de manera creciente. Si dos clientes


tienen igual valor de θ , colocar primero el de menor valor de ρ. Seleccionar un
cliente w para comenzar y hacer k := 1 y Ck := w.

2. Selección: Si todos los clientes pertenecen a algún cluster, ir a 3. Si no, seleccionar


el siguiente cliente wi . Si wi puede ser agregado Ck sin violar las restricciones de
capacidad, hacer Ck := Ck ∪ wi . Si no, hacer k := k + 1 y crear un nuevo cluster
Ck := wi . Ir al paso 2.

3. Optimización: Para cada cluster Ck para t = 1, ..., k resolver un TSP con sus clien-
tes.
CAPÍTULO 1. FUNDAMENTOS TEÓRICOS 23

Por la forma en que se generan los clusters, las rutas obtenidas no se superponen, lo
que puede ser bueno en algunos casos. Visualmente un posible resultado de la aplicación
de este algoritmo se puede apraciar en la Figura 1.5, donde se puede observar que la forma
en que se generan los clusters impide que las rutas obtenidas se superpongan.

Figura 1.5: Ejemplo de una solución utilizando el Algoritmo de Barrido [5].

El procedimiento se repite n veces, comenzando en cada ejecución por un cliente dife-


rente. Se propone además un procedimiento para eliminar clientes de cada ruta finalizada
e insertar clientes que aún no fueron visitados, en el caso que esto disminuya el costo
de la ruta. Los clientes eliminados de la ruta serán barridos por alguna ruta posterior. Al
utilizar este paso de post-optimización puede crearse un solapamiento de las rutas.

1.3.1.4. Heurística del Vecino más Cercano con Lista de Candidatos Restringidos
(Nearest Neighbor with RLC)

La heurística del vecino más cercano es un método determinista, dado que está ba-
sado en la mejor elección en cada iteración. Su variante con una Lista Restringida de
Candidatos (RLC) sigue el mismo procedimiento de la heurística clásica, pero incluye
una lista con los k vecinos más cercanos al cliente que se está analizando. A continuación
se enumeran los pasos a seguir:

1. Inicialización: Se especifica el tamaño k que tendrá la lista de candidatos restringi-


da. Se crea una ruta y se selecciona de forma aleatoria el primer cliente a inserta en
la ruta.

2. Inserción: Llenar la RLC con los k vecinos más cercanos al último cliente insertado
CAPÍTULO 1. FUNDAMENTOS TEÓRICOS 24

en la ruta. Seleccionar aleatoriamente un cliente de la lista y verificar las restriccio-


nes del problema. Si cumple las restricciones se inserta al final de la ruta, sino crear
una nueva ruta con el cliente seleccionado.

3. Finalización: Si aún existen clientes por insertar ir al paso 2. Si no existen clientes,


terminar.

Además de las heurísticas antes mencionadas existen otras heurísticas como: Algo-
ritmo de Ahorros basado en Matching [63], la Heurística de Inserción en Paralelo de
Christofides, Mingozzi y Toth [4, 24], la Heurística de Kilby [5], la Heurística de Loca-
lización de Bramel y Simchi-Levi [4, 26], la Heurística de Asignación Generalizada de
Fisher y Jaikumar [4, 15], entre otras [4, 5, 23].

1.4. Bibliotecas que implementan métodos heurísticos


El uso de una biblioteca de clases que implemente algoritmos heurísticos o metaheu-
rísticos para la solución de problemas de optimización, resulta importante, en tanto ga-
ranticen la reutilización de los algoritmos ya implementados [64]. Principalmente el desa-
rrollo de este tipo de bibliotecas se ha centrado en los algoritmos metaheurísticos, dado
que son algoritmos de carácter general por lo que pueden resolver un amplio rango de
problemas de optimización. En la actualidad existen varias bibliotecas que implementan
algoritmos metaheurísticos, a continuación se describen brevemente algunas de ellas:

MALLBA: biblioteca de clases desarrollada en el lenguaje C++, bajo la Licencia


Publica General. Surge con el objetivo de proporcionar una biblioteca de esqueletos
algorítmicos para optimización combinatoria (incluye métodos de resolución gené-
ricos, exactos, heurístico e híbridos). En su diseño se considera la implementación
secuencial y en paralelo de cada método de resolución [29].

METSlib: esta biblioteca implementa algunos de los algoritmos metaheurísticos


básicos como: Búsqueda Local Aleatoria [3], Búsqueda con Vecindad Variable [57],
Búsqueda Local Iterada [54], Recocido Simulado (con enfriamiento lineal, expo-
nencial o personalizado) [55], Búsqueda Tabú [51]. Está diseñada para facilitar la
implementación y adaptación de modelos, los cuales una vez creados se les puede
aplicar cualquiera de los algoritmos que tiene implementados [27].
CAPÍTULO 1. FUNDAMENTOS TEÓRICOS 25

MOMHLib++: biblioteca de clases orientada a objeto. Esta biblioteca fue desa-


rrollada con el lenguaje de programación C++ y publicada bajo Licencia Pública
General. Su dieseño está orientado a la implemenatción de metaheurísticas multi-
objetivos y permite la incorporación de nuevas metaheurísticas [33].

Open Metaheuristics: biblioteca de clases desarrollada con los lenguajes de pro-


gramación C y C++ y publicada bajo Licencia Pública General. Esta biblioteca fue
diseñada para seguir una búsqueda de aprendizaje adaptada en el diseño de me-
taheurísticas. Uno de sus principales objetivos es permitir pruebas experimentales
a los algoritmos metaheurísticos a través de aproximación estadística. Además, se
centra en la simplicidad por su forma para asimilar el diseño e implementar una
metaheurística creando una interfaz propia. El diseño del código está separado en
tres componentes: algoritmos, problemas y comunicación [34].

BiCIAM: es una biblioteca de clases que implementa un modelo unificado de algo-


ritmos metaheurísticos propuesto por [65]. Se implementó utilizando el lenguaje de
programación Java. En sus inicios solamente contemplaba los algoritmos metaheu-
rísticos basados en un punto como: Búsqueda Aleatoria [57], Escalador de Colinas
Clásico [57], Búsqueda Tabú [51] y Recocido Simulado [66]. Desde entonces se
han agregado nuevos algoritmos como: Estrategias Evolutivas [55], Algoritmo Ge-
nético [67] y Algoritmo de Estimación de Distribuciones [68]. Luego, en [69] se
le incorporó un algoritmo que permitía la colaboración y competencia de los dife-
rentes generadores metaheurísticos que implementa, llamado Multigenerador. Pos-
teriormente se creó otra versión de BiCIAM [70] donde se realizaron cambios en la
arquitectura y en las estructuras de datos utilizadas, y se incorporaron los algorit-
mos Escalador de Colinas con Reinicio [3] y Enjambre de Partículas (PSO, por sus
siglas en inglés) [66]. La versión más reciente de BiCIAM realizada por [31] cuenta
con la unificación de la versión mono-objetivo de [70] y la multi-objetivo de [71],
las cuales fueron creadas en paralelo. Además, de la incorporación del algoritmo
multiobjetivo NSGAII [31].

En la actualidad existen escasas bibliotecas que implementan métodos heurísticos tan-


to para la resolución de problemas de planificación de rutas de vehículos como para la re-
solución de otros problemas de optimización. Las bibliotecas encontradas en la literatura
CAPÍTULO 1. FUNDAMENTOS TEÓRICOS 26

para este fin son:

Biblioteca para los problemas de planificación del inventario marítimo (MIR-


PLib) [28]: resuelve casos de referencia disponibles para este tipo particular de
MIRPs. Esta biblioteca proporcionar a la comunidad de programación lineal entera
mixta con un conjunto de casos del dominio de transportación marítima. Los casos
estan modelados como problemas de optimización; y brinda una plantilla para otros
investigadores especificando características de MIRPs que surgen en otros entornos.

Biblioteca de código abierto para búsqueda heurística (Hipster) [30]: el softwa-


re se desarrolla bajo el código abierto Apache 2.0 License. El mismo surge producto
de la falta de bibliotecas de búsqueda estándar en Java con un modelo extensible,
flexible y fácil de usar. Una de sus características principales es que ofrece una
amplia variedad de algoritmos de búsqueda clásicos implementadas de una manera
iterativa como Dijkstra, A∗ , IDA∗ , AD∗ y otros [72].

Biblioteca de heurísticas de búsqueda local para el problema de ruteo de vehícu-


los (VRPH) [32]: está desarrollada en C/C++ con un diseño orientado a objeto. Esta
biblioteca usa estructuras de datos eficientes para poner en práctica métodos para
construir soluciones iniciales factibles. Además de varias heurísticas de búsqueda
local que pueden ser usadas para mejorar las soluciones. En esencia aplica siete
algoritmos de búsqueda local para generar soluciones al CVRP [15, 45].

Biblioteca de Heurísticas de Construcción para el Problema de Planificación


de Rutas de Camiones y Remolques (BHCTTRP) [1]: está desarrollada en Java y
contiene la adaptación de algunas heurísticas de construcción clásicas para el TTRP,
como son la Heurística del Vecino más Cercano [73], el Algoritmo de Barrido [11],
el Algoritmo de Ahorros [10] y la Heurística de Inserción Secuencial de Mole &
Jameson [25].

A continuación se muestra una comparación de las bibliotecas antes mencionadas


atendiendo a una serie de características. En la Tabla 1.2 se muestran los criterios estable-
cidos para realizar la comparación.
CAPÍTULO 1. FUNDAMENTOS TEÓRICOS 27

Tabla 1.2: Comparación de bibliotecas de clases que implementan métodos heurísticos.

Características

Bibliotecas Resuelve Implementa Implementa Interoperable Extensible Es


VRPs HC metaheurísticas libre

MIRPLib [28]
Hipster [30] X
VRPH [32] X
BHCTTRP [1] X X X X
Open Metaheuristics [34] X X X
BiCIAM [31] X X X X
MOMHLib++ [33] X X X
METSlib [27] X X X
MALLBA [29] X X X

A partir del análisis comparativo sobre las bibilotecas presentadas en la tabla anterior
se puede concluir que:

Las bibliotecas MIRPLib y Hipster resuelven problemas de optimización diferentes


a los VRP que son los de interés en esta investigación.

Las bibliotecas VRPH y BHCTTRP funcionan para la variante CVRP y TTRP res-
pectivamente.

Las bibliotecas de metaheurísticas por ser algoritmos de propósito general pueden


ser utilizadas en cualquier problema de optimización.

Solo la biblioteca de clases BHCTTRP implementa heurísticas de construcción para


la resolución de una variante de VRP.

Existe un mayor número de bibliotecas de clases que implementan metaheurísticas.

Ninguna de las bibliotecas es interoperable, que significa que solo pueden ser usa-
das como parte de aplicaciones que estén desarrolladas en su mismo lenguaje de
programación, o sea, son dependientes del lenguaje.

Todas las bibliotecas de metaheurísticas son extensibles, mientras que de las biblio-
tecas de heurísticas solo Hipster y BHCTTRP lo son de forma parcial; lo que indica
que pueden agregarse nuevos algoritmos de manera fácil.
CAPÍTULO 1. FUNDAMENTOS TEÓRICOS 28

De todas las bibliotecas solamente BHCTTRP y BiCIAM son libres.

A modo de conclusión se puede decir que de las bibliotecas antes mencionadas, las
que permiten resolver problemas de planificación de rutas de vehículos son BiCIAM [31],
METSlib [27], MOMHLib++ [33], Open Metaheuristics [34], VRPH [32], MALLBA
[29] y BHCTTRP [1]. De ellas BHCTTRP es la única que permite hacerlo a través de
heurísticas de construcción aunque solo son aplicables a la variante del TTRP [18]. En el
siguiente epígrafe se describe la arquitectura de BHCTTRP y se realiza un análisis de las
deficiencias de esta herramienta.

1.5. Biblioteca de Heurísticas de Construcción para el TTRP


BHCTTRP es una biblioteca de clases que implementa heurísticas de construcción
para resolver el Problema de Planificación de Rutas de Camiones y Remolques (TTRP
[18]). Esta biblioteca fue desarrollada por [1] en el lenguaje de programación Java y
contiene la adaptación de cuatro heurísticas de construcción clásicas para el TTRP, como
son la Heurística del Vecino más Cercano [18], el Algoritmo de Barrido [59], las dos
versiones del Algoritmo de Ahorro [10] y la Heurística de Inserción Secuencial de Mole
& Jameson [25].

1.5.1. Vista de la arquitectura de BHCTTRP

El enfoque utilizado en la estructuración en capas de BHCTTRP está basado en reuti-


lización, y se ilustra en la Figura 1.6. La vista de la arquitectura se encuentra proyectada
en tres capas: Capa Específica, Capa General y Capa Intermedia.
La Capa Específica muestra los paquetes vinculados a la biblioteca que no son reuti-
lizables, dado que están relacionados con la lógica del negocio. Estos paquetes son:

problem_data: contiene las clases que modelan la variante del TTRP.

construction_heuristics: contiene las clases correspondientes a los algoritmos im-


plementados dentro de la biblioteca.

controller_heuristics: contiene la clase controladora que orquesta todo el proce-


so antes, durante y luego de la ejecución de los algoritmos implementados en la
biblioteca.
CAPÍTULO 1. FUNDAMENTOS TEÓRICOS 29

Figura 1.6: Diagrama de la estructuración en capas de BHCTTRP [1].

La Capa General está conformada por los paquetes vinculados a la biblioteca que
son reutilizables.

problem_matrix: contiene un conjunto de clases necesarias para modelar la matriz


de costo.

factory_pattern: agrupa las clases que son necesarias para la implementación del
patrón de diseño Factory Method [74, 75, 76].

La Capa Intermedia contiene los elementos que no son propios del sistema que se
está desarrollado, sino de terceros. Se compone de las clases e interfaces que brinda la
plataforma Java.

1.5.2. Deficiencias en BHCTTRP

Con el despliegue de la biblioteca de clases BHCTTRP se han identificado un conjunto


de deficiencias que no permiten realizar un uso eficiente de la misma. A continuación se
describen estas deficiencias:

No facilita la incorporación de nuevas variantes de planificación de rutas de vehícu-


los. La causa principal consiste en el diseño realizado para las clases del paquete
problem_data. Las clases de este paquete solo consideran las características del
CAPÍTULO 1. FUNDAMENTOS TEÓRICOS 30

TTRP [18] y no contemplan otros datos que son útiles para modelar las caracterís-
ticas de otras variantes como VRP con Múltiples Depósitos [46], VRP con Flota
Heterogénea [17], VRP con Ventana de Tiempo [13], entre otras. En la Figura 1.7
se puede ver el diagrama de clases del paquete problem_data donde se aprecia esto
que se plantea.

Para modelar el depósito de un problema de planificación de rutas de vehículos


las biblioteca trata este elemento como un cliente más y no como una estructura
independiente. Este diseño ocasiona que las variantes con múltiples depósitos o con
flota heterogénea no puedan ser representadas adecuadamente pues no se realiza el
tratamiento independiente que conlleva el elemento depósito. Esto se puede apreciar
en el diagrama de clases del paquete problem_data en la Figura 1.7.

Figura 1.7: Diagrama de clases del paquete problema_data de BHCTTRP [1].

Los métodos responsables de la captura de los datos de un problema de planifica-


ción de rutas de vehículos son estrictos en cuanto a los parámetros que exigen y
no brindan flexibilidad dado que existen diferentes formas de cargar la informa-
ción, por ejemplo, puede que el usuario disponga de las distancias entre sus puntos
por lo que ya no sería necesario ese paso. Esto se puede apreciar en el diagrama
de la Figura 1.8 se presenta el paquete controller_heuristics que contiene la clase
controladora con sus métodos.
CAPÍTULO 1. FUNDAMENTOS TEÓRICOS 31

La matriz de costo obtenida por la biblioteca siempre se calcula con distancia eu-
clidea, en los casos donde el usuario no disponga de los costos se le puede brindar
otras medidas de distancias para el cálculo de la matriz.

La biblioteca no brinda información adicional relacionada con la solución final ob-


tenida con la heurística. Como es el caso de la cantidad de rutas obtenidas, la de-
manda por cada ruta, el costo total de la solución, entre muchos otros datos que se
pudieran obtener. En la Figura 1.8 se puede ver el diagrama de clases del paquete
controller_heuristics y los métodos que contiene la clase de este paquete.

La forma de implementación de las heurísticas de construcción impide que se brinde


más de una solución.

Existen heurísticas de construcción que requieren parámetros en su ejecución. Sin


embargo, en el diseño realizado no se admite la configuración de dichos parámetros
por parte de los usuarios para los algoritmos que lo requieren como es el caso de
la Heurística del Vecino más Cercano [22] y la Heurística de Inserción Secuencial
de Mole & Jameson [25]. En la Figura 1.9 se puede ver el diagrama de clases del
paquete construction_heuristics donde se evidencia esto.

Figura 1.8: Diagrama de clases del paquete controller_heuristics de BHCTTRP [1].

Existen heurísticas de construcción que requieren de pasos de post-optimización


en su ejecución. Sin embargo, en las adaptaciones realizadas en la biblioteca no
se tienen en cuenta dichos pasos para los algoritmos que lo requieren como es el
caso de la Heurística Inserción Secuencial de Mole & Jameson [25] que luego de
conformar cada ruta debe aplicar el algoritmo 3-opt [62].
CAPÍTULO 1. FUNDAMENTOS TEÓRICOS 32

Las dos versiones del Algoritmo de Ahorro tienen métodos comunes en su ejecu-
ción. Sin embargo, estos métodos se repiten en ambas clases, este comportamiento
común puede ser unificado para lograr una adecuada reutilización del código. El
diagrama de clases del paquete construction_heuristics presentado en la Figura
1.9 evidencia esto.

Figura 1.9: Diagrama de clases del paquete construction_heuristics de BHCTTRP [1].

1.6. Conclusiones parciales


A partir del estudio realizado sobre el estado del arte de los problemas de optimización
combinatoria, específicamente el Problema de Planificación de Rutas de Vehículos, sus
variantes y los métodos heurísticos que existen para resolver este tipo de problemas se
obtienen las siguientes conclusiones:

Los problemas de planificación de rutas de vehículos son problemas de optimiza-


ción combinatoria que pertenecen a la clase de problemas NP-duro y una alternativa
para su resolución es mediante algoritmos heurísticos y metaheurísticos.

Existen numerosas variantes de planificación de rutas de vehículos producto de la


aparición de nuevas características de la vida real.

Las heurísticas de construcción para los problemas de planificación de rutas de


vehículos obtienen buenas soluciones y son aplicables dentro del contexto de las
CAPÍTULO 1. FUNDAMENTOS TEÓRICOS 33

metaheurísticas como punto de partida.

El desarrollo de bibliotecas de clases se ha centrado principalmente en los algorit-


mos metaheurísticos.

De las bibliotecas estudiadas ninguna es interoperable, lo cual significa que son de-
pendientes del lenguaje. Solo las bibliotecas VRPH y BHCTTRP resuelven alguna
variante de planificación de rutas de vehículos que son CVRP y TTRP respectiva-
mente. Y solo BHCTTRP implementa heurísticas de construcción.

La biblioteca BHCTTRP no es capaz de dar solución a otras variantes de planifica-


ción de rutas de vehículos. Además, no permite la incorporación de manera fácil de
nuevas heurísticas constructivas.
Capítulo 2

Diseño de la solución

2.1. Introducción
La solución que se presenta en este capítulo consiste en una actualización de la biblio-
teca de clases BHCTTRP. La nueva versión parte de un conjunto de cambios introducidos
en la arquitectura para garantizar la extensibilidad de la herramienta. Como parte de las
transformaciones relevantes mencionar las relacionadas con el tratamiento de las nuevas
variantes de planificación de rutas de vehículos: VRP con Múltiples Depósitos y VRP con
Flota Heterogénea; así como la implementación de la Heurística Inserción de Kilby y la
Heurística de Inserción en Paralelo de Christofides, Mingozzi y Toth. Con la incorpora-
ción de nuevas variantes se decidió modificar el nombre de la biblioteca quedando de la
siguiente forma: Biblioteca de Heurísticas de Construcción para Problemas de Planifica-
ción de Rutas de Vehículos, BHCVRP. Para describir la solución se muestra una vista de
la arquitectura y los diagramas de clases más significativos. Asimismo, se presentan los
patrones de diseño utilizados. Por último, se presentan los paquetes y clases necesarias
para brindar las funcionalidades de la biblioteca BHCVRP como un servicio web; junto
con las herramientas y tecnologías empleadas.

2.2. Modificaciones en la arquitectura de BHCVRP


La Biblioteca de Heurísticas de Construcción para el Problema de Planificación de
Rutas de Camiones y Remolques (BHCTTRP) es una propuesta del proyecto de Optimi-
zación y Metaheurística del CITI del año 2014 [1]. Esta biblioteca está desarrollada en
el lenguaje Java y originalmente su objetivo era permitir el uso de heurísticas de cons-

34
CAPÍTULO 2. DISEÑO DE LA SOLUCIÓN 35

trucción en la resolución del TTRP [18]. Con este fin la biblioteca contaba con cuatro
heurísticas de construcción para el TTRP: la Heurística del Vecino más Cercano [18], el
Algoritmo de Barrido [59], las dos versines del Algoritmo de Ahorro [10] y la Heurística
de Inserción Secuencial de Mole & Jameson [25].
A partir de dar cumplimiento al objetivo de incorporar nuevas variantes se decidió mo-
dificar el nombre de la biblioteca quedando de la siguiente forma: Biblioteca de Heurís-
ticas de Construcción para Problemas de Planificación de Rutas de Vehículos, BHCVRP.
Con el análisis realizado a la biblioteca no solo se encontraron una serie de deficiencias
si no también un conjunto de oportunidades para mejorar su funcionamiento. Todas estas
modificaciones se listan a continuación:

Brindar la posibilidad de calcular el tiempo de ejecución de cada una de las heurís-


ticas que se implementen.

Brindar distintos métodos para el cálculo de la matriz de costo y no limitarlo a la


distancia euclidea.

En varias de las heurísticas de construcción implementadas así como en las que


se van a incorporar se requiere ejecutar pasos de post-optimización por lo que es
conveniente incorporar este tipo de algoritmos.

Brindar distintos métodos para obtener información adicional relacionada con la


solución final obtenida con la heurística.

Para algunas de las heurísticas de construcción implementadas así como en las que
se van a incorporar se requieren parámetros para su ejecución por lo que es conve-
niente permitir la configuración de los mismos.

Ofrecer diferentes métodos para la captura de los datos de un problema de planifi-


cación de rutas de vehículos.

Rediseñar las clases para el tratamiento de las diferentes variantes del problema
según sus características.

Agrupar los métodos comunes de las dos versiones del Algoritmo de Ahorro.
CAPÍTULO 2. DISEÑO DE LA SOLUCIÓN 36

Actualmente las bibliotecas presentan dificultades con la interoperabilidad de sus


códigos y este problema limita sus usos, como es el caso de BHCVRP, esto puede
ser remediado con el uso de los servicios web.

2.2.1. Nuevas variantes de planificación de rutas de vehículos en BHCVRP

En esta nueva versión se decide adaptar las heurísticas de construcción de la biblio-


teca para las siguientes variantes: MDVRP [46] y HFVRP [17]. Vale comentar que en la
versión anterior de la biblioteca se contemplaban los datos para la variante de CVRP [15]
pero no era posible resolverla. Por este motivo en esta nueva versión solo se realizaron las
adaptaciones para brindar las heurísticas para esta variante. A continuación se describen
estas variantes y se mencionan las modificaciones realizadas en la biblioteca para cada
caso.

2.2.1.1. Problema de Planificación de Rutas de Vehículos con Múltiples Depósitos

El Problema de Planificación de Rutas de Vehículos con Múltiples Depósitos (Multi-


Depot VRP, MDVRP) [16, 46] es una variante del VRP clásico donde de igual forma cada
vehículo debe comenzar y terminar su ruta en el mismo depósito, y cada cliente debe ser
visitado exactamente una vez. Esta variante incorpora varios depósitos con ubicaciones
diferentes. Cada depósito cuenta con una flota limitada de vehículos con capacidad res-
tringida, utilizada para dar servicio a los clientes, cuya localización y demanda es también
conocida de antemano. Según se explica en [47], un MDVRP requiere la asignación de
clientes a los depósitos, así como una flota de vehículos designada para cada depósito.

Objetivo: el objetivo es la distancia total del conjunto de rutas.


Factibilidad: una solución es factible si todas las rutas satisfacen las restricciones
de longitud y distancia. Además, deben comenzar y terminar en el mismo depósito.
Formulación: el problema CVRP se extiende al caso donde existen múltiples de-
pósitos, por lo que se denotará el conjunto de vértices como V = v1 , ......, v1 ∪ V0 ,
donde V0 = v01 , ......, v0d son los vértices que representan los depósitos. La ruta i
está definida por Ri = d, vi , ....., vm , d con d ∈ V0 .

El MDVRP posee M depósitos en un grupo D, cada depósito K(K ∈ D) posee un gru-


po de vehículos. Cada vehículo Vk realiza una ruta Rk que contiene un cierto número de
CAPÍTULO 2. DISEÑO DE LA SOLUCIÓN 37

clientes, y que comienza y finaliza en un mismo depósito K. Todos los clientes (denota-
dos como C) deben ser visitados por un vehículo. El total de la demanda de los clientes
atendidos en cada ruta Rk no excede la capacidad del vehículo que le atiende QK .
Basado en la distancia entre puntos (clientes y depósitos) Disi j (i, j ∈ C ∪D), calculado
por su ubicación, la demanda de los clientes di (i ∈ C) y la capacidad del vehículo Qk (K ∈
D), el MDVRP pretende asignar un cliente a cada depósito y se le asigna una ruta a cada
vehículo del depósito para reducir al mínimo la distancia total del recorrido.
La función objetivo del modelo es:

min ∑ ∑ Disi j ∑ Xi jk (2.1)


i∈C∪D j∈C∪D k∈D

Sujeto a:

∑ ∑ Xi jk = 1 ∀j ∈C (2.2)
i∈C∪D k∈D

∑ ∑ j ∈ DXi j ≤ 1 ∀k ∈ D (2.3)
i∈C

∑ Xi jk = ∑ Xi jk ∀k ∈ D, i ∈ C ∪ D (2.4)
J∈C∪D J∈C∪D

∑dj ∑ Xi jk ≤ Qk ∀k ∈ D (2.5)
j∈C i∈C∪D

∑ ∑ Xi jk ≤| S | −1 ∀C, | S |≥ 2k ∈ D (2.6)
i∈S j∈S

Xi jk ∈ 0, 1 ∀i, k ∈ D, j ∈ C

Donde la restricción (2.2) propone que todo destino j pertenece a un grupo de clientes
C. La restricción (2.3) propone que todo depósito k pertenece a un grupo de depósitos D.
En las restricciones de (2.2 - 2.4) se impone que cada cliente sea visitado una única vez, y
cada ruta es realizada por un único vehículo. En la restricción (2.5) se aprecia la ecuación
de la capacidad de cada vehículo Qk . La restricción (2.6) es la ecuación de restricción
generalizada de eliminación de recorrido, la cual restringe que cada vehículo atienda al
menos una ruta de cada cliente pasando a un conjunto de visitados S por el vehículo Vk .
Y por último se aprecia los requisitos de las variables de decisión, donde las variable de
CAPÍTULO 2. DISEÑO DE LA SOLUCIÓN 38

decisión son Xi jk que representa una solución de un problema de planificación de ruta de


vehículos. Esta variable toma valor 1 (Xi jk = 1) si y solo si el cliente j precede al cliente i
en la ruta Rk , Rk (i, j ∈ C ∪ D, k ∈ D) de lo contrario el valor es cero.
Para la incorporación de esta variante en la biblioteca se realizan algunas modifica-
ciones que se mencionan a continuación:

Se implementa una clase para modelar los datos referentes al depósito, debido a que
en la versión anterior este se consideraba como un cliente (ver Figura 2.2).

Se eliminan aquellos datos relacionados con la flota de vehículos de la clase que


modela los datos del problema y se adicionan como parte de la clase que modela
los datos del depósito (ver Figura 2.2).

Se incorporan distintos métodos para la asignación de los clientes a los depósitos


(ver Figura 2.7).

Para la resolución de esta variante se incorpora a cada depósito una lista con los
identificadores de los clientes que deben ser visitados con la flota de vehículos que
le pertenece (ver Figura 2.2).

Se adiciona a la clase responsable de modelar los datos del problema un objeto que
representa todos los depósitos presentes en el problema (ver Figura 2.2).

Se adiciona la variante de planificación de rutas de vehículos con múltiples depósi-


tos como tipo de problema que pueden ser solucionado con la biblioteca (ver Figura
2.2).

Se adiciona a cada heurística el comportamiento para dar solución a esta variante.

2.2.1.2. Problema de Planificación de Rutas de Vehículos con Flota Heterogénea

El Problema de Planificación de Rutas de Vehículos con Flota Heterogénea (Heteroge-


nous Fleet VRP, HFVRP), también conocida como MFVRP [16] o FSMVRP [17] es una
variante que admite que los vehículos de la flota presenten características y/o capacidades
diferentes. Cada vehículo debe comenzar y terminar su ruta en el mismo depósito, y cada
cliente debe ser visitado una única vez por algún vehículo. Se asume que los vehículos
CAPÍTULO 2. DISEÑO DE LA SOLUCIÓN 39

están ordenados en forma creciente según su capacidad. La cantidad de vehículos de cada


tipo es limitada y cada tipo de vehículo tiene capacidad restringida.
Las 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 qk y su costo fijo (si lo tuvieran) es
f k . Los costos y tiempos de viaje para cada tipo de vehículo son ckij y tikj respectivamente.
Se asume que los índices de los vehículos están ordenados en forma creciente por capa-
cidad (es decir, qk1 ≤ qk2 para k1 , k2 ∈ T, k1 < k2 ). En la siguiente formulación de flujo
de vehículos de tres índices [17] se agrega un índice para discriminar entre los tipos de
vehículos.
La función objetivo del modelo es:

min ∑ ( f k ) ∑ x0k j + ∑ ∑ (ckij xikj ) (2.7)


k∈T j∈∆+(0) k∈T (i, j)∈E

Sujeto a:

∑ ∑ xikj = 1 ∀ j ∈ V \{0} (2.8)


k∈T i∈∆+( j)

∑ (xikj ) − ∑ xikj = 0 ∀i ∈ V, ∀k ∈ T (2.9)


j∈∆+(i) j∈∆−(i)

r0 = 0 (2.10)

r j − ri ≥ (d j + q|T | ) ∑ (xikj − q|T | ) ∀i ∈ V \ {0}, ∀ j ∈ ∆ + (i) (2.11)


k∈T

rj ≤ ∑ ∑ qk xikj ∀ j ∈ V {0} (2.12)


k∈T i∈∆−( j)

xikj ∈ {0, 1} ∀(i, j) ∈ E, ∀k ∈ T

rj ≥ 0 ∀j ∈V

Las variables binarias xikj indican si el arco (i, j) es utilizado por el vehículo k y las
variables ri indican la carga acumulada en la ruta correspondiente hasta el nodo i. La
función objetivo (2.7) mide el costo total de la solución incluyendo costos fijos y variables.
La restricción (2.8) establece que todo cliente debe ser visitado por algún vehículo. En
(2.9) 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 (2.10) y (2.11) fijan los valores de las variables
CAPÍTULO 2. DISEÑO DE LA SOLUCIÓN 40

ri y actúan como restricciones de eliminación de sub-rutas, mientras que la capacidad de


los vehículos se imponen en la restricción (2.12).
Para la incorporación de esta variante en la biblioteca se realizan algunas modifica-
ciones que se mencionan a continuación:

Se eliminan aquellos datos relacionados con la flota de vehículos de la clase que


modela los datos del problema y se adicionan como parte de la clase que modela
los datos del depósito (ver Figura 2.2).

Se adiciona a la clase responsable de modelar los datos del depósito un objeto que
representa todas las flotas presentes en el problema (ver Figura 2.2).

Para mayor flexibilidad se adiciona un enumerado para definir el tipo de ordena-


miento de la lista de capacidades para resolver la variante de flota heterogénea (ver
Figura 2.3).

Se adiciona la variante de planificación de rutas de vehículos con flota heterogénea


como tipo de problema que pueden ser solucionado con la biblioteca (ver Figura
2.2).

Se adiciona a cada heurística el comportamiento para dar solución a esta variante.

2.2.2. Nuevas heurísticas de construcción en BHCVRP

Como parte de la extensión de BHCVRP se incorporan dos nuevas heurísticas de


construcción: la Heurística de Inserción en Paralelo de Christofides, Mingozzi y Toth [4]
y la Heurística Inserción de Kilby [5]. A continuación se describe el funcionamiento de
cada una de estas heurísticas constructivas, así como las modificaciones necesarias para
su incorporación:

2.2.2.1. Heurística de Inserción en Paralelo de Christofides, Mingozzi y Toth (CMT)

El algoritmo propuesto por Christofides, Mingozzi y Toth [4] opera en dos fases. En
la primera fase se determina la cantidad de rutas a utilizar, junto con un cliente para
inicializar cada una de las rutas. En la segunda fase se crean dichas rutas y se inserta el
resto de los clientes en ellas. A continuación se explica el funcionamiento de cada una de
estas fases.
CAPÍTULO 2. DISEÑO DE LA SOLUCIÓN 41

La Fase I cosiste en aplicar un algoritmo de inserción secuencial para obtener rutas


compactas. No se da importancia a la ubicación de los clientes dentro de las rutas debido
a que solo interesa encontrar al cliente que iniciará la ruta y el total de rutas a asignar. Para
comenzar la ruta k-ésima, se busca el cliente vk que no haya sido visitado aún. El costo de
insertar el cliente w en la ruta que contiene a vk se calcula como se define en (2.13):

δw,vk = c0w + λcw ,vk (2.13)

Si la inserción no es factible, entonces δw,vk toma el valor ∞. A la ruta se le asignan


clientes comenzando por los menores valores de δ hasta que no hayan más inserciones
factibles. Cuando no se encuentran más inserciones factiles, se crea una nueva ruta o se
pasa a la Fase II.
En esta segunda fase, se crean las rutas y se inician con los clientes seleccionados en
la Fase I. Cada cliente no visitado se asocia con la ruta en la que el costo de insertarlo
es minimizado. Luego se selecciona una ruta cualquiera en la que se insertan los clientes
que tiene asociados. Para decidir el orden en que se insertan los clientes asociados a una
ruta se calcula, para cada cliente, la diferencia entre el costo de realizar la inserción en
esa ruta y en la segunda mejor opción para él. Cuanto mayor es esa diferencia, mayor es
la urgencia por insertar dicho cliente en esta ruta. Los pasos se describen a continuación:
Fase I:

1. Nueva ruta: Hacer k := 1.

2. Cliente inicial: Seleccionar un cliente no visitado para insertar en la ruta. Para cada
cliente no visitado w, calcular δw,vk .

3. Inserciones: Calcular w∗ = arg mı́n δw,vk sobre los clientes no visitados w. Insertar
w∗ en la ruta y aplicar el algoritmo 3-opt. Si quedan clientes no visitados que puedan
insertarse en la ruta, ir al paso 3.

4. Terminar Fase I: Si todos los clientes pertenecen a alguna ruta, terminar. Si no,
hacer k := k + 1 e ir al paso 2.

Fase II:

5. Inicialización: Crear k rutas rt = (0, vk , 0) para t = 1, ..., k, siendo k la cantidad de


rutas obtenidas en la fase I. Sea J = r1 , ..., rk .
CAPÍTULO 2. DISEÑO DE LA SOLUCIÓN 42

6. Asociación: Para cada cliente w que no haya sido visitado calcular tw = arg mı́nt|rt∈J δw,vk .

7. Urgencias: Seleccionar rt∈J y hacer J := J rt . Para cada cliente w tal que tw = t,


calcular tw0 = arg mı́nt|rt∈J δw,vk y τw = tw0 − tw .

8. Inserción: Calcular w∗ = arg máxw|tw=t τw . Insertar w∗ en la ruta rt y aplicar el al-


goritmo 3-opt. Si quedan clientes asociados a que pueden ser insertados, ir al paso
8.

9. Finalización: Si J 6= 0,
/ ir al paso 6. Si todos los clientes han sido visitados, terminar.
Si no, aplicar el algoritmo nuevamente (incluyendo la Fase I) sobre los clientes no
visitados.

Para la incorporación de esta heurística se realizan algunas modificaciones que se


mencionan a continuación:

Se implementa una clase que modela el comportamiento de la heurística para las


cuatro variantes del problema de planificación de rutas de vehículos (ver Figura
2.4).

Se adiciona la heurística de construcción CMT como tipo de heurísticas que pueden


ser utilizadas para resolver problemas de planificación de rutas de vehículos en la
biblioteca (ver Figura 2.8).

Se incorpora una clase que implementa el operador de intercambio 3-opt [62] que
es usado como paso de post-optimización en esta heurística (ver Figura 2.5).

2.2.2.2. Algoritmo de Kilby (Kilby Algorithm)

Esta heurística al igual que la propuesta por Mole & Jameson [25], es una heurística
de inserción, en la cual se crea una solución mediante sucesivas inserciones de clientes en
las rutas. Este método se basa en costes a la hora de realizar la inserción de clientes a los
itinerarios de los vehículos. Se utiliza inicialmente un método Greedy, es decir, se añade
el cliente que más cercano esté en cada momento. Una vez obtenidas las rutas de cada
vehículo, éstas serán optimizadas mediante diferentes tipos de método de optimización.
El costo de inserción de un cliente k en ∀ri ∈ Rc , siendo Rc es el conjunto de rutas
actuales, se calcula como se define en (2.14).
CAPÍTULO 2. DISEÑO DE LA SOLUCIÓN 43

Cri = cak + ckb − cab (2.14)

En el mecanismo de inserción, en cada paso se inserta el cliente no visitado k∗ ∈ VU


que minimice el costo total arg mı́nri∗ (arg mı́nk∗ Cri∗ (a, k∗ , b)).
Los pasos a seguir son los siguientes:

1. Inicialización: Se crean la cantidad i de rutas correspondientes con la cantidad


vehículos de la flota. Se calcula a cada cliente k el costo dado por la ecuación (2.14)
colocando los i primeros en cada ruta.

2. Inserción: Calcular arg mı́n ri∗ (arg mı́nk∗ Cri∗ (a, k∗ , b)). Insertar al cliente k∗ en la ri
asociada a él. Si quedan rutas y clientes por analizar ir al paso 2.

3. Optimización: Si ri ya está completa o no quedan clientes por analizar aplicar los


pasos de post-optimización.

La Heurística de Kilby aplica a cada ruta que se conforma tres pasos de post-optimización.
El primero es el algoritmo 2-opt [62], el segundo es el operador Relocate [3] y por último
el operador Exchange [3]. El objetivo de estos pasos es mejorar el costo de la solución
obtenida.
Para la incorporación de esta heurística se realizan algunas modificaciones que se
mencionan a continuación:

Se implementa una clase que modela el comportamiento de la heurística para las


cuatro variantes del problema de planificación de rutas de vehículos (ver Figura
2.4).

Se incorpora una clase que implementa el algoritmo 2-opt [62] que es usado como
paso de post-optimización en esta heurística (ver Figura 2.5).

Se incorpora una clase que implementa el operador Exchange [3] que es usado
como paso de post-optimización en esta heurística (ver Figura 2.5).

Se incorpora una clase que implementa el operador Relocate [3] que es usado como
paso de post-optimización en esta heurística (ver Figura 2.5).
CAPÍTULO 2. DISEÑO DE LA SOLUCIÓN 44

Se adiciona la heuristica de construcción KilbyAlgorithm como tipo de heurísti-


cas que pueden ser utilizadas para resolver problemas de planificación de rutas de
vehículos en la biblioteca (ver Figura 2.8).

2.2.3. Otras modificaciones en BHCVRP

Luego del análisis detallado de las deficiencias de la versión anterior de la biblioteca


se realizaron otras modificaciones en función de lograr mejorar su funcionamiento:

Se adicionan los parámetros de las heurísticas de construcción que lo requieren,


brindando flexibilidad al usuario de configurar estos valores según sus necesidades
(ver Figura 2.4).

A la clase controladora del proceso se le adiciona una instancia del enumerado


OrdenateType para indicar el tipo de ordenamiento de la lista de capacidades para
la variante de flota heterogénea (ver Figura 2.3).

Se crea una clase para definir los tipos de selección de los clientes en la Heurística
de Inserción Secuencial de Mole & Jameson [25]. Esto permite modificar el com-
portamiento de la heurística ya que se brinda la posibilidad de seleccionar el primer
cliente de distintas formas (ver Figura 2.4).

Se crea una clase abstracta llamada Save para agrupar los métodos comunes en el
funcionamiento de las dos versiones del Algoritmo de Ahorro [10] (ver Figura 2.4).

A la clase controladora del proceso se le adicionan las instancias correspondientes


a la carga dinámica de las clases para las heurísticas, las distancias y los tipos de
asignación usadas por el Factory Method [75] (ver Figura 2.3).

Se generaliza la clase MetricsMJ, anteriormente definida para la Heurística de In-


serción Secuencial de Mole & Jameson [25]. En esta versión recibe el nombre de
Metrics y modela un tipo de dato general, útil para el cálculo de los costos en las
heurísticas de inserción (ver Figura 2.4).

En la versión anterior solo se realizaba una única ejecución y se obtenía una sola
solución. Ahora es posible realizar más de una ejecución y se adiciona a la clase
controladora del proceso una lista de soluciones que agrupa los resultados de cada
ejecución (ver Figura 2.3).
CAPÍTULO 2. DISEÑO DE LA SOLUCIÓN 45

A la clase controladora del proceso se le adiciona el atributo bestSolution para regis-


trar la mejor solución obtenida por la heurística seleccionada. Esto es conveniente
cuando el usuario realiza más de una ejecución (ver Figura 2.3).

Se adicionan un conjunto de atributos que permiten determinar el tiempo de ejecu-


ción de las heurísticas (ver Figura 2.3).

Los métodos internos de la biblioteca para la carga de los datos del problema como
son los clientes, los depósitos, la flota, la matriz de costo se modifican en función
de las características de las nuevas variantes incoporadas.

La carga de los datos del problema se implementa de dos formas distintas respon-
diendo a las necesidades del usuario. En un caso se le solicita los datos del proble-
ma incluyendo las coordenadas geográficas de los clientes y de los depósitos para
calcular la matriz de costo. El otro caso si el usuario dispone de las distancias ya
calculadas solo se le solicita los datos del problema y la lista de distancias.

En la versión anterior solo se retornaba el orden en que se visitaban los clientes,


no existía información relacionada a la solución. La incorporación de las nuevas
variantes posibilita la devolución de nueva información que puede ser de valor para
el usuario. Se implentan un conjunto de métodos que posibilita obtener información
adicional relacionada con los resultados de las heurísticas como son la cantidad de
rutas de un tipo, la demanda por ruta, la cantidad de rutas de un depósito, el costo
total de la solución, entre otros (ver Figura 2.3).

2.3. Nueva versión de BHCVRP


Como resultado de las modificaciones realizadas a la biblioteca se muestra el diseño
arquitectónico de la nueva versión de BHCVRP en el diagrama de la Figura 2.1. Se utili-
zaron colores diferentes para reflejar los cambios introducidos. En el caso de los paquetes
que son nuevos en la arquitectura se emplea el color morado y el color azul para aquellos
paquetes que sufrieron algún tipo de cambio.
La arquitectura de BHCVRP se proyecta en dos capas: la Capa Application contiene
todos los paquetes de la lógica de negocio del componente; mientras la Capa JDK incluye
los paquetes brindados por la tecnología (Java) en que se desarrolló el componente.
CAPÍTULO 2. DISEÑO DE LA SOLUCIÓN 46

heuristic_VRP

generators controller

post_optimization assign solution distances

problem_VRP factory_pattern

data matrix methods interfaces

Application

java.util java.lang

JDK

Figura 2.1: Vista de la arquitectura de BHCVRP.

A continuación, en la Tabla 2.1 y la Tabla 2.2 se explican las funciones de los paquetes
que contiene cada capa.
CAPÍTULO 2. DISEÑO DE LA SOLUCIÓN 47

Tabla 2.1: Descripción de los paquetes de la Capa Application.

Paquetes Descripción
problem_VRP Paquete que agrupa los paquetes: data y matrix. En su con-
junto estos paquetes modelan los datos y el comportamiento
de un problema de planificación de rutas de vehículo.
heuristic_VRP Paquete que agrupa los paquetes: controller, generators,
distance, assign, post-optimization y solution. En su con-
junto estos paquetes son responsables de obtener la solución
al problema de planificación de rutas de vehículos mediante
heurísticas de construcción.
factory_pattern Paquete que agrupa los paquetes: interfaces y methods. En
su conjunto implementan el patrón Factory Method [75].

Tabla 2.2: Descripción de los paquetes de la Capa JDK.

Paquetes Descripción
java.util Paquete que contiene una colección de clases que permite
el acceso a recursos del sistema.
java.lang Este paquete contiene clases variadas pero imprescindibles
para el lenguaje. Este paquete es importado por defecto en
los paquetes de código Java.

2.3.1. Capa Application

La Capa Application contiene la mayoría de los paquetes, debido a que es la capa


responsable de modelar los problemas de planificación de rutas de vehículos y de definir
y ejecutar las heurísticas de construcción. A continuación, para cada uno de los paquetes
contenidos en esta capa se presenta su diagrama UML y una breve descripción de los
elementos participantes.
El diagrama de clases que se muestra en la Figura 2.2 refleja las clases del paquete
problem_VRP que agrupa los paquetes:

data: contiene las clases que modelan un problema de planificación de rutas de


vehículos.

matrix: contiene las clases necesarias para modelar la matriz de costo.


CAPÍTULO 2. DISEÑO DE LA SOLUCIÓN 48

Problem NumericMatrix
−costMatrixT0TNumericMatrix −DEFAULT_ROW_CAPACITYT0TintT=TY
HHenumeration>> ]]] −DEFAULT_COL_CAPACITYT0TintT=TY
ProblemType −dataT0Tdouble[][]
wProblemfMT0TProblem
−colCountT0Tint
−CVRP wProblemfT]]]TMT0TProblem
−rowCountT0Tint
−HFVRP wwgetfMTandTsetfM
−MDVRP wgetListIDDepotsfMT0TArrayListHInteger> wNumericMatrixfMT0TNumericMatrix
−TTRP wgetListLocationDepotsfMT0TArrayListHLocation> wNumericMatrixfT 0TintNT 0TintTMT0TNumericMatrix
wgetListIDCustomersfMT0TArrayListHInteger> wNumericMatrixfT 0Tdouble[][]TMT0TNumericMatrix
wgetListLocationCustomersfMT0TArrayListHLocation> wNumericMatrixfT 0Tdouble[][]NT 0TintNT 0TintTMT0TNumericMatrix
wgetTotalRequestfMT0Tdouble wNumericMatrixfT 0TNumericMatrixTMT0TNumericMatrix
wgetListLocationsfMT0TArrayListHLocation> wgetColCountfMT0Tint
wgetCustomerByIDCustomerfT 0TintTMT0Tint wgetRowCountfMT0Tint
wgetTypeByIDCustomerfT 0TintTMT0TCustomer wsetItemfT 0TintNT 0TintNT 0TdoubleTMT0Tdouble
wgetCustomerTypeByIdfT 0TintTMT0Tint wgetItemfT 0TintNT 0TintTMT0Tdouble
wgetRequestByIDCustomerfT 0TintTMT0Tdouble waddAllfT 0Tdouble[][]NT 0TintNT 0TintTMT0Tvoid
wisVCfT 0TintTMT0Tboolean waddAllfT 0TNumericMatrixTMT0Tvoid
wgetCountVCfMT0Tint waddColfT 0TintNT 0TNumericArrayTMT0Tvoid
HHenumeration>> wgetCountTCfMT0Tint waddColfT 0TNumericArrayTMT0Tvoid
CustomerType wgetListIdCustomersVCfMT0TArrayListHInteger> waddRowfT 0TintNT 0TNumericArrayTMT0Tvoid
wgetCountCustomersfMT0Tint waddRowfT 0TNumericArrayTMT0Tvoid
−VC
wgetPosElementfT 0TintTMT0Tint wdeleteColfT 0TintTMT0TNumericArray
−TC
wgetPosElementByIDDepotfT 0TintNT 0TintTMT0Tint wdeleteRowfT 0TintTMT0TNumericArray
wgetIDDepotByIDCustomerfT 0TintTMT0Tint wfillValuefT 0TintNT 0TintNT 0TintNT 0TintNT 0TdoubleTMT0Tvoid
wrequestActualDepotfT 0TintTMT0Tdouble wfillValuefT 0TdoubleTMT0Tvoid
wcapDispoForAllDepotfMT0Tboolean windexBiggerValuefT 0TintNT 0TintNT 0TintNT 0TintTMT0TRowCol
wTotalCapacitiesfMT0Tdouble windexBiggerValuefMT0TRowCol
wgetCustomersAssignedByIDDepotfT 0TintTMT0TArrayListHCustomer> windexLowerValuefT 0TintNT 0TintNT 0TintNT 0TintTMT0TRowCol
wgetListPosElementsfT 0TintNT 0TArrayListHInteger>TMT0TArrayListHInteger> windexLowerValuefMT0TRowCol
wfillCostMatrixfM wfullMatrixfT 0TdoubleTMT0Tboolean
wnewdistancefMfM ]]]
wnewDistancefTdistanceTypeTM
wfM
]]]

NumericArray

−DEFAULT_CAPACITYT0TintT=TY
−countT0Tint
−dataT0Tdouble[]
Customer wNumericArrayfMT0TNumericArray
RowCol
wNumericArrayfT 0TintTMT0TNumericArray
−idCustomerT0Tint wNumericArrayfT 0Tdouble[]TMT0TNumericArray
−rowT0Tint
−requestCustomerT0Tdouble wNumericArrayfT 0Tdouble[]NT 0TintTMT0TNumericArray
]]] −colT0Tint
wNumericArrayfT 0TNumericArrayTMT0TNumericArray
wCustomerfMT0TCustomer wRowColfMT0TRowCol waddfT 0TdoubleTMT0Tboolean
wCustomerfT 0TintNT 0TdoubleNT 0TLocationNT 0TCustomerTypeTMT0TCustomer wRowColfT 0TintNT 0TintTMT0TRowCol waddfT 0TintNT 0TdoubleTMT0Tvoid
wwgetfMTandTsetfM wwgetfMTandTsetfMfM waddAllfT 0Tdouble[]NT 0TintTMT0Tboolean
]]] ]]] waddAllfT 0TNumericArrayTMT0Tboolean
wgetLengthfMT0Tint
−checkIndexInRangefT 0TintTMT0Tvoid
Depot wclearfMT0Tvoid
Location −ensureCapacityfT 0TintTMT0Tvoid
−idDepotT0Tint wexistsfT 0TdoubleTMT0Tboolean
−axisXT0Tdouble −listAssignedT0TArrayListHInteger> wgetItemfT 0TintTMT0Tdouble
−axisYT0Tdouble ]]] wgetCountfMT0Tint
wFindPositionElementfT 0TdoubleTMT0Tint
wLocationfMT0TLocation wDepotfMT0TDepot
wisEmptyfMT0Tboolean
wwgetfMTandTsetfM wDepotfT 0TintNT 0TLocationNT 0TArrayListHFleet>TMT0TDepot
wFindPositionElementFromEndfT 0TdoubleTMT0Tint
wgetPolarThetafMT0Tdouble wwgetfMTandTsetfM
]]]
wremovefT 0TintTMT0Tdouble
wgetPolarRhofMT0Tdouble wsetfT 0TintNT 0TdoubleTMT0Tdouble
wgetTypeCustomerfMT0TCustomerType waveragefMT0Tfloat
]]]
wCountEqualNumberfT 0TintTMT0Tint
wCountBiggerThanfT 0TintTMT0Tint
Fleet wCountSmallerThanfT 0TintTMT0Tint
−countTrucksT0Tint wIndexBiggerValuefMT0Tint
−capacityTruckT0Tdouble wIndexLowerValuefMT0Tint
−countTrailersT0TintT=Th wSumfMT0Tint
−capacityTrailerT0TdoubleT=Th]h

wFleetfMT0TFleet
wFleetfT 0TintNT 0TdoubleNT 0TintNT 0TdoubleTMT0TFleet
wwgetfMTandTsetfM
]]]

Figura 2.2: Diagrama de clases del paquete problem_VRP.

En la Tabla 2.3 se describen las clases que contienen los paquetes antes mencionados.
CAPÍTULO 2. DISEÑO DE LA SOLUCIÓN 49

Tabla 2.3: Descripción de las clases que integran el paquete problem_VRP.

Clases Descripción
Paquete data
ProblemType Enumerado que indica las variantes de problema de plani-
ficación de rutas de vehículos que pueden ser resueltas con
BHCVRP.
Customer Clase que modela los datos de un cliente.
CustomerType Enumerado que indica los tipos de clientes cuando la va-
riante de planificación de rutas de vehículo en TTRP.
Depot Clase que modela los datos de un depósito.
Fleet Clase que modela los datos de la flota de vehículos.
Location Clase que modela la ubicación geográfica de un cliente o de
un depósito.
Problem Clase que controla el problema a solucionar. Contiene los
clientes, los depósitos, la matriz de costo y el tipo de pro-
blema.
Paquete matrix
RowCol Clase que modela una celda de una matriz.
NumericArray Clase que modela una fila o columna de una matriz.
NumericMatrix Clase que modela una matriz.

Los siguientes diagramas pertenecen al paquete heuristic_VRP. Este paquete agrupa


los siguientes paquetes:

controller: contiene la clase responsable de todo el proceso de negocio en la biblio-


teca.

generators: contiene las clases que implementan las heurísticas de construcción


que conforman la biblioteca.

post-optimization: contiene las clases que implementan los procedimientos para


los pasos de post-optimización usados por algunas heurísticas.

solution: es el que contiene las clases que modelan la solución de un problema de


planificación de rutas de vehículos.

assing: contiene las clases que implementan los métodos para asignar clientes a los
depósitos cuando la variante es MDVRP [16].
CAPÍTULO 2. DISEÑO DE LA SOLUCIÓN 50

distances: contiene las clases que implementan diferentes métodos para el cálculo
de distancia entre dos puntos, necesarios para conformar la matriz de costo.

Es importante detallar que debido a la dimensión de este paquete se tomó la decisión


de dividirlo en varias vistas que se pueden apreciar en la Figura 2.3, Figura 2.4, Figura
2.5, Figura 2.6 y Figura 2.7.

StrategyHeuristic
−strategyHeuristic<:<StrategyHeuristic <<enumeration>>
−iFactoryHeuristic<:<IFactoryHeuristic OrdenateType
−iFactoryDistances<:<IFactoryDistance
−problem<:<Problem −Ascending
−initialTime<:<long −Descending
−finalTime<:<long −Random
RtimeExecute<:<long
RcalculateTime<:<boolean
−listCapacity<:<ArrayList<Double>
RtypeOrdenate<:<OrdenateType
RtypeAssign<:<AssingType Solution
−IFactoryAssigned<:<IFactoryAssing
jjj −totalCost<:<double
RgetStrategyHeuristicNO<:<StrategyHeuristic RSolutionNO<:<Solution
−StrategyHeuristicNO<:<StrategyHeuristic RSolutionN< :<ArrayList<Route>q< :<double<O<:<Solution
RexecuteHeuristicN< :<HeuristicType<O<:<void RgetNO<and<setNO
−newHeuristicN< :<HeuristicType<O<:<Heuristic RcalculateCostNO<:<double
RloadProblemN< :<ArrayList<Integer>q<otros<O<:<void RcountRoutesForTypeN< :<int<O<:<int
RloadProblemN< :<listDistanceq<otros<O<:<void RgetOrdenVisitNO<:<ArrayList<Integer>
−newDistanceN< O<:<Distance RunnamedVNO
−loadCustomerN< :<ArrayList<Integer>q<otros<O<:<ArrayList<Customer>
−loadDepotN< :<ProblemTypeq<otros<O<:<ArrayList<Depot>
−fillListCapacityNO<:<void
−fillCostMatrixN<q<otros<O<:<NumericMatrix
ROrdenateMethodN< :<OrdenateType<O<:<void Route
RcountRoutesNO<:<int −listIdCustomer<:<ArrayList<Integer>
RgetRequestByRouteNO<:<ArrayList<Double> −requestRoute<:<double
RgetTypeRouteNO<:<ArrayList<RouteType> −costRoute<:<double
RgetAllSolutionsNO<:<ArrayList<ArrayList<Object>> −idDepot<:<int
Rcount_RoutesForTypeN< O<:<int −listAccessVC<:<ArrayList<Integer>
RgetlistStatesVCNO<:<ArrayList<Integer> jjj
−calculateCostN< :<Solution<O<:<void
RgetCostAllNO<:<double RRouteNO<:<Route
RgetTotalRouteForTypeN< :<int<O<:<int RRouteN< :<ArrayList<Integer>q< :<double<O<:<Route
RcountRoutesForDepotN< :<int<O<:<int RRgetNO<and<setNO
RrequestForDepotN< :<int<O<:<Double RsetTypeRouteN< :<int<O<:<void
RroutesForDepotN< :<int<O<:<ArrayList<Integer> RgetCostSingleRouteNO<:<Double
RcostForDepotN< :<int<O<:<Double RgetCostRouteWithSubTourNO<:<Double
RgetListCapacityNO<:<ArrayList<Double> RcalculateCostNO<:<Double
jjj jjj

<<abstract>> <<abstract>>
<<enumeration>>
Heuristic Assing
RouteType

RgetSolutionInitialNO<:<Solution RtoAssignCustomersToDepotNO<:<void −PTR


−PVR
−CVR

<<abstract>>
Distance

RcalculateDistancesN< :<doubleq< :<doubleq< :<doubleq< :<double<O<:<Double

Figura 2.3: Diagrama de clases del paquete heuristic_VRP (Vista I).


CAPÍTULO 2. DISEÑO DE LA SOLUCIÓN 51

<<abstract>>
Heuristic

ggetSolutionInitialIVd:dSolution
Sweep

RandomMethod gSweepIVd:dSweep
gbubbleMethodId :dArrayList<Customer>dVd:dvoid
gRandomMethodIVd:dRandomMethod
ggetRandomCustomerId :dArrayList<Customer>dVd:dCustomer

MoleJameson
NearestNeighborWithRLC gC1d:dintd=d1
gCDd:dintd=d1
gsizeRCLd:dintd=d1
gMoleJamesonIVd:dMoleJameson
gNearestNeighborWithRCLIVd:dNearestNeighborWithRLC gpositionBestCostId :dRouteBd :dintBd :dNumericMatrixdVd:dMetrics
ggetNNCustomerId :dArrayList<Customer>Bd :dintBd :dNumericMatrixdVd:dCustomer gC1MetricId :dintBd :dintBd :dintBd :dNumericMatrixdVd:ddouble
ggetListNNId :dArrayList<Customer>Bd :dintBd :dNumericMatrixdVd:dArrayList<Customer> gCDMetricId :ddoubleBd :ddoubledVd:ddouble
gAscendentOrdenateId :dArrayList<Double>Bd :dArrayList<Customer>dVd:dvoid ggetMJCustomerId :dArrayList<Metrics>Bd :dNumericMatrixBd :dintdVd:dMetrics
gexistTCId :dRoutedVd:dboolean

KilbyAlgorithm

gCostOfInsertKilbyId :dintBd :dintBd :dintBd :dNumericMatrixdVd:ddouble <<enumeration>>


gselectBestCostId :dintBd :dintBd :dintBd :dArrayList<Customer>Bd :dNumericMatrixBd :dintdVd:dArrayList<Metrics>
SelectCustomerMJType
gfindMaxCostId :dArrayList<Metrics>Bd :dArrayList<Customer>Bd :dintBd :dintdVd:dint
gfindFirstCustomerEqualsAccessId :dintBd :dArrayList<Metrics>Bd :dArrayList<Customer>dVd:dint −random
ginsertCostRouteId :dintBd :dArrayList<Customer>Bd :dArrayList<Route>Bd :dNumericMatrixBd :ddoubleBd :ddoubledVd:dMetrics −farthestDepot
grequestPerfectId :dArrayList<Customer>Bd :ddoubleBd :ddoubledVd:dboolean −nearestDepot
gAscendentOrdenateId :dArrayList<Metrics>dVd:dvoid
gfindCustomerId :dintBd :dArrayList<Customer>dVd:dCustomer
gexistTCId :dArrayList<Integer>dVd:dboolean

Metrics
<<abstract>>
−idCustomerd:dint
Save −costd:ddouble
−indexd:dint
gSaveIVd:dSave
gfillSaveMatrixId :dNumericMatrixBd :dintdVd:dNumericMatrix gMetricsIVd:dMetrics
ggetPositionRouteId :dArrayList<Route>Bd :dintdVd:dint gMetricsId :dintBd :ddoubleBd :dintdVd:dMetrics
gcreateRoutesId :dArrayList<Customer>dVd:dArrayList<Route> gggetIVdydsetIV
greduceOptionsId :dRouteBd :dNumericMatrixdVd:dvoid ggetIndexIVd:dint
gMetricsId :dintdVd:dvoid
WWW

SaveParallel CMT

gparameterLd:dint
gSaveParallelIVd:dSaveParallel
gcheckingJoinId :dRouteBd :dRouteBd :dintBd :dintBd :ddoubledVd:dboolean gCMTIVd:dCMT
gcompatibleRoutesId :dRouteBd :dRoutedVd:dboolean gfirstPhaseId :dintBd :dintBd :dArrayList<Customer>Bd :dNumericMatrixBd :ddoubledVd:dArrayList<Route>
grequestPerfectId :dArrayList<Metrics>Bd :dArrayList<Customer>Bd :ddoubleBd :ddoubledVd:dboolean
gdeleteElementId :dintBd :dArrayList<ArrayList<Metrics>>dVd:dvoid
gcostOfInserCMTId :dintBd :dintBd :dintBd :dNumericMatrixdVd:ddouble
SaveSequential gAscendentOrdenateId :dArrayList<Metrics>dVd:dvoid
gfindCustomerId :dintBd :dArrayList<Customer>dVd:dCustomer
gdeleteCustomersId :dArrayList<Route>dVd:dvoid
gSaveSequentialIVd:dSaveSequential gupdateCustomersToVisitId :dArrayList<Route>Bd :dArrayList<Customer>dVd:dArrayList<Customer>
gcheckingMergeId :dRouteBd :dRouteBd :ddoubleBd :ddoubleBd :dbooleandVd:dint ginsertCostRouteId :dintBd :dArrayList<Customer>Bd :dArrayList<Route>Bd :dNumericMatrixdVd:dArrayList<ArrayList<Metrics>>
gcalculateTauId :dArrayList<ArrayList<Metrics>>Bd :dintdVd:dArrayList<Metrics>

Figura 2.4: Diagrama de clases del paquete heuristic_VRP (Vista II).


CAPÍTULO 2. DISEÑO DE LA SOLUCIÓN 52

En la Tablas 2.4 y 2.5 se describen los elementos de los artefactos presentados.

Tabla 2.4: Descripción de las clases que integran el paquete heuristic_VRP (I).

Clases Descripción
Paquete controller
StrategyHeuristic Clase que controla el proceso de construcción de soluciones
a los problemas de planificación de rutas de vehículos en la
biblioteca.
OrdenateType Enumerado que indica el tipo de ordenamiento de la lista de
capacidades para el caso de la variante HFVRP [17].
Paquete generators
Heuristic Clase abstracta que define el comportamiento de una heu-
rística de construcción.
Metrics Clase auxiliar utilizada para almacenar la información de
los costos de inserción en las heurísticas de inserción.
SelectCustomerMJType Enumerado que indica la forma de seleccionar el primer
cliente en la heurística de Mole & Jameson [25].
Además incorpora una clase que hereda de Heuristic por ca-
da heurística de construcción implementada; Heurística del
Vecino más Cercano [22], Heurística de Barrido [4], Ahorro
en Secuencial y Paralelo [10], Heurística de Mole & Jame-
son [25], Heurística de Kilby [5] y Heurística de CMT [24].
Paquete solution
RouteType Enumerado que indica el tipo de ruta para el caso de la va-
riante TTRP [18].
Route Clase que modela los datos de una ruta.
Solution Clase que modela la solución que se obtienen con una heu-
rística de construcción, es decir, el orden en que serán visi-
tados los cliente y el costo en distancia de los recorridos.
Paquete post-optimization
Family_Opt Clase abstracta que contiene los métodos de uso común para
los métodos de post-optimización.
Además incorpora una clase que hereda de Family_Opt por
cada operador implementado; 2-opt [62], 3-opt [62], Relo-
cate [77] y Exchange [77].
CAPÍTULO 2. DISEÑO DE LA SOLUCIÓN 53

<<abstract>>
Family_Opt

+stepOptimizacion() : void
+Invert( : ArrayList<Integer>, : int, : int ) : void
+getCustomer( : int, : ArrayList<Integer> ) : void
+findCustomer( : int, : ArrayList<Customer> ) : Customer

Operador_Relocate Operador_Exchange Operador_2opt Operador_3opt

+relocate( : Route, : int ) : void +exchange( : Route, : int ) : void +operator_2opt( : Route, : int ) : void +operator_3opt( : Route ) : void

KilbyAlgorithm SaveParallel

+CostOfInsertKilby( : int, : int, : int, : NumericMatrix ) : double +SaveParallel() : SaveParallel


+selectBestCost( : int, : int, : int, : ArrayList<Customer>, : NumericMatrix, : int ) : ArrayList<Metrics> +checkingJoin( : Route, : Route, : int, : int, : double ) : boolean
+findMaxCost( : ArrayList<Metrics>, : ArrayList<Customer>, : int, : int ) : int +compatibleRoutes( : Route, : Route ) : boolean
+findFirstCustomerEqualsAccess( : int, : ArrayList<Metrics>, : ArrayList<Customer> ) : int
+insertCostRoute( : int, : ArrayList<Customer>, : ArrayList<Route>, : NumericMatrix, : double, : double ) : Metrics
+requestPerfect( : ArrayList<Customer>, : double, : double ) : boolean
+AscendentOrdenate( : ArrayList<Metrics> ) : void SaveSequential
+findCustomer( : int, : ArrayList<Customer> ) : Customer
+existTC( : ArrayList<Integer> ) : boolean +SaveSequential() : SaveSequential
+checkingMerge( : Route, : Route, : double, : double, : boolean ) : int

CMT MoleJameson

+parameterL : int +C1 : int = 1


+C2 : int = 1
+CMT() : CMT
+firstPhase( : int, : int, : ArrayList<Customer>, : NumericMatrix, : double ) : ArrayList<Route> +MoleJameson() : MoleJameson
+requestPerfect( : ArrayList<Metrics>, : ArrayList<Customer>, : double, : double ) : boolean +positionBestCost( : Route, : int, : NumericMatrix ) : Metrics
+deleteElement( : int, : ArrayList<ArrayList<Metrics>> ) : void +C1Metric( : int, : int, : int, : NumericMatrix ) : double
+costOfInserCMT( : int, : int, : int, : NumericMatrix ) : double +C2Metric( : double, : double ) : double
+AscendentOrdenate( : ArrayList<Metrics> ) : void +getMJCustomer( : ArrayList<Metrics>, : NumericMatrix, : int ) : Metrics
+findCustomer( : int, : ArrayList<Customer> ) : Customer +existTC( : Route ) : boolean
+deleteCustomers( : ArrayList<Route> ) : void
+updateCustomersToVisit( : ArrayList<Route>, : ArrayList<Customer> ) : ArrayList<Customer>
+insertCostRoute( : int, : ArrayList<Customer>, : ArrayList<Route>, : NumericMatrix ) : ArrayList<ArrayList<Metrics>>
+calculateTau( : ArrayList<ArrayList<Metrics>>, : int ) : ArrayList<Metrics>

Figura 2.5: Diagrama de clases del paquete heuristic_VRP (Vista III).

<<abstract>>
Distance

+calculateDistances( : double, : double, : double, : double ) : Double

Euclidean Manhattan Chebyshev

Figura 2.6: Diagrama de clases del paquete heuristic_VRP (Vista IV).


CAPÍTULO 2. DISEÑO DE LA SOLUCIÓN 54

<<abstract>>
Assing

+toAssignCustomersToDepot() : void

TrajectoryInSequential BestNearest TrajectoryInParallel

+TrajectoryInSequential() : TrajectoryInSequential +BestNearest() : BestNearest +TrajectoryInParallel() : TrajectoryInParallel

RandomAssing NearestByCustomer

+RandomAssing() : RandomAssing +NearestByCustomer() : NearestByCustomer


+requestPerfect( : ArrayList<Customer>, : double, : double ) : boolean

Figura 2.7: Diagrama de clases del paquete heuristic_VRP (Vista V).

Tabla 2.5: Descripción de las clases que integran el paquete heuristic_VRP (II).

Clases Descripción
Paquete distance
Distance Clase abstracta que define como calcular la distancia entre
dos puntos.
Además incorpora una clase que hereda de Distance por ca-
da método para el cálculo de distancia entre dos puntos im-
plementado; Euclidean, Manhattan y Chebyshev, para un
total de 3.
Paquete assing
Assing Clase abstracta que define el comportamiento de un método
de asignación.
Además incorpora una clase que hereda de Assing por cada
método para la asignación de los clientes a los depósitos im-
plementado; BestNearest, NearestByCustomer, RandomBy-
Customer, TrajectoryInParallel y TrajectoryInSequential,
para un total de 5.

Por último la Capa Application contiene el paquete factory_pattern para garantizar


la implementación de la lógica del negocio. Este paquete se compone de dos paquetes:

interfaces: que contiene las interfaces y los enumerados para la creación de heu-
rísticas de construcción, métodos para el cálculo de distancias entre dos puntos y
CAPÍTULO 2. DISEÑO DE LA SOLUCIÓN 55

métodos para la asignación de los clientes a los depósitos.

methods: contiene las clases que implementan los métodos declarados en las inter-
faces del paquete interfaces.

La Figura 2.8 muestra el diagrama de clases con la relación que se establece entre los
elementos de ambos paquetes y en la Tabla 2.6 se describen los elementos participantes
en el artefacto antes mencionado.

<<enumeration>>
HeuristicType
−CMT <<enumeration>>
−KilbyAlgorithm <<enumeration>> AssingType
−MoleJameson
−NearestNeighborWithRCL DistancesType
−BestNearest
−RandomMethod −Chebyshev −NearestByCustomer
−SaveParallel −Euclidean −RandomByCustomer
−SaveSequential −Manhattan −TrajectoryInParallel
−Sweep PPP −TrajectoryInSequential

<<interface>> <<interface>> <<interface>>


IFactoryHeuristic IFactoryDistance IFactoryAssing
WcreateHeuristiclb :bHeuristicTypebJb:bHeuristic WcreateTypeDistancelb :bDistancesTypebJb:bDistance WcreateAssinglb :bAssingTypebJb:bAssing

FactoryHeuristic FactoryDistances FactoryAssing

−heuristicb:bHeuristic −distanceb:bDistance −assingb:bAssing


PPP PPP

FactoryLoader

WgetInstanceslb :bStringbJb:bObject

Figura 2.8: Diagrama de clases del paquete factory_pattern.


CAPÍTULO 2. DISEÑO DE LA SOLUCIÓN 56

Tabla 2.6: Descripción de las clases que integran el paquete factory_pattern.

Clases Descripción
Paquete interfaces
IFactoryDistance Interfaz que declara los métodos para la creación de méto-
dos para el cálculo de distancias entre dos puntos necesarios
para la conformación de la matriz de costo.
IFactoryHeuristic Interfaz que declara los métodos para la creación de heurís-
ticas de construcción.
IFactoryAssigned Interfaz que declara los métodos para la creación de méto-
dos para la asignación de los clientes a los depósitos para la
variante MDVRP [16].
DistanceType Enumerado que indican los tipos de métodos para calcular
distancia entre dos puntos en la biblioteca para el cálculo de
la matriz de costo.
HeuristicType Enumerado que indican los tipos de heurísticas de construc-
ción para resolver problemas de planificación de rutas de
vehículos en la biblioteca.
AssignedType Enumerado que indican los tipos de métodos para la asigna-
ción de los clientes a los depósitos por la variante MDVRP
[16].
Paquete methods
FactoryDistance Clase que implementa la interfaz IFactoryDistance y cons-
truye un método para el cálculo de la distancia entre dos
puntos para conformar la matriz de costo.
FactoryHeuristic Clase que implementa la interfaz IFactoryHeuristic y cons-
truye una heurística de construcción para resolver proble-
mas planificación de rutas de vehículos.
FactoryAssigned Clase que implementa la interfaz IFactoryAssigned y cons-
truye un método para la asignación de los clientes a los de-
pósitos por la variante MDVRP [16].
FactoryLoader Clase que implementa un método genérico para la carga di-
námica de cualquier objeto.
CAPÍTULO 2. DISEÑO DE LA SOLUCIÓN 57

2.3.2. Capa JDK

Dentro de la Capa JDK se ubican los paquetes: java.lang y java.util, los mismos
no pertenecen a la herramienta, pero son necesarios para su funcionamiento. El paquete
java.lang se importa automáticamente, dentro de este paquete se encuentran una gran
parte de las clases más utilizadas dentro de las aplicaciones o programas creados con
tecnología Java. En el caso del paquete java.util importa las clases e interfaces donde se
encuentran muchas estructuras de datos genéricas que son utilizadas para la modelación
y solución del problema.
Come se evidencia en este epígrafe producto de las modificaciones realizadas a BHCVRP
se obtiene una bliblioteca de clases capaz de dar solución a cuatro variantes clásicas del
problema de planificación de rutas de vehículos mediante heurísticas de contrucción.

2.4. Patrones de diseño


Durante el diseño Orientado a Objetos es frecuente encontrarse repetidamente con
ciertos tipos de problemas, para analizar, compartir y documentar el conocimiento sobre
dichos tipos de problemas se han desarrollado los patrones de diseño. Un patrón de diseño
es un modelo formal aplicable a diferentes dominios; es decir, ayudan a seguir pautas
comunes en la solución de problemas diferentes, pero semejantes en su estructura. Los
patrones son una vía para identificar un problema concreto con su solución. Es la manera
de documentar la experiencia acumulada en la estrategia empleada para solucionar un
problema dentro de un contexto determinado [74].
Dentro de los patrones más usados en la actualidad se encuentran los patrones GoF
que se descubren como una forma indispensable de enfrentarse a la programación a partir
del libro “Design Patterns: Elements of Reusable Software”. Como consecuencia estos
patrones son conocidos como los patrones de la pandilla de los cuatro (Gang of Four,
GoF) [75]. Estos patrones se dividen en tres categorías según su propósito:

Patrones estructurales: permiten crear grupos de objetos para ayudar a realizar ta-
reas complejas.

Patrones de comportamiento: permiten definir la comunicación entre los objetos de


un sistema y el flujo de la información entre los mismos.
CAPÍTULO 2. DISEÑO DE LA SOLUCIÓN 58

Patrones creacionales: estos patrones crean objetos evitando que se tenga que ins-
tanciar directamente, proporcionando a los programas una mayor flexibilidad para
decidir que objetos usar.

En la versión anterior de la biblioteca de clases se garantizó la flexibilidad y reusabili-


dad del diseño con la utilización de patrones. Por lo que en esta nueva versión se decidió
reutilizar la implementación de los patrones creacionales Factory Method y Singleton
[74, 75, 76].

2.4.1. Patrón Singleton

El patrón Singleton está diseñado para restringir la creación de objetos pertenecientes


a una clase a un único objeto. Su intención consiste en garantizar que una clase sólo tenga
una instancia y proporcionar un punto de acceso global a ella. En otras palabras provee un
mecanismo para limitar el número de instancias de una clase, por lo que el mismo objeto
es siempre compartido por distintas partes del código [74, 75, 76].
Las situaciones más habituales de aplicación de este patrón son aquellas en las que
dicha clase controla el acceso a un recurso físico único o cuando cierto tipo de datos debe
estar disponible para todos los demás objetos de la aplicación. En la Figura 2.9 se puede
apreciar un ejemplo del diagrama de clases genérico de este patrón.

Figura 2.9: Diagrama de clases genérico del patrón Singleton.

En la nueva versión de la biblioteca se hizo necesario el uso de este patrón en la


clase StrategyHeuristic, que es la clase controladora, para garantizar los aspectos antes
mencionados. En la Figura 2.10 se puede apreciar la implementación de este patrón en la
biblioteca.
CAPÍTULO 2. DISEÑO DE LA SOLUCIÓN 59

Figura 2.10: Implementación del patrón Singleton en la clase StrategyHeuristic.

2.4.2. Patrón Factory Method

El patrón Factory Method define una interfaz para la creación de un objeto dejando a
sus sub-clases la responsabilidad de decidir qué clases instanciar. En concreto retorna una
instancia de una o varias posibles clases, en dependencia de los datos que se le provea, sin
conocer previamente las clases de objetos a crear [74, 75, 76]. En la Figura 2.11 se puede
apreciar un ejemplo del diagrama de clases genérico de este patrón.

Figura 2.11: Diagrama de clases genérico del patrón Factory Method.

La nueva versión del componente está diseñada de forma robusta para permitir la
incorporación de nuevas heurísticas de construcción, métodos para el cálculo de distancias
y métodos para la asignación de clientes a los depósitos. Para estos casos se implementó
este patrón permite realizar la carga dinámica de cualquier clase.
CAPÍTULO 2. DISEÑO DE LA SOLUCIÓN 60

Para la implementación del mecanismo de diseño se creó la clase FactoryLoader, que


contiene el método estático getInstance(), que recibe como parámetro el nombre de la
clase que se desea instanciar. El comportamiento de este método se basa en verificar que
exista una clase con el mismo nombre que el parámetro que se le pasa y devolver una
instancia de la misma. Esta forma dinámica de cargar clases en tiempo de ejecución se
realiza utilizando el API: del paquete Java Reflection.
El API Java Reflection permite a los programas examinar y hacer cambios a su estruc-
tura y comportamiento en tiempo de ejecución. Este API posibilita obtener la clase de un
objeto, examinar los métodos de una clase, invocar métodos descubiertos en tiempo de
ejecución y explorar la jerarquía de la herencia [74, 75, 76]. En la Figura 2.12 se puede
apreciar el diseño de clases que implementa este patrón para el caso de las heurísticas de
construcción.

Figura 2.12: Implementación del patrón Factory Method para las heurísticas de construc-
ción.

Por último en el siguiente diagrama de secuencia (Figura 2.13) se presenta el funcio-


namiento del mecanismo de diseño para la carga dinámica utilizando el patrón Factory
Method. En este diagrama en particular se muestran las colaboraciones de los elementos
internos del mecanismo respondiendo a las llamadas de los clientes del mismo para el ca-
CAPÍTULO 2. DISEÑO DE LA SOLUCIÓN 61

so de la carga de heurísticas de construcción. De forma similar en el Anexo A se presenta


para los métodos de cálculo de distancias y los métodos de asignación de clientes a los
depósitos.

Aplication VRP : StrategyHeuristic : FactoryHeuristic : FactoryLoader

1: executeHeuristic(heuristicType)

2: heuristic = newHeuristic(heuristicType)

3: heuristic = createHeuristic(heuristicType)

4: heuristic = getInstance(className)

Figura 2.13: Diagrama de secuencia del patrón Factory Method para las heurísticas de
construcción.

2.4.3. Otros patrones de diseño

Dentro de los patrones más usados además de los GoF también se encuentra el grupo
de los patrones GRASP, este nombre es un acrónimo de General Responsibility Assign-
ment Software Patterns. El nombre se eligió para indicar la importancia de captar estos
principios cuando se desea diseñar eficazmente el software orientado a objetos. Estos
patrones son los que describen los principios fundamentales de la asignación de respon-
sabilidades en objetos [74, 76].
Existen diferencias significativas entre estos grupos debido a que los GoF dan una
solución implementable con su propio diagrama de clases que muestra la forma en que
deben ser usados; mientras los GRASP no implementan las soluciones, más bien lle-
van a pensar en el diseño, a nivel de principios generales. Los patrones pertenecientes a
este grupo son: Experto, Creador, Bajo Acoplamiento, Alta Cohesión, Controlador, Po-
limorfismo, Fabricación Pura, Indirección y No Hables con Extraños. A continuación se
describen los que se ponen en práctica en la implementación de BHCVRP.

Patrón Controlador: este patrón permite resolver el tema de quién es el respon-


CAPÍTULO 2. DISEÑO DE LA SOLUCIÓN 62

sable de atender un evento del sistema. La solución consiste en asignar la respon-


sabilidad del manejo de un mensaje de los eventos de un sistema a una clase. Por
ejemplo, en BHCVRP se pone en práctica en la clase StrategyHeuristic que es la
clase controladora de todo el proceso de la biblioteca.

Patrón Experto: con este patrón se pretende resolver el tema de delegar respon-
sabilidades a cada objeto. La solución es asignar una responsabilidad al experto en
información, es decir, la clase que tiene la información necesaria para llevar a cabo
la responsabilidad. En BHCVRP se aplica con la clase Problem que es la responsa-
ble de todos datos de un problema VRP y de brindar información necesaria respecto
a ellos.

Patrón Creador: el problema de saber a quien le corresponde crear una nueva ins-
tancia de una clase es abordado con este patrón. El mismo propone como solución
es crear una nueva instancia por la clase que: tiene la información necesaria para
realizar la creación del objeto, usa directamente las instancias creadas del objeto,
almacena o maneja varias instancias de la clase y contiene o agrega la clase. La cla-
se controladora StrategyHeuristic de BHCVRP contiene una instancia de Problem
que demuestra el uso de este patrón.

Patrón de Bajo Acoplamiento: este patrón permite resolver el problema de dar


soporte a las bajas dependencias y al incremento de la reutilización. La solución es
realizar un diseño donde las clases estén menos ligadas entre si. De tal forma que en
caso de producirse una modificación en alguna de ellas, se tenga la mínima reper-
cusión posible en el resto de clases, potenciando la reutilización, y disminuyendo
la dependencia entre las clases. Un ejemplo en BHCVRP se evidencia en la clase
Save una clase base creada para agrupar los métodos comunes de las sub-clases
Save_Sequential y Save_Parallel.

Patrón de Alta Cohesión: este patrón es usado si se presentan problemas para


manejar la complejidad. La solución es asignar responsabilidades de manera que la
información que almacena una clase sea coherente y este relacionada con la clase.
En BHCVRP se emplea en la clase Customer es la responsable de los datos de un
cliente.
CAPÍTULO 2. DISEÑO DE LA SOLUCIÓN 63

2.5. BHCVRP como un servicio web


Actualmente las bibliotecas de clases presentan dificultades con la interoperabilidad
de sus códigos, es decir, que por lo general se encuentran atadas al entorno que se desa-
rrollan. Este problema limita sus usos y la obtención de soluciones, como es el caso de
BHCVRP. Una forma de solventar las dificultades de interoperabilidad de los códigos de
las bibliotecas es a través de los servicios web. Los servicios web al ser soportados por
la mayoría de las tecnologías actuales permiten implementar una comunicación estándar
entre las aplicaciones con total independencia de las plataformas en que estén implemen-
tadas las mismas [78, 79].
Los servicios web permiten total comunicación entre máquinas sin importar el sis-
tema operativo, entorno de lenguajes o modelos de objetos distribuidos con el que esté
desarrollado. Los servicios web pueden ser vistos también como un conjunto de proto-
colos y estándares que sirven para intercambiar datos entre aplicaciones. Estos pueden
ser desarrollados en una gran variedad de lenguajes, para ser implementados en redes de
ordenadores como Internet. De esta manera permiten a los desarrolladores implementar
aplicaciones distribuidas, construidas a partir de combinaciones de módulos de software,
que serán llamadas desde distintos sistemas distribuidos en regiones geográficas distintas
[79, 80].
Se definen como servicio web a un sistema de software diseñado para soportar in-
teracción interoperable máquina a máquina sobre una red. Los servicios web tienen una
interfaz descrita en un formato procesable por una máquina, específicamente el WSDL
(Web Service Description Language). Otros sistemas interactúan con el servicio web en
una manera prescrita por su descripción usando mensajes SOAP (Simple Object Acces
Protocol), típicamente enviados usando el protocolo HTTP (Hypertext Transfer Proto-
col) con una serialización XML en relación con otros estándares relacionados con la Web
[81, 82].
El conjunto de servicios y protocolos para los servicios web se utilizan para definir,
localizar, implementar y hacer que un servicio web interactúe con otro. La Figura 2.14
muestra el conjunto de protocolos agrupados de acuerdo a la función que realizan.
CAPÍTULO 2. DISEÑO DE LA SOLUCIÓN 64

Figura 2.14: Conjunto de protocolos para servicios web [6].

Las características que distinguen los servicios web son las siguientes:

Utilizan un lenguaje de descripción de servicio, el lenguaje WSDL.

Son publicados incluyendo descripción y políticas de uso en algún registro conoci-


do. Para lograr esta publicación utilizan el método de registro Universal Description
Discovery and Integration (UDDI).

Permiten utilizar la información contenida en la descripción del servicio para crear


una instancia de servicio disponible (o Proxy).

Son invocados sobre la red utilizando la información contenida en los detalles de


enlace de la descripción del servicio; en un documento WSDL. Para la invocación
se utiliza el protocolo SOAP.

Se puede componer de otros servicios permitiendo integrar servicios y aplicaciones


nuevas, que constituye la base de SOAP.

Todos los estándares comentados se basan en XML: los documentos WSDL, son do-
cumentos XML; el protocolo SOAP internamente trata información XML en sus dos va-
riantes para así permitir la comunicación entre servicios. SOAP define cómo organizar
la información XML de una manera estructurada y tipificada para intercambiarla entre
los distintos sistemas. Existen varias implementaciones de SOAP, entre las que destacan
JAX-WS [78, 83], Axis [78, 83, 84] y Apache CXF [83].
CAPÍTULO 2. DISEÑO DE LA SOLUCIÓN 65

2.5.1. Herramientas y tecnologías utilizadas

El servicio web de la biblioteca BHCVRP se desarrolló en el lenguaje de progra-


mación Java. Por esta razón se hizo uso de tecnologías compatible con este lenguaje de
programación. La tecnología que se utilizó fue seleccionada de la experiencia previa del
autor y los tutores en proyectos anteriores. A continuación se describe la tecnología utili-
zada.
Como se comenta Apache CXF es una forma de implementar SOAP y es un frame-
work completo, de código abierto para servicios web. Se originó como combinación de
dos proyectos de código abierto: Celtix desarrollado por IONA Technologies (adquirida
por Progress Software en 2008) y XFire desarrollado por un equipo basado en Codehaus.
El nombre CXF se deriva de la combinación de los nombres de estos proyectos. CXF
ayuda a construir y desarrollar servicios utilizando JAX-WS como API de programación.
Estos servicios pueden tener comunicación con una gran variedad de protocolos como
SOAP, XML/HTTP, HTTP RESTful, o CORBA, y pueden trabajar sobre servicios de
envío de información como HTTP, JMS o JBI [81, 82].
Las características principales de CXF son:

Soporte para estándares de Servicios Web: CXF soporta varios estándares de


servicios web incluyendo a SOAP, el Perfil Básico, WSDL, WS-Addressing, WS-
Policy, WS-ReliableMessaging y WS-Security.

Interfaces: CXF soporte varios modelos de programación como interfaz. CXF im-
plementa el API JAX-WS. También incluye una interfaz simple que permite crear
clientes y endpoints sin utilizar anotaciones. CXF soporta el desarrollo por contrato
con WSDL, y el desarrollo por código primero comenzando desde Java.

Facilidad de uso: CXF está diseñado para ser intuitivo y facil de usar. Existen APIs
simples para construir servicios comenzando por el código, plug-ins de Maven para
integrar esta herramienta, soporte para el API JAX-WS, soporte de XML de Spring
2.0 para facilitar la configuración, y mucho más.

Soporte para protocolos binarios y legacy: CXF fue diseñado para proveer una
arquitectura extensible que no sólo soporte XML sino también otros binding no-
XML, como JSON y CORBA, en combinación con cualquier tipo de servicio de
envío de información.
CAPÍTULO 2. DISEÑO DE LA SOLUCIÓN 66

En el desarrollo de BHCVRP_WebService se utilizó el IDE Eclipse en su versión 4.2,


el servidor de aplicaciones Apache Tomcat 7.0 y la biblioteca Apache CXF en su versión
2.2.7.

2.5.2. BHCVRP_WebService

Como se comenta en el epígrafe 2.3.2, BHCVRP es una biblioteca de clases capaz


de dar solución a cuatro variantes clásicas de planificación de rutas de vehículos median-
te heurísticas de contrucción. Sin embargo, esta biblioteca no permite que aplicaciones
diferentes a su entorno de desarrollo puedan utilizar sus funcionalidades. Esta particulari-
dad limita el uso de la biblioteca. Si se diseñan las funcionalidades de la biblioteca como
un servicio web se elimina dicha limitante. Con este fin se identifican las actividades a
realizar por una aplicación cuando hace uso de BHCVRP:

1. Cargar los datos de un problema de planificación de rutas de vehículos. Especí-


ficamente de las variantes admitidas en la biblioteca (CVRP [15], HFVRP [17],
MDVRP [16] y TTRP [18]).

2. Configurar el problema de planificación de rutas de vehículos a resolver y de la


heurística de construcción a utilizar.

3. Ejecutar la heurística seleccionada.

En la Figura 2.15 se muestra un diagrama de actividades de este proceso, donde se


detallan las actividades antes mencionadas. Como se puede apreciar el diagrama está
dividido en dos calles. La calle izquierda refleja las actividades del usuario externo que
realiza las peticiones a BHCVRP. La calle derecha muestra las actividades que ejecuta
BHCVRP.
CAPÍTULO 2. DISEÑO DE LA SOLUCIÓN 67

Usuario Externo BHCVRP

Introducir datos Cargar datos


de un problema VRP de un problema VRP

No
¿Carga correcta?

Si

Si ¿Configurar No
variante VRP?

Si es HFVRP Si es MDVRP
¿Variante?

Seleccionar tipo Seleccionar tipo


de ordenamiento de asignación de
de la lista de capacidades los clientes a los depósitos

Ordenar lista Asignar clientes


de capacidades a los depósitos

Si No
Introducir parámetros ¿Configurar
de la heurística Heurística?

Si No
Confirmar cálculo ¿Calcular tiempo?
del tiempo

Solicitar ejecución
Ejecutar heurística
de la heurística

Crear heurística

i=0

No
i <= ejecuciones

Si

Obtener solución

Calcular costo

Obtener mejor
Seleccionar mejor solución
solución

Solicitar datos Ejecutar operaciones


adicionales adicionales

Obtener datos
adicionales

Figura 2.15: Diagrama de actividades del funcionamiento de BHCVRP.


CAPÍTULO 2. DISEÑO DE LA SOLUCIÓN 68

Es importante detallar que se utiliza el color rojo para destacar las actividades que
van a formar parte del servicio web a diseñar. La actividad de color verde forma parte
del componente pero no es una operación del servicio pues el resultado que se retorna
contempla toda la información necesaria sobre la solución.
El análisis de las actividades ayudó a definir las operaciones de los servicios. En la Ta-
bla 2.7 se puede apreciar como se brindan estas actividades en el servicio y su interacción
entre ellas.

Tabla 2.7: Descripción de las operaciones de BHCVRP_WebService.

Actividades Operación Procedimiento Descripción


de servicio interno

Cargar datos X Actividad realizada para cargar los


datos de un problema VRP.
Configurar variante X Actividad referida a todo el proceso
de configuración necesario para la
variante de VRP.
Configurar heurística X Actividad referida a la configura-
ción de los parámetros de la heurís-
tica seleccionada.
Ejecutar Save Parallel X Actividad que resuelve la heurística
Save Parallel.
Ejecutar Save Sequential X Actividad que resuelve la heurística
Save Sequential.
Ejecutar Sweep X Actividad que resuelve la heurística
de Sweep.
Ejecutar Mole & Jameson X Actividad que resuelve la heurística
de Mole & Jameson.
Ejecutar CMT X Actividad que resuelve la heurística
de CMT.
Ejecutar Algoritmo de Kilby X Actividad que resuelve la heurística
de Kilby.
Ejecutar NNRCL X Actividad que resuelve la heurística
del Vecino más Cercano.
Ejecutar Random Method X Actividad que resuelve el método
Aleatorio.

El diseño arquitectónico de este servicio web se presenta en la Figura 2.16. El mismo


está basado en la arquitectura propuesta para BHCVRP, aunque incorpora una capa adi-
cional denominada Service que contiene los paquetes relacionados con el servicio web
que se muestran de color morado.
CAPÍTULO 2. DISEÑO DE LA SOLUCIÓN 69

web_service

service mediate

dto

Service

heuristic_VRP

generators controller

post_optimization assign solution distances

problem_VRP factory_pattern

data matrix methods interfaces

Application

JDK

Apache CXF
java.util java.lang javax.xml javax.jws

Software

Figura 2.16: Arquitectura de BHCVRP_WebService.

A continuación se explican los elementos que se adicionan a esta arquitectura para


ofrecer las funcionalidades de BHCVRP como un servicios web. El siguiente diagrama
(Figura 2.17) pertenece al paquete web_service. Este paquete agrupa a los siguientes
paquetes:

dto: que contiene las clases necesarias para la trasferencia de objetos en el servicio
web.
CAPÍTULO 2. DISEÑO DE LA SOLUCIÓN 70

service: que contiene las clases que implementan el servicio web.

mediate: que contiene la clase que orquesta todo el funcionamiento del servicio
web.

FleetDTO LocationDTO
−countTrucks : int −axisX : double
−capacityTrucks : int −axisY : double
−countTrailers : int
−capacityTrailers : int +get y set()

+get y set()

RouteDTO
−listCustomerDTO : int[ ]
CustomerDTO
DepotDTO −typeRouteDTO : int
−idCustomer : int −requestRouteDTO : double
−idDepot : int −costRouteDTO : double
−request : int
−listAssigned : int[ ] −idDepot : int
−typeCutomer : int
+get y set() +get y set()
+get y set()

<<interface>>
InterfaceService

+solveRandomMethod( : AssingType, : OrdenateType, : DistancesType, : ProblemType, : CustomerDTO, : DepotDTO, : int ) : RouteDTO


+solveNearestNeighborWithRLC( : AssingType, : OrdenateType, : DistancesType, : ProblemType, : CustomerDTO, : DepotDTO, : int, sizeRCL : int ) : RouteDTO
+solveSaveSequential( : AssingType, : OrdenateType, : DistancesType, : ProblemType, : CustomerDTO, : DepotDTO, : int ) : RouteDTO
+solveSaveParallel( : AssingType, : OrdenateType, : DistancesType, : ProblemType, : CustomerDTO, : DepotDTO, : int ) : RouteDTO
+solveSweep( : AssingType, : OrdenateType, : DistancesType, : ProblemType, : CustomerDTO, : DepotDTO, : int ) : RouteDTO
+solveMoleJameson( : AssingType, : OrdenateType, : DistancesType, : ProblemType, : CustomerDTO, : DepotDTO, : int, parameterC1 : int, parameterC2 : int ) : RouteDTO
+solveCMT( : AssingType, : OrdenateType, : DistancesType, : ProblemType, : CustomerDTO, : DepotDTO, : int, parameterL : int ) : RouteDTO
+solveKilbyAlgorithm( : AssingType, : OrdenateType, : DistancesType, : ProblemType, : CustomerDTO, : DepotDTO, : int ) : RouteDTO

ImplementationService
Execute_Service
...
+main( : String ) : void

ImplementationMediate

+fillData( listCustomerDTO : CustomerDTO[ ], listDepotDTO : DepotDTO[ ], typeDistance, problemType : ProblemType ) : void


+configuration( : AssingType, : OrdenateType ) : void
+RandomMethod( : DistancesType, : ProblemType, : CustomerDTO[ ], : DepotDTO[ ], : int ) : RouteDTO[ ]
+NearestNeighborWithRLC( : DistancesType, : ProblemType, : CustomerDTO[ ], : DepotDTO[ ], : int, sizeRCL : int ) : RouteDTO[ ]
+SaveSequential( : DistancesType, : ProblemType, : CustomerDTO[ ], : DepotDTO[ ], : int ) : RouteDTO[ ]
+SaveParallel( : DistancesType, : ProblemType, : CustomerDTO[ ], : DepotDTO[ ], : int ) : RouteDTO[ ]
+Sweep( : DistancesType, : ProblemType, : CustomerDTO[ ], : DepotDTO[ ], : int ) : RouteDTO[ ]
+MoleJameson( : DistancesType, : ProblemType, : CustomerDTO[ ], : DepotDTO[ ], : int, parameterC1 : int, parameterC2 : int ) : RouteDTO[ ]
+CMT( : DistancesType, : ProblemType, : CustomerDTO[ ], : DepotDTO[ ], : int, parameterL : int ) : RouteDTO[ ]
+KilbyAlgorithm( : DistancesType, : ProblemType, : CustomerDTO[ ], : DepotDTO[ ], : int ) : RouteDTO[ ]

Figura 2.17: Diagrama de clases del paquete web_service.


CAPÍTULO 2. DISEÑO DE LA SOLUCIÓN 71

Los elementos participantes en este artefacto se describen en la Tabla 2.8 que se mues-
tra a continuación:

Tabla 2.8: Descripción de las clases que integran el paquete web_service.

Clases Descripción
Paquete dto
CustomerDTO Clase que modela los datos de un cliente en la transferencia
de datos entre el servicio y el consumidor.
DepotDTO Clase que modela los datos de un depósito en la transferen-
cia de datos entre el servicio y el consumidor.
FleetDTO Clase que modela los datos de la flota de vehículos en la
transferencia de datos entre el servicio y el consumidor.
LocationDTO Clase que modela la ubicación geográfica de un cliente o de
un depósito en la transferencia de datos entre el servicio y
el consumidor.
RouteDTO Clase que modela una ruta en la transferencia de datos entre
el servicio y el consumidor
Paquete service
InterfaceService Interfaz que define las operaciones que brinda el servicio
web.
ImplementationService Clase que implementa la interfaz InterfaceService y define
el comportamiento de cada una de las operaciones del ser-
vicio web.
ExecuteService Es la clase implementada para generar el WSDL del servi-
cio web.
Paquete mediate
ImplementationMediate Clase que orquesta todo el funcionamiento de cada una de
las operaciones brindadas por el servicio web.

Otro de los cambios introducidos en la arquitectura con vistas a obtener las funcionali-
dades de BHCVRP como servicio web es la actualización de la Capa JDK por Software.
El cambio se produce ya que es necesario reflejar en dicha capa otros elementos necesa-
rios para el desarrollo del servicio web, independientemente de los pertenecientes a Java.
En concreto se crea el paquete JDK que se compone de los paquetes anteriores: java.lang
y java.util y adiciona dos nuevos paquetes: javax.xml y javax.jws. Estos dos últimos pa-
quetes pertenecen al API de Java para XML JAX-WS. El primero constituye el núcleo de
CAPÍTULO 2. DISEÑO DE LA SOLUCIÓN 72

esta API, mientras que el segundo permite el mapeo mediante WSDL. De igual manera se
incorpora la biblioteca Apache CXF en su versión 2.2.7. Esta biblioteca es un framework
para servicios web que ayuda a construir y desarrollar servicios web mediante el uso de
la API JAX-WS.

2.6. Conclusiones parciales


Después rediseñar la arquitectura de la biblioteca de clases para la utilización de heu-
rísticas de construcción en otras variantes VRP y adaptar nuevas heurísticas de construc-
ción para otros VRPs se obtienen las siguientes conclusiones:

Se realizan las modificaciones en BHCVRP tanto para la incorporación de las nue-


vas heurísticas de contrucción, como para las nuevas variantes de planificación de
rutas de vehículos, cubriendo las deficiencias planteadas en la versión anterior.

Se incorporan mejoras para el funcionamiento de la biblioteca como son el cálculo


de distintos tipos de distancia, el cálculo del tiempo de ejecución de las heurísti-
cas, los pasos de post-optimización de las heurísticas y los distintos métodos para
obtener información adicional de la solución.

Se incorporan dos variantes de planificación de rutas de vehículos: VRP con Múlti-


ples Depósitos y VRP con Flota Heterogénea.

Se incorporan dos heurísticas de construcción: la Heurística Inserción de Kilby y la


Heurística de Inserción en Paralelo de Christofides, Mingozzi y Toth.

En el diseño de la aplicación se hizo uso de patrones de diseño como el Singleton y


el Factory Method, para garantizar extensibilidad y reusabilidad en la solución.

Se brindan las funcionalidades de BHCVRP como un servicio web eliminando las


limitaciones que impone la tecnología.
Capítulo 3

Análisis experimental

3.1. Introducción
En este capítulo se exponen y analizan los resultados obtenidos con las heurísticas
implementadas en BHCVRP para las cuatro variantes de planificación de rutas de vehícu-
los. Inicialmente, se explican los distintos tipos de experimentos a realizar; así como las
características de las instancias y las configuraciones necesarias tanto para las heurísticas
como para las variantes. Por último, se realiza un análisis de los resultados obtenidos en
los distintos tipos de experimentos.

3.2. Descripción de los experimentos


Para validar el funcionamiento de la biblioteca se decide realizar tres tipos de experi-
mentos:

1. Experimento 1: consiste en ejecutar las ocho heurísticas implementadas para anali-


zar su funcionamiento en las cuatro variantes de planificación de rutas de vehículos.

2. Experimento 2: realizar una comparación de los resultados actuales obtenidos para


la variante TTRP [18] con los resultados obtenidos en la versión anterior de la
biblioteca para las heurísticas de construcción que estaban implementadas.

3. Experimento 3: aplicar técnicas tradicionales de Minería de Datos, específicamen-


te Árboles de Decisión [85], para ayudar a la toma de decisiones cuando se desea
resolver un problema de planificación de rutas de vehículos usando heurísticas de
construcción clásicas.

73
CAPÍTULO 3. ANÁLISIS EXPERIMENTAL 74

3.2.1. Descripción de las instancias

Para la ejecución de los experimentos se seleccionan por las cuatro variantes de pla-
nificación de rutas de vehículos instancias de la literatura. A continuación, la Tabla 3.1,
Tabla 3.2, Tabla 3.4 y Tabla 3.3 muestran las instancias utilizadas en las variantes CVRP
[15], MDVRP [16], HFVRP [17] y TTRP [18] respectivamente.
Para la variante CVRP [15] se seleccionan las instancias del autor Augerat disponibles
en [86]. Para la experimentación se utilizan un total de 16 instancias de prueba. En la
siguiente tabla (Tabla 3.1) se presenta para cada instancia de problema el total de clientes,
el total de vehículos y la capacidad de estos vehículos.

Tabla 3.1: Descripción de las instancias CVRP.

Problema Total Total Capacidad


de clientes de Vehículos de los Vehículos

1 31 5 100
2 44 6 100
3 35 5 100
4 55 9 100
5 55 6 150
6 60 9 100
7 65 9 100
8 80 10 100
9 80 5 200
10 50 7 100
11 78 10 100
12 68 9 100
13 70 10 135
14 76 4 350
15 100 4 400
16 134 7 2210

Las cantidades de clientes de estas instancias oscilan entre 31 y 134. La cantidad de


vehículos y sus capacidades varía en la mayoría de las instancias.
Para la variante MDVRP [16] se seleccionan instancias del autor Cordeau disponibles
en [86]. Para la experimentación se utilizan un total de 22 instancias de prueba. En la Tabla
3.2 se presenta para cada instancia de problema el total de clientes, el total de depósitos,
las cantidades de vehículos por depósito y las capacidades de los vehículos.
CAPÍTULO 3. ANÁLISIS EXPERIMENTAL 75

Tabla 3.2: Descripción de las instancias MDVRP.

Problema Total Total Total vehículos Capacidad


de clientes de depósitos por depósito de los Vehículos

1 50 4 4 80
2 50 4 2 160
3 75 5 3 140
4 100 2 8 100
5 100 2 5 200
6 100 3 6 100
7 100 4 4 100
8 249 2 14 500
9 249 2 12 500
10 249 4 8 500
11 249 5 6 500
12 80 2 5 60
13 160 4 5 60
14 240 6 5 60
15 360 9 5 60
16 48 4 1 200
17 96 4 2 195
18 144 4 3 190
19 192 4 4 185
20 240 4 5 180
21 288 4 6 175
22 72 6 1 200

Las cantidades de clientes de estas instancias oscilan entre 50 y 360. Para el caso de
los depósitos la máxima cantidad es 9 y la mínima es 2. Además, la cantidad de vehículos
y sus capacidades varía en la mayoría de las instancias.
En el caso particular de la variante HFVRP [17], no están disponibles instancias de
pruebas en la literatura y se decide utilizar las instancias seleccionadas para la variante
CVRP [15] a partir de realizar un conjunto de transformaciones. Para cada instancia se
mantienen los clientes con sus datos originales, mientras que la cantidad de vehículos se
fracciona en tres valores a partir de un por ciento determinado. En el caso de la capacidad
se distribuye entre los vehículos respetando la capacidad total original. Con este procedi-
miento se obtiene una flota de vehículos con tres tipos de vehículos diferentes según su
capacidad. A continuación, la Tabla 3.3 muestra en la segunda y tercera columna el total
de clientes y de vehículos respectivamente. Luego, en las restantes columnas se presentan
CAPÍTULO 3. ANÁLISIS EXPERIMENTAL 76

los datos para cada tipo de vehículo definido (total y capacidad).

Tabla 3.3: Descripción de las instancias HFVRP.

Flota de Vehículos
Tipo 1 Tipo 2 Tipo 3
Problema Total Total
de clientes de Vehículos Total Capacidad Total Capacidad Total Capacidad

1 31 5 2 50 2 100 1 200
2 44 6 2 50 3 100 1 200
3 35 5 2 50 2 100 1 200
4 55 9 3 50 3 100 3 150
5 55 6 2 150 3 100 1 300
6 60 9 3 50 3 100 3 150
7 65 9 3 50 3 100 3 150
8 80 10 4 75 4 100 2 150
9 80 5 2 100 2 200 1 400
10 50 7 4 50 2 150 1 200
11 78 10 4 75 4 100 2 150
12 68 9 3 50 3 100 3 150
13 70 10 4 110 4 135 2 195
14 76 4 2 250 1 400 1 500
15 100 4 2 300 1 400 1 600
16 134 7 4 200 2 500 1 410

Al igual que en la variante CVRP [15], se dispone de 16 instancias para la experimen-


tación con las mismas características en cuanto a la cantidad de vehículos y la capacidad
total.
Por último para la variante TTRP [18] se emplean 21 instancias de referencias de la
literatura reportadas en [87]. Estas instancias TTRP provienen de siete problemas VRP
de prueba [24], generando por cada uno tres problemas TTRP que varían en la cantidad
de clientes de tipo VC y TC. Para su obtención se sigue el siguiente procedimiento: para
cada cliente i se calculó Ai como la distancia al cliente más cercano. Luego, se generan
tres instancias TTRP donde se designan como clientes de tipo TC el 25 %, 50 % y 75 %
respectivamente de los clientes con el menor valor de Ai .
CAPÍTULO 3. ANÁLISIS EXPERIMENTAL 77

Tabla 3.4: Descripción de las instancias TTRP.

Clientes Camiones Remolques


Problema
Total VC TC Total Capacidad Total Capacidad

1 38 12
2 50 25 25 5 100 3 100
3 13 37
4 57 18
5 75 38 37 9 100 5 100
6 19 56
7 75 25
8 100 50 50 8 150 4 100
9 25 75
10 113 37
11 150 75 75 12 150 6 100
12 38 112
13 150 49
14 199 100 99 17 150 9 100
15 50 149
16 90 30
17 120 60 60 7 150 4 100
18 30 90
19 75 25
20 100 50 50 10 150 5 100
21 25 75

Las cantidades de clientes de estas instancias oscilan entre 50 y 199. Las capacidades
de los camiones toman valores entre 100 y 150. Para el caso de los remolques la capacidad
siempre es 100.

3.2.2. Configuración de los experimentos

Todas las heurísticas adaptadas a las distintas variantes fueron implementadas en el


lenguaje de programación Java, utilizando el IDE de programación Eclipse 3.4. Los ex-
perimentos se ejecutaron en un ordenador con un procesador Intel(R) Core(TM) 2 Duo,
con un procesador a 2.67 GHz con 2 GB de RAM y sistema operativo de 32 bits, versión
Windows 7. En todos los casos se realizan 30 ejecuciones de las heurísticas seleccionadas.
CAPÍTULO 3. ANÁLISIS EXPERIMENTAL 78

3.2.2.1. Heurísticas de construcción y parámetros

Se utilizan las ocho heurísticas de construcción implementadas en BHCVRP. Algunas


de estas heurísticas requieren de parámetros en su ejecución. A continuación se presenta
la configuración de estos parámetros para las heurísticas de construcción que lo requieren:

1. Algoritmo Aleatorio (Random): este algoritmo construye una solución realizando


sucesivas inserciones de los clientes de forma aleatoria.

2. Heurística del Vecino más Cercano con Lista de Candidatos Restringidos (NN):
propone la construcción de una solución insertando al cliente más cercano dentro
de la lista de candidatos restringida al último cliente ya insertado.

Tamaño de la lista de candidatos restringidos (sizeRCL): 2

3. Algoritmo de Ahorro en su versión secuencial (SaveSeq): este algoritmo plan-


tea que en una solución dos rutas diferentes pueden ser combinadas formando una
nueva ruta. Esta versión del algoritmo propone la construcción de las rutas una a
una.

4. Algoritmo de Ahorros en su versión paralela (SaveParall): esta otra versión del


algoritmo tiene la misma filosofía, pero trabaja sobre todas las rutas de forma si-
multánea.

5. Heurística de Inserción Secuencial de Mole & Jameson (MJ): esta heurística


de inserción utiliza dos medidas para decidir el próximo cliente a insertar en la
solución.

λ (c1 ): 1

µ (c2 ): 1

Forma de seleccionar el primer cliente a insertar en la ruta (selectCustomerMJTy-


pe): 1 (el más cercano al depósito).

6. Heurística de Barrido (Sweep): esta heurística trabaja en dos fases, primero forma
los grupos de clientes y luego construyen las rutas para cada grupo.

7. Heurística de Inserción en Paralelo de Christofides, Mingozzi y Toth (CMT):


esta heurística de inserción opera en dos fases. En la primera fase se determina la
CAPÍTULO 3. ANÁLISIS EXPERIMENTAL 79

cantidad de rutas a utilizar, junto con un cliente para inicializar cada ruta. En la
segunda fase se crean dichas rutas y se inserta el resto de los clientes en ellas según
el costo de inserción.

λ (parameterL): 1

8. Algoritmo de Kilby (Kilby): esta heurística de inserción construye tantas rutas co-
mo vehículos y se añade el cliente que más cercano esté en cada momento según su
costo de inserción.

3.2.2.2. Variantes VRP

En los casos de las variantes incorporadas se requiere de distintos tipos de configu-


ración para realizar su resolución. En el caso de MDVRP [16] es necesario realizar la
asignación de los clientes a cada depósito apriori de la ejecución de la heurística. Para la
variante HFVRP [17] se debe organizar la lista de las capacidades para lograr obtener una
solución que respete las capacidades de los vehículos de la flota y que sea comprensible
para el usuario. La biblioteca BHCVRP contempla varias opciones para las configuracio-
nes de cada una de estas variantes de planificación de rutas de vehículos.
Métodos de asignación para MDVRP:

BestNearest: este método consiste en asignar el cliente al depósito con la distancia


más cercana al último elemento insertado, considerando en todo momento que no
se incumpla la restricción de capacidad.

NearestByCustomer: este método consiste en asignar a cada depósito los clientes


más cercanos a él siempre y cuando no se incumpla la restricción de capacidad.

TrajectoryInParallel: este método consiste en asignar de forma simultanea a ca-


da depósito los clientes que le corresponden según la cercanía al último elemento
insertado en el depósito. Para realizar la asignación se verifica la restricción de ca-
pacidad.

TrajectoryInSequential: este método consiste en asignar por cada depósito los


clientes que le corresponden según la cercanía al último elemento insertado en el
depósito. Al igual que en los métodos anteriores se debe cumplir la restricción de
capacidad.
CAPÍTULO 3. ANÁLISIS EXPERIMENTAL 80

RandomByCustomer: este método consiste en asignar los clientes a los depósitos


de forma aleatoria, respetando en todo momento la restricción de capacidad.

Métodos de ordenamiento para HFVRP:

Ascending: método que ordena la lista de capacidades de menor a mayor.

Descending: método que ordena la lista de capacidades de mayor a menor.

Random: método que ordena la lista de capacidades de forma aleatoria.

3.2.2.3. Pruebas estadísticas no paramétricas

Las técnicas estadísticas de estimación de parámetros, intervalos de confianza y prue-


ba de hipótesis son, en conjunto, denominadas estadística paramétrica. Estas técnicas se
basan en especificar una forma de distribución de la variable aleatoria y de los estadísticos
derivados de los datos. En estadística paramétrica se asume que la población de la cual
la muestra es extraída es normal o aproximadamente normal. Esta propiedad es necesaria
para que la prueba de hipótesis sea válida. Sin embargo, en un gran número de casos no
se puede determinar la distribución original ni la distribución de los estadísticos por lo
que en realidad no se tienen parámetros a estimar sino distribuciones que comparar. Esto
se conoce como estadística no paramétrica [88].
Para el análisis de los resultados se formula una prueba de hipótesis con el objetivo
de determinar si existen o no diferencias entre el comportamiento de los algoritmos en
general:

H0 : No existen diferencias entre los algoritmos.

H1 : Existen diferencias entre los algoritmos.

Todas las pruebas de hipótesis se realizan con un nivel de significancia de α = 0.05.


Para probar las hipótesis sobre el comportamiento general de los algoritmos se utiliza-
ra la prueba estadística no paramétrica de Friedman [89] y para analizar el comportamien-
to de los algoritmos en ambas versiones de la biblioteca se aplica la prueba de Wilcoxon
[90], a continuación se comentan en qué consisten estas pruebas.
CAPÍTULO 3. ANÁLISIS EXPERIMENTAL 81

Friedman
La prueba de análisis de varianza de dos clasificaciones por rangos de Friedman se
emplea cuando se tienen k muestras relacionadas y k problemas [89]. Se calcula el ranking
de los resultados observados por algoritmo (r j para el algoritmo j con k algoritmos) para
cada problema, asignando al mejor de ellos el ranking 1, y al peor el ranking k. Bajo la
hipótesis nula, que se forma a partir de suponer que los resultados de los algoritmos son
equivalentes y, por tanto, sus rankings son similares [89].
Wilcoxon
La prueba de Wilcoxon es adecuada para analizar datos que provienen de dos mues-
tras independientes y varios problemas [90]. Es útil para analizar datos medidos a nivel
ordinal y permite analizar no sólo la dirección de las diferencias entre pares de datos,
sino también la magnitud relativa de las mismas. Su funcionamiento se basa en calcular
las diferencias entre los resultados de dos algoritmos y calcular un ranking utilizando di-
cho valor, ignorando signos, a través de todas las funciones. Nótese que en este caso, el
ranking va desde 1 hasta N, en vez de hasta k. Tras sumar los rankings diferenciándolos
entre si son negativos o positivos, obtenemos dos valores R+ y R− . Si el menor de ellos
es menor o igual al valor de la distribución T de Wilcoxon para N grados de libertad se
rechaza la hipótesis nula, y el algoritmo asociado al mayor de los valores es el mejor [90].

3.3. Análisis de los resultados


Esta acápite está dividido en tres secciones una por cada tipo de experimento reali-
zado. En la primera sección se analiza el comportamiento de cada una de las heurísticas
de construcción para cada variante del problema de planificación de rutas de vehículos.
Se muestran gráficas para un mejor análisis de los resultados obtenidos respecto al costo
de la soluciones y el tiempo de ejecución en las cuatro variantes. Además, se demues-
tra con pruebas estadísticas no parametricas (Friedman [89]) la validez de los resultados
obtenidos.
En la segunda sección se analizan los resultados obtenidos de comparar las heurísticas
de construcción de la versión anterior de la biblioteca con estos mismas heurísticas en la
versión actual para la varainte TTRP [18]. Se compara de forma detallada los resultados
en cuanto a costo (en distancia) y tiempo. La prueba de Wilcoxon [90] es utilizada para
detectar diferencias significativas entre los algoritmos de cada versión de la biblioteca.
CAPÍTULO 3. ANÁLISIS EXPERIMENTAL 82

Por último, en la tercera sección se utiliza una técnica tradicional de la Minería de Da-
tos, que son los Árboles de Decisión [85] con el objetivo de ayudar a la toma de decisiones
cuando se desea resolver un problema de este tipo utilizando heurísticas de construcción.

3.3.1. Resultados obtenidos con BHCVRP para las heurísticas de cons-


trucción

Después de realizados los experimentos se analizan los resultados y se muestra un re-


sumen por cada variante de planificación de rutas de vehículos. En las tablas que muestran
el resumen de los resultados por cada problema se marca en negrita la mejor solución ob-
tenida y el menor tiempo de ejecución. Para los valores de costo se consideran dos cifras
significativas y para los tiempos de ejecución se admiten tres. Se coloca entre paréntesis
la cantidad de rutas obtenidas para las mejores soluciones alcanzadas. En el caso de la
variante TTRP [18] el primer valor se corresponde con las rutas de tipo CVR, el segundo
con las de tipo PVR y por último las de tipo PTR.
En todos los casos se grafican los resultados alcanzados en cuanto a costo de las
soluciones y tiempo de ejecución utilizando la herramienta Gnuplot en su versión 4.6
[91].

3.3.1.1. Análisis de los resultados para la variante CVRP

En la Tabla 3.5 y la Tabla 3.6 se resumen los resultados obtenidos sobre los 16 pro-
blemas de la variante CVRP seleccionados de la literatura.
CAPÍTULO 3. ANÁLISIS EXPERIMENTAL
Tabla 3.5: Resumen de los resultados en las 16 instancias CVRP (I).

Random NN SaveSeq SaveParall


Problema
Min Prom Tiempo (ms) Min Prom Tiempo (ms) Min Prom Tiempo (ms) Min Prom Tiempo (ms)

1 1809.74(5) 2101.62 0.007 1202.09(5) 1336.11 0.016 844.14(5) 984.49 0.034 839.86(5) 842.91 0.128
2 2075.04(7) 2506.25 0.001 1623.72(7) 1838.64 0.013 1063.38(6) 1180.60 0.027 997.90(6) 1009.09 0.440
3 1793.57(5) 2072.94 0.003 1362.65(5) 1555.43 0.007 853.84(5) 947.04 0.013 824.69(5) 824.69 0.183
4 3531.73(10) 3808.97 0.001 2605.19(9) 2945.73 0.024 1800.49(5) 1984.66 0.051 1701.08(9) 1701.08 1.047
5 3239.52(6) 3520.37 0.001 2175.98(6) 2450.58 0.025 1387.15(6) 1485.24 0.042 1320.72(6) 1329.79 1.055
6 3670.71(9) 4233.61 0.001 2792.53(10) 3110.16 0.029 1954.15(9) 2123.88 0.053 1734.29(9) 1745.06 1.492
7 4215.77(10) 4512.51 0.001 2701.31(10) 3045.83 0.043 1845.01(9) 2004.18 0.072 1789.33(10) 1795.57 2.132
8 4768.34(11) 5205.66 0.001 3513.41(10) 3971.00 0.081 2158.22(10) 2304.31 0.109 2065.88(10) 2067.93 4.835
9 4182.01(5) 4630.65 0.001 2863.25(5) 3269.32 0.066 1403.44(5) 1506.06 0.097 1338.32(5) 1343.02 4.789
10 2799.06(7) 3251.58 0.001 1586.64(7) 1668.61 0.018 1249.34(7) 1367.80 0.033 1267.69(7) 1271.00 0.716
11 4140.76(10) 4729.62 0.001 2739.87(11) 2948.33 0.061 1782.91(10) 1925.81 0.099 1638.68(10) 1644.41 4.373
12 4261.13(9) 4684.25 0.001 2221.53(9) 2619.81 0.042 1982.32(9) 2089.92 0.071 1835.60(9) 1836.17 2.579
13 2450.30(11) 2697.95 0.002 1663.23(11) 1790.32 0.045 1164.46(10) 1219.12 0.087 1078.03(11) 1078.21 2.873
14 2422.44(5) 2617.77 0.002 1313.70(5) 1412.46 0.058 719.46(4) 776.24 0.087 693.79(5) 696.69 3.917
15 3194.78(4) 3483.78 0.003 1463.56(4) 1587.77 0.119 856.53(4) 890.72 0.172 769.67(4) 771.88 11.392
16 6200.02(9) 6790.31 0.005 2291.02(8) 2416.36 0.263 1381.77(7) 1703.05 0.414 1328.73(7) 1336.79 36.123

83
CAPÍTULO 3. ANÁLISIS EXPERIMENTAL
Tabla 3.6: Resumen de los resultados en las 16 instancias CVRP (II).

MJ Sweep CMT Kilby


Problema
Min Prom Tiempo (ms) Min Prom Tiempo (ms) Min Prom Tiempo (ms) Min Prom Tiempo (ms)

1 876.18(5) 876.18 0.039 1606.37(5) 1718.79 0.011 1023.84(5) 1207.68 0.019 1102.64(5) 1102.64 0.059
2 1295.46(6) 1307.93 0.065 1784.19(7) 1971.64 0.019 1212.11(7) 1458.31 0.026 1260.47(6) 1260.47 0.095
3 1154.51(5) 1167.26 0.051 1331.21(5) 1446.45 0.008 997.05(5) 1240.24 0.014 1152.84(5) 1152.84 0.052
4 1898.81(9) 1905.58 0.084 2674.02(10) 2839.98 0.024 2190.85(10) 2481.67 0.041 2301.49(9) 2301.49 0.193
5 1581.07(6) 1590.74 0.147 2200.47(6) 2391.04 0.021 1795.74(7) 1993.76 0.041 1640.51(6) 1640.51 0.194
6 2332.34(9) 2337.31 0.126 2682.07(9) 2853.62 0.024 2277.06(11) 2634.83 0.052 2273.02(9) 2273.02 0.258
7 2235.82(10) 2241.29 0.173 2839.69(10) 3187.86 0.023 2282.22(10) 2621.99 0.062 2277.89(9) 2277.89 0.324
8 2278.07(10) 2278.46 0.489 3851.23(11) 4165.87 0.034 2679.35(11) 3025.8 0.106 2589.22(10) 2589.22 0.729
9 1456.72(5) 1472.36 0.892 3244.52(5) 3406.28 0.040 1882.34(6) 2296.27 0.108 2076.29(5) 2076.29 0.789
10 1384.64(7) 1385.50 0.105 1824.73(7) 1959.42 0.015 1431.66(8) 1676.14 0.032 1741.69(7) 1741.69 0.137
11 1828.91(10) 1834.93 0.333 2650.65(11) 2961.42 0.033 1968.38(11) 2411.53 0.101 2232.83(10) 2232.83 0.660
12 1983.82(9) 1984.86 0.229 2262.91(9) 2520.46 0.027 2143.30(10) 2452.37 0.070 2395.32(9) 2395.32 0.350
13 1272.14(10) 1284.08 0.206 1898.53(11) 2239.12 0.028 1405.16(12) 1581.06 0.078 1283.32(10) 1283.32 0.414
14 774.88(4) 778.51 0.781 1799.80(4) 1828.01 0.034 964.79(5) 1178.41 0.109 1317.88(4) 1317.88 0.742
15 873.48(4) 874.02 2.335 2172.81(4) 2215.49 0.058 1216.63(4) 1404.89 0.204 1257.48(4) 1257.48 1.949
16 1717.62(7) 1718.60 5.082 4441.41(7) 4550.52 0.089 2001.45(8) 2411.80 0.388 2063.72(7) 2063.72 3.716

84
CAPÍTULO 3. ANÁLISIS EXPERIMENTAL 85

A partir de los resultados alcanzados se puede concluir que:

Las mejores soluciones se encontraron con la heurística SaveParall, mientras que


las soluciones de mayor costo fueron encontrados con las heurísticas Random,
Sweep y NN.

Las soluciones más costosas obtenidas con las heurísticas Sweep y NN son supe-
radas por los resultados de la heurística Random, por lo que se puede apreciar que
esta heurística obtiene los peores resultados.

Las heurísticas SaveSeq y MJ, tienen un comportamiento bastante similar a la heu-


rística SaveParall.

Las heurísticas CMT y Kilby tienen un comportamiento regular, pues no quedan


entre los mejores resultados pero tampoco entre los peores.

En la heurística Kilby coinciden los valores de mínimo y promedio para todos los
problemas, debido a que es un algoritmo determinista.

La heurística SaveParall también es determinista, pero en esta nueva versión de la


biblioteca al incluirse el paso de post-optimización utilizando el operador 3-opt deja
de serlo. Sin embargo, en los problemas 3 y 4 se puede apreciar el mismo valor en
el mínimo como en el promedio debido a que le paso de post-optimización no logra
realizar ninguna mejora.

La heurística SaveParall es la que obtiene los mejores resultados, este algoritmo


también es el que mayor tiempo emplea en su ejecución.

Se puede observar que Random obtiene los peores resultados en las soluciones, pero
el menor tiempo de ejecución en todos los casos.

En cuanto a la factibilidad de la cantidad de rutas obtenidas se observa que las


heurísticas SaveSeq y Kilby son factibles en todos los problemas, mientras que CMT
resulta no factible en la mayorís de los casos.

Las gráficas que se presentas en la Figura 3.1 reafirman las conclusiones mencionadas
anteriormente.
CAPÍTULO 3. ANÁLISIS EXPERIMENTAL 86

Figura 3.1: Gráficas del comportamiento de las heurísticas en costo y tiempo en la variante
CVRP.

3.3.1.2. Análisis de los resultados para la variante HFVRP

En la Tabla 3.7 y la Tabla 3.8 se resumen los resultados obtenidos sobre los 16 pro-
blemas de la variante HFVRP [17]. Para esta variante se realizan experimentos por cada
método de ordenamiento de la lista de capacidades. Después de aplicar la prueba estadís-
tica no paramétrica de Friedman [89] se decide escoger el método que obtiene el mejor
ranking que es Descending. Es importante detallar que en esta variante específicamente
para la Heurística de Kilby los resultados obtenidos con el método de ordenamiento Des-
cending son desfavorables debido a que las rutas obtenidas no respetan las restricciones
del problema. Por este motivo se decide utilizar para esta heurística el método Ascending.
CAPÍTULO 3. ANÁLISIS EXPERIMENTAL
Tabla 3.7: Resumen de los resultados en las 16 instancias HFVRP (I).

Random NN SaveSeq SaveParall


Problema
Min Prom Tiempo (ms) Min Prom Tiempo (ms) Min Prom Tiempo (ms) Min Prom Tiempo (ms)

1 1706.02(4) 2100.97 0.010 1074.28(4) 1264.59 0.023 749.01(4) 838.53 0.087 964.19(5) 994.40 0.148
2 2278.32(6) 2543.03 0.006 1576.07(7) 1788.26 0.015 971.85(6) 1041.01 0.023 1118.36(6) 1134.24 1.324
3 1650.21(4) 1995.59 0.000 1137.92(5) 1480.36 0.009 761.89(4) 824.81 0.014 952.01(5) 969.37 0.720
4 3621.25(10) 3912.88 0.001 2432.99(9) 2669.16 0.026 1655.65(9) 1750.06 0.044 2074.69(10) 2104.72 1.301
5 3136.34(6) 3435.72 0.001 2202.24(6) 2360.37 0.025 1258.21(6) 1376.25 0.039 1458.45(7) 1471.83 2.363
6 3853.11(9) 4220.52 0.001 2744.63(9) 3163.84 0.030 1664.76(8) 1771.39 0.051 2091.47(10) 2118.43 2.396
7 3952.76(10) 4493.18 0.001 2821.08(10) 3162.72 0.039 1707.83(9) 1813.53 0.080 1908.51(10) 1926.67 1.804
8 4859.50(11) 5289.52 0.001 3467.62(10) 3793.91 0.069 2065.18(10) 2208.51 0.102 2245.78(11) 2262.42 14.159
9 4292.43(5) 4611.01 0.001 2959.57(5) 3184.79 0.074 1311.36(5) 1408.14 0.109 1638.02(5) 1652.24 14.802
10 2755.61(6) 3160.86 0.000 1533.00(6) 1705.29 0.019 946.83(6) 1058.14 0.032 1431.72(7) 1476.06 1.022
11 4416.89(11) 4822.22 0.001 2583.38(11) 3009.27 0.074 1633.40(10) 1830.48 0.097 1759.99(11) 1794.35 8.966
12 4115.35(9) 4562.80 0.001 2368.50(10) 2671.49 0.056 1649.32(8) 1814.55 0.068 2140.19(10) 2252.59 8.221
13 2388.85(11) 2713.31 0.001 1606.16(10) 1770.53 0.044 1095.80(10) 1152.02 0.087 1207.35(11) 1219.52 11.755
14 2377.95(4) 2607.03 0.001 1254.16(4) 1349.34 0.058 701.04(4) 747.88 0.086 706.65(4) 713.23 9.809
15 3178.96(4) 3454.52 0.002 1502.22(4) 1618.59 0.125 812.18(4) 855.17 0.172 800.59(4) 805.62 28.696
16 6237.68(7) 6961.71 0.003 2065.93(7) 2250.55 0.279 1315.12(7) 1613.03 0.397 1583.66(7) 1587.49 181.975

87
CAPÍTULO 3. ANÁLISIS EXPERIMENTAL
Tabla 3.8: Resumen de los resultados en las 16 instancias HFVRP (II).

MJ Sweep CMT Kilby


Problema
Min Prom Tiempo (ms) Min Prom Tiempo (ms) Min Prom Tiempo (ms) Min Prom Tiempo (ms)

1 972.64(5) 972.64 0.034 1554.93(5) 1710.49 0.010 1017.37(5) 1204.41 0.023 1161.90(5) 1161.90 0.055
2 1225.50(6) 1226.05 0.058 1846.76(7) 1990.37 0.012 1192.80(6) 1446.25 0.031 1422.48(6) 1422.48 0.102
3 1059.21(5) 1059.21 0.029 1222.67(5) 1422.97 0.011 945.36(5) 1194.75 0.017 1100.33(5) 1100.33 0.064
4 2072.61(9) 2074.06 0.088 2579.18(9) 2785.61 0.029 1940.35(10) 2398.73 0.047 2128.76(9) 2128.76 0.176
5 1407.72(7) 1410.02 0.118 2335.68(7) 2450.45 0.029 1743.09(7) 2012.70 0.044 1830.10(7) 1830.10 0.200
6 1976.21(9) 1982.45 0.136 2618.57(9) 2878.74 0.035 2085.46(10) 2442.13 0.054 2452.85(9) 2452.85 0.261
7 2060.54(9) 2068.34 0.145 2834.48(10) 3144.99 0.041 2217.83(10) 2452.76 0.073 2404.93(9) 2404.93 0.319
8 2367.72(10) 2367.72 0.482 3790.72(10) 4047.32 0.042 2599.40(11) 2995.79 0.114 2698.50(10) 2698.50 0.609
9 1547.64(5) 1547.64 0.652 3214.81(5) 3427.88 0.042 1935.96(5) 2270.79 0.117 2062.36(5) 2062.36 0.816
10 1345.44(7) 1348.82 0.073 1702.24(7) 1909.33 0.017 1367.09(7) 1668.53 0.038 1632.73(7) 1632.73 0.136
11 1928.32(10) 1932.88 0.290 2559.10(11) 2850.23 0.039 1888.37(11) 2298.85 0.101 2314.07(10) 2314.07 0.709
12 2274.46(9) 2288.84 0.155 2321.48(9) 2584.52 0.031 2086.20(9) 2379.33 0.075 2331.41(9) 2331.41 0.319
13 1243.30(10) 1245.40 0.204 1923.38(11) 2136.49 0.034 1347.38(11) 1528.49 0.080 1242.62(10) 1242.62 0.395
14 711.18(4) 713.97 0.755 1769.14(4) 1834.28 0.041 978.23(5) 1141.91 0.111 1372.15(4) 1372.15 0.782
15 892.59(4) 895.66 2.040 2161.58(4) 2210.87 0.070 1246.05(4) 1444.07 0.211 1343.15(4) 1343.15 1.835
16 1610.23(7) 1634.59 4.555 4412.69(8) 4611.27 0.109 1980.88(7) 2329.17 0.391 2534.05(7) 2534.05 4.482

88
CAPÍTULO 3. ANÁLISIS EXPERIMENTAL 89

A partir de los resultados alcanzados se puede concluir que:

De forma absoluta las mejores soluciones se encontraron con la heurística SaveSeq,


mientras que las soluciones de mayor costo fueron encontrados con los algoritmos
Random, Sweep y NN.

Las heurísticas SaveParall y MJ, obtienen resultados bastante similares a la heurís-


tica SaveSeq.

Las heurísticas CMT y Kilby no obtienen los mejores resultados pero tampoco los
perores, por lo cual su comportamiento es regular.

En la heurística Kilby coinciden los valores de mínimo y promedio para todos los
problemas, debido a que es un algoritmo determinista.

Las soluciones más costosas obtenidas con las heurísticas Sweep y NN superan los
valores de la heurística Random, por lo que se puede afirmar que esta heurística
obtiene los peores resultados.

La heurística SaveParall también es determinista, pero en esta nueva versión de la


biblioteca al incluirse el paso de post-optimización utilizando el operador 3-opt las
soluciones pueden variar. En consecuencia estos valores no coinciden debido a que
el paso de post-optimización fue efectivo en todos los casos.

La heurística SaveParall es la que obtiene los mejores resultados, este algoritmo


también es el que mayor tiempo emplea en su ejecución.

Se puede observar que Random obtiene los peores resultados en las soluciones, pero
el menor tiempo de ejecución en todos los casos.

En cuanto a la factibilidad de la cantidad de rutas obtenidas se observa que las


heurísticas SaveSeq, MJ y Kilby son factibles en casi todos los problemas.

Las gráficas que se presentas en la Figura 3.2 reafirman las conclusiones mencionadas
anteriormente.
CAPÍTULO 3. ANÁLISIS EXPERIMENTAL 90

Figura 3.2: Gráficas del comportamiento de las heurísticas en costo y tiempo en la variante
HFVRP.

3.3.1.3. Análisis de los resultados para la variante MDVRP

En la Tabla 3.9 y la Tabla 3.10 se resumen los resultados obtenidos sobre los 22
problemas de la variante MDVRP [16] seleccionados de la literatura. Para esta variante
se realizan experimentos por cada método de asignación. Después de aplicar la prueba
estadística no paramétrica de Friedman [89] se decide escoger el método que obtiene el
mejor ranking que es BestNearest.
CAPÍTULO 3. ANÁLISIS EXPERIMENTAL
Tabla 3.9: Resumen de los resultados en las 22 instancias MDVRP (I).

Random NN SaveSeq SaveParall


Problema
Min Prom Tiempo (ms) Min Prom Tiempo (ms) Min Prom Tiempo (ms) Min Prom Tiempo (ms)

1 1359.65(12) 1450.00 0.031 1074.69(12) 1159.19 0.034 1073.50(12) 1106.53 0.082 1067.69(13) 1067.69 0.071
2 1096.76(7) 1221.69 0.002 819.24(7) 877.54 0.005 778.45(7) 793.52 0.012 766.62(7) 780.66 0.031
3 1498.54(13) 1635.41 0.003 1098.54(13) 1161.42 0.012 1033.67(13) 1078.19 0.028 1016.46(13) 1021.91 0.070
4 2898.77(17) 3111.94 0.008 1775.75(17) 1848.73 0.056 1435.55(15) 1520.48 0.117 1413.64(17) 1421.61 1.566
5 2671.46(9) 2939.69 0.004 1372.94(9) 1441.45 0.068 1131.26(9) 1192.42 0.098 1039.69(9) 1048.23 1.582
6 2653.43(17) 2826.45 0.004 1729.00(16) 1836.31 0.038 1564.57(16) 1629.62 0.081 1577.30(17) 1583.64 0.579
7 2481.83(17) 2629.85 0.005 1649.11(17) 1733.46 0.028 1551.60(16) 1639.08 0.061 1476.73(16) 1489.25 0.254
8 21179.80(27) 22282.58 0.030 8990.58(27) 9423.70 0.714 7055.26(25) 7337.57 1.280 6295.90(26) 6322.93 57.850
9 18190.75(27) 18963.42 0.029 9483.87(26) 9915.92 0.479 7849.59(26) 8229.21 0.886 7376.42(27) 7404.83 20.426
10 17305.95(28) 17956.37 0.028 8978.69(27) 9470.90 0.336 8228.06(27) 8595.35 0.664 7591.73(27) 7646.70 9.273
11 15464.74(28) 16293.98 0.025 9637.86(28) 9933.37 0.269 8161.35(26) 8458.53 0.559 7752.27(28) 7796.97 4.345
12 4679.72(8) 4968.18 0.004 2801.87(8) 2863.93 0.031 2368.71(8) 2484.66 0.056 2370.01(8) 2407.63 0.667
13 10505.63(16) 10984.88 0.012 6590.21(16) 6761.81 0.100 5874.27(16) 6065.25 0.182 5880.55(16) 5945.82 1.357
14 16359.13(24) 17027.92 0.026 10481.40(24) 10683.07 0.194 9270.58(24) 9524.33 0.386 9367.07(24) 9450.23 2.127
15 25144.85(36) 26107.88 0.052 16600.83(36) 16831.17 0.415 14606.39(36) 14919.69 0.787 14826.82(36) 14881.08 3.437
16 1698.65(4) 1882.10 0.002 1188.88(4) 1257.85 0.005 1053.92(4) 1087.37 0.011 1078.67(4) 1090.90 0.023
17 3767.33(8) 4085.63 0.004 2305.25(7) 2426.12 0.027 2021.50(7) 2112.01 0.054 2022.48(8) 2040.85 0.282
18 6356.14(11) 6697.03 0.009 3362.85(11) 3507.21 0.072 2844.22(11) 2953.86 0.142 2870.67(12) 2898.62 0.946

91
19 7700.81(15) 8086.99 0.016 3916.63(16) 4099.04 0.168 3140.98(15) 3329.21 0.333 3088.21(16) 3101.24 3.683
20 10123.61(22) 10637.15 0.025 4975.09(22) 5239.70 0.299 4072.10(20) 4344.73 0.559 3883.75(22) 3903.72 6.959
21 11439.70(24) 12058.72 0.036 6017.01(24) 6321.05 0.580 4589.81(22) 4822.46 0.943 4239.16(23) 4271.46 14.262
22 2522.16(6) 2782.11 0.002 1797.96(6) 1956.58 0.010 1672.10(6) 1696.23 0.022 1641.14(6) 1662.70 0.041
CAPÍTULO 3. ANÁLISIS EXPERIMENTAL
Tabla 3.10: Resumen de los resultados en las 22 instancias MDVRP (II).

MJ Sweep CMT Kilby


Problema
Min Prom Tiempo (ms) Min Prom Tiempo (ms) Min Prom Tiempo (ms) Min Prom Tiempo (ms)

1 1058.55(12) 1058.55 0.057 1261.07(12) 1321.70 0.025 1208.48(14) 1336.94 0.052 1409.03(16) 1409.03 0.047
2 756.62(7) 768.29 0.038 990.43(7) 1050.34 0.004 826.31(7) 925.95 0.024 894.47(8) 894.47 0.056
3 1035.91(13) 1045.90 0.0830 1387.64(13) 1460.87 0.009 1209.87(14) 1300.69 0.034 1172.92(15) 1172.92 0.095
4 1482.24(15) 1483.14 0.255 2105.18(17) 2216.33 0.030 1712.94(17) 1877.13 0.099 1631.39(16) 1631.39 0.499
5 1134.23(9) 1155.23 0.627 1821.25(9) 1913.64 0.031 1376.53(10) 1556.14 0.123 1373.68(10) 1373.68 0.629
6 1599.41(16) 1605.26 0.237 2148.13(18) 2275.20 0.022 1752.95(18) 1977.63 0.071 1830.56(18) 1830.56 0.299
7 1521.23(16) 1531.29 0.150 1938.48(17) 2031.60 0.026 1754.57(19) 1924.95 0.068 1679.76(16) 1679.76 0.203
8 6720.59(25) 6786.07 5.531 11472.70(27) 11771.97 0.319 8530.78(29) 9074.13 1.173 9204.21(28) 9204.21 13.001
9 7705.15(26) 7738.59 3.898 11852.09(26) 12285.55 0.235 8654.70(28) 9617.17 0.823 10819.00(36) 10819.00 7.128
10 8010.74(27) 8054.67 3.190 11953.03(27) 12465.45 0.163 9317.34(31) 10097.25 0.692 9539.40(32) 9539.40 3.979
11 8298.38(27) 8331.53 2.552 11444.50(28) 8331.53 0.155 8974.03(30) 9763.84 0.535 9401.91(30) 9401.91 3.198
12 2382.62(8) 2404.11 0.315 4080.85(8) 4199.66 0.024 2793.28(9) 3164.68 0.067 2582.67(10) 2582.67 0.262
13 5866.57(16) 5953.77 1.044 8498.26(16) 8725.40 0.059 6844.18(18) 7592.96 0.229 6318.53(20) 6318.53 0.988
14 9376.80(24) 9452.68 2.224 12958.20(24) 13219.45 0.095 10550.93(29) 12097.59 0.467 9985.50(30) 9985.50 2.031
15 14776.60(36) 14878.14 4.820 19696.21(36) 20130.69 0.166 17654.63(44) 19074.50 0.935 15950.83(45) 15950.83 4.174
16 1144.20(4) 1156.79 0.040 1556.81(4) 1661.15 0.006 1243.02(4) 1390.14 0.032 1281.60(4) 1281.60 0.115
17 2135.23(7) 2151.34 0.349 2841.27(8) 2993.91 0.025 2562.50(8) 2751.82 0.111 2225.11(8) 2225.11 0.471
18 2916.78(11) 2937.03 1.050 4820.47(11) 4980.00 0.054 3743.21(12) 4059.68 0.218 3517.14(12) 3517.14 1.072

92
19 3093.96(15) 3116.40 2.270 5682.61(16) 5967.09 0.104 4101.71(18) 4583.10 0.393 3921.19(16) 3921.19 2.412
20 4093.30(20) 4134.55 3.815 7534.64(22) 7767.44 0.155 5134.33(25) 5655.22 0.623 5120.36(20) 5120.36 3.651
21 4498.81(23) 4516.24 6.778 8647.97(24) 8789.03 0.213 6060.50(27) 6522.60 0.928 5997.86(24) 5997.86 6.616
22 1648.54(6) 1671.03 0.086 2319.44(6) 2417.89 0.010 1933.66(6) 2068.13 0.063 1803.46(6) 1803.46 0.244
CAPÍTULO 3. ANÁLISIS EXPERIMENTAL 93

A partir de los resultados alcanzados se puede concluir que:

Las heurísticas SaveParall, SaveSeq y MJ, tienen un comportamiento bastante si-


milar en cuanto a las soluciones, al igual que Kilby, CMT, NN y Sweep.

Las soluciones más costosas son obtenidas con la heurística Random.

En la heurística Kilby coinciden los valores de mínimo y promedio para todos los
problemas, debido a que es un algoritmo determinista.

La heurística SaveParall también es determinista, pero en esta nueva versión de


la biblioteca al incluirse el paso de post-optimización utilizando el operador 3-opt
las soluciones pueden variar. En consecuencia, estos valores solo coinciden en el
problema 1, donde el paso de post-optimización no logró mejorar la solución.

La heurística SaveParall es el que mayor tiempo emplea en su ejecución, con ex-


cepción de los problemas 1, 2, 3, 16, 17 y 22, donde su comprotamiento es más
regular al resto de las heurísticas.

Se puede apreciar que las heurísticas SaveSeq, CMT, Sweep, NN y Random el tiem-
po de ejecución es bastante similar en todos los casos.

En cuanto a la factibilidad de la cantidad de rutas obtenidas se observa que las


heurísticas MJ y Kilby son factibles en casi todos los problemas.

Las gráficas que se presentas en la Figura 3.3 reafirman las conclusiones mencionadas
anteriormente.
CAPÍTULO 3. ANÁLISIS EXPERIMENTAL 94

Figura 3.3: Gráficas del comportamiento de las heurísticas en costo y tiempo en la variante
MDVRP.

3.3.1.4. Análisis de los resultados para la variante TTRP

En la Tabla 3.11 y la Tabla 3.12 se resumen los resultados obtenidos sobre los 21
problemas de la variante TTRP seleccionados de la literatura.
CAPÍTULO 3. ANÁLISIS EXPERIMENTAL
Tabla 3.11: Resumen de los resultados en las 21 instancias TTRP (I).

Random NN SaveSeq SaveParall


Problema
Min Prom Tiempo (ms) Min Prom Tiempo (ms) Min Prom Tiempo (ms) Min Prom Tiempo (ms)

1 1709.87(4,0,1) 1894.74 0.011 1103.05(3,0,3) 1224.92 0.029 701.47(2,1,2) 856.82 0.061 765.25(3,1,1) 765.25 0.110
2 1618.76(1,0,7) 1897.76 0.003 1219.56(3,0,3) 1322.61 0.020 836.30(4,0,0) 956.54 0.032 829.25(5,0,0) 837.87 0.108
3 1554.02(1,0,7) 1886.31 0.001 1170.05(1,0,7) 1293.47 0.019 873.98(3,0,2) 1013.00 0.033 747.44(3,0,3) 750.04 0.111
4 2709.22(5,1,3) 2956.76 0.002 1837.72(5,1,3) 2005.71 0.056 1051.95(6,1,0) 1166.38 0.095 1085.60(6,1,0) 1104.70 0.416
5 2589.23(3,0,9) 3010.18 0.002 1943.96(5,0,5) 2112.00 0.056 1236.89(6,0,2) 1378.21 0.096 1146.70(7,0,1) 1177.42 0.453
6 2638.75(2,0,11) 2898.24 0.002 1755.61(1,0,14) 1999.82 0.056 1309.03(5,0,4) 1441.50 0.099 1111.45(4,0,7) 1113.61 0.649
7 3557.41(3,0,7) 3812.83 0.004 1871.03(4,2,1) 2046.12 0.121 1111.78(5,1,0) 1284.31 0.181 970.93(5,2,0) 974.04 0.764
8 3577.58(5,0,3) 3860.47 0.003 1995.75(4,0,4) 2202.14 0.121 1286.10(6,0,1) 1424.82 0.184 1111.50(6,0,1) 1114.70 0.812
9 3433.79(2,0,7) 3832.93 0.003 1791.7(1,0,9) 8 2032.94 0.123 1288.83(3,0,5) 1498.26 0.187 1138.12(4,0,4) 1142.86 0.878
10 5352.82(8,1,2) 5614.22 0.007 2999.53(8,0,3) 3229.64 0.382 1533.42(9,0,0) 1726.24 0.561 1219.86(9,1,0) 1231.11 3.079
11 5263.35(4,0,10) 5603.66 0.006 2925.85(5,0,8) 3188.76 0.385 1692.49(9,0,1) 1805.19 0.566 1537.53(10,0,0) 1541.30 3.089
12 5156.47(4,0,9) 5503.10 0.005 2932.45(1,0,15) 3262.81 0.386 1725.87(7,0,4) 1892.65 0.577 1450.71(9,0,2) 1453.11 3.584
13 6875.99(12,0,3) 7312.65 0.010 4221.62(11,0,4) 4448.82 0.895 1867.75(11,2,1) 2084.89 1.256 1591.48(13,1,0) 1593.07 8.874
14 6491.30(8,7,2) 7322.07 0.010 4288.10(9,1,7) 4626.68 0.894 2108.32(12,0,1) 2298.26 1.256 1809.79(14,0,0) 1833.58 9.477
15 6919.45(4,0,17) 7270.44 0.008 3968.40(4,0,17) 4348.49 0.874 2238.38(9,0,7) 2396.36 1.242 1912.90(11,0,5) 1916.01 10.192
16 6533.64(4,0,3) 7250.04 0.005 1627.55(4,0,3) 1818.62 0.193 1370.83(6,0,0) 1656.49 0.288 1345.28(6,0,0) 1359.96 1.614
17 6596.65(4,0,4) 7209.34 0.005 1723.84(4,0,3) 1869.30 0.190 1553.70(5,0,2) 1812.04 0.291 1406.63(6,0,0) 1416.22 1.709
18 6599.92(1,0,8) 7116.93 0.004 1759.52(1,0,8) 1938.93 0.192 1588.87(5,0,1) 1913.95 0.296 1552.36(6,0,0) 1566.85 1.844
19 4036.67(6,1,2) 4533.28 0.003 1356.36(4,3,2) 1476.99 0.118 1063.75(3,3,3) 1187.75 0.165 966.21(6,2,1) 968.61 0.915
20 4147.19(3,0,8) 4531.56 0.003 1598.95(6,0,3) 1741.04 0.118 1211.83(4,0,6) 1327.36 0.166 1225.69(7,0,1) 1236.09 0.964

95
21 4156.00(3,0,8) 4463.89 0.004 1616.26(3,0,8) 1780.48 0.118 1261.95(2,0,9) 1386.25 0.165 1157.17(4,0,7) 1172.67 1.126
CAPÍTULO 3. ANÁLISIS EXPERIMENTAL
Tabla 3.12: Resumen de los resultados en las 21 instancias TTRP (II).

MJ Sweep CMT Kilby


Problema
Min Prom Tiempo (ms) Min Prom Tiempo (ms) Min Prom Tiempo (ms) Min Prom Tiempo (ms)

1 719.71(2,0,3) 723.77 0.131 1327.91(2,1,3) 1426.58 0.019 857.39(5,0,1) 984.89 0.048 860.38(3,0,2) 860.38 0.206
2 923.73(2,0,4) 923.73 0.115 1478.76(3,0,3) 1574.58 0.015 895.63(0,0,9) 1044.32 0.034 941.40(3,0,2) 941.40 0.186
3 836.28(2,0,4) 839.10 0.114 1415.30(1,0,7) 1631.48 0.024 834.68(1,0,7) 1037.98 0.032 928.14(3,0,2) 928.14 0.181
4 1304.35(7,0,7) 1305.01 0.466 2139.50(6,0,3) 2209.42 0.053 1213.68(4,4,3) 1424.06 0.086 1397.19(5,0,4) 1397.19 0.618
5 1187.36(3,0,8) 1216.91 0.356 2034.78(2,1,10) 2206.80 0.052 1305.99(5,0,7) 1492.35 0.091 1420.61(5,0,4) 1420.61 0.581
6 1195.58(1,0,12) 1197.68 0.231 2058.92(1,0,13) 2231.44 0.054 1336.20(6,0,4) 1538.30 0.096 1430.50(5,0,4) 1430.50 0.569
7 1136.83(5,0,2) 1188.32 1.424 2331.24(4,2,1) 2438.89 0.069 1405.90(6,0,2) 1595.13 0.168 1297.51(2,2,4) 1297.51 1.422
8 1282.31(3,0,5) 1283.93 1.220 2396.00(4,0,4) 2498.61 0.069 1406.85(5,0,3) 1666.29 0.175 1705.40(3,1,4) 1705.40 1.404
9 1088.92(0,0,9) 1089.41 1.064 2357.34(2,0,7) 2478.47 0.070 1476.40(2,0,9) 1682.42 0.188 1877.56(4,0,4) 1877.56 1.476
10 1600.83(5,1,4) 1642.10 4.517 3267.59(9,0,1) 3393.44 0.159 1861.56(7,1,4) 2072.72 0.464 1991.23(5,1,6) 1991.23 5.896
11 1594.31(5,0,6) 1601.31 4.056 3285.94(7,0,5) 3477.15 0.159 1987.43(9,0,4) 2159.20 0.498 2062.64(6,0,6) 2062.64 5.814
12 1677.59(2,0,11) 1679.16 3.086 3234.88(4,0,10) 3400.43 0.160 1941.17(4,0,12) 2156.01 0.534 1888.67(6,0,6) 1888.67 5.729
13 1965.16(9,1,5) 1991.37 9.885 4592.19(11,1,3) 4699.09 0.288 2292.71(14,1,3) 2524.77 1.115 2529.25(7,8,2) 2529.25 16.832
14 2095.72(10,0,4) 2136.11 9.965 4495.76(6,0,13) 4612.41 0.286 2300.68(8,0,12) 2632.05 1.210 2429.28(9,0,8) 2429.28 16.161
15 1943.26(3,1,15) 1953.32 6.943 4347.46(4,0,16) 4505.49 0.277 2429.92(9,0,12) 2635.79 1.354 2494.93(9,0,8) 2494.93 15.31
16 1445.83(5,0,1) 1456.72 3.668 2693.06(3,1,3) 2972.43 0.090 1477.64(5,0,3) 1999.89 0.266 2149.72(4,0,3) 2149.72 2.653
17 1793.10(3,0,5) 1806 3.443 2764.05(3,0,5) 3150.53 0.091 1685.38(4,0,4) 2148.75 0.267 2358.55(4,0,3) 2358.55 2.658
18 1888.70(2,0,6) 1895.52 2.599 2873.26(2,0,7) 3026.95 0.090 1848.71(4,0,6) 2262.39 0.267 2151.86(4,0,3) 2151.86 2.850
19 990.54(3,2,4) 995.54 1.186 2369.87(4,3,1) 2486.48 0.068 1200.50(8,0,1) 1445.54 0.168 1470.49(3,2,5) 1470.49 1.534
20 1163.44(3,0,7 1163.44 0.950 2527.40(2,1,9) 2634.14 0.068 1407.80(7,0,3) 1550.56 0.175 1699.69(5,0,5) 1699.69 1.478

96
21 1244.60(2,0,9) 1273.09 0.881 2521.97(3,0,8) 2656.86 0.067 1315.56(1,1,12) 1596.01 0.180 1648.67(5,0,5) 1648.67 1.618
CAPÍTULO 3. ANÁLISIS EXPERIMENTAL 97

A partir de los resultados alcanzados se puede concluir que:

Se puede observar que la heurística Random obtiene los peores resultados.

Las mejores soluciones se encontraron con la heurística SaveParall.

Las heurísticas CMT y Kilby tienen un comportamiento bastante similar.

En la heurística Kilby coinciden los valores de mínimo y promedio para todos los
problemas, debido a que es un algoritmo determinista.

La heurística SaveParall también es determinista, pero en esta nueva versión de


la biblioteca al incluirse el paso de post-optimización utilizando el operador 3-opt
las soluciones pueden variar. En consecuencia, estos valores solo coinciden en el
problemas 1, donde el paso de post-optimización no logró mejorar la solución.

La heurística Kilby es la que mayor tiempo emplea en su ejecución.

Se observa que Random obtiene el menor tiempo de ejecución en todos los casos.

En cuanto a la factibilidad de la cantidad de rutas obtenidas se observa que las


heurísticas SaveSeq, SaveParall y Kilby son factibles en casi todos los problemas.

Las gráficas que se presentas en la Figura 3.4 reafirman las conclusiones mencionadas
anteriormente.

Figura 3.4: Gráficas del comportamiento de las heurísticas en costo y tiempo en la variante
TTRP.
CAPÍTULO 3. ANÁLISIS EXPERIMENTAL 98

3.3.1.5. Análisis estadístico

Aunque las gráficas confirman los resultados anteriores, para mayor certeza se decide
utilizar la prueba estadística de Friedman [89]. Esta prueba no paramétrica permite com-
probar si los resultados obtenidos con los algoritmos heurísticos presentan diferencias
significativas. Se utiliza el costo promedio de los problemas como medida para comparar
el rendimiento de los ocho algoritmos heurísticos.

Tabla 3.13: Rankings de las heurísticas para las cuatro variantes VRP.

Rankings
Algoritmos CVRP HFVRP MDVRP TTRP

Random 8.00 8.00 8.00 8.00


NN 5.76 6.12 4.90 5.76
SaveSeq 3.14 1.31 2.93 3.14
SaveParall 1.14 2.12 1.40 1.14
MJ 1.90 2.62 1.71 1.90
Sweep 6.95 6.68 6.78 6.95
CMT 4.76 4.81 5.86 4.76
Kilby 4.33 4.31 4.40 4.33

En la Tabla 3.13 se puede apreciar que para las variantes CVRP, MDVRP y TTRP
la heurística SaveParall se posiciona como el mejor algoritmo con un p-value que su-
giere la existencia de diferencias significativas entre los restantes algoritmos heurísticos
considerados. Sin embargo, para la variante HFVRP esta posición la obtiene SaveSeq.
De manera general, para las variantes CVRP, MDVRP y TTRP, se puede concluir que
todos los procedimientos rechazan la hipótesis de igualdad con el resto de los algorit-
mos utilizados en este estudio, excepto para las heurísticas SaveSeq y MJ. En el caso de
HFVRP la heurística con mejor rendimiento es SaveSeq y no se rechaza la hipótesis de
igualdad para las heurísticas SaveParall y MJ. Por lo tanto, se puede concluir que Sa-
veParall y SaveSeq son las heurísticas con mejor rendimiento en comparación con los
algoritmos Kilby, CMT, NN, Sweep y Random. En el Anexo B se muestran las tablas co-
rrespondientes a los resultados de los procedimientos Rom [92], Holm [93], Finner [94] y
Li [95] en la comparación de las heurísticas para las cuatro variantes de planificación de
rutas de vehículos.
Respecto al tiempo para mayor certeza de las afirmaciones anteriores se aplica igual-
mente la prueba estadística no paramétrica de Friedman [89]. Se utiliza el tiempo prome-
CAPÍTULO 3. ANÁLISIS EXPERIMENTAL 99

dio de los problemas como medida para comparar el rendimiento de las ocho heurísticas.
Como resultado queda Random como la heurística que menos tiempo demora en su eje-
cución para las cuatro variantes de planificación de rutas de vehículos con diferencias
significativas con las restantes heurísticas.

3.3.2. Comparación con los resultados de BHCTTRP

En la Tabla 3.14 se resumen los resultados obtenidos de aplicar las cuatro heurísticas
implementadas en la BHCTTRP sobre las 21 instancias TTRP. En cada problema se marca
en negrita la mejor solución obtenida de las ocho heurísticas. En los valores de costo y
tiempo de ejecución se consideran dos cifras significativas.
A partir de los resultados alcanzados y aplicando la prueba estadística no paramétrica
de Friedman [89] se obtiene que la heurística SaveParall es la que de mejores resultados
para la variante TTRP. Mientras que la heurística Sweep obtiene las soluciones más cos-
tosas. Los resultados alcanzados con SaveParall coinciden en el mínimo y en el promedio
debido a que esta heurística es determinísta y no contempla el paso de post-optimización.
CAPÍTULO 3. ANÁLISIS EXPERIMENTAL
Tabla 3.14: Resumen de los resultados en las 21 instancias TTRP en BHCTTRP [1].

SaveSeq SaveParall Sweep MJ


Problema
Min Prom Tiempo (ms) Min Prom Tiempo (ms) Min Prom Tiempo (ms) Min Prom Tiempo (ms)

1 712.77 812.70 10.00 701.84 701.84 10.00 1478.05 1588.32 10.00 685.35 775.85 10.00
2 878.63 965.94 0.00 869.25 869.25 10.00 1571.37 1765.17 0.00 670.79 804.06 10.00
3 907.87 1027.35 10.00 809.02 809.02 10.00 1510.91 1654.77 0.00 700.84 837.18 10.00
4 1015.39 1122.06 10.00 896.63 896.63 30.00 1983.65 2161.28 10.00 995.82 1184.68 10.00
5 1192.74 1347.49 10.00 1014.70 1014.70 30.00 2001.36 2251.95 0.00 1039.90 1203.99 10.00
6 1294.27 1444.22 10.00 1127.25 1127.25 30.00 2024.03 2367.31 0.00 1041.55 1271.07 10.00
7 1086.09 1193.76 10.00 978.28 978.28 90.00 2316.04 2537.78 10.00 1035.28 1187.57 30.00
8 1239.18 1403.22 0.00 1114.42 1114.42 90.00 2539.55 2666.97 10.00 1100.80 1224.40 20.00
9 1331.99 1470.53 10.00 1199.90 1199.90 90.00 2495.26 2671.91 10.00 1071.79 1236.15 20.00
10 1480.95 1593.59 10.00 1238.13 1238.13 430.00 3538.26 3726.49 10.00 1362.98 1531.78 60.00
11 1634.83 1806.21 10.00 1452.74 1452.74 420.00 3543.95 3639.75 10.00 1509.65 1678.82 50.00
12 1706.63 1922.89 10.00 1605.17 1605.17 430.00 3461.65 3735.27 10.00 1490.86 1636.88 50.00
13 1788.78 1968.06 10.00 1508.38 1508.38 1280.00 4528.62 4846.66 10.00 1725.87 1967.90 100.00
14 2134.29 2305.28 10.00 1663.70 1663.70 1280.00 4768.68 4986.80 10.00 1943.71 2130.99 100.00
15 2086.41 2346.04 10.00 1870.61 1870.61 1290.00 4594.79 4903.75 10.00 1811.67 2050.99 80.00
16 1309.74 1538.87 10.00 1257.82 1257.82 180.00 2635.50 2840.73 10.00 1343.30 1618.60 60.00
17 1384.21 1821.32 10.00 1653.09 1653.09 180.00 2752.85 3118.91 10.00 1356.18 1799.48 50.00
18 1447.28 1915.34 0.00 1538.78 1538.78 180.00 2696.76 3210.99 10.00 1463.92 1705.40 50.00
19 1027.36 1130.63 10.00 902.20 902.20 90.00 2404.50 2538.54 10.00 1024.84 1198.59 40.00
20 1074.09 1243.04 0.00 1002.21 1002.21 90.00 2418.82 2689.87 10.00 1086.31 1221.26 30.00
21 1220.93 1329.87 0.00 1187.98 1187.98 90.00 2454.01 2635.91 10.00 1052.47 1211.94 30.00

100
CAPÍTULO 3. ANÁLISIS EXPERIMENTAL 101

Después de las modificaciones realizadas se desea comparar el comportamiento de


las heurísticas implementadas en la versión anterior de la biblioteca. Con el objetivo de
lograr una comparación detallada en la Figura 3.5 se muestra una gráfica por cada par
de heurísticas (actual y anterior). Estas gráficas reflejan el comportamiento de las cuatro
heurísticas.

Figura 3.5: Comportamiento de las heurísticas implementadas en BHCTTRP en cuanto al


costo de las soluciones.

Es importante detallar que para este tipo de experimento en la versión anterior de la


biblioteca la evaluación de la función objetivo (el cálculo del costo de la solución) excluye
a los clientes de tipo VC (clientes de vehículo completo) de las sub-rutas contenidas en
las rutas de tipo CVR. Mientras que en esta nueva versión se admiten los clientes de
tipo VC en la sub-rutas respetando la restricción de capacidad impuesta por el camión.
Ambas formas de determinar el costo de la solución son válidas, pero implica que sea o
no conveniente en unas heurísticas más que en otras.
CAPÍTULO 3. ANÁLISIS EXPERIMENTAL 102

Con el objetivo de lograr un mayor grado de certeza en la comparación de los algorit-


mos ya exixtentes en la biblioteca se decidió aplicar la prueba estadística no paramétrica
de Wilcoxon [90]. Esta prueba se utiliza para determinar si hay diferencias significativas
entre los resultados alcanzados por cada par de algoritmos.

Tabla 3.15: Resultados de la prueba de Wilcoxon en la comparación con los algoritmos


de BHCTTRP en cuanto a costo.

Prueba de Wilcoxon
Hipótesis R+ R- p-value
MJ_act vs MJ 114.0 117.0 1
MJ vs MJ_act 117.0 114.0 0.944
Sweep_act vs Sweep 213.0 18.0 0.000
Sweep vs Sweep_act 18.0 213.0 1
SaveSeq_act vs SaveSeq 59.0 172.0 1
SaveSeq vs SaveSeq_act 172.0 59.0 0.047
SaveParall_act vs SaveParall 77.0 154.0 1
SaveParall vs SaveParall_act 154.0 77.0 0.175

Los resultados obtenidos con la prueba de Wilcoxon muestran que las heurísticas Sa-
veParall y MJ tienen un comportamiento similar en ambas versiones de la biblioteca. En
el caso de la heurística Sweep se evidencia un mejor rendimiento en la versión actual, por
el contrario la heurística SaveSeq el rendimiento resulta desfavorable. Se puede concluir
que para la heurística (SaveSeq) es más conveniente utilizar la evaluación de la función
objetivo de la forma que se realizaba en la versión anterior de la biblioteca. En el caso de
Sweep resulta mejor la forma de evaluación actual.
En cuanto al tiempo de ejecución en las gráficas de la Figura 3.6 se muestra el ren-
dimiento por cada par de heurísticas (actual y anterior). Como se puede apreciar en los
cuatro casos, el tiempo es mejorado considerablemente.
CAPÍTULO 3. ANÁLISIS EXPERIMENTAL 103

Figura 3.6: Comportamiento de las heurísticas implementadas en BHCTTRP en cuanto al


tiempo de ejecución.

Tabla 3.16: Resultados de la prueba de Wilcoxon en la comparación con los algoritmos


de BHCTTRP en cuanto a tiempo.

Prueba de Wilcoxon
Hipótesis R+ R- p-value
MJ_act vs MJ 231.0 0.0 0.000
MJ vs MJ_act 0.0 231.0 1
Sweep_act vs Sweep 221.0 10.0 0.000
Sweep vs Sweep_act 10.0 221.0 1
SaveSeq_act vs SaveSeq 216.0 15.0 0.000
SaveSeq vs SaveSeq_act 15.0 216.0 1
SaveParall_act vs SaveParall 231.0 0.0 0.000
SaveParall vs SaveParall_act 0.0 231.0 1

A partir de aplicar la prueba estadística no paramétrica de Wilcoxon [90] para compa-


CAPÍTULO 3. ANÁLISIS EXPERIMENTAL 104

rar los tiempos promedios de los 21 problemas en ambas versiones se llega a la siguiente
conclusión (ver Tabla 3.16): existen diferencias significativas entre los cuatro pares de
heurísticas, lo que indica que la versión actual mejora en tiempo los algoritmos ya im-
plementados en la versión anterior. Esto se debe a que en BHCTTRP se realiza en cada
heurística un proceso para recolocar a los clientes que no habían sido incluidos aún en las
rutas ya construidas.

3.3.3. Toma de decisiones para utilizar BHCVRP

Resulta relevante tratar de caracterizar las instancias de problemas donde cada algorit-
mo funciona mejor o peor. En este tema, se plantea la cuestión de decidir cuándo es más
conveniente utilizar una determinada heurística de construcción a partir del conocimiento
disponible del problema que se pretende resolver. Un análisis de las características de las
instancias para las cuatro variantes de planificación de rutas de vehículos, así como de
los lugares alcanzados por cada una de las heurísticas de construcción en la resolución de
estas conducen a las siguientes observaciones:

Las heurísticas constructivas Sweep y Random siempre obtienen los últimos lugares
con por cientos entre 87.5 % - 100 % y 95.5 % - 100 % respectivamente.

En la variante CVRP el primer lugrar es obtenido por la heurística SaveParall en un


93.8 % y el 6.2 % pierde contra SaveSeq, lo mismo sucede en la variante HFVRP
pero a la inversa.

En el caso de las variantes MDVRP y TTRP el primer lugar lo obtienen SaveParall,


SaveSeq y MJ indistintamente.

Con el propósito de generalizar estas ideas para otros problemas con características
similares se decidió aplicar una de las técnicas tradicionales de la Minería de Datos, los
Árboles de Decisión [85]. El modelo que se obtiene de aplicar esta técnica sobre las
características de los problemas y el ranking de los algoritmos, permite determinar que
heurística que obtendrá mejores resultados en el problema que se desee resolver.
Después de realizar este experimento en las cuatro variantes de planificación de rutas
de vehículos se concluye que para las variantes CVRP y HFVRP este experimento re-
sulta irrelevante, debido a que en la mayoría las instancias de estos problemas el mejor
resultado se obtiene con la misma heurística: SaveParall y SaveSeq respectivamente.
CAPÍTULO 3. ANÁLISIS EXPERIMENTAL 105

En el caso de la variante de TTRP [18] solo se obtienen dos reglas que indican como
decidir cuál de las dos versiones de la Heurística de Ahorro es más conveniente. Se puede
concluir que si la cantidad de clientes de tipo TC es mayor que 18 la heurística más
conveniente es SaveParall, de lo contrario es mejor utilizar SaveSeq.
En el caso de MDVRP [16] la heurística que alcanza la mejor solución es diferente
para varios problemas, por tanto el experimento aporta un conjunto de reglas para deci-
dir que heurística seleccionar según las características del problema. En la Figura 3.7 se
graficó el árbol de decisión que se obtiene para MDVRP [16] en la herramienta KNIME
[96] luego de aplicar el algoritmo J48 [85] originalmente implementado en la herramienta
Weka.

Figura 3.7: Árbol de decisión para la variante MDVRP.

A partir del árbol se puede deducir cuando es más conveniente utilizar las heurísticas
SaveSeq, SaveParall y MJ a partir de la características del problema: cantidad de clientes,
cantidad y capacidad de los vehículos. Un ejemplo de las reglas obtenidas es: si la capa-
cidad del vehículos es menor o igual que 80 y la cantidad es 4 o menor la heurística más
favorable es MJ.
CAPÍTULO 3. ANÁLISIS EXPERIMENTAL 106

3.4. Conclusiones parciales


Después de realizados los experimentos definidos para el análisis del funcionamiento
de las heurísticas de construcción y su comportamiento en las cuatro variantes de planifi-
cación de rutas de vehículos, se arribó a las siguientes conclusiones:

Los resultados obtenidos para las variantes CVRP y HFVRP sugieren que las heu-
rísticas que alcanzan las mejores soluciones son SaveParall y SaveSeq respectiva-
mente.

En el caso de las variantes MDVRP y TTRP se obtienen la mejores soluciones con


las heurísticas SaveSeq, SaveParall y MJ indistintamente.

Las pruebas estadisticas realizadas permiten afirmar que para las variantes CVRP,
MDVRP y TTRP la heurística SaveParall es la de mejor rendimiento, sin embargo
para la variante HFVRP es SaveSeq.

Respecto al tiempo se evidencia que la heurística SaveParall es la que más tiempo


emplea en su ejecución, siendo además la heurística que obtiene los mejores re-
sultados; por el contrario Random obtiene tiempos pequeños en su ejecución, pero
alcanza los peores resultados en todos los casos.

En cuanto a la factibilidad de la cantidad de rutas obtenidas se concluye que las


heurísticas Kilby, SaveSeq, MJ son factibles en casi todos los problemas. Además,
se puede decir que en la variante TTRP es donde más se incumple esta restricción.

En la comparación realizada con BHCTTRP se puede apreciar que las heurísticas


SaveParall y MJ después de las modificaciones realizadas mantienen un comporta-
miento bastante similar a la versión anterior. En el caso de Sweep se evidencia un
mejor rendimiento en el actual y SaveSeq el rendimiento resulta desfavorable; en
ambos casos a la forma de evaluar la función objetivo.

El uso de los Árboles de Decisión, para caracterizar las instancias de los problemas
se logra identificar que las heurísticas funcionan mejor a partir de los datos del
problema a resolver. Este conocimiento puede ser de gran utilidad para los usuarios
que usarán en la práctica estas heurísticas.
CAPÍTULO 3. ANÁLISIS EXPERIMENTAL 107

La técnica de minería de datos utilizada reafirma que en las variantes CVRP y TTRP
la heurística de mejor funcionamiento es SaveParall, para HFVRP es mejor usar
SaveSeq, mientras que para MDVRP se obtuvo un conjunto de reglas que indican
cuando usar SaveSeq, SaveParall y MJ.
Conclusiones

Después de dar cumplimiento a los objetivos trazados en este trabajo y a partir de


los resultados alcanzados se puede concluir que los problemas de planificación de ru-
tas de vehículos son problemas de optimización combinatoria de los más estudiados en
las últimas décadas y una alternativa para su resolución es mediante algoritmos heurísti-
cos y metaheurísticos. Los resultados que se obtienen con las heurísticas de construcción
para estos problemas son buenos y son aplicables dentro del contexto de las metaheurís-
ticas como punto de partida. En la actualidad existen pocas bibliotecas que implementan
métodos heurísticos para resolver los VRPs. De las bibliotecas estudiadas solo VRPH y
BHCTTRP resuelven alguna variante de planificación de rutas de vehículos como son
CVRP y TTRP respectivamente. Y de forma puntual solo BHCTTRP implementa heurís-
ticas de construcción, pero no es capaz de dar solución a otras variantes de planificación
de rutas de vehículos. Además, no permite la incorporación de manera fácil de nuevas
heurísticas constructivas.
La nueva versión de BHCVRP corrige las deficiencias planteadas en la versión an-
terior. Esta nueva versión de la biblioteca incorpora dos nuevas variantes de problemas
de planificación de rutas de vehículos: VRP con Múltiples Depósitos y VRP con Flota
Heterogénea y dos nuevas heurística de construcción: la Heurística de Inserción en Para-
lelo de Christofides, Mingozzi y Toth y la Heurística de Inserción de Kilby. Además, se
incorporaron un conjunto de mejoras para el funcionamiento de la biblioteca como son: el
cálculo de distintos tipos de distancia, el cálculo del tiempo de ejecución de las heurísti-
cas, los pasos de post-optimización de las heurísticas y los distintos métodos para obtener
información adicional de la solución. Por último, con el fin de eliminar las limitaciones
que impone la tecnología se brindan las funcionalidades de BCHCVRP como un servicio
web.

108
CAPÍTULO 3. ANÁLISIS EXPERIMENTAL 109

Los resultados alcanzados en los experimentos haciendo uso de la prueba estadística


de Friedman permite afirmar que en las variantes CVRP, MDVRP y TTRP el Algoritmo de
Ahorro en su versión paralela es la de mejor rendimiento. Sin embargo, para la variante
HFVRP es la versión secuencial de dicho algoritmo. Respecto al tiempo se evidencia
que el Algoritmo de Ahorro en su versión paralela es la que más tiempo emplea en su
ejecución, siendo además la heurística que obtiene los mejores resultados. Al contrario
de el Método Aleatorio que obtiene tiempos pequeños en su ejecución, pero alcanza los
peores resultados en todos los casos. Al comparar las dos versiones de la biblioteca se
puede apreciar que la Heurísticas de Mole & Jameson y el Algoritmo de Ahorro en su
versión paralela después de las modificaciones realizadas mantienen un comportamiento
bastante similar a la versión anterior. En el caso de la Heurística de Barrido se evidencia
un mejor rendimiento en la actual y el Algoritmo de Ahorro en su versión secuencial el
rendimiento resulta desfavorable, esto se debe a la forma de evaluar la función objetivo.
Por último, el uso de la técnica Árboles de Decisión permite caracterizar las instancias de
los problemas e identificar las heurísticas que funcionan mejor a partir de los datos del
problema a resolver. Este conocimiento puede ser de gran utilidad para los usuarios que
usarán en la práctica estas heurísticas.
Recomendaciones

En el desarrollo de este trabajo se identifican un conjunto de aspectos a ser considera-


dos en futuras iteraciones de este proceso de investigación. A continuación se enumeran
las principales recomendaciones que se derivan de este trabajo.

1. Incorporar otras variantes de VRP que reflejen nuevas características de la vida real.
Por ejemplo Open VRP, VRP con Ventana de Tiempo, entre otras.

2. Extender la biblioteca a partir de la incorporación de nuevas heurísticas de construc-


ción, como puede ser el Algoritmo de Ahorros basado en Matching, la Heurística
de Asignación Generalizada de Fisher y Jaikumar, entre otras.

3. Respecto a la variante MDVRP sería conveniente incorporar nuevos métodos de


asignación, así como admitir por parte del usuario una asignación predeterminada.

4. Con el objetivo de proporcionar mayor flexibilidad a la biblioteca permitir al usuario


el uso de los pasos de post-optimización a su conveniencia.

5. Realizar nuevos experimentos y compararlos con los resultados publicados en la


literatura.

110
Referencias

[1] Y. Conde, “Biblioteca de heurísticas de construcción para el problema de ruteo de


camiones y remolques,” Trabajo de Diploma, Instituto Superior Politécnico José
Antonio Echevería, Facultad de Ingeniería Informática, Octubre 2014.

[2] F. Losada, “El problema del viajante,” Ph.D. dissertation, Universidad de Santiago
de Compostela, 2013.

[3] E.-G. Talbi, Metaheuristics: from design to implementation, ser. Wiley Series on
Parallel and Distributed Computing. Hoboken, New Jersey: John Wiley & Sons,
Inc., 2009, vol. 74.

[4] A. Olivera, “Heurísticas para problemas de ruteo,” Master’s thesis, Instituto de


Computación, Facultad de Ingeniería, Universidad de la República, Montevideo,
Uruguay, Agosto 2004.

[5] L. Algarra, “Un método cooperativo basado en heurística simples para el dvrp,” Mas-
ter’s thesis, Departamento de Ciencias de la Computación e Inteligencia Artificial,
Universidad de Granada, España, 2011.

[6] A. Fornaguera, “Implementación de servicios web en dispositivos embebidos,” Tra-


bajo de Diploma, Instituto Superior Politécnico José Antonio Echeverría, Facultad
de Ingeniería Informática, Julio 2010.

[7] P. Toth and D. Vigo, The vehicle routing problem, P. Toth and D. Vigo, Eds. Phila-
delphia: Society for Industrial and Applied Mathematics (SIAM), 2002, vol. 9.

[8] G. Dantzig and J. Ramser, “The truck dispatching problem,” Management Science,
vol. 6, no. 1, pp. 80–91, 1959.

111
REFERENCIAS 112

[9] J. Daza, J. Montoya, and F. Narducci, “Resolución del problema de enrutamiento de


vehículos con limitaciones de capacidad utilizando un procedimiento metaheurístico
de dos fases,” Revista EIA, vol. 12, no. 1, pp. 23–38, 2009.

[10] G. Clarke and W. Wright, “Scheduling of vehicles from a central depot to a number
of delivery points,” Operations Research, vol. 12, no. 4, pp. 568–581, 1964.

[11] Y. Choong, I. Rosmanira, O. Khairuddin, and Z. Mourad, “Vehicle routing problem:


Models and solutions,” Journal of Quality Measurement and Analysis, vol. 4, no. 1,
pp. 205–218, 2008.

[12] E. Delgado, “El problema de la recolección de desechos hospitalarios en la ciudad


de guayaquil, modelación y resolución por medio de una heurística basada en la
búsqueda tabú,” Master’s thesis, Instituto de Ciencias Matemáticas, 2007.

[13] G. Laporte, “The vehicle routing problem: An overview of exact and approximate
algorithms,” Operational Research, vol. 59, no. 3, pp. 345–358, 1992.

[14] J. Cordeau, G. Desaulniers, J. Desrosiers, M. Solomon, and F. Soumis, “Vrp with


time windows,” in The Vehicle Routing Problem, P. Toth and D. Vigo, Eds. Society
for Industrial and Applied Mathematics, 2001, vol. 9, pp. 157–193.

[15] M. Fisher and R. Jaikumar, “A generalized assignment heuristic for te vehicle rou-
ting problem,” Networks, vol. 11, no. 2, pp. 109–124, 1981.

[16] C. Hjorring, “The vehicle routing problem and local search,” Master’s thesis, Uni-
versity of Auckland, 1995.

[17] B. Golden, A. Assad, L. Levy, and F. Gheysens, “The fleet size and mix vehicle
routing problem,” Computers & Operations Research, vol. 11, no. 1, pp. 49–66,
1984.

[18] Lin, Shih-Wei, Yu, V. F., Chou, and Shuo-Yan, “Solving the truck and trailer rou-
ting problem based on a simulated annealing heuristic,” Computers & Operatons
Research, vol. 36, no. 5, pp. 1683–1692, 2009.

[19] S. Baptista, R. Olivera, and E. Zúquete, “A period vehicle routing case study.” Eu-
ropean Journal of Operational Research, vol. 139, no. 2, pp. 220–229, 2002.
REFERENCIAS 113

[20] M. Dror, G. Laporte, and P. Trudeau, “Vehicle routing with split deliveries,” Discrete
Applied Mathematics, vol. 50, no. 3, pp. 239–254, 1994.

[21] G. Laporte and F. Louveaux, Solving stochastic routing problems with the integer
L-shaped method. Springer US, 1998.

[22] J. Villegas, C. Prins, C. Prodhon, A. Medaglia, and N. Velasco, “A grasp with evo-
lutionary path relinking for the truck and trailer routing problem,” Computers &
Operation Research, vol. 38, no. 9, pp. 1319–1334, 2011.

[23] R. Martí, “Procedimientos metaheurísticos en optimización combinatoria,” Matemá-


tiques, vol. 1, no. 1, pp. 3 – 62, 2003.

[24] N. Christofides, A. Mingozzi, and P. Toth, Combinatorial Optimization. Chichester,


UK: Wiley (1979). Chichester, UK: Wiley, 1979, ch. The vehicle routing problem,
pp. 315–338.

[25] R. Mole and S. Jameson, “A sequential route-building algorithm employing a ge-


neralised savings criterion,” Operational Research Quarterly (1970-1977), vol. 27,
no. 2, pp. 503–511, 1976.

[26] J. Bramel and D. Simchi-Levi, “A location based heuristic for general routing pro-
blems,” Operations Research, vol. 43, no. 4, pp. 649–660, 1995.

[27] METSlib. (2014, Febrero) Metslib, metaheuristic framework. [Online]. Available:


http://code.100allora.it/metslib

[28] D. J. Papageorgiou, G. L. Nemhauser, J. Sokol, M.-S. Cheon, and A. B. Keha,


“Mirplib–a library of maritime inventory routing problem instances: Survey, core
model, and benchmark results,” European Journal of Operational Research, vol.
235, no. 2, pp. 350–366, 2014.

[29] E. Alba and C. Cotta, “Congreso español de algoritmos evolutivos y bioinspira-


dos,” in Optimización en entornos geográficamente distribuidos. Proyecto MALLBA,
2002.

[30] P. Rodriguez-Mier, A. Gonzalez-Sieira, M. Mucientes, M. Lama, and A. Bugarin,


“Hipster: An open source java library for heuristic search,” in Information Systems
and Technologies (CISTI), vol. 9, IEEE. Iberian Conference, 2014, pp. 1–6.
REFERENCIAS 114

[31] R. Díaz, “Nueva versión de la biblioteca de clases biciam para solucionar proble-
mas multiobjetivo,” Tesis de Diploma, Instituto Superior Politécnico José Antonio
Echeverría, Junio 2014.

[32] C. Groer, B. Golden, and E. Wasil, “A library of local search heuristics for the vehicle
routing problem,” Springer and Mathematical Programing Society, vol. 2, no. 2, pp.
79–101, 2010.

[33] MOMH. (2014, Febrero) Momh multiple-objective metaheuristics. [Online].


Available: http://home.gna.org/momh/index.html

[34] J. Dréo, J. P. Aumasson, and W.Tfaili. (2006, Febrero) Open metaheuristics.


[Online]. Available: http://ometah.berlios.de/index.php/Main_Page

[35] V. Y. Piqueras, Optimización heurística económica aplicada a las redes de trans-


porte del tipo VRPTW. Universidad Politécnica de Valencia, 2002.

[36] Puchinger, J. Raidl, and R. Günther, Combining Metaheuristics and Exact Algo-
rithms in Combinatorial Optimization: A Survey and Classification, J. Mira and J. R.
Álvarez, Eds. Springer Berlin Heidelberg, 2005.

[37] H. Salazar, “Optimización multiobjetivo aplicado a un problema de ruta corta esto-


cástico,” Ph.D. dissertation, Universidad de las Américas Puebla, 2004.

[38] P. Moreno, G. Huecas, J. Sánchez, and A. García, “Metaheurísticas de optimización


combinatoria: Uso de simulate annealing para un problema de calendarización,” Tec-
nología y Desarrollo, vol. 5, no. 1, pp. 1–25, 2007.

[39] F. Hillier and G. Lieberman, Introducción a la investigación de operaciones, nove-


na ed., McGRAW-Hill, Ed. México, D.F.: The McGraw-Hill Companies, 2010.

[40] E. Lawler, J. Lenstra, A. Rinnooy, and D. Shmoys, The Traveling Salesman Pro-
blem: A guided tour of combinatorial optimization. John Wiley & Sons, 1985.

[41] M. Garey and D. Johnson, Computers and Intractability: A Guide to the Theory of
NP-Completeness. New York, USA: W. H. Freeman, 1979.
REFERENCIAS 115

[42] A. Lozada and R. Cadena, “Solución del problema de rueto de vehiculos con ven-
tanas de tiempo mediante métodos heurísticos,” Master’s thesis, Universidad Indus-
trial de Santander, 2012.

[43] S. Scheuerer, “A tabu search heuristic for the truck and trailer routing problem,”
Computers & Operatons Research, vol. 33, no. 4, pp. 894–909, Abril 2006.

[44] T. Ralphs, J. Hartman, and M. Galati, “Capacitated vehicle routing and some related
problems,” Rutgers University, vol. 5, no. 1, pp. 1–198, 2001.

[45] R. Baldacci, P. Toth, and D. Vigo, “Exact algorithms for routing problems under
vehicle capacity constraints,” Annals of Operations Research, vol. 175, no. 1, pp.
213–245, 2010.

[46] I. Gallego, A. Gómez, D. Arguelles, J. Puente, and N. García, “Desarrollo de un


método híbrido para la resolución del mdvrp,” Revista de la Escuela Jacobea de
Posgrado, vol. 1, no. 5, pp. 45–64, 2013.

[47] J. López and S. Nieto, “Heurística para la generación de un conjunto de referencia


de soluciones que resuelvan el problema de ruteo de vehículos con múltiples depósi-
tos mdvrp,” in Tenth LACCEI Latin American and Caribbean Conference (LACCEI
2012), Megaprojects: Building Infrastructure by fostering engineering collabora-
tion, efficient and effective integration and innovative planning, Panamá, Julio 2012.

[48] J. Bard, L. Huang, M. Dror, and P. Jaillet, “A branch and cut algorithm for the vrp
with satellite facilities.” IIE transactions, vol. 30, no. 9, pp. 821–834, 1998.

[49] F. Narducci, “Programación de talleres intermitentes flexibles, por medio de la heu-


rística del margen de tolerancia.” Tesis de maestría, Universidad del Norte, Barran-
quilla, 2005.

[50] C. Reeves, Modern heuristic techniques, V. Rayward-Smith, I. Osman, C. Reeves,


and G. Smith, Eds. Modern Search Methods, John Wiley & Sons, 1996.

[51] F. Glover, “Future paths for integer programming and links to artificial intelligence,”
Computers & Operations Research, vol. 13, no. 5, p. 17, 1986.
REFERENCIAS 116

[52] J. Brito, “Optimización de rutas de distribución con información y restricciones di-


fusas,” Ph.D. dissertation, Universidad de La Laguna, La Laguna, España, Marzo
2012.

[53] L. V. S. Quintero and C. A. C. Coello, “Una introducción a la computación evo-


lutiva y alguna de sus aplicaciones en economía y finanzas,” Revista de Métodos
Cuantitativos para la Economía y la Empresa, vol. 1, no. 2, pp. 3–26, 2006.

[54] A. L. López, I. Eléctrica, C. A. C. Coello, and A. Carsteanu, “Un estudio de las es-
trategias evolutivas para problemas multiobjetivo,” Tesis de Maestria, Departamento
de Ingeniería Eléctrica, Sección de Computación, Mexico, D.F, 2003.

[55] C. C. Coello, G. B. Lamont, and D. A. Van Veldhuizen, Evolutionary algorithms for


solving multi-objective problems. Springer Science & Business Media, 2007.

[56] F. Glover and M. Laguna, Tabu search. Kluwer Academic Publishers, 1997.

[57] L. Kallel, B. Naudts, and M. Schoenauer, “On functions with a given fitness-distance
relation,” in Evolutionary Computation, vol. 3. IEEE, 1999.

[58] M. Balinski and R. Quandt, “On an integer program for a delivery problem,” Ope-
rations Research, vol. 12, no. 2, pp. 300 – 304, 1964.

[59] B. Gilett and L. Miller, “A heuristic algorithm for the vehicle-dispatch problem,”
Operations Research, vol. 22, no. 2, pp. 340–349, 1974.

[60] J. Cordeau, M. Gendreau, G. Laporte, J. Potvin, and F. Semet, “A guide to vehicle


routing heuristics,” Journal of the Operational Research Society, vol. 53, no. 1, pp.
512–522, 2002.

[61] G. Laporte, M. Gendreau, J. Potvin, and F. Semet, “Classical and modern heuris-
tics for the vehicle routing problem,” International Transaction in Operational Re-
search, vol. 7, no. 4–5, pp. 285–300, 2000.

[62] G. Croes, “A method for solving traveling-salesman problems,” Operations Re-


search, vol. 6, no. 6, pp. 791–812, November–December 1958.

[63] H. Gabow, “An efficient implementation of edemonds’ maximum matching algo-


rithm,” Stanford University, Stanford, California, Technical Report 31, junio 1972.
REFERENCIAS 117

[64] A. Infante, “Algoritmos de trayectoria multiobjetivo aplicados al problema de asig-


nación de recursos humanos a equipos de proyecto de software,” Master’s thesis,
Instituto Superior Politécnico José Antonio Echeverría, 2012.

[65] D. Paredes and J. Fajardo, “Biblioteca de clases para la unificacion de algoritmos


metaheuristicos basados en un punto,” Trabajo de Diploma, Instituto Superior Poli-
técnico José Antonio Echeverría, Facultad de Ingeniería Informática, Julio 2008.

[66] M. Birattari, “Tuning metaheuristics: A machine learning perspective,” Studies in


Computational Intelligence. Berlin/Heidelberg, Germany: Springer, vol. 197, no. 1,
2009.

[67] D. Van Veldhuizen and G. Lamont, “Multiobjective evolutionary algorithm test sui-
tes,” in Proceedings of the 1999 ACM Symposium on Applied Computing, San An-
tonio, Texas, 1999, pp. 351–357.

[68] A. Alvarez and Y. González, “Biblioteca de clases para la integración de algorit-


mos metaheurísticos,” Tesis de Diploma, Instituto Superior Politécnico José Antonio
Echeverría, Facultad de Ingeniería Informática, Julio 2009.

[69] J. Fajardo, “Algoritmo multigenerador de soluciones para la competencia y colabora-


ción de generadores metaheurísticos,” Master’s thesis, Instituto Superior Politécnico
José Antonio Echeverría, Facultad de Ingeniería Informática, 2009.

[70] W. Fernández, “Nueva versión de la biblioteca de clases biciam,” Trabajo de Diplo-


ma, Instituto Superior Politécnico José Antonio Echeverría, Facultad de Ingeniería
Informática, Julio 2012.

[71] K. Escalera, “Algoritmos metaheurísticos con estrategias de paralelización aplicadas


al problema de asignación de personal a equipos de proyectos de software,” Trabajo
de Diploma, Instituto Superior Politécnico José Antonio Echeverría, Junio 2012.

[72] E. Rich and K. Knight, Inteligencia artificial. Madrid, España: McGraw-Hill, D.L.,
1994.

[73] A. M. L. Reyes, “Comparación de algoritmos metaheurísticos en estrategias de so-


lución para el ttrp,” Trabajo de Diploma, Instituto Superior Politécnico José Antonio
Echevería, Junio 2013.
REFERENCIAS 118

[74] B. Eckel, “Thinking in patterns problem-solving techniques using java.-president,


mindview,” Inc, Tech. Rep., 2003.

[75] E. Gamma, R. Helm, R. Johnson, and J. Vlissides, Design patterns: elements of


reusable object-oriented software. Pearson Education, 1994.

[76] J. Martínez, Guía de construcción de software en Java con patrones de diseño. Uni-
versidad de Oviedo, Escuela Universitaria de Ingeniería Técnica Informática, 2000.

[77] P. Kilby, P. Prosser, and P. Shaw, “Guided local search for the vehicle routing pro-
blem,” University of Strathclyde, Sophia-Antipolis, Francia, Tech. Rep., julio 1997.

[78] C. Binildas, M. Barai, and V. Caselli, “Service oriented architecture with java,”
Using SOA and web services to build powerful Java applications. Birmingham,
vol. 1, no. 1, 2008.

[79] N. Josuttis, SOA in practice: the art of distributed system design. O’Reilly Media,
Inc., 2007.

[80] M. Carey, “Bea liquid data for weblogic: Xml-based enterprise information integra-
tion,” in Data Engineering. Proceedings. 20th International Conference on. IEEE,
2004, pp. 800 – 803.

[81] M. Diaz, “Comparación de tecnologías de servicio web axis, xfire y jax-ws,” in


Convención Científica de Ingeniería y Arquitectura, 2010.

[82] C. Castro, “Teamsoft: Sistema para la gestión del trabajo en equipo en el desarrollo
de proyectos de software. versión 4.0. integración con otras aplicaciones del entorno
citi.” Trabajo de Diploma, Instituto Superior Politécnico José Antonio Echeverría,
Facultad de Ingeniería Informática, Junio 2012.

[83] E. Flores, “Implementación de lenguajes de contrato electrónico en oracle service


bus,” Revista Cubana de Ciencias Informáticas, vol. 9, no. 1, pp. 63–77, 2015.

[84] M. Walliser, S. Brantschen, M. Calisti, and S. Schinkinger, “Whitestein series in


software agent technologies and autonomic computing,” Springer, vol. 1, no. 1,
2008.
REFERENCIAS 119

[85] J. Orallo, M. Quintana, and C. Ramírez, Introducción a la Minería de Datos. Hall


Pearson, 2004.

[86] E. Alba. (2014, Enero) Networking and emerging optimiztion. Universisdad de


Malaga. [Online]. Available: http://neo.lcc.uma.es/vrp/vrp-instances/

[87] I.-M. Chao, “A tabu search method for the truck and trailer routing problem.” Com-
puters & Operations Research, vol. 29, pp. 33–51, 2002.

[88] J. Derrac, S. García, D. Molina, and F. Herrera, “A practical tutorial on the use
of nonparametric statistical test as a methodology for comparing evolutionary and
swarm intelligence algorithms,” Swarm and Evolutionary Computation, vol. 1, no. 1,
pp. 3–18, 2011.

[89] M. Friedman, “The use of ranks to avoid the assumption of normality implicit in the
analysis of variance,” Journal of the American Statistical Association, vol. 32, no.
200, pp. 674–701, 1937.

[90] F. Wilcoxon, “Individual comparisons by ranking methods,” Biometrics Bulletin,


vol. 1, no. 6, pp. 80–83, Diciembre 1945.

[91] P. Janert, Gnuplot in Action Understanding data with graphs, C. Keller and T. Wi-
lliams, Eds. Manning Publications Co., 2009.

[92] D. Rom, “A sequentially rejective test procedure based on amodified bonferroni


inequality,” Biometrika, vol. 77, no. 3, pp. 663–665, 1990.

[93] S. Holm, “A simple sequentially rejective multiple test procedure,” Scandinavian


Journal of Statistics, vol. 6, no. 2, pp. 65–70, 1979.

[94] H. Finner, “On a monotonicity problem in step-down multiple test procedures,”


Journal of the American Statistical Association, vol. 88, no. 423, pp. 920–923, 1993.

[95] J. Li, “A two-step rejection procedure for testing multiple hypotheses,” Journal of
Statistical Planning and Inference, vol. 138, no. 6, pp. 1521–1527, 2008.

[96] M. R. Berthold, N. Cebron, F. Dill, T. R. Gabriel, T. Kötter, T. Meinl, P. Ohl,


K. Thiel, and B. Wiswedel, “Knime-the konstanz information miner: version 2.0 and
beyond,” AcM SIGKDD explorations Newsletter, vol. 11, no. 1, pp. 26–31, 2009.
Anexo A. Diagramas de secuencia del
patrón Factory Method

Aplication VRP : StrategyHeuristic : Problem : FactoryDistances : FactoryLoader

1: loadProblem(data, distanceType)

2: setProblem(data)

3: fillCostMatrix(distanceType)

4: distance = newDistance(distanceType)

5: distance = createDistance(distanceType)

6: distance = getIntance(className)

Diagrama de secuencia del patrón Factory Method para el cálculo de las distancias.

120
Anexo A. Diagramas de secuencia del patrón Factory Method 121

Aplication VRP : StrategyHeuristic : FactoryAssing : FactoryLoader

1: typeAssign = selectMethodAssign

2: cofigurateVariant()

3: [variant == MDVRP] assign = newAssign(assignType)

4: assign = createAssign(assignType)

5: assign = getInstance(className)

Diagrama de secuencia del patrón Factory Method para los métodos de asignación de los
clientes a los depósitos.
Anexo B. Resultados de los
procedimientos en la comparación de
las heurísticas

Resultados de los procedimientos Rom, Holm, Finner y Li en la comparación de las heu-


rísticas para CVRP.

Procedimientos
Algoritmos Hipótesis
Rom Holm Finner Li

Random 0.00 0.00 0.00 0.00 Rechazada


Sweep 0.00 0.00 0.00 0.00 Rechazada
NN 0.00 0.00 0.00 0.00 Rechazada
CMT 0.00 0.00 0.00 0.00 Rechazada
Kilby 0.00 0.00 0.00 0.00 Rechazada
MJ 0.07 0.07 0.04 0.03 No Rechazada
SaveSeq 0.09 0.09 0.09 0.09 No Rechazada

Resultados de los procedimientos Rom, Holm, Finner y Li en la comparación de las heu-


rísticas para HFVRP.

Procedimientos
Algoritmos Hipótesis
Rom Holm Finner Li

Random 0.00 0.00 0.00 0.00 Rechazada


Sweep 0.00 0.00 0.00 0.00 Rechazada
NN 0.00 0.00 0.00 0.00 Rechazada
CMT 0.00 0.00 0.00 0.00 Rechazada
Kilby 0.00 0.00 0.00 0.00 Rechazada
MJ 0.25 0.25 0.14 0.16 No Rechazada
SaveParall 0.34 0.34 0.34 0.34 No Rechazada

122
Anexo B. Resultados de los procedimientos en la comparación de las heurísticas 123

Resultados de los procedimientos Rom, Holm, Finner y Li en la comparación de las heu-


rísticas para MDVRP.

Procedimientos
Algoritmos Hipótesis
Rom Holm Finner Li

Random 0.00 0.00 0.00 0.00 Rechazada


Sweep 0.00 0.00 0.00 0.00 Rechazada
NN 0.00 0.00 0.00 0.00 Rechazada
CMT 0.00 0.00 0.00 0.00 Rechazada
Kilby 0.00 0.00 0.00 0.00 Rechazada
SaveSeq 0.03 0.03 0.17 0.03 Rechazada
MJ 0.61 0.61 0.61 0.61 No Rechazada

Resultados de los procedimientos Rom, Holm, Finner y Li en la comparación de las heu-


rísticas para TTRP.

Procedimientos
Algoritmos Hipótesis
Rom Holm Finner Li

Random 0.00 0.00 0.00 0.00 Rechazada


Sweep 0.00 0.00 0.00 0.00 Rechazada
NN 0.00 0.00 0.00 0.00 Rechazada
CMT 0.00 0.00 0.00 0.00 Rechazada
Kilby 0.00 0.00 0.00 0.00 Rechazada
SaveSeq 0.16 0.16 0.00 0.01 -
MJ 0.31 0.31 0.31 0.31 No Rechazada

Vous aimerez peut-être aussi