Académique Documents
Professionnel Documents
Culture Documents
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.
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
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
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
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
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
Biblioteca para los problemas de planificación del inventario marítimo MIRPs (MIR-
PLib) [28].
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
Definir los escenarios para cada uno de los experimentos con las heurísticas
adaptadas.
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
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.
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.
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.
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.
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
Restricciones
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
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
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]:
Para dar cumplimiento a uno de los objetivos trazados, en el siguiente acápite se ex-
plican las heurísticas constructivas.
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 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].
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]:
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.
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].
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.
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
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).
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.
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:
2. Inserción: Llenar la RLC con los k vecinos más cercanos al último cliente insertado
CAPÍTULO 1. FUNDAMENTOS TEÓRICOS 24
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].
Características
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 VRPH y BHCTTRP funcionan para la variante CVRP y TTRP res-
pectivamente.
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
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.
La Capa General está conformada por los paquetes vinculados a la biblioteca que
son reutilizables.
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.
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.
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.
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.
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.
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.
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:
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.
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
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:
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
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).
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).
Sujeto a:
r0 = 0 (2.10)
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
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).
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
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:
6. Asociación: Para cada cliente w que no haya sido visitado calcular tw = arg mı́nt|rt∈J δw,vk .
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.
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).
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
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.
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 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 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).
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
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.
heuristic_VRP
generators controller
problem_VRP factory_pattern
Application
java.util java.lang
JDK
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
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].
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.
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
]]]
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
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.
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.
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
<<abstract>>
Distance
<<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
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>
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
+relocate( : Route, : int ) : void +exchange( : Route, : int ) : void +operator_2opt( : Route, : int ) : void +operator_3opt( : Route ) : void
KilbyAlgorithm SaveParallel
CMT MoleJameson
<<abstract>>
Distance
<<abstract>>
Assing
+toAssignCustomersToDepot() : void
RandomAssing NearestByCustomer
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.
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
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
FactoryLoader
WgetInstanceslb :bStringbJb:bObject
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
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.
Patrones estructurales: permiten crear grupos de objetos para ayudar a realizar ta-
reas complejas.
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.
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.
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
Figura 2.12: Implementación del patrón Factory Method para las heurísticas de construc-
ción.
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.
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 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.
Las características que distinguen los servicios web son las siguientes:
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
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
2.5.2. BHCVRP_WebService
No
¿Carga correcta?
Si
Si ¿Configurar No
variante VRP?
Si es HFVRP Si es MDVRP
¿Variante?
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
Obtener datos
adicionales
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.
web_service
service mediate
dto
Service
heuristic_VRP
generators controller
problem_VRP factory_pattern
Application
JDK
Apache CXF
java.util java.lang javax.xml javax.jws
Software
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
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
ImplementationService
Execute_Service
...
+main( : String ) : void
ImplementationMediate
Los elementos participantes en este artefacto se describen en la Tabla 2.8 que se mues-
tra a continuación:
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.
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.
73
CAPÍTULO 3. ANÁLISIS EXPERIMENTAL 74
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.
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
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
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
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.
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.
λ (c1 ): 1
µ (c2 ): 1
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.
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.
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].
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.
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).
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).
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
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.
En la heurística Kilby coinciden los valores de mínimo y promedio para todos los
problemas, debido a que es un algoritmo determinista.
Se puede observar que Random obtiene los peores resultados en las soluciones, pero
el menor tiempo de ejecución en todos 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.
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).
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).
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
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.
Se puede observar que Random obtiene los peores resultados en las soluciones, pero
el menor tiempo de ejecución en todos los casos.
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.
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).
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).
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
En la heurística Kilby coinciden los valores de mínimo y promedio para todos los
problemas, debido a que es un algoritmo determinista.
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.
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.
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).
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).
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
En la heurística Kilby coinciden los valores de mínimo y promedio para todos los
problemas, debido a que es un algoritmo determinista.
Se observa que Random obtiene el menor tiempo de ejecución en todos los casos.
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
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
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.
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].
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
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
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
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.
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.
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.
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
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.
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.
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
108
CAPÍTULO 3. ANÁLISIS EXPERIMENTAL 109
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.
110
Referencias
[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.
[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.
[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
[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.
[13] G. Laporte, “The vehicle routing problem: An overview of exact and approximate
algorithms,” Operational Research, vol. 59, no. 3, pp. 345–358, 1992.
[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.
[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.
[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.
[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.
[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.
[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.
[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
[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.
[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.
[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.
[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.
[72] E. Rich and K. Knight, Inteligencia artificial. Madrid, España: McGraw-Hill, D.L.,
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.
[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.
[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.
[91] P. Janert, Gnuplot in Action Understanding data with graphs, C. Keller and T. Wi-
lliams, Eds. Manning Publications Co., 2009.
[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.
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
1: typeAssign = selectMethodAssign
2: cofigurateVariant()
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
Procedimientos
Algoritmos Hipótesis
Rom Holm Finner Li
Procedimientos
Algoritmos Hipótesis
Rom Holm Finner Li
122
Anexo B. Resultados de los procedimientos en la comparación de las heurísticas 123
Procedimientos
Algoritmos Hipótesis
Rom Holm Finner Li
Procedimientos
Algoritmos Hipótesis
Rom Holm Finner Li