Metodo de Clusterizacion para El VRPTW Con Consideraciones de Balanceo de Tiempo
Metodo de Clusterizacion para El VRPTW Con Consideraciones de Balanceo de Tiempo
Metodo de Clusterizacion para El VRPTW Con Consideraciones de Balanceo de Tiempo
PROFESOR GUÍA:
FERNANDO ORDOÑEZ PIZARRO
PROFESOR CO-GUÍA:
JOSÉ SOTO SAN MARTÍN
COMISIÓN:
TOMÁS MARTÍNEZ MUÑOZ
SANTIAGO DE CHILE
2023
RESUMEN DE LA TESIS PARA OPTAR
AL GRADO DE MAGÍSTER EN CIENCIAS
DE LA INGENIERÍA, MENCIÓN MATEMÁTICAS APLICADAS
Y MEMORIA PARA OPTAR AL
TÍTULO DE INGENIERO CIVIL MATEMÁTICO
POR: SEBASTIÁN ANTONIO BUSTOS ATALAH
FECHA: 2023
PROF. GUÍA: FERNANDO ORDOÑEZ PIZARRO
Además, se estudia como eliminar aristas de un grafo completo de forma tal que se man-
tenga el árbol generador de peso mínimo. Se estudian resultados en un contexto determinista
y probabilista, en este ultimo se logra demostrar que el árbol generador esta contenido en el
grafo de los k-vecinos asintoticamente en la cantidad de nodos con probabilidad 1, en este
caso k es variable y depende de n, la función de distribución de las aristas y un parámetro
arbitrario. Esto permite reducir
q la complejidad del algoritmo, se logra disminuir un termino
2 3
de la expresión de n a h n log(n), donde h es un valor que depende de la función inversa
de Ackermann.
i
Todo tiene un principio y todo tiene un final,
cada historia que termina lleva a un nuevo comenzar,
por eso lo que importa es el camino y no el final.
K.F.
ii
Agradecimientos
En primer lugar, agradecer a mi papa y tía quienes estuvieron todos estos años.
Al profesor Fernando quien, sin conocerme, acepto trabajar conmigo y soporto todos mis
“lo que dije la semana pasada está mal porque hay un error” y mis ganas de extender por
una semana más todo lo que hacíamos para encontrar algo que me dejara conforme.
A toda la gente de CMAT. Sobre todo, a Patito, Jona y Vilches quienes a lo largo de los
años estuvieron ahí, sobre todo en los momentos más complejos nunca me abandonaron. Al
resto del equipo quienes hacen todos los sábados más agradables. Y a Gloria quien siempre
tendrá mi cariño incondicional.
A Pipe, Arie y Nico con quienes formaron parte de incontables matracas y noches de juego.
Tristan a quien siempre le podía preguntar alguna tontera y tirar ideas al aire. Matu quien
me acompaño siempre durante plan común e incluso después de eso de manera incondicional.
Bary quien también estuvo ahí muchos años a veces para matraquear otras para conversar
de la vida. Anto y Mapi quien también me ha acompañado todos estos años de universidad.
A Espi quien, incluso antes de enterar a la U, ha soportado todos mis “aun no supero”,
todas esas conversaciones esporádicas que tenemos (quejándonos de una que otra cosa) y por
todo el cariño que me has dado estos años, gracias por todos estos años siempre tendrás mi
cariño. Marijo quien, también desde antes de la u, ha escuchado todas mis tonteras, todas
esas conversaciones esporádicas y más que una u otra confusión sobre lo que estamos hablan-
do, gracias por seguir por aquí.
A todos los del equipo de Data Science de SimpliRoute quienes me han tratado con ama-
bilidad, cariño y buena onda. En especial a Tomas, quien tuvo que soportar, ver y escuchar
todas mis mentiras y las que terminaron siendo no tan mentiras, por las conversaciones ti-
rando ideas, leyendo papers, debugeando, patito de hule, de la vida y muchas más. Sin tu
presencia esto no hubiera terminado como lo hizo.
Por último, pero no por eso una pizca de menos importante, gracias por todo Denisse,
aun cuando ya no te encuentres aquí, si no fuera por haberte conocido, por todas esas
conversaciones en las tardes noches, mis rants de KS, tu cariño, la alegría que me diste yo
no hubiera tenido ni las ganas ni la energía de llegar a donde estoy, siempre te recordare y
extrañare.
iii
Tabla de Contenido
1. Introducción 1
2. Antecedentes 4
2.1. Antecedentes del VRP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
2.2. Antecedentes de grafos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
5. Resultados numéricos 47
5.1. Instancias Utilizadas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
5.2. Sobre los experimentos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
5.3. Aproximación tiempo en ruta . . . . . . . . . . . . . . . . . . . . . . . . . . 48
5.3.1. CVRP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
5.3.2. VRPTW . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
5.4. Experimentos Numéricos sobre restricción de aristas . . . . . . . . . . . . . . 49
5.4.1. CVRP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
5.4.2. VRPTW . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
5.5. Experimentos Numéricos Optimización VRP . . . . . . . . . . . . . . . . . . 53
5.5.1. CVRP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
5.5.2. VRPTW . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
5.6. Conclusiones de la heurística . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
iv
6. Conclusiones 62
Bibliografía 63
Anexos 67
A. Demostraciones Capitulo 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
A.1. Demostración Proposición 3.1 . . . . . . . . . . . . . . . . . . . . . . 68
A.2. Demostración Proposición 3.2 . . . . . . . . . . . . . . . . . . . . . . 76
B. Feasibles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
B.1. Relocate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
B.2. Exchange . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85
B.3. Capacity Strict Feasibles . . . . . . . . . . . . . . . . . . . . . . . . . 87
B.4. TimeWindow Strict Feasibles . . . . . . . . . . . . . . . . . . . . . . 88
C. Demostraciones Capitulo 4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90
C.1. Demostración Proposición 4.6 . . . . . . . . . . . . . . . . . . . . . . 90
D. Función Objetivo y Tiempos De Ejecución . . . . . . . . . . . . . . . . . . . 94
D.1. CVRP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94
D.2. VRPTW . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
v
Índice de Tablas
vi
Índice de Ilustraciones
vii
Capítulo 1
Introducción
Lo que se considere como carga puede tener distintos efectos en el problema de ruteo,
esto se puede apreciar en Matl et al. [3]. Entre las condiciones más estudiadas en el balanceo
de carga se encuentra la asociada a largo en ruta, en Matl et al. [4] se presenta un estudio
de cuáles son las consideraciones que se han tomado en varias investigaciones y un análisis
sobre las distintas funciones que permiten medir balanceo. A pesar de que se suele estudiar
el balanceo asociado al largo en ruta, en Sivaramkumar et al. [5] se presenta un estudio don-
1
de se muestra que tener consideraciones asociadas a balancear la duración en tiempo de las
rutas de un VRP con ventanas horarias (abreviado como VRPTW) puede llegar a ser más
importante que aquellas que trabajan con la distancia recorrida.
El VRP es un problema NP-Hard, con lo cual para poder resolver problemas que sean
aplicables en la vida real la utilización de heurísticas ha sido necesaria. En particular, como se
observa en Matl et al. [4] en problemas de ruteo de vehículos con condiciones de balanceo se
suelen usar exclusivamente heurísticas. Al momento de considerar metodologías para resolver
el problema existen heurísticas que siguen la estructura llamada cluster first - route second
que consisten en primero realizar una clusterización y posteriormente rutear dentro de di-
chas clusterizaciones, en [6, 7] se presentan heurísticas clásicas que trabajan esta metodología.
En esta tesis se abordará realizar una heurística basada en árboles expansores de peso
mínimo (Minimum Spanning Trees o MST) para realizar una clusterización de la instancia
manteniendo en consideración el balanceo de tiempo. En este trabajo consideraremos la va-
riante del VRPTW con cantidad de vehículos fijos. Lo desarrollado, al ser una clusterización,
puede ser usado como la parte de clusterización dentro de cualquier metodología que utilice
las heuristicas llamadas cluster first - route second.
Estructura de la tesis
En el capítulo 2 se hará una recapitulación del estado del arte tanto del VRP como de
estructuras relevantes en teoría de grafos que serán utilizadas durante el trabajo.
Posteriormente, se analizarán criterios bajo los cuales se puede garantizar que se mantiene
optimalidad del MST al eliminar aristas de un grafo completo, en particular se encontraron
cotas ajustadas bajo las cuales, en un contexto determinista, se puede garantizar que el grafo,
Gk , de los k vecinos más cercanos contiene al MST del grafo original. Además en un contexto
probabilista se mostrarán valores para k tales que Gk contiene el MST asintóticamente. Ade-
más, se estudiará los impactos que tienen estos resultados sobre la heurística desarrollada y
cómo este resultado puede ser beneficioso para otras áreas del conocimiento.
2
Por último, se mostraran los resultados de la optimización tras el uso de la heurística y
se comparara con otras formas de solución, además se observara su efecto en la solución de
ruteo y que efectos tiene el proceso de eliminar aristas sobre la velocidad del algoritmo.
3
Capítulo 2
Antecedentes
Al momento de buscar formas de resolución del VRP existen distintas estrategias. No solo
están los modelos y formulaciones exactas, si no que también se encuentran distintos tipos
de heurísticas y metaheurísticas.
Entre las heurísticas se pueden definir dos tipos: construcción y mejoramiento. Las prime-
ras buscan obtener una solución inicial al problema de manera constructiva, generalmente de
manera greedy. Mientras que las de mejoramiento dada una solución inicial buscan mejorar
una solución dada en una vecindad de ella, por esto se vuelve relevante la noción de vecindad
se utiliza estas nociones se puede definir definir de varias maneras.
Entre las heurísticas encontramos cluster first - route second o route first - cluster second,
que consisten en utilizar estrategias de clusterización en conjunto con el ruteo. Por otro lado
encontramos heurísticas de mejoramiento intra tour e inter tour que suelen ser trabajados
en la forma de búsquedas locales (local searchs en ingles), este tipo de búsquedas consisten
en perturbar una solución actual e ir iterando hasta que no se logra encontrar una mejor
solución y caer en un óptimo local.
Existen distintos tipo de las heurísticas de mejoramiento, entre ellas existen dos que serán
importantes para este trabajo, Relocate y Exchange, la primera consiste en eliminar un nodo
de una ruta e insertando en otra posición, ya sea de la misma ruta u otra, mientras que el
4
segundo consiste en mover un primer nodo de una ruta a otra y un segundo nodo de la última
a la primera, es decir un intercambio de nodos entre rutas. Si se analiza toda la vecindad
que este tipo de heurísticas generan se observa que tiene una complejidad de O(n2 ) sufren
de un problema con el costo computacional a medida que aumentan los tamaños a trabajar,
esto es un problema que también sera relevante, para esto una de las técnicas utilizadas se
llamada búsqueda granular (granular search) que consiste en considerar solo conexiones que
estén espacialmente relacionadas, por ejemplo solo aquellas que estén cercanas en distancia,
y con esto limitar el espacio de búsqueda de manera considerable.
Dentro de las metodologías cluster first - route second han existido distintos approachs
para incorporar la noción de ventanas horarias. Por ejemplo en [15, 16] se realizan modifia-
ciones de la distancia entre dos puntos donde se incorpora las ventanas horarias y utilizan
esta nueva noción para sus operaciones.
Al momento de querer obtener una solución balanceada existen dos factores que, a priori,
deben ser relevantes que se va a balancear y que función de balanceo utilizar. En [3, 4] se
realizan investigaciones al respecto, se concluye que dado el recurso a balancear el efecto de la
función de balanceo es marginal y que balancear más de un tipo de recurso es incompatible,
luego la elección de que se va a balancear es lo que se vuelve más relevante.
En el mismo estudio Matl et al. [4] se muestra cómo es que existen pocas consideraciones
sobre balanceo en VRPTW y menos de balanceo de tiempo. Entre aquellas se pueden men-
cionar [5, 17, 18], todas ellas basadas en algún tipo de metaheurística.
5
donde N Nk (u) corresponde a los vértices que son k−vecinos más cercanos del punto u.
En este trabajo se usara el grafo de los k−vecinos más cercanos (abreviado k-NNG por
sus siglas en ingles) sobre el grafo completo de n vértices, además es importante notar que
para una función arbitraria de pesos c es posible que exista ambigüedad sobre el conjunto
N Nk (u) esto se puede solucionar si, por ejemplo, se supone que c es inyectiva. En el afán de
la generalidad se presenta la definición de no ambigüedad de los k−vecinos más cercanos.
El grafo de los vecinos más cercano tiene aplicaciones en distintas áreas como biotecnolo-
gía, data mining, machine learning (por ejemplo [19–21]). A pesar de lo anterior son pocas
las propiedades teóricas que se conocen en general para este tipo de grafos, ver Bose et al.
[22] para encontrar ciertas propiedades sobre estructuras similares.
En este trabajo utilizaremos la versión no dirigida del grafo de los k vecinos pues nos
sera de utilidad, a pesar de lo anterior en Bose et al. [22] se define el k-NNG como un grafo
dirigido y si S corresponde al conjunto de puntos lo denotan k-NNG(S), en este trabajo se
utiliza otra notación para evitar confusiones. En el contexto dirigido el siguiente resultado es
interesante pues nos presentan una de las pocas propiedades conocidas sobre los k-NNG.
En nuestro caso trabajamos con la versión donde las direcciones son suprimidas, indepen-
diente de esto podemos recuperar el mismo resultado.
6
una vez.
Dado lo anterior para calcular |Ek | basta contar todas las aristas de la versión dirigida con
la precaución de aquellas que sean bidireccionales consíderalas una sola vez, es decir estamos
utilizando la misma forma de contar que la utilizada en la Proposición 2.1, con lo cual ese
resultado sigue siendo valido en nuestro contexto pues ambos cardinales serán iguales.
Otra estructura interesante que se puede construir es la del MST, que corresponde a bus-
car un árbol expansor de peso mínimo. Dentro de las formas de resolver este problema existen
◦
tres algoritmos clásicos Kruskal, Prim y Boruvka.
◦
El algoritmo de Boruvka no solo es importante pues es la base de algunos algoritmos
modernos (por ejemplo ver Bernard [23]), si no que su relación con los grafos k-NNG nos
entrega un gran insight sobre como estos se pueden relacionar con el problema del MST. El
algoritmo consiste en calcular G1 , luego se calcula nuevamente pero sobre el grafo donde los
puntos son las componentes conexas de G1 (ver Nešetřil et al. [24] para más detalles), en
particular se obtiene la proposición 2.3 que es interesante pues nos garantiza que al menos
una parte de las aristas se obtienen con 1 − N N G.
E1 ⊆ T
◦
Demostración. La demostración es una consecuencia directa del algoritmo de Boruvka pues,
como se menciona en Nešetřil et al. [24], el algoritmo comienza seleccionando la arista más
cercana a cada uno de los vértices, es decir hemos seleccionado todas las aristas de E1 y se
concluye lo requerido.
Como corolario importante se obtiene que si G1 es conexo entonces G1 es el MST del
grafo, cabe destacar que la hipótesis de inyectividad no es una limitante del algoritmo, lo
que si es necesario es que exista una forma consistente de elegir puntos cuando estos tengan
el mismo peso, en este sentido la no ambigüedad de los k−vecinos más cercanos se vuelve
relevante para tomar estas decisiones sin inconvenientes.
Teorema 2.1 Si es que los pesos distribuyen de manera uniforme [0, 1] iid entonces se
cumple que
0 k = 1
lim P(Gk sea conexo) = γ k = 2
n→∞
1 k≥3
donde 0.99081 ≤ γ ≤ 0.99586 y n la cantidad de vértices en el grafo.
7
En este contexto, ya sea determinista o probabilista, surge una pregunta natural ¿Cuál
es el menor valor de k tal que el MST este contenido en Gk ? Sabemos que siempre G1 esta
contenido en el MST, pero el teorema 2.1 nos dice que casi seguramente se cumple que el
MST no esta contenido en G1 y que existe una probabilidad no nula de que tampoco este en
G2 .
Buscando resultados de literatura se puede observar que no existe ningún trabajo que
responda esta incógnita, en este escrito se le dará una respuesta para un modelo determinista
cualquiera y se encontraran condiciones para el modelo aleatorio bajo las cuales es posible
garantizar asintóticamente estos resultados, dado el desconocimiento del comportamiento de
estas estructuras se vuelven valioso por si mismos estos resultados, pero veremos cómo es po-
sible utilizarlo para ciertas aplicaciones y en los algoritmos que se plantearan durante la tesis.
8
Capítulo 3
Consideraremos que las instancias que se resuelven son factibles, que se tendrá acceso a la
matriz de tiempos de viaje y que esta es simétrica. Se tomará una cantidad fija de vehículos
y que estos son homogéneos, tanto en capacidad como en el tiempo disponible. Además, al
momento de resolver la clusterización, consideraremos un vehículo por cluster.
La clusterización se realizará mediante una heurística que busque capturar ciertas nociones
relevantes tanto al momento de hablar de clustering como de ruteo. Dicha heurística busca
tener en consideración características tanto de distancia como de demanda, capacidad, tiem-
po en ruta y ventanas horarias. Dado lo anterior y la forma de resolución que se propondrá
puede separarse en dos vertientes distintas: VRP con ventanas horarias (VRPTW) y VRP
sin ventanas horarias (CVRP).
La solución inicial consiste en resolver cada cluster como un problema de VRP con un úni-
co vehículo, para esto se utilizara el algoritmo de resolución de VRP que SimpliRoute facilito.
Por último, tras combinar cada una de las soluciones individuales en una gran solución,
utilizando heurísticas de mejoramiento que tengan consideraciones de balanceo y zonifica-
ción. Es importante al combinar las soluciones seguir con la noción de balanceo, de otra
forma dicha métrica se verá mermada a costa de métricas clásicas de optimalidad como el
9
tiempo en ruta.
Realizaremos ciertos supuestos que nos ayudarán al momento de desarrollar las ideas, pri-
mero consideraremos que tenemos clusters iniciales dados, más adelante presentaremos como
pueden ser determinados y a cada cluster se le va a asignar un único vehículo. En lenguaje de
VRP estamos pidiendo una asignación inicial de vehículo y puntos, sin necesidad de un ruteo.
Para mejorar dicha clusterización inicial utilizaremos un proceso de local search, de esta
manera la clusterización puede ser manejada, en su manera más abstracta, como se presenta
en Código 3.1.
Esta versión del clustering tiene dos consideraciones importantes. En primer lugar, requie-
re que se le entreguen una cluserización inicial. En segundo, solo va a terminar si es que no
encuentra mejores soluciones, esto podría ser modificado si se desea aumentar la velocidad
o evitar caer en óptimos locales. Por otro lado, hay que recalcar que dado que existe una
cantidad finita de posibles combinaciones este algoritmo termina, esto es suponiendo que los
cambios aceptados disminuyen de manera estricta la función objetivo.
Se utilizarán dos que son inspirados en las heurísticas de VRP: Relocate y Exchange, es
decir se buscará poder mover un punto de un cluster a otro y la posibilidad de intercambiar
dos puntos. Solo se utilizan estas dos versiones pues al estar trabajando con clustering otros
tipos de movimientos que trabajen sobre el orden de la ruta (como k-Opt) no hacen sentido
10
para este contexto.
11
14 end If
15 end If
16 end For
17 end For
18 end For
19 end For
20
Es claro que un Exchange es simétrico, es decir el cambio entre (i, j) es el mismo que el
(j, i), esto hace que se pueda ahorrar parte de la búsqueda, el análogo a solo usar el trián-
gulo superior de una matriz cuadrada, esto permite hacer la implementación levemente más
eficiente.
Para poder balancear por tiempo es necesario estimar el tiempo de viaje de los vehículos,
para esto se decide utilizar un MST. Es conocido de Christofides [31] que utilizando un MST
y un matching es posible obtener una aproximación de 23 (worst case) del TSP, teniendo esto
en consideración para un CVRP, si nos hacemos previamente cargo de la distribución de
capacidad, es posible tener una aproximación del viaje lo cual permite balancear. Si se desea
atacar un VRPTW es más delicado, pero se pueden utilizar principios similares para abordar
el problema; esto nos va a generar dos algoritmos (muy similares) que permiten atacar CVRP
y VRPTW.
Para trabajar vamos a construir dos MST que mantendremos por cada cluster, uno se-
rá asociado a la zonificación y lo llamaremos zoneMST y el otro asociado al balanceo y
lo llamaremos balanceMST. El zoneMST se considerará utilizando solo los clientes de cada
partición mientras que el balanceMST se utilizaran los nodos y el depot asociado al problema.
12
si bien el depot es importante al momento de rutear, hay que considerar que pueden existir
clusters que estén muy alejados del depot, por lo que incorporar al depot sería realmente
tener un outlier dentro de la clusetrización. Tambien se realizaron experimentos de probar
utilizar el depot dentro del MST de zonificación y los resultados asociados a la clusterización
empeoran considerablemente con esa consideración.
Dado que estamos utilizando un MST utilizaremos como peso de las aristas los valores de
la matriz de tiempos de viaje, de esta manera si tenemos el cluster i-esimo y denotamos por
Tizone al MST de zonificación asociado al cluster i-esimo y a wTizone a su peso, utilizaremos la
notación análoga para el MST de balanceo. Ahora definimos la métrica de zonificación como:
|Clusters|
X
wTizone
i=1
En términos del problema de clusterizar puntos no es nueva la idea de utilizar MST, por
ejemplo en [32] se presenta un clustering jerárquico basado en MST. La bondad de utilizar
esta función para realizar un clustering del VRP es que estamos buscando puntos que están
cercanos en ruta, que es justo lo que uno esperaría que fuera lo que ocurriera en una solución
del problema de ruteo.
Ahora es necesario determinar que métrica de balanceo. Se decide utilizar la métrica del
rango, es decir:
Para poder trabajar con el balanceo es necesario poder estimar el valor del tiempo en
ruta de cada cluster (conjunto de puntos) para calcular T imei se utilizarán dos metodos, uno
asociado a los CVRP y otro a los VRPTW, la razón de esto es pues si somos capaces de
hacernos cargo de la parte de las capacidades mediante la clusterización el problema principal
se reduce a buscar una solución a un VRP o a entender las ventanas horarias. Es importante
mencionar que el balanceMST solo se utilizara cuando no hay ventanas horarias.
No es nueva la idea de utilizar una regresión para abordar aproximaciones de los largos
en ruta para TSP, CVRP e incluso VRPTW (ver [33, 34]), ahora la bondad de utilizar esta
regresión lineal es que no utiliza explícitamente condiciones geométricas lo cual nos permite
13
evaluar en tiempo constante (dado el peso del MST) y es dependiente del método de reso-
lución, lo cual puede ser beneficioso pues nos permite desligarnos de la potencia del solver
utilizado.
Consideremos que {[ei , li ]}ni=1 son las ventanas horarias de los puntos, denotamos por si el
tiempo de servicio de i, di,j el tiempo de viaje entre i,j y supondremos que evaluar d0,· o d·,0
nos dará el tiempo al depot. Luego vamos a definir un pre-orden para estos puntos, mirar 3.1
para el detalle, de esta manera es posible ordenar la lista de clientes mediante este pre-orden.
Notar que lo presentado en (3.1) es simplemente ordenar primero los clientes que empie-
zan antes y en caso de empezar al mismo tiempo se ordenan los que terminan antes, de esta
manera le damos cierta prioridad a los clientes que es necesario atender antes. Notar que
iRj y jRi si y solo si tienen la misma ventana horaria, en tal caso para decidir cual poner
primero escogeremos el que tenga menor índice entre i y j.
Supondremos que tenemos los clientes ordenados de esta manera, en caso de no estarlo los
ordenamos y renombramos, con esto presentamos el Código 3.4 que nos permite aproximar el
tiempo de viaje para rutear n clientes y determinar cierta noción de infactibilidad de consi-
derar este conjunto de puntos, es claro que si la métrica de infactibilidad es 0 entonces todos
los puntos son ruteables pero el caso contrario no es necesariamente verdad, luego deseamos
un número pequeño pero no necesariamente nulo.
4 unFeasible = 0
5
14
10 If (tentativeTime <= l_{1})
11 arrivalTime.add(tentativeTime)
12 feasibleClientes.add(1)
13 else
14 unFeasible++
15 end If
16
17 For i=2:|Clientes|
18 tentativeTime = max(d_{i-1, i} + s_{i-1} + arrivalTime.last, e_{i})
19 If (tentativeTime <= l_{1})
20 arrivalTime.add(tentativeTime)
21 feasibleClientes.add(i)
22 else
23 unFeasible++
24 end If
25 End For
26
29 For index=size(feasibleClientes):1
30 i = feasibleClientes.get(index)
31 tentativeTime = d_{i, 0} + s_{i} + totalTime
32 If (tentativeTime <= availableTime)
33 totalTime = tentativeTime
34 break
35 else
36 unFeasible++
37 totalTime = arrivalTime.pop
38 End If
39
40 End For
41
Como veremos más adelante este algoritmo nos permite tener una buena aproximación
del tiempo en ruta, mientras que en términos de complejidad es claro que post ordenamiento
es O(n) y ordenar los puntos, utilizando, TimSort es posible realizarlo en O(nlog(n)) (ver
Auger et al. [35]) luego obtenemos una complejidad total de O(nlog(n)).
15
3.2.2. Factibilidad De Los Movimientos
Notar que al estar trabajando con un VRP existen ciertos movimientos de puntos que se-
rán infactibles para el problema, aun cuando sean óptimos para el clustering, de esta manera
es necesario calcular si el movimiento es posible realizarlo en un contexto de VRP. Mostrare-
mos la lógica de los factibles (que llamaremos feasibles por su traducción al ingles) que están
asociados al VRPTW, pues cuando no hay ventanas horarias son los mismos con la salvedad
que se ignora todo lo dedicado a ellas.
Como se puede apreciar Código 3.5 y 3.6 siguen la misma estructura que consiste en revi-
sar si: (1) no sobrepaso la capacidad del vehículo (2) no sobre paso el tiempo disponible del
vehículo (3) no aumento la cantidad de nodos infactibles por ventanas horarias. Cada una de
dichas factibilidades puede apreciarse en el Anexo B, lo importante a destacar es que todas
son calculables en O(1); suponiendo que ya hemos calculado los tiempos de viaje del cambio
que estamos probando.
16
3.2.3. MST dinámico y complejidad del algoritmo
Notar que cada vez que se desee evaluar la función objetivo este proceso tiene complejidad
log(|Clusters|), eso pues para la parte de zonificación resulta en solo estudiar el cambio de
los clusters modificados y el cambio en el rango puede ser calculado utilizando una min-max
heap (ver Atkinson et al. [36]).
Por otro lado, como estamos utilizando MSTs para los calculos se vuelve necesario ac-
tualizarlos cada vez que se desea preguntar por un movimiento, como veremos mas adelante
dicha actualización se puede hacer de varias maneras. Una primera forma de resolver esto es
re construir los MSTs cada vez que se quiera consultar por la actualización y si consideramos
los algoritmos clásicos para resolver el problema del MST tenemos que ellos son del orden de
O(m + n log n), por simplicidad (pues en nuestro caso m = n2 ) digamos que es O(n2 ), esta
forma de atacar el problema es lo que llamaremos método de clusterización base.
Cabe mencionar, que como veremos, pueden existir leves diferencias en la complejidad
dependiendo si estamos trabajando con el modelo CVRP o VRPTW.
Proposición 3.1 Denotamos por T el número de iteraciones y si cada vez que se hace una
consulta se re construye el MST. Obtenemos una complejidad de
4
O Tn
Como se puede apreciar la complejidad es cuartica en n, esto genera que a nivel practico
se vuelva infactible realizar esta forma de clusterizar pues el aumento de tiempo de ejecución
se vuelve considerable.
17
2 # Output. El MST T ′ = (V ′ , ET′ ) para el nuevo grafo.
3 # Método. Inicialmente se marcan todos los vértices como nuevos, ET′ = ∅, y t una variable
,→ global. Se elige r ∈ V un vértice cualquiera y se ejecuta INSERT(r). Este
,→ procedimiento para cuando todos los verices son marcados como viejos.
,→ T ′ = (V ′ , ET′ ∪ {t}) es el MST para este nuevo grafo.
4 # Comentario. t es una variable global y es la arista mas pesada en el camino entre w y z,
,→ mientras que m es la arista mas pesada entre r y z.
5 Function INSERT(r)
6 r se marca como viejo.
7 m = (r, z)
8
18
,→ considerar las componentes conexas como nodos.
19 Function LV(r, s, w)
20 Marcar r como viejo
21 flag = 0 # determina si es hoja
22 For cada vértice v en L(r)
23 If v marcado como 1 y nuevo
24 flag = 1
25 LV(v, r, w)
26 End If
27 End For
28
29 If flag = 1
30 If lv (r) = ∅
31 lv (r) = (w, D(x)) con (w, r) ̸∈ T ′ , x ̸= w # x es único.
32 Else
33 Usando T ′′ = (V ′′ , E ′′ ) definido por lv (r), y el nuevo vertice w con sus costos (desde
,→ el array D) para cada uno de los vertices en V ′′ como input, llamar IN SERT (w).
,→ Usar el nuevo MST para actualizar el lv (r).
34 End If
35 End If
36 End Function
37
38
Existen resultados más modernos que pueden reducir esta complejidad, por ejemplo en
Nardelli et al. [38] se presenta como eliminar cualquier nodo posible en O(mα(n, m)), donde
19
α es la función inversa de Ackerman. Mientras que en Gaibisso et al. [39], para grafos plana-
res, se presenta un algoritmo lineal en m para resolverlo.
y h i
O n2 log(n) + (n + nclusters )2 + T n2 log(n) + (n + nclusters )2
para CVRP y VRPTW, respectivamente.
Demostración. Nuevamente los cálculos son sencillos pero largos y se pueden observar en
Anexo A.2.
Luego si se sigue acotando los valores utilizando que nclusters ≤ n se observar cómo es
que la complejidad se logró reducir por un factor de O(n2 / log(nclusters )) o O(n2 / log(n))
dependiendo del caso, lo cual es una rebaja considerable, pero sigue siendo costosa compu-
tacionalmente para instancias del orden de los 1000 puntos (llegando a demorarse horas).
Para mejorar la velocidad del algoritmo es posible introducir una noción similar a la de
vecinos más cercanos, pero sobre los clusters. Como ya se menciono anteriormente existe una
técnica para disminuir el tiempo de ejecución que consiste en eliminar a priori arcos muy
largos y solo analizar dentro de un sub conjunto de posibilidades, esto nace de la intuición
que uno espera que en buenas soluciones los puntos queden relativamente cercanos, además
en [40] se presentan mas detalles donde verifican numéricamente que en las soluciones tam-
20
bién tiende a ser el caso. De esta manera podemos utilizar la misma idea, finalmente realizar
un ruteo y uno espera que en clustering suceda un fenómeno similar. Para trabajar con esta
noción necesitamos una definición:
Definición 3.1 Dado C un conjunto de puntos, definimos los k−vecinos mas cercanos de C
como sigue
[
N NK (C) := N NK (u)
u∈C
Esta noción, en cierto sentido nos permite decir que puntos están cerca de la nube de pun-
tos que puede ser C. Notar que es posible que un punto de C forme parte de sus k−vecinos,
esto puede escaparse de la intiuición con que se definen los vecinos, a pesar de eso no va a
ser un inconveniente.
De esta manera somos capaces de limitar los movimientos entre clusters, si tenemos Ci , Cj
dos clusters aceptaremos mover xi ∈ Ci a Cj si y solamente si xi ∈ N NK (Ci ), es decir solo
moveremos el punto si es que esta en los vecinos del cluster al que queremos moverlo. De
manera similar definimos el movimiento para Exchange y en este caso ambos puntos tienen
que ser capaces de moverse.
Es importante notar que esta técnica no disminuye la complejidad en el worst case, a pesar
de lo anterior es claro que realizar esto puede ayudar considerablemente en la rapidez del
algoritmo a nivel practico pues nos permite estudiar muchas menos opciones.
Además, uno esperaría que desde un punto de vista de clusterización solo aquellos puntos
que estén en los bordes del cluster se muevan y lo hagan a clusters cercanos lo que implica que
una cantidad no menor de los vecinos ya van a pertenecer al cluster, disminuyendo aun más
la cantidad a estudiar. Esto se puede ver ejemplificado en la Figura 3.1 donde se muestra en
color azul aquellos puntos tales que sus 10 vecinos mas cercanos pertenecen al mismo cluster
que ellos, es decir solo aquellos puntos en rojo formarían parte de la búsqueda local.
21
Es interesante notar como es que la restricción sobre los vecinos influye principalmente
en la función objetivo del rango, esto es dado para la función de zonificación el óptimo del
problema se encuentra en generar un MST del grafo completo y eliminar las nclusters − 1 aris-
tas mas pesadas que pertenecen al MST, ver proposición 3.3. Dado lo anterior, sabemos que
se esperan conexiones no muy pesadas, es más si queremos asegurar un valor de K tal que
no perdamos optimalidad en zonificación basta mirar cual es el valor de K tal que cumpla
M ST del grafo completo ⊆ GK .
Proposición 3.3 Suponiendo unicidad de los pesos entonces la función objetivo de zonifica-
ción alcanza su óptimo realizando la siguiente construcción: Se construye el MST del grafo
completo y se eliminan las nclusters − 1 aristas mas pesadas. Luego cada componente conexa
forman la solución del problema.
Demostración. Si T es un árbol denotaremos por w(T ) su peso y si e es arista lo escribiremos
w(e).
Consideremos la siguiente separación de los arboles (Ti , {Tj }j̸=i ) es posible notar que es-
tamos ante la presencia de un corte lo que implica que la arista que hace dicha conexión vive
en el MST del grafo original. Esto lo podemos replicar para todo i, notar que es posible que
existan repeticiones entre ellas. Luego se unen aquellas conexiones generando al menos un
macro nodo menos, por tanto este proceso termina y es más termina cuando queda solo un
macro nodo. Además notar que la arista que agrego genera que dos arboles se unan por tanto
sigue siendo árbol, es decir al terminar este proceso vamos a tener un árbol y por tanto el
proceso a lo mas puede durar nclusters − 1 iteraciones.
nclusters X −1
nclusters
clusters −1
{êi }ni=1
X
Sea entonces se tiene que Ti + êi es un árbol, por tanto se
i=1 i=1
cumple que
nclusters
X X −1
nclusters
w(Ti ) + w(êi ) ≥ w(T ).
i=1 i=1
nclusters −1
X −1
nclusters
Sea {ei }i=1 las n−1 aristas mas pesadas del MST entonces se tiene que T − ei
i=1
es una solución factible del problema, pues cada vez que se elimina una arista aumenta en 1
la cantidad de componentes conexas. Esto implica que
X −1
nclusters nclusters
X
w(T ) − w(ei ) ≥ w(Ti ).
i=1 i=1
22
nclusters
X X −1
nclusters X −1
nclusters nclusters
X
w(Ti ) + w(êi ) − w(ei ) ≥ w(Ti )
i=1 i=1 i=1 i=1
X −1
nclusters X −1
nclusters
w(êi ) ≥ w(ei ).
i=1 i=1
Ahora, dada la construcción se cumple que êi ∈ T para todo i y ahora si es que fueran
las mismas aristas se tiene la igualdad directamente. Si no fueran podemos restar las que son
iguales por lo que, sin perder generalidad, supondremos que son todas distintas. Luego por
ei ser las aristas mas pesadas del MST se tiene que êj ≤ ei ∀i, j es decir las sumas son iguales
por lo que se concluye que
nclusters
X X −1
nclusters
w(Ti ) = w(T ) − w(ei ).
i=1 i=1
X −1
nclusters
Es decir T − ei es un conjunto de nclusters arboles y se obtiene el mismo peso que
i=1
la solución óptima obtenida, por tanto la estrategia propuesta también entrega una solución
óptima del problema. En particular también es posible deducir que el árbol generado a partir
de Ti resulta ser MST del problema original.
Por otro lado, no es fácil calcular la reducción de velocidad, pues se vuelve necesario
calcular
nclusters
X nclusters
X nXi −1
lo cual no es obvio, es posible notar (con cotas generosas) que existe una reducción clara
cuando K ≤ nclusters . Esto se debe a que, por ejemplo, para calcular como agregar puntos
hay que buscar todos los pares (punto, clusters) o sea n · nclusters casos y cada uno cuesta
O(n) con lo que hay O(n2 · nclusters ) y si utilizamos los K vecinos tenemos que cada punto se
conecta a lo más con min{nclusters , K} clusters por lo que se obtiene O(n2 min{nclusters , K}),
lo cual nos lleva a decir que claramente existe una disminución si es que K es pequeño en
comparación a la cantidad de clusters. Algo importante a destacar es que en la práctica uno
esperaría que la cantidad de conexiones a puntos fuera de clusters sea pequeña, lo razonable
es que en general no existan muchas conexiones exteriores y las que existan solo se conec-
ten a clusters realmente cercanos, básicamente apoyándose en la idea de que un punto de
un cluster va a tener puntos cerca y por tanto el punto exterior está cerca de todos esos puntos.
23
genera un proceso que se llamara Factibilizador. De este modo existe un Factibilizador de
Capacidad y un Factibilizador de Ventanas horarias.
Esto resulta que realmente el proceso de clusterización sea 3 veces el proceso original con
modificaciones leves de la aritmética que permite determinar movimientos factibles, por tan-
to, la complejidad no cambia.
Tras resolver el problema dentro de cada cluster se juntan todas las soluciones dentro de
una gran solución y se sigue una búsqueda local análoga a la del clustering pero aplicada a
la solución completa del VRP, esto es replicarlo lo hecho en la clusterización pero con ru-
tas construidas en vez del MST pues nos inspiramos en heurísticas del VRP. Es importante
mencionar que la función objetivo es necesario adaptarla para que tenga en consideración
el balanceo, si no es posible que se pierda la noción que nos entrega el clustering, para esto
utilizaremos la misma función objetivo, pero en vez de aplicada sobre los pesos del MST o la
estimación de tiempo utilizaremos los verdaderos valores de las rutas.
24
Capítulo 4
Otro beneficio de reducir la cantidad de aristas a considerar es que para eliminar puntos
de un MST existen resultados modernos del problema ANR (All Node Replacement), el cual
es clave para determinar cómo eliminar nodos de manera eficiente, entre ellos existe un al-
goritmo que es posible hacerlo en O(mα(n, m)), luego si logramos disminuir la cantidad de
aristas en un cluster tal que mα(n, m) ∈ o(n2 ) entonces utilizar dicho algoritmo va a resultar
ser más eficiente.
Antes de continuar damos una definición que será de utilidad pues es tal que gira en torno
a lo que deseamos probar en todo el capítulo.
Definición 4.1 Sean G = (V, E) y G′ = (V, E ′ ) dos grafos tales E ′ ⊆ E y tanto G como G′
son conexos. En tal caso decimos que G′ es optimal si el MST de G′ tiene el mismo peso que
el MST de G.
Otras nociones relevantes que nos ayudaran a trabajar en las demostraciones se presentan
25
a continuación. Siempre utilizaremos el grafo completo de n vértices, el cual lo denotamos
por Kn . En primer lugar, introduciremos una noción de componentes conexas asociadas a
eliminación de aristas en un árbol.
Definición 4.2 Sea T un arbol de Kn , dado e = uv definimos Vcc(u) como los vértices en la
componente conexa resultante de T al eliminar e y que contenga a u, de manera análoga lo
hacemos para Vcc(v) . Si no hay ambigüedad escribiremos cc(u) y cc(v).
Si G′ es un sub grafo conexo de G se tiene que el peso del MST de G′ es mayor o igual al
de G, por tanto, la noción de optimal nos dice cuando en verdad el MST estaba originalmente
incluido en G′ . De la definición 4.1 surgen dos preguntas naturales si existe un grafo G′ ̸= G
que cumpla lo deseado y que tanto es posible reducir el conjunto de aristas.
A priori no es claro que sea posible eliminar muchas aristas de un grafo y que el subgrafo
sea optimal, de hecho, veremos que la forma de eliminar aristas resulta ser relevante. La
Proposición 4.1 nos garantiza que preguntarnos eliminar aristas hace sentido.
Demostración. Supongamos que el resultado es falso, es decir eî ∈ T para algún î.
k − 1 < |cc(u)||cc(v)| − 1
llegaremos a una contradicción porque significa que podremos elegir e ̸∈ {ei }ki=1 tal que el
ciclo que forma T + e contiene a eî , esto implica que al considerar T + e − eî obtendremos un
árbol de menor peso, además utilizamos k − 1 pues de las k aristas más pesadas ya usamos eî .
Notar que |cc(u)||cc(v)| es equivalente a |cc(u)|(n − |cc(u)|) y dado que sin perder gene-
ralidad podemos suponer que |cc(u)| ≤ |cc(v)| obtenemos que |cc(u)| ≤ n2 , de esta manera
queremos encontrar el menor valor posible de la función f (x) = x(n − x) en el intervalo
[1, n2 ]. Dado que es una función cuadrática y el mayor valor se encuentra en n2 obtenemos que
f (1) ≤ f (x) con lo que 1(n − 1) ≤ |cc(u)||cc(v)| así obtenemos que
26
k − 1 ≤ (n − 2) − 1 < (n − 1) − 1 ≤ |cc(u)||cc(v)| − 1
demostrando lo pedido.
Por otro lado, en cierto sentido esta propiedad puede verse como un punto intermedio
entre que la función de pesos sea inyectiva y que puedan existir aristas con el mismo peso.
Lo anterior nos permite garantizar que funciona independiente del MST, en la Proposición
4.2 se presenta una leve genralización independiente de la función de pesos.
Proposición 4.2 Sea Kn con n ≥ 3 vértices, c : E → R una función de pesos y sean {ei }n−2i=1
las n − 2 aristas más pesadas. Entonces existe T MST tal que ei ̸∈ T, ∀i = 1, .., n − 2.
Demostración. Sea T un MST tal que contiene a ej ∈ T probaremos que es posible rempla-
zarlo por e ̸∈ {ei }n−2
i=1 , de esta manera es posible eliminar las n − 2 aristas de dicho árbol (de
manera iterativa) y encontrar uno que cumple lo deseado.
Una intuición detrás de porque el grafo k-NNG es una buena forma de representar esta
idea se encuentra en la propiedad de corte del MST. Para esto supongamos que la función de
pesos es inyectiva, sea T el MST y e = uv ∈ T , luego tenemos que el conjunto {cc(u), cc(v)}
es una partición por tanto la propiedad de corte nos dice que la arista más liviana entre cc(u)
y cc(v) está en el MST, en nuestro caso e. Lo anterior implica que hay |cc(u)| · |cc(v)| − 1
aristas que son más pesadas que e, en particular e tiene que ser la más liviana de las |cc(v)|
conexiones que u puede hacer con el conjunto cc(v), es decir, relativo a las conexiones de v
(o de v al conjunto cc(u)) la arista no puede ser muy pesada, es más dado que sabemos que
|cc(u)| o |cc(v)| es al menos n2 la arista e es más liviana que n2 de las conexiones de u o v,
27
dependiendo de cual de los dos conjuntos cumple la cota.
Nos interesara mantener lo mas posible la generalidad así que siempre supondremos que
se cumple la no ambigüedad de los k−vecinos mas cercanos, si es que no existe unicidad en
general los resultados pueden ser remplazados de para todo MST a existe un MST.
El objetivo de esta sección será intentar responder la pregunta: ¿Que valor de k tiene que
tomarse o bajo qué condiciones es posible asegurar que Gk es optimal?
n 1 2 3 4 5 6
1 16 47 89 39 67
2 16 65 64 17 55
3 47 65 33 82 22
4 89 64 33 66 23
5 39 17 82 66 77
6 67 55 22 23 77
n 1 2 3 4 5 6 7
1 0 625 821 458 480 799 478
2 625 0 442 645 282 884 300
3 821 442 0 254 430 159 522
4 458 645 254 0 418 380 679
5 480 282 430 418 0 613 386
6 799 884 159 380 613 0 402
7 478 300 522 679 386 402 0
28
En verdad el valor de ∆(T ) no está relacionado con la posibilidad del valor de k, si no que
la cota real (sin ningún supuesto) está relacionada a la cantidad de puntos presentes y no a
otras estructuras. Esto se aprecia en el Teorema 4.1 donde se presenta una cota justa para
el valor de k.
Teorema 4.1 Sea n ≥ 3, k ∈ {1, ..., n − 1}. Bajo esas condiciones se cumple que:
• Si k < ⌊ n2 ⌋ entonces existe una función de pesos ĉ tal Gk no es optimal para ĉ.
• Si ⌊ n2 ⌋ ≤ k entonces para toda c que no genera ambigüedad en los k−vecinos mas
cercanos se tiene que Gk es optimal.
Demostración. Representaremos los puntos de Kn como 1, 2, 3, ..., n. En primer lugar notar
que basta demostrar el primer punto para k = ⌊ n2 ⌋ − 1 y el segundo para k = ⌊ n2 ⌋ gracias a
que Gk ⊆ Gk+1 en el sentido que si e ∈ Ek =⇒ e ∈ Ek+1 .
Donde en vez de +∞ podemos usar pesos muy grandes y distintos, esto nos permite ga-
rantizar unicidad del MST. Sea T el único MST, luego lo único que nos basta demostrar es
que una de las aristas de T no se encuentra en Gk .
29
propiedad de ciclos del árbol y que e pertenece a esos ciclos se tiene que es más liviano (o
de igual peso) que todas las aristas de los ciclos. Luego si es que demostramos que podemos
armar suficientes aristas es posible justificar (por palomar) que necesariamente una de las
aristas de la forma (u, vl ) ó (uj , v) es parte de las k mas livianas de u o v lo cual sería una
contradicción a la no ambigüedad de c.
Para hacer lo anterior notamos que la cantidad de ciclos que se pueden armar, gracias a
las propiedades de árbol, son |cc(u)| − 1 o |cc(v)| − 1, spg supondremos que |cc(u)| ≤ |cc(v)|,
luego sabemos que n2 ≤ |cc(v)|. Ahora es claro que |N Nk (u)c | = |N Nk (v)c | = n − 1 − k y
dado que e no esta en ninguna de estos vecinos ya utilizamos una de estas aristas por tantos
quedan n − 2 − k disponibles, si demostramos que:
Ahora nos ponemos en casos sobre n para demostrarlo, si n es par tenemos que
n n n
n−2−k =n−2− = − 2 < − 1 ≤ |cc(v)| − 1
2 2 2
con lo cual demostramos lo deseado. Ahora si n es impar es necesario notar que n2 es un
numero decimal y que |cc(v)| es entero por tanto en verdad se cumple que n+1
2
≤ |cc(v)| con
esto se tiene que:
n−1 n+1 n+1
n−2−k =n−2− = −2< − 1 ≤ |cc(v)| − 1
2 2 2
con lo cual se concluye lo deseado.
Un corolario interesante de lo anterior es que nos garantiza que Gk es conexo si se toma
un valor suficientemente grande de k.
Lo interesante del Corolario 4.1 es que mejora en cierto sentido el resultado presentado en
el Teorema 2.1, pues no necesitamos suponer ninguna condición probabilista sobre la función
de peso pero se pierde en el sentido que k depende de n. Por otro lado Gk optimal implica
que Gk es conexo, por tanto uno espera que se necesite valores más grandes sobre k para ser
optimal que para ser conexo.
Lo importante del Teorema 4.1 es que nos caracteriza cuando podemos hacer la elimina-
ción, ya sabemos que no podemos hacerlo mejor que n2 sin suponer algo más. Lo interesante
de esto es que la estructura que lo hizo fallar es similar a la de clusrerización, es decir tenía-
mos dos agrupaciones de puntos donde eran livianas entre ellas esto nos da a entender que
si estuviéramos trabajo en estructuras clusterizadas un valor razonable a utilizar podría ser
n
K
con K la cantidad de clusters.
30
Dado el MST es posible seguir mejorando la cota, por ejemplo de la demostración se
deduce que
es un valor que cumple lo deseado y es una mejora a lo encontrado, sin embargo el pro-
blema de esto es que se vuelven dependiente del árbol o de suponer ciertas estructuras sobre
la función de peso. En la siguiente sección atacaremos este segundo punto, y supondremos
ciertas condiciones probabilistas.
En primer lugar será de utilidad definir lo que es un estadístico de orden. Dado una
muestra de n variables aleatorias el k-ésimo estadístico de orden corresponde al k valor mas
pequeño de la muestra, para mas detalles ver David y Nagaraja [41].
Dado que una arista viva en Gk significa que el peso de esta es de las k aristas mas livianas
de alguno de sus vértices es posible representar vivir en este grafo mediante su relación de
los estadísticos de orden, considerando al conjunto de aristas que tienen vértices en común
como muestras.
Lema 4.1 Consideremos X, {Xi }n−1 i=2 variables aleatorias continuas iid con cdf FX . Dado
t ∈ R y k ∈ [1, ..., n − 1] si denotamos por X(k) a su k-esimo estadístico de orden se cumple
que
!
n−2
P(X = X(k) | X = t) = FX (t)k−1 (1 − FX (t))n−k−1
k−1
Demostración. Notar que dado que X = t lo que deseamos es que k−1 variables sean menores
que t y el resto sea mayor, es decir tenemos que elegir k − 1 de n − 2 y no nos interesa en
que orden por tanto se cumple que
!
n−2
P(X = X(k) | X = t) = FX (t)k−1 (1 − FX (t))n−k−1
k−1
31
n−1
Lema 4.2 Consideremos X, {Xi }i=2 , {Yi }n−1
i=2 variables aleatorias continuas iid con cdf FX .
Sea t ∈ R y i, j ∈ [1, ..., n − 1] si denotamos por X(i) al i-ésimo estadístico de orden de
X ∪ {Xi }n−1
i=2 y de manera similar para Y(j) se cumple que
! !
n−2 n−2
P(X = X(i) , X = Y(j) | X = t) = FX (t)i+j−2 (1 − FX (t))2n−i−j−2
i−1 j−1
Demostración. Notando que dado X las variables X(i) , Y(j) resultan ser independientes y
utilizando el Lema 4.1 se concluye.
El ultimo lema que presentaremos nos permitirá trabajar con la idea de no pertenecer a
los k−vecinos más cercanos
donde
h i2
P(X > X(k) , X > Y(k) | X = t) = P(X > X(k) | X = t)
2
n−1
!
n−2
FX (t)i−1 (1 − FX (t))n−1−i
X
=
i=k+1 i−1
"n−2 ! #2
n−2
FX (t)i (1 − FX (t))n−2−i
X
=
i=k i
= [P(Z ≥ k)]2 = fn,k (t)
Proposición 4.3 Consideremos que las aristas del grafo distribuyen como FX iid variable
aleatoria continua. Y sean r, k ∈ R dos numeros tal que
k
FX (r) <
n−2
además suponemos que k ∈ [1, ..., n − 3]. En tal caso, dado e ∈ E se cumple que
32
" #−2(n−k−2) " #−2k
k k
P(Xe ≤ r, e ̸∈ Gk ) ≤ 1 − [1 − FX (r)]2(n−k−2) [FX (r)]2k+1
n−2 n−2
Para lo anterior utilizaremos la cota presentada en Arratia y Gordon [42] que dice que si
Z es Binomial(n, p) y si a = nk es tal que p < a < 1 entonces:
33
fn,k (t) = [P(Z ≥ k)]2
k
≤ e−2(n−2)H ( n−2 ,Fx (t))
!!
k
= exp −2(n − 2)H , FX (t)
n−2
!
k k 1
= exp −2(n − 2) log
n−2 n − 2 FX (t)
! ! !
k k 1
+ 1− log 1 −
n−2 n − 2 1 − FX (t)
! ! !
k 1 k 1
= exp −2k log − 2(n − k − 2) log 1−
n − 2 FX (t) n−2 1 − FX (t)
" #−2k " #−2k " #−2(n−k−2) " #−2(n−k−2)
k 1 k 1
= 1−
n−2 FX (t) n−2 1 − FX (t)
" #−2(n−k−2) " #−2k
k k
= 1− [1 − FX (t)]2(n−k−2) [FX (t)]2k
n−2 n−2
g(t) ≤ g(r)
con lo cual se tiene que
34
" #−2(n−k−2) " #−2k
k k
fn,k (t) ≤ 1 − g(t)
n−2 n−2
" #−2(n−k−2) " #−2k
k k
≤ 1− g(r)
n−2 n−2
" #−2(n−k−2) " #−2k
k k
= 1− [1 − FX (r)]2(n−k−2) [FX (r)]2k
n−2 n−2
Si bien este es un resultado intermedio que utilizaremos para las demostraciones de los
resultados importantes por sí mismo es relevante pues nos asegura que las aristas que no
viven en Gk no son muy livianas.
A continuación presentaremos uno de los resultados más relevantes, donde veremos que
es posible garantizar que Gkn contiene al árbol de manera asintótica para cierta sucesión kn
conveniente.
Teorema 4.2 Sea un grafo donde el peso de las aristas distribuye iid como una variable
aleatoria continua con cdf FX y suponemos que
1
• Sea αn una sucesión positiva y acotada superiormente tal que n αn
→ 0.
• FX invertible.
• X≥0
Dado
(1 + αn ) log(n) + log(log(n))
kn := (n − 2) (rn + FX (rn )) +
2
donde
!
2(2 + αn ) log(n)
rn := FX−1
n
entonces se cumple que
35
P(∃e ∈ M ST \Gkn ) = P(∃e ∈ M ST \Gkn , Xe ≥ rn ) + P(∃e ∈ M ST \Gkn , Xe ≤ rn )
luego si vemos que cada una de las expresiones se va a cero se concluye lo deseado.
Antes de continuar presentamos un resultado de Steele [43] que dice que si F es una
función de distribución y T el árbol entonces se cumple que
y notando que
e
en2 e−nFX (rn )/2 =
n αn
se concluye que P(∃e ∈ M ST \Gkn , Xe ≥ rn ) → 0. Por otro lado tenemos que
[
P(∃e ∈ M ST \Gkn , Xe ≤ rn ) = P( e ∈ M ST \Gkn , Xe ≤ rn )
e∈E
X
≤ P(e ∈ M ST \Gkn , Xe ≤ rn )
e∈E
2
≤ n P(e ∈ M ST \Gkn , Xe ≤ rn )
Notamos que
2(2 + αn ) log(n)
(n − 2)FX (rn ) = (n − 2) < 2(2 + αn ) log(n) ≤ kn
n
concluyendo que es posible ocupar las cotas demostradas anteriormente, con lo que se
tiene
36
" #−2(n−kn −2) " #−2kn
kn kn
1− [1 − FX (rn )]2(n−kn −2) [FX (rn )]2kn FX (rn )
n−2 n−2
" #−2kn
kn
≤ [FX (rn )]2kn FX (rn )
n−2
" #2kn
FX (rn )(n − 2)
= FX (rn )
kn
" #2kn
kn − βn
= FX (rn )
kn
" #2kn
2βn
= 1− FX (rn )
2kn
≤ e−2βn FX (rn ) (*)
2(2 + αn ) log(n)
=
ne2(n−2)rn eγn
log(n)
≤ M 2(n−2)rn 2γn
ne e
Importante notar que para (*) sea verdad es necesario que −2βn ≥ −2kn es decir βn ≤ kn
lo cual se cumple gracias a la construcción e hipótesis.
Ahora notar que lim rn = FX−1 (0) esto pues 2(2 + αn ) es acotado y es más lo hace
n→∞
decrecientemente por tanto:
1 1
(n − 2)FX−1 (0) ≤ (n − 2)rn =⇒ ≤ −1
e(n−2)rn e(n−2)FX (0)
log(n) log(n) 1 1
M ≤M −1
ne2(n−2)rn eγn 2γ
n e2(n−2)FX (0) e n
log(n) 1 log(n) 1 1
= =
n eγn n log(n)n1+αn n2+αn
con lo que
1
n2 P(e ∈ M ST \Gkn , Xe ≤ rn ) ≤ →0
nαn
es decir hemos demostrado que
P(∃e ∈ M ST \Gkn , Xe ≤ rn ) → 0
así concluyendo lo deseado.
37
Observación 3 Es importante notar que cuando decimos FX invertible nos referimos en el
sentido tal que el dominio está restringido al soporte de X.
Lo relevante del Teorema 4.2 es que nos garantiza que asintóticamente y casi seguramente
el grafo Gkn contenga al MST. Dado esto si podemos asegurar que |Ekn | ∈ o(n2 ) logramos
garantizar que obtendremos una mejora en la complejidad de la heurística que planteamos
anteriormente.
Si es posible realizar la reducción en ciertos casos, por ejemplo gracias al Corolario 4.2
podemos asegurar que kn ∈ O(log(n))) para el caso donde los pesos son U ([0, 1]), por lo que
se cumple que kn ∈ o(nα ) con α > 0 luego utilizando que |Ekn | ≤ kn n con lo que es posible
asegurar |Ekn | ∈ o(n2 ).
kn ∈ O(log(n))
Notar que esto es interesante pues nos garantiza que es posible obtener una mejora de
la complejidad del algoritmo para ciertos casos del algoritmo. Ahora si consideramos el caso
euclidiano, donde los puntos se posicionan en un cuadrado uniforme de largo 1 y la distancia
entre los puntos es la distancia euclidiana presentamos el Teorema 4.3, el cual veremos es
una generalización estricta a lo ya presentado.
(1 + αn ) log(n) + log(log(n))
kn = (n − 2)rn +
2
donde
1
• αn es una sucesión acotada positiva tal que n αn
→ 0.
q
log(n)
• rn = πn
se tiene que
lim P(M ST ⊆ Gkn ) = 1
n→∞
luego, √
gracias a que la distribución es uniforme iid entonces podemos pensar X esta
dado por A2 + B 2 donde A, B son iid y distribuyen como X1 − X2 , utilizando convolución
obtenemos que:
38
1 + t si − 1 ≤ t ≤ 0
fA (t) =
1 − t si 0 ≤ t ≤ 1
así se tiene que:
t2 + t + 12 si − 1 ≤ t ≤ 0
2
FA (t) =
− t2 + t + 1
si 0 ≤ t ≤ 1
2 2
t4 8 3
FX (t) = P(X ≤ t) = P(X 2 ≤ t2 ) = − t + πt2
2 3
2
Ahora notar que si t es pequeño se tiene que FX (t) ≤ t ≤ t de esta manera definiendo
βn := (1+αn ) log(n)+log(log(n))
2
obtenemos que
39
" #2kn
FX (rn )(n − 2)
n2 P(e ∈ M ST \Gkn , Xe ≤ rn ) ≤ n2 FX (rn )
kn
" #2kn
rn (n − 2)
≤ n2 FX (rn )
kn
" #2kn
2βn
= n2 1− FX (rn )
2kn
≤ n2 e−2βn FX (rn )
n2
≤ M 2βn rn2
e
M n log(n)
=
π n1+αn log(n)
M 1
=
π n αn
concluyendo así lo deseado.
El resultado es mas ajustado que el del teorema general pues para t suficientemente pe-
queño
FX (t) ≤ t2
√
entonces t ≤ FX−1 (t). Así dado que 2(2+αnn) log(n) → 0 para n suficientemente grande
s s !
log(n) 2(2 + αn ) log(n) 2(2 + αn ) log(n)
(n − 2) ≤ (n − 2) ≤ (n − 2)FX−1
πn n n
lo que
q implica que esto es una mejora sobre el teorema general, además es claro que
kn ∈ O( n log(n)) lo cual va a resultar ser importante.
Es relevante mencionar como estos resultados son sobre estimaciones del valor mas justo
que es posible tomar, esto pues las cotas que se hicieron son burdas pues se ignora el hecho
que e ̸∈ Gkn o que e ∈ M ST , dependiendo de cuál de las cotas, luego se espera que los valores
límites de kn sean más ajustados que los presentados.
La discusión anterior no solo revela la relación entre MST y Gkn , si no que también nos
da cierta noción de cómo se comporta el MST, el cálculo de P(e ∈ M ST ) es complejo y por
eso intentamos no usarlo, de todas maneras cuando estamos en el caso U ([0, 1]) se vuelve
relativamente claro que esta probabilidad no puede ser muy pequeña pues tenemos que:
40
1+ϵ
uno espera que para n grande P(e ∈ M ST ) ≥ n2
donde ϵ > 0, de hecho podemos hacerlo
mucho mejor si utilizamos la Proposición 4.4
Proposición 4.4 Dado k ∈ [1, ..., n − 1] y si tenemos distribución U ([0, 1]) en los pesos se
tiene que
k
X n−1
X
P(e ∈ Gk ) = 2 an (i, j) + an (i, i)
i=1 j=i+1
n−2 n−2
donde an (i, j) = i−1 j−1
B(i + j − 1, 2n − i − j − 1) y B(x, y) es la función beta.
Demostración. Denotemos por ku y kv al valor de los k−vecinos que corresponde e = uv, es
decir e es el ku vecino más cercano de u y el kv vecino más cercano de v, luego definimos
ke = min{ku , kv } esto implica que
k
X
P(e ∈ Gk ) = P(ke = i)
i=1
Notamos que el evento ku = i, ku < kv es lo mismo que decir que Xe = X(i) , Y(i) < Xe , pues
sabemos que Y(i) ̸= Xe pero dado que i < kv necesariamente el estadístico al cual corresponde
Y tiene que ser más grande que i, con lo cual se tiene que:
41
n−1
X
P(Xe = X(i) , Y(i) < Xe ) = P(Xe = X(i) , Xe = Y(j) )
j=i+1
n−1
X Z 1
= P(Xe = X(i) , Xe = Y(j) | X = t)
j=i+1 0
n−1
! !
n−2 n − 2 Z 1 i+j−2
(1 − t)2n−i−j−2 (∗)
X
= t
j=i+1 i−1 j−1 0
n−1
! !
X n−2 n−2
= B(i + j − 1, 2n − i − j − 1)
j=i+1 i−1 j−1
n−1
X
= an (i, j)
j=i+1
42
n−1
X
2 an (1, j) + an (1, 1) ≤ P(e ∈ M ST )
j=2
Se puede apreciar como la perdida de optimalidad es casi nula, incluso teniendo en con-
sideración que estamos tomando valores de k fijos, y que al aumentar n pareciera tender a
ser mas parecido el valor real con el utilizado. Esto da a entender, no solo que los resultados
encontrados pueden ser considerablemente mayores al menor posible, también nos dice que
la perdida de la función objetivo al considerar el MST restringido es pequeña, en las simu-
43
laciones no alcanza a superar el 0.6 %. Lo anterior da a entender que sería posible estudiar
que tanta optimalidad se pierde al considerar Gk para un n fijo y que uno puede esperar que
esta no sea alta.
Otra forma de notar que los valores encontrados pueden ser mayores a no ser ajustados,
se encuentra en las demostraciones. En ellas se utilizo la siguiente cota
a prior esta cota pareciera que se está siendo demasiada burda pues sabemos que a lo más
n − 1 elementos por lo que se puede llegar a pensar que es posible acotar por un valor menor.
En general uno esperaría que se puede utilizar nP(e ∈ M ST \Gkn , Xe ≤ rn ), a pesar de esto
eso no es posible hacerlo pues al momento de considerar los n − 1 estamos imponiendo la
condición de que e ∈ T por tanto es necesario condicionar para obtener la información extra.
Es más, se puede observar cómo en simulaciones que considerar n en vez de n2 es un valor
mucho menor que la verdadera probabilidad, para ver esto y por simplicidad consideraremos
rn = +∞ y kn = 3.
Las simulaciones las realizaremos usando Monte Carlo, dado que cada probabilidad la
podemos interpretar como la esperanza de una indicatriz, esto nos genera la Figura 4.2
donde la curva naranja corresponde a n2 P(e ∈ M ST \G3 ), la verde a utilizar n y la azul la
verdadera probabilidad. Como se puede apreciar la cota con n es considerablemente menor
al valor de la probabilidad real, incluso para valores pequeños de n, mientras que la cota
con n2 si se encuentra como cota superior de la verdadera probabilidad. Además, es posible
notar como la probabilidad con n2 es una sobre estimación del valor deseado lo cual vuelve
a reforzar la idea de que se están trabajando con cotas burdas y por tanto los resultados no
necesariamente van a ser lo más ajustados posibles.
44
4.2. Aplicaciones
Dado que ahora somos capaces de reducir la cantidad de aristas obtenemos la Proposición
4.5 que nos dice que el algoritmo de clusterización puede hacerse mas rápido, al menos dentro
de sus sub proceso.
Proposición 4.5 Si estamos bajos las hipótesis del Teorema 4.2 o 4.3 es posible resolver el
problema de eliminar todos los puntos de un MST en O(|Ekn |α(n, |Ekn | )) con alta probabili-
dad.
Lo interesante de lo anterior es que |Ekn | ≤ nkn , por tanto (ignorado la función inversa) se
obtiene que es similar a O(kn n) así si es que kn n ∈ o(n2 ) se genera una mejora en velocidad
cada vez que se desee eliminar puntos.
Si estamosqen el caso euclidiano, una hipótesis razonable en el contexto del VRP, tenemos
que kn n ∈ O( n3 log(n)) por tanto logramos reducir la cantidad de iteraciones asociadas a la
eliminación de puntos, lo anterior nos garantiza que somos capaces de aumentar la velocidad
y mantener la optimalidad. A pesar de lo anterior, la complejidad del algoritmo sigue siendo
similar y disminuye levemente, lo que realmente se logra hacer es disminuir la cantidad de
operaciones n2 que hacer, esto se aprecia en la Proposición 4.6.
q
O n2 + h (n + nclusters )3 log(n + nclusters )
q
2
)3
+ T n log(nclusters ) + h (n + nclusters log(n + nclusters )
y
q
O n2 log(n) + h (n + nclusters )3 log(n + nclusters )
q
2
)3
+ T n log(n) + h (n + nclusters log(n + nclusters )
45
2.7 de [45]).
Como ya se mencionó al tener un MST en cada cluster tenemos que el MST de la to-
talidad del grafo está dada por re conectar cada uno de estos clusters como macro nodos,
ahora sabemos que estas reconecciones no son más pesadas que los n2 vecinos mas cercanos o
kn en general, si tomamos el approach probabilista. Esto es relevante pues dada la discusión
de optimalidad de la función objetivo de zonificación nos entrega un primer acercamien-
to a que es posible aumentar la velocidad sin perjudicar esa parte de la optimalidad, lo que
deja abierto a seguir entendiendo cómo se comporta el movimiento para la función en general.
Por otro lado, tal y como se menciona en [11], existen estudios en Física, Cosmología y
Astrofísica donde utilizan MST, es mas ahí mismo utilizan un grafo de KNN para poder
realizar los cálculos del MST. Tras lo demostrado si es que hacemos supuestos probabilistas o
tomamos k = n/2 es posible ajustar el valor de k tal que aumentemos la velocidad de cálculo
y manteniendo la optimalidad del MST, ya sea siempre o con harta probabilidad.
Por ultimo cabe destacar que este análisis permite justificar que la idea utilizadas en gra-
nular search son validas en el contexto del MST, es decir es posible reducir el espacio de
búsqueda sin perder optimalidad. Esto da a entender que sería posible ahondar más en estas
técnicas y buscar obtener garantías sobre problemas mas complejos como lo son el TSP y
VRP, lamentablemente las demostraciones se basaron fuertemente en propiedades y resulta-
dos del MST, por tanto no es directo poder extender estos resultados a dichos problemas,
pero si dan una intuición de que puede ser beneficioso hacerlo. Además es posible observar
que para el TSP es posible decir que el algoritmo de Christofides ([31]) puede ser ajustado
haciendo esta limpieza de aristas al momento de la construcción del MST, luego sabemos
que antes de realizar el matching si es posible garantizar que hay varias aristas que a priori
pueden ser ignoradas, bajo esto solo faltaría entender como el matching se vería afectado con
esta reducción y si es posible mantener las garantías del algoritmo con esta eliminación o si al
momento de realizar esa parte es necesario volver a utilizar todas las aristas o otra cantidad
disponible.
46
Capítulo 5
Resultados numéricos
Para las instancias de CVRP utilizaremos las instancias de Homberger modificadas, estas
consistirán en eliminarle las ventanas horarias, esto genera que de las 300 instancias obtenga-
mos 30 de prueba, pues la diferencia entre las instancias de un mismo tipo (por ejemplo entre
C_2_1 y C_2_2 son las ventanas horarias). Para el VRPTW utilizaremos las instancias de
Homberger sin ninguna modificación.
Para determinar la cantidad de vehículos para las instancias del CVRP, se decide utilizar
la cota mínima posible es decir:
& '
demanda total
k :=
capacidad total
Donde demanda total hace referencia a la suma de las demandas de los nodos y capacidad
total a la capacidad máxima de un vehículo.
Para el caso del VRPTW se utilizará la cantidad de vehículos de las best known solution
(obtenidas de [46]).
47
buscar los mejores representantes del problema mediante un proceso iterativo. Utilizaremos
una versión mejorada del algoritmo llamda FasterPam que fue presentada por Schubert y
Rousseeuw [47], este algoritmo consiste en realizar una modificación al algoritmo Pam lo
cual le permite solventar uno de los problemas de velocidad que tiene la versión clásica.
En términos del ruteo compararemos cuatro versiones distintas, que se encuentran resu-
midos en la Tabla 5.1. Llamaremos Heurística al algoritmo propuesto en el trabajo, es decir
a clusterizar, rutear cada cluster y juntar las soluciones para una ultima búsqueda local con
la instancia junta. Diremos Solo clustering cuando hablemos de realizar el mismo proceso
de Heurística pero utilizaremos como algoritmo de clustering solamente FasterPam, es decir
solo realizar la clusterización inicial. El nombre SimpliRoute consistirá en rutear la instancia
completa con el algoritmo de la empresa SimpliRoute. Por ultimo, Best know solution se
referira a utilizar los resultados reportados como la mejor solución en [46].
Nombre Descripción
Heurística Resolver el problema con la heurística planteada.
Solo clustering Utilizar FasterPam en vez de la clusterización planteada.
SimpliRoute Resolver la instancia completa con el solver de SimpliRoute.
Best know solution Las mejores soluciones reportada.
Utilizando solo el peso del MST para aproximar el resultado se obtiene un MAPE de
22.99 % entre todas las instancias, mientras que al realizar la regresión lineal se obtiene un
R2 = 0.999 y MAPE de 1.55 %. Las mejoras por instancia se puede apreciar en la Tabla 5.2,
como se puede apreciar todos los casos presentan mejoría y en la mayoría es considerable.
Antes de la regresión las instancias R1 y RC1 presentaban un valor superior a 11 % de mape
y posteriormente todas ellas disminuyen a menos de 3 %, incluso en las instancias C1 y C2
donde se obtenía un buen aproximado se obtienen mejoras considerables. Cabe destacar que
los resultados de la aproximación llegan a ser competitiva con los resultados presentados en
Figliozzi [34].
5.3.2. VRPTW
Para el caso con ventanas horarias realizamos el algoritmo propuesto en Código 3.4 para
estimar el tiempo en ruta, que de manera greedy busca insertar la mayor cantidad de puntos
48
Tabla 5.2: MAPE ( %) usando solo el peso del MST con tiempo de servicio
Instancia Sin regresión Con regresión Instancia Sin regresión Con regresión
C1_2 3.20 0.77 R2_6 6.95 2.31
C2_2 1.32 0.52 RC1_6 15.18 2.24
R1_2 11.83 2.19 RC2_6 7.36 2.16
R2_2 6.51 2.31 C1_8 6.41 0.65
RC1_2 11.61 2.75 C2_8 2.51 0.51
RC2_2 5.68 2.48 R1_8 16.65 1.83
C1_4 4.00 0.63 R2_8 6.85 2.38
C2_4 1.46 0.38 RC1_8 17.45 1.84
R1_4 13.10 2.05 RC2_8 6.44 3.41
R2_4 4.50 2.37 C1_10 7.80 0.67
RC1_4 13.65 1.95 C2_10 3.06 0.54
RC2_4 4.59 2.94 R1_10 18.12 1.60
C1_6 4.72 0.61 R2_10 5.86 4.36
C2_6 2.23 0.33 RC1_10 18.48 1.80
R1_6 15.45 1.59 RC2_10 9.43 3.07
mediante un orden de las ventanas horarias. Cabe destacar que es necesario hacer una mo-
dificación sobre lo que se hizo para el CVRP pues si se vuelve a entrenar el modelo utilizado
anteriormente con estas instancias se obtiene un MAPE de 53.97 % con un R2 de 0.315, esto
es natural pues no se esta considerando los tiempos de espera ni la compatibilidad de las
ventanas horarias dentro de este calculo.
49
Ya vimos que si eliminamos las nclusters −1 aristas mas pesadas del MST del grafo completo
obtenemos una solución óptima para la zonificación y gracias al capitulo anterior sabemos
que podemos saber el peor caso de la cantidad de arcos necesarios para poder recuperar la
solución, bajo ciertas hipótesis dependiendo del contexto.
De esta manera nos gustaría entender que efecto tiene sobre la la función objetivo y la
velocidad si realizamos la reducción de aristas. Para esto realizaremos un estudio numérico
para distintos valores de K vecinos donde se evaluarán los efecto, para estos experimentos
tomaremos un K que sea proporcional al número de puntos, es decir
K = Kn = ⌈αn⌉
con α ∈ (0, 1], de esta manera α puede pensarse como el porcentaje de aristas que queremos
mantener conectadas. Analizaremos los caso de α ∈ {0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1}.
5.4.1. CVRP
En la Figura 5.1 se puede observar el efecto que tiene en la función objetivo y en los tiempos
de ejecución para las instancias de tamaño 200 puntos, es posible notar como rápidamente
(al considerar el 30 %) se llega a un punto donde se deja de perder optimalidad y la velocidad
llega a un punto de ser al menos 50 % más rápido. Algo relevante es que si se observa el
caso de tamaño 1000 (Figura 5.2) la elección de α ya no se vuelve relevante para la función
objetivo pues los cambios son infimos y el efecto considerable es sobre la velocidad.
50
Figura 5.1: Gráficos instancias tamaño 200
Otro punto destacable es que a veces considerar α pequeño puede ayudar a salir de óptimos
locales que no son realmente beneficiosos, por ejemplo para el caso de n = 400 se aprecia
claramente este efecto, Figura 5.3. Este comportamiento observado se aprecia para todos los
tamaños de instancias, es decir valores pequeños de α, tales como {0.1, 0.2, 0.3}, entregan
resultados casi óptimos o óptimos (en comparación a α = 1) con una reducción del tiempo
de ejecución considerable, para ver el resto de gráficos mirar el Anexo D.1.
51
Figura 5.3: Función objetivo tamaño 400
5.4.2. VRPTW
Para este caso se vuelve más complejo la forma de representar la información pues son 10
instancias por cada tipo y tamaño. Para n = 200 y n = 1000 se muestra la primera instancia
de cada tipo en Figura 5.4 y 5.5, respectivamente.
52
Figura 5.5: Gráficos primera instancias tamaño 1000
5.5.1. CVRP
Solo clustering vs Heurística
En este caso de 30 instancias en 14 se insertan los mismos, 15 se insertan más clientes y en
1 se insertan menos. Por otro lado, en términos de la métrica de balanceo 24 de 30 instancias
disminuye, de las 6 que aumentan en la mitad se llegan a insertar más clientes, además
cuando se disminuye (en promedio) es de un 31 % aproximadamente, para representar esto
presentamos la Figura 5.6 en este gráfico (y todos aquellos que utilicen las mismas variables
en otras secciones) se utiliza lo siguiente:
lo anterior significa que si el eje x es positivo (negativo) se insertaron más (menoss) clien-
tes, mientras que si el y es positivo (negativo) la función objetivo aumento (disminuyo) su
valor, esto implica que en el mejor de los casos nos interesa eje x positivo e y negativo, pero
dado que insertar mas clientes no necesariamente nos permite mejorar la función objetivo de
balanceo de tiempo en general estar en el cuadrante I y IV es un buen resultado, mientras
53
que si x = 0 ahi es relevante que el valor de y sea negativo.
Es importante mencionar que dado que dentro del algoritmo la función objetivo clásica
es igual de importante que la de balanceo, por tanto observar el gráfico de la Figura 5.7 es
importante para entender que tanto se esta perdiendo en optimalidad clásica por balancear,
54
pues si este valor aumenta considerablemente en comparación al balanceo se puede volver
una solución no deseada.
La discusión anterior nos muestra que el método propuesto no solo se es capaz de con-
siderar una mejor inserción de clientes y de balanceo que solo una clusterización, sino que
también el algoritmo es capaz de encontrar soluciones que son más óptimas y más balancea-
das.
Para ver los efectos del algoritmo mostraremos la solución de dos instancias y el valor de
la función objetivo de balanceo, esto lo realizaremos para C22 y R12 , es decir las instancias
C2 y R1 de 200 nodos.
(b) Heurística.
Se puede apreciar en Figura 5.8 como es que mediantes leve cambios de puntos es posible
disminuir considerablemente (por más del doble) la métrica sobre balanceo. Mientras que en
5.9 es posible observar como es que realizando movimientos de puntos entre rutas cercanas es
55
posible disminuir la función objetivo y generar que cluster que antes no eran factibles ahora
lo sean logrando insertar más puntos, esto se puede apreciar con el punto (120, 60) que no
fue ruteado en Solo clustering pero si con la Heurística.
(b) Heurística.
SimpliRoute vs Heurística
En este caso obtenemos que en 28 de las 30 instancias se insertan más o la misma cantidad
de clientes, de esos 28 caso en 20 de ellos se logra aumentar la cantidad de clientes insertados.
En términos de la métrica de balanceo en 28 de las instancias disminuye. Lo anterior se puede
apreciar en la Figura 5.10.
56
Figura 5.10: Porcentaje objetivo balanceo vs porcentaje clientes insertados
5.5.2. VRPTW
Solo clustering vs Heurística
En este caso el 68 % de las instancias aumentan su inserción y el 78.67 % disminuye la
métrica de balanceo (ver Figura 5.11), es importante destacar que en promedio la métrica
disminuye un 14.06 % y, en los casos que disminuye, se transforma hasta 24.36 %. En términos
de optimalidad, si consideramos nuevamente la distancia recorrida, en promedio aumenta un
3 %.
57
Como se puede apreciar en general el proceso de clusterización ayuda a poder aumentar
los clientes insertados y disminuir la métrica de balanceo, luego aplicando un máximo entre
la solución sin el proceso completo de clusterización y este proceso es posible siempre tener
como base no realizar el proceso, es decir nunca empeoraremos en función a solo clusterizar
y en general se tendera a mejorar el balance sin perjudicar la métrica de optimalidad.
(b) Heurística.
Como se puede apreciar en la Figura 5.12 sigue ocurriendo que mediante pequeños inter-
cambios entre ruta se logra disminuir la métrica de balanceo por aproximadamente 5 veces.
En la Figura 5.13 se aprecia un comportamiento más interesante, si se observa la ruta de
color rojo termina cruzando todo el mapa esto se atribuye a dos puntos. El primero es por
ser la métrica de balanceo el rango es posible que se intente aumentar el largo de la ruta con
el fin de aumentar el valor mínimo, esto puede ocurrir tanto al momento de clusterizar como
58
posterior a juntar las soluciones. El segundo es debido a los intercambio permitidos con los
vecinos del cluster rojo y morado son vecinos se tiene que puntos que estén en los extremos
de los clusters evalúen intercambiarse, lo cual puede ser beneficioso para las métricas pero no
para el resultado deseado. Dado lo anterior, si estos efectos se desean evitar puede ser bene-
ficioso estudiar el efecto de ponderar las función objetivo, redefinir la noción de vecinos para
el cluster y/o utilizar funciones que sean monótonas como el máximo o máximo lexicográfi-
co, ver Matl et al. [4] para más detalle en el tipo de funciones de balanceo y sus características.
(b) Heurística.
SimpliRoute vs Heurística
Al comparar los resultados se obtiene que en 297 instancias se insertan más o la misma
cantidad de clientes, siendo 2 de ellas las que insertan la misma cantidad. Mientras que en
términos de la métrica asociada al balanceo en 277 se disminuye y 33 aumenta, esto se puede
apreciar en el gráfico de la Figura 5.14.
59
Figura 5.14: Porcentaje objetivo balanceo vs porcentaje clientes insertados
De lo anterior se puede apreciar cómo es que si logra generar un proceso con mejor niveles
de inserción y balanceo y esto incurre en una perdida de optimalidad clásica. Cabe destacar
que al insertar más clientes es posible que la perdida de optimalidad de la función objetivo
clásica se deba a esto, a pesar de lo anterior se logra disminuir el balanceo en el orden de 3
veces más que el aumento ocurrido, lo cual termina siendo beneficioso para la función objetivo
trabajada, que como ya se menciono consiste en la suma del balanceo y de la función clásica.
60
Best known solution vs Heurística
En esta parte obtenemos la Tabla 5.3 de resultados sobre la métrica de balanceo.
Lo anterior implica que incluso cuando se logra insertar todos los clientes de la instancia
en la mayoría de los casos se logra disminuir la métrica de balanceo, en promedio el tradeoff
entre optimalidad y balanceo ocurre en un ratio en que ocurre es cercano al 1 : 1, es decir si
es que la función objetivo clásica aumento un 5 % se obtuvo una disminución de 5 % en la
métrica de balanceo. Otro punto interesante es que en la mayoría de los casos si se presenta
una disminución de la métrica de balanceo utilizado.
Por otro lado, se puede observar cómo el proceso si logra su cometido, en general se
disminuye la métrica de balanceo y logra insertar mas clientes comparándose contra un
approach naive. Cuando se compara contra los resultados de la empresa en general se logran
mejorar las métricas de balanceo e inserción a cambio de perjudicar un poco la metrica de
suma de tiempo en ruta. Cuando se comparar contra las Best know solutions es posible
observar como se encuentran soluciones mas balanceadas, y en aquellas instancias donde se
logran insertar todos los clientes el tradeoff existente entre la función de optimalidad clasica
y la métrica de balanceo es 1 : 1, es decir si la función de optimalidad clásica disminuye un
dado porcentaje en comparación a las best known solution ese valor fue aumentando en la
optimalidad asociada a la métrica de balanceo.
61
Capítulo 6
Conclusiones
En esta tesis se logró presentar un algoritmo de clusterización enfocado al VRP, que per-
mite obtener soluciones con consideraciones de balanceo de tiempo en ruta. Esta metodología
es aplicable para cualquier forma que utilice Cluster First - Route Second y tiene en conside-
ración las restricciones de capacidades y ventanas horarias del problema. Además se generan
variaciones para tener en consideración cuando las ventanas horarias son restrictivas y para
cuando no.
Se logra encontrar relaciones teóricas entre el grafo de los k vecinos más cercanos y el
MST. Para el caso determinista se encuentran cotas ajustadas para el valor de k donde se
puede garantizar que siempre se contiene al MST. Para el contexto probabilista se logran
demostrar resultados asintóticos, en el tamaño de los nodos, donde se puede garantizar que
el MST esa contenido en el grafo de los vecinos mas cercanos. Además se estudio como estos
resultados son aplicables para disminuir la complejidad del algoritmo propuesto y en distintas
áreas que ocupen los MSTs pues nos garantizan que con alta probabilidad no perderemos la
optimalidad del árbol.
Dentro de lo realizado quedan ciertas preguntas e ideas que quedan propuestas a pro-
fundizar y analizar. Por un lado, los valores para k encontrado en el contexto probabilista
no son ajustados y se pueden investigar realizar cotas que sean mas justas. Por otro lado,
solamente se estudio cuando se mantiene la optimalidad, se vuelve interesante intentar un
análisis similar sobre cuanta optimalidad se pierde dependiendo del valor de k. Otro análisis
que interesante que queda propuesto es ver si es posible extender estas nociones, o similares,
a problemas mas complejos como lo son el TSP o VRP.
62
Bibliografía
[1] Braekers, K., Ramaekers, K., y Van Nieuwenhuyse, I., “The vehicle routing problem:
State of the art classification and review”, Computers & Industrial Engineering, vol. 99,
pp. 300–313, 2016, doi:https://doi.org/10.1016/j.cie.2015.12.007.
[2] Dantzig, G. B. y Ramser, J. H., “The truck dispatching problem”, Management science,
vol. 6, no. 1, pp. 80–91, 1959.
[3] Matl, P., Hartl, R., y Vidal, T., “Workload equity in vehicle routing: The impact of
alternative workload resources”, Computers & Operations Research, vol. 110, pp. 116–
129, 2019, doi:https://doi.org/10.1016/j.cor.2019.05.016.
[4] Matl, P., Hartl, R. F., y Vidal, T., “Workload equity in vehicle routing problems: A
survey and analysis”, Transportation Science, vol. 52, pp. 239–260, 2018, doi:10.1287/
trsc.2017.0744.
[5] Sivaramkumar, V., Thansekhar, M. R., Saravanan, R., y Amali, S. M. J., “Demonstrating
the importance of using total time balance instead of route balance on a multi-objective
vehicle routing problem with time windows”, The International Journal of Advanced
Manufacturing Technology, vol. 98, pp. 1287–1306, 2018, doi:10.1007/s00170-018-2346-6.
[6] Fisher, M. L. y Jaikumar, R., “A generalized assignment heuristic for vehicle routing”,
Networks, vol. 11, no. 2, pp. 109–124, 1981, doi:https://doi.org/10.1002/net.3230110205.
[7] Gillett, B. E. y Miller, L. R., “A heuristic algorithm for the vehicle-dispatch problem”,
Operations Research, vol. 22, no. 2, pp. 340–349, 1974, doi:10.1287/opre.22.2.340.
[8] Gehring, H. y Homberger, J., “A parallel hybrid evolutionary metaheuristic for the vehi-
cle routing problem with time windows”, en University of Jyva¨skyla, pp. 57–64, 1999.
[9] Devillers, J. y Dore, J., “Heuristic potency of the minimum spanning tree (mst) method
in toxicology”, Ecotoxicology and Environmental Safety, vol. 17, no. 2, pp. 227–235,
1989, doi:https://doi.org/10.1016/0147-6513(89)90042-0.
[10] Tewarie, P., van Dellen, E., Hillebrand, A., y Stam, C., “The minimum spanning tree:
An unbiased method for brain network analysis”, NeuroImage, vol. 104, pp. 177–188,
2015, doi:https://doi.org/10.1016/j.neuroimage.2014.10.015.
[11] Naidoo, K., “Mistree: a python package for constructing and analysing minimum
spanning trees”, Journal of Open Source Software, vol. 4, no. 42, p. 1721, 2019,
doi:10.21105/joss.01721.
[12] Laporte, G., “Fifty years of vehicle routing”, Transportation science, vol. 43, no. 4,
pp. 408–416, 2009.
[13] Vidal, T., Crainic, T. G., Gendreau, M., y Prins, C., “Heuristics for multi-attribute
vehicle routing problems: A survey and synthesis”, European Journal of Operational
63
Research, vol. 231, no. 1, pp. 1–21, 2013.
[14] Gendreau, M. y Tarantilis, C. D., Solving large-scale vehicle routing problems with time
windows: The state-of-the-art. Cirrelt Montreal, 2010.
[15] QI, M., DING, G., ZHOU, Y., y MIAO, L., “Vehicle routing problem with time windows
based on spatiotemporal distance”, Journal of Transportation Systems Engineering and
Information Technology, vol. 11, no. 1, pp. 85–89, 2011, doi:https://doi.org/10.1016/S1
570-6672(10)60104-3.
[16] Qi, M., Lin, W.-H., Li, N., y Miao, L., “A spatiotemporal partitioning approach for
large-scale vehicle routing problems with time windows”, Transportation Research Part
E: Logistics and Transportation Review, vol. 48, no. 1, pp. 248–257, 2012, doi:https://do
i.org/10.1016/j.tre.2011.07.001. Select Papers from the 19th International Symposium
on Transportation and Traffic Theory.
[17] Melián-Batista, B., De Santiago, A., AngelBello, F., y Alvarez, A., “A bi-objective vehicle
routing problem with time windows: A real case in tenerife”, Applied Soft Computing,
vol. 17, pp. 140–152, 2014, doi:https://doi.org/10.1016/j.asoc.2013.12.012.
[18] de Armas, J., Melián-Batista, B., Moreno-Pérez, J. A., y Brito, J., “Gvns for a real-world
rich vehicle routing problem with time windows”, Engineering Applications of Artificial
Intelligence, vol. 42, pp. 45–56, 2015, doi:https://doi.org/10.1016/j.engappai.2015.03.0
09.
[19] Hautamaki, V., Karkkainen, I., y Franti, P., “Outlier detection using k-nearest neighbour
graph”, en Proceedings of the 17th International Conference on Pattern Recognition,
2004. ICPR 2004., vol. 3, pp. 430–433 Vol.3, 2004, doi:10.1109/ICPR.2004.1334558.
[20] Lucińska, M. y Wierzchoń, S. T., “Spectral clustering based on k-nearest neighbor
graph”, en Computer Information Systems and Industrial Management (Cortesi, A.,
Chaki, N., Saeed, K., y Wierzchoń, S., eds.), (Berlin, Heidelberg), pp. 254–265, Springer
Berlin Heidelberg, 2012.
[21] Dann, E., Henderson, N. C., Teichmann, S. A., Morgan, M. D., y Marioni, J. C., “Diffe-
rential abundance testing on single-cell data using k-nearest neighbor graphs”, Nature
Biotechnology, vol. 40, pp. 245–253, 2021, doi:10.1038/s41587-021-01033-z.
[22] Bose, P., Dujmović, V., Hurtado, F., Iacono, J., Langerman, S., Meijer, H., Sacristán,
V., Saumell, M., y Wood, D. R., “Proximity graphs: E, δ, δ, χ and ω”, International
Journal of Computational Geometry & Applications, vol. 22, no. 05, pp. 439–469, 2012.
[23] Chazelle, B., “A minimum spanning tree algorithm with inverse-ackermann type com-
plexity”, Journal of the ACM (JACM), vol. 47, no. 6, pp. 1028–1047, 2000.
[24] Nešetřil, J., Milková, E., y Nešetřilová, H., “Otakar borůvka on minimum spanning tree
problem translation of both the 1926 papers, comments, history”, Discrete Mathematics,
vol. 233, no. 1, pp. 3–36, 2001, doi:https://doi.org/10.1016/S0012-365X(00)00224-7.
Czech and Slovak 2.
[25] Frieze, A., “On the value of a random minimum spanning tree problem”, Discrete
Applied Mathematics, vol. 10, no. 1, pp. 47–56, 1985, doi:https://doi.org/10.1016/0166
-218X(85)90058-7.
[26] Penrose, M. D., “The longest edge of the random minimal spanning tree”, The Annals
of Applied Probability, vol. 7, no. 2, pp. 340 – 361, 1997, doi:10.1214/aoap/1034625335.
64
[27] Cooper, C. y Frieze, A., “On the connectivity of random k-th nearest neighbour graphs”,
Combinatorics, Probability and Computing, vol. 4, pp. 343–362, 1995, doi:10.1017/s096
3548300001711.
[28] Kanungo, T., Mount, D. M., Netanyahu, N. S., Piatko, C. D., Silverman, R., y Wu,
A. Y., “A local search approximation algorithm for k-means clustering”, Computational
Geometry, vol. 28, no. 2, pp. 89–112, 2004, doi:https://doi.org/10.1016/j.comgeo.200
4.03.003. Special Issue on the 18th Annual Symposium on Computational Geometry -
SoCG2002.
[29] Fränti, P. y Virmajoki, O., “On the efficiency of swap-based clustering”, en Adaptive
and Natural Computing Algorithms (Kolehmainen, M., Toivanen, P., y Beliczynski, B.,
eds.), (Berlin, Heidelberg), pp. 303–312, Springer Berlin Heidelberg, 2009.
[30] Rousseeuw, P. y Kaufman, L., “Clustering by means of medoids”, en Proceedings of
the statistical data analysis based on the L1 norm conference, neuchatel, switzerland,
vol. 31, 1987.
[31] Christofides, N., “Worst-case analysis of a new heuristic for the travelling salesman
problem”, rep. tec., Carnegie-Mellon Univ Pittsburgh Pa Management Sciences Research
Group, 1976.
[32] Zhong, C., Miao, D., y Fränti, P., “Minimum spanning tree based split-and-merge: A
hierarchical clustering method”, Information Sciences, vol. 181, no. 16, pp. 3397–3410,
2011, doi:https://doi.org/10.1016/j.ins.2011.04.013.
[33] Nicola, D., Vetschera, R., y Dragomir, A., “Total distance approximations for routing
solutions”, Computers & Operations Research, vol. 102, pp. 67–74, 2019, doi:https:
//doi.org/10.1016/j.cor.2018.10.008.
[34] Figliozzi, M. A., “Planning approximations to the average length of vehicle routing pro-
blems with time window constraints”, Transportation Research Part B: Methodological,
vol. 43, no. 4, pp. 438–447, 2009, doi:https://doi.org/10.1016/j.trb.2008.08.004.
[35] Auger, N., Jugé, V., Nicaud, C., y Pivoteau, C., “On the worst-case complexity of tim-
sort”, en 26th Annual European Symposium on Algorithms (ESA 2018), vol. 112, pp. 4–
1, 2018.
[36] Atkinson, M. D., Sack, J.-R., Santoro, N., y Strothotte, T., “Min-max heaps and generali-
zed priority queues”, Commun. ACM, vol. 29, p. 996–1000, 1986, doi:10.1145/6617.6621.
[37] Chin, F. y Houck, D., “Algorithms for updating minimal spanning trees”, Journal of
Computer and System Sciences, vol. 16, no. 3, pp. 333–344, 1978, doi:https://doi.org/
10.1016/0022-0000(78)90022-3.
[38] Nardelli, E., Proietti, G., y Widmayer, P., “Nearly linear time minimum spanning tree
maintenance for transient node failures”, Algorithmica, vol. 40, pp. 119–132, 2004,
doi:10.1007/s00453-004-1099-9.
[39] Gaibisso, C., Proietti, G., y Tan, R. B., “Optimal MST maintenance for transient deletion
of every node in planar graphs”, en Lecture Notes in Computer Science, pp. 404–414,
Springer Berlin Heidelberg, 2003, doi:10.1007/3-540-45071-8_41.
[40] Toth, P. y Vigo, D., “The granular tabu search and its application to the vehicle-routing
problem”, Informs Journal on computing, vol. 15, no. 4, pp. 333–346, 2003.
65
[41] David, H. A. y Nagaraja, H. N., Order statistics. John Wiley & Sons, 2004.
[42] Arratia, R. y Gordon, L., “Tutorial on large deviations for the binomial distribution”,
Bulletin of mathematical biology, vol. 51, no. 1, pp. 125–131, 1989.
[43] Steele, J. M., “On frieze’s χ (3) limit for lengths of minimal spanning trees”, Discrete
Applied Mathematics, vol. 18, no. 1, pp. 99–103, 1987.
[44] Tarjan, R. E., “Efficiency of a good but not linear set union algorithm”, J. ACM, vol. 22,
p. 215–225, 1975, doi:10.1145/321879.321884.
[45] Graham, R. L., Rothschild, B. L., y Spencer, J. H., “Ramsey theory”, vol. 20. John
Wiley & Sons, 1991.
[46] “Gehring & homberger benchmark.”, https://www.sintef.no/projectweb/top/vrptw/.
[47] Schubert, E. y Rousseeuw, P. J., “Fast and eager k-medoids clustering: O(k) runtime
improvement of the pam, clara, and clarans algorithms”, Information Systems, vol. 101,
p. 101804, 2021, doi:https://doi.org/10.1016/j.is.2021.101804.
66
Anexos
Para los siguientes resultados definiremos tres modificaciones a un vector que serán de
utilidad.
|⟨xpa , ybq ⟩| ≤ ||xpa ||2 · ||ybq ||2 ≤ ||xpa ||1 · ||ybq ||1
Luego si denotamos xpa (i) como el i−esimo elemento de xpa
67
n
||xpa ||1 = |xpa (i)|
X
i=1
n
(|x(i) − a|)p
X
=
i=1
= ||xa ||pp
≤ (||xa ||1 )p
≤ (||x|| − an)p
|⟨xpa , ybq ⟩| ≤ ||xpa ||1 · ||ybq ||1 ≤ (||x||1 − an)p · (||y||1 − bn)q
Es interesante notar que sin la hipótesis x(i) ≥ a ∀i, y(i) ≥ b ∀i solo se puede garantizar
|⟨xpa , ybq |
≤ (||x||1 + an)p (||y||1 + bn)q .
Para CluseringRelocate hay que evaluar todas las combinaciones (i, j) tales que i ̸= j, por
cada una de ellas es necesario preguntarse por el movimiento de un punto, ese movimiento
consiste en quitarle el punto a i y agregárselo a j. Para el modelo CVRP esto tanto para
el ZoneMST y BalanceMST, recordando que el primero incluye al depot y el segundo no
obtenemos la siguiente cantidad de operaciones
nclusters
X nclusters
X nXi −1
(ni − 1)2 + (nj + 1)2 + (ni − 2)2 + (nj )2 + log(nclusters )
i=1 j=1 l=1
j̸=i
68
donde ni corresponde a la cantidad de puntos en el cluster i incluyendo al depot por tanto
nclusters
X
n + nclusters = ni , donde n es la cantidad de nodos. Ahora procedemos a calcular cada
i=1
uno de los términos relevantes. Durante todo lo que sigue denotamos x = (n1 , n2 , ..., nnclusters ),
entonces x ∈ Rnclusters y ||x||1 = n + nclusters .
nclusters
X nclusters
X nXi −1
nclusters
X nclusters
X nXi −1 nclusters
X
log(nclusters ) = log(nclusters )(nclusters − 1) (ni − 1)
i=1 j=1 l=1 i=1
j̸=i
nclusters
X nclusters
X nXi −1 nclusters
X nX i −1
2
(ni − 2) = (nclusters − 1) (ni − 2)2
i=1 j=1 l=1 i=1 l=1
j̸=i
nclusters
(ni − 1)(ni − 2)2
X
= (nclusters − 1)
i=1
= (nclusters − 1)⟨x1 , x22 ⟩
≤ (nclusters − 1)(||x||1 − nclusters )(||x|| − 2nclusters )2
= (nclusters − 1)n(n − nclusters )2
nclusters
X nclusters
X nXi −1
Por otro lado el termino (ni − 1)2 es análogo a lo realizado pero en vez
i=1 j=1 l=1
j̸=i
de x22 es x21 es decir
nclusters
X nclusters
X nXi −1
nclusters
X nclusters
X nXi −1
69
nclusters
X nclusters
X nXi −1 nclusters
X nclusters
2
(ni − 1)(nj )2
X
(nj ) =
i=1 j=1 l=1 i=1 j=1
j̸=i j̸=i
nclusters
X nclusters
(ni − 1)(nj )2
X
≤
i=1 j=1
nclusters
n2j
X
= n
j=1
nclusters
X
=n nj · nj
j=1
= n⟨x, x⟩
≤ n||x||1 · ||x||1
= n(n + nclusters )2
nclusters
X nclusters
X nXi −1
nclusters
X nclusters
X nXi −1
nclusters
X nclusters
X nXi −1
(ni − 1)2 + (nj + 1)2 + (ni − 2)2 + (nj )2 + log(nclusters )
i=1 j=1 l=1
j̸=i
Ahora para el modelo V RP T W el tiempo esta dado por el Código 3.4, el pero caso es
O(n) por tanto la complejidad se absorbe por la necesidad de ordenar los clientes que se hace
en O(n log(n)) por tanto en la parte donde remplazamos los cálculos del balanceMST de usar
n2 usamos n log(n) con lo cual obtenemos:
nclusters
X nclusters
X nXi −1
(ni − 1)2 + (nj + 1)2 + (ni − 2) log(ni − 2) + nj log(nj ) + log(nclusters )
i=1 j=1 l=1
j̸=i
con esto nos basta calcular los nuevos términos, pues los demás sabemos calcularlos.
70
nclusters
X nclusters
X nXi −1
nclusters
X nclusters
X nXi −1
(ni − 2) log(ni − 2)
i=1 j=1 l=1
j̸=i
nclusters
X
= (nclusters − 1) (ni − 1)(ni − 2) log(ni − 2)
i=1
nclusters
X
≤ (nclusters − 1) log(n − nclusters ) (ni − 1)(ni − 2)
i=1
= (nclusters − 1) log(n − nclusters )⟨x1 , x2 ⟩
≤ (nclusters − 1) log(n − nclusters )(||x||1 − nclusters )(||x||1 − 2nclusters )
≤ (nclusters − 1) log(n − nclusters )n(n − nclusters )
nclusters
X nclusters
X nXi −1
nclusters
X nclusters
X nXi −1 nclusters
X nclusters
X
nj log(nj ) = (ni − 1)nj log(nj )
i=1 j=1 l=1 i=1 j=1
j̸=i j̸=i
nclusters
X nclusters
X
≤ log(n + nclusters ) (ni − 1)nj
i=1 j=1
nclusters
X nclusters
X nXi −1
(ni − 1)2 + (nj + 1)2 + (ni − 2) log(ni − 2) + nj log(nj ) + log(nclusters )
i=1 j=1 l=1
j̸=i
Ahora para CluseringExchange hay que evaluar el triángulo superior las combinaciones
(i, j), por cada una de ellas es necesario preguntarse por el intercambio de puntos entre
i, j. Para el modelo CVRP esto tanto para el ZoneMST y BalanceMST, recordando que el
primero incluye al depot y el segundo no y utilizando la misma notación anterior obtenemos
la siguiente cantidad de operaciones
71
nclusters j −1
i −1 nX
X nclusters
X nX
(ni − 1)2 + n2i + (nj − 1)2 + n2j + log(nclusters )
i=1 j=i+1 l=1 m=1
+ (ni − 2)2 + (ni − 1)2 + (nj − 2)2 + (nj − 1)2
nclusters j −1
i −1 nX
X nclusters
X nX
En primer lugar trabajaremos el termino log(nclusters ).
i=1 j=i+1 l=1 m=1
nclusters j −1
i −1 nX
X nclusters
X nX nclusters
X nclusters
X
log(nclusters ) = log(nclusters ) (ni − 1)(nj − 1)
i=1 j=i+1 l=1 m=1 i=1 j=i+1
nclusters
X nclusters
X
≤ log(nclusters ) (ni − 1)(nj − 1)
i=1 j=1
= n2 log(nclusters )
72
nclusters j −1
i −1 nX
X nclusters
X nX
(ni − 1)2 + n2i + (nj − 1)2 + n2j + (ni − 2)2 + (ni − 1)2 + (nj − 2)2
i=1 j=i+1 l=1 m=1
+ (nj − 1)2
nclusters j −1
i −1 nX
X nclusters
X nX
2
= 2(ni − 1) + n2i + 2(nj − 1) + 2
n2j 2
+ (ni − 2) + (nj − 2) 2
nclusters
(ni − 1)(ni − 2)2 + 2(ni − 1)3 + (ni − 1)n2i
X
i=1
= ⟨x1 , x22 ⟩ + 2⟨x1 , x21 ⟩ + ⟨x1 , x2 ⟩
≤ (||x||1 − nclusters )(||x||1 − 2nclusters )2 + 2(||x||1 − nclusters )(||x||1 − nclusters )2
+ (||x||1 − nclusters )(||x||1 )2
= n(n − nclusters )2 + 2n3 + n(n + nclusters )2
73
Con lo cual obtenemos
nclusters j −1
i −1 nX
X nclusters
X nX
(ni − 1)2 + n2i + (nj − 1)2 + n2j + log(nclusters )
i=1 j=i+1 l=1 m=1
2 2 2 2
+ (ni − 2) + (ni − 1) + (nj − 2) + (nj − 1)
h i
≤ n2 log(nclusters ) + 2n n(n − nclusters )2 + 2n3 + n(n + nclusters )2
= 8n4 + (4n2clusters + log(nclusters ))n2
Ahora miraremos el caso del VRPTW donde nuevamente hay que considera n log(n) en
vez del MST de balanceo, obteniendo:
nclusters j −1
i −1 nX
X nclusters
X nX
2
(ni − 1) + n2i + (nj − 1) + 2
n2j + log(nclusters ) + log(ni ) + log(nj )
i=1 j=i+1 l=1 m=1
Los únicos términos que son relevantes calcular son los log(ni ) + log(nj ), pues el resto de
terminos ya fueron calculados en la parte anterior.
nclusters j −1
i −1 nX j −1
i −1 nX
X nclusters
X nX nclusters
X nclusters
X nX
log(ni ) + log(nj ) = 2 log(ni )
i=1 j=i+1 l=1 m=1 i=1 j=1 l=1 m=1
nclusters
X nclusters
X
=2 (ni − 1)(nj − i) log(ni )
i=1 j=1
nclusters j −1
i −1 nX
X nclusters
X nX
2
(ni − 1) + n2i + (nj − 1) + 2
n2j + log(nclusters ) + log(ni ) + log(nj )
i=1 j=i+1 l=1 m=1
h i
≤ 2n 2n3 + n(n + nclusters )2 + 2 log(n + nclusters )n2 + n2 log(nclusters )
= 6n4 + 4nclusters n3 + (2n2clusters + 2 log(nclusters + n) + log(nclusters ))n2
Todos los cálculos anteriores implican que para CVRP tenemos operaciones
Ahora considerando que log(x) ≤ x, tenemos que (salvo constante) la expresión es posible
acotarla por n4 +nclusters n3 +n2clusters n2 +n3clusters n y considerando que nclusters ≤ n es acotable
74
por n4 . Lo anterior implica que si T es el numero de iteraciones tenemos que la complejidad
esta dada por O (T n4 )
luego acotando de la misma manera que antes se vuelve a concluir la cota O(T n4 ) con lo
que se concluye lo pedido.
75
A.2. Demostración Proposición 3.2
Utilizaremos las mismas ideas anteriores para realizar las cotas. Primero miraremos el
CVRP.
Antes de ir a las iteraciones por cada local search, calculamos los precálculos. Estos son
sencillos corresponde a saber agregar, eliminar y eliminar y agregar todos los puntos, notamos
que para este último dado que sabemos eliminar solo basta calcular el agregar, por tanto, la
cantidad de iteraciones es
nclusters
X nclusters
X nXi −1 nclusters nclusters
X nclusters
X nXi −1 nclusters
X nclusters
X nXi −1
n2i +
X
nj + (nj − 1) + (nj − 1)
i=1 j=1 l=1 i=1 i=1 j=1 l=1 i=1 j=1 l=1
j̸=i j̸=i j̸=i
nclusters nclusters
X nclusters
X nXi −1
2
X
+ (ni − 1) + (nj − 2)
i=1 i=1 j=1 l=1
j̸=i
nclusters
X nclusters
X nXi −1
nclusters
X nclusters
X nXi −1 nclusters
X nclusters
X nXi −1
nj ≤ nj
i=1 j=1 l=1 i=1 j=1 l=1
j̸=i
nclusters
X nclusters
X
= (ni − 1)nj
i=1 j=1
nclusters
X
= (n + nclusters ) (ni − 1)
i=1
= n(n + nclusters )
nclusters
n2i
X
Por otro lado tenemos
i=1
nclusters
n2i = ||x||22 ≤ ||x||21 = (n + nclusters )2
X
i=1
nclusters
X nclusters
X nXi −1
76
nclusters
X nclusters
X nXi −1 nclusters
X nclusters
X nXi −1
(nj − 1) ≤ (nj − 1)
i=1 j=1 l=1 i=1 j=1 l=1
j̸=i
nclusters
X nX i −1
=n 1
i=1 l=1
nclusters
X
=n (ni − 1)
i=1
= nn = n2
nclusters nclusters
X nclusters
X nXi −1
2 2
X
de manera similar a lo ya calculado se tiene que (ni −1) ≤ n y (nj −
i=1 i=1 j=1 l=1
j̸=i
2) ≤ n(n − nclusters ). De esta manera tenemos que
nclusters
X nclusters
X nXi −1 nclusters nclusters
X nclusters
X nXi −1 nclusters
X nclusters
X nXi −1
n2i
X
nj + + (nj − 1) + (nj − 1)
i=1 j=1 l=1 i=1 i=1 j=1 l=1 i=1 j=1 l=1
j̸=i j̸=i j̸=i
nclusters nclusters
X nclusters
X nXi −1
(ni − 1)2 +
X
+ (nj − 2)
i=1 i=1 j=1 l=1
j̸=i
Ahora miraremos el Relocate, si denotamos por î, ĵ los clusters modificados tenemos que
actualizar sus valores con lo que obtenemos
nclusters
X nclusters
X nXi −1 nclusters
X nX i −1 nclusters
X nX i −1
77
nclusters
X nclusters
X nXi −1 nclusters
X nclusters
X
log(nclusters ) = log(nclusters ) (ni − 1)
i=1 j=1 l=1 i=1 j=1
j̸=i j̸=i
nclusters
X
= (nclusters − 1) log(nclusters ) (ni − 1)
i=1
= n(nclusters − 1) log(nclusters )
nclusters
X nX i −1 nclusters
X
(nî − 1) = (ni − 1)(nî − 1)
i=1 l=1 i=1
i̸=î i̸=î
nclusters
X
≤ (ni − 1)
i=1
= (nî − 1)n
nclusters
X nX i −1 nclusters
X nX i −1
de manera análoga obtenemos (nĵ +1) ≤ (nĵ +1)n, (nî −2) ≤ n(nî−2 )
i=1 l=1 i=1 l=1
i̸=ĵ i̸=î
nclusters
X nX i −1
nclusters
X nclusters
X nXi −1 nclusters
X nX i −1 nclusters
X nX i −1
≤ (nclusters − 1)n log(nclusters ) + n(nî + nĵ ) + (nî − 1)2 + (nĵ + 1)2 + n(nî + nĵ − 2)
+ (nî − 2)2 + (nĵ − 1)2
≤ (nclusters − 1)n log(nclusters ) + n(n + nclusters ) + 2(n + nclusters )2 + 2n2 + (n + 2nclusters )2
+ (n − nclusters )2
nclusters j −1
i −1 nX i −1 i −1
X nclusters
X nX nclusters
X nX nclusters
X nX
log(nclusters ) + nî + nĵ + n2î + n2ĵ
i=1 j=i+1 l=1 m=1 i=1 l=1 i=1 l=1
i̸=î i̸=ĵ
nclusters
X nX i −1 nclusters
X nX i −1
78
con esto actuando igual que antes se tiene como cota
nclusters j −1
i −1 nX i −1 i −1
X nclusters
X nX nclusters
X nX nclusters
X nX
log(nclusters ) + nî + nĵ + n2î + n2ĵ
i=1 j=i+1 l=1 m=1 i=1 l=1 i=1 l=1
i̸=î i̸=ĵ
nclusters
X nX i −1 nclusters
X nX i −1
5n2 + (n + nclusters )2 + T (nclusters − 1)n log(nclusters ) + n(n + nclusters ) + 2(n + nclusters )2 + 2n2
+ (n + 2nclusters )2 + (n − nclusters )2 + n2 log(nclusters ) + n(n + nclusters ) + 2(n + nclusters )2 + 3n2
= 5n2 + (n + nclusters )2 + T (nclusters − 1)n log(nclusters ) + 2n(n + nclusters ) + 4(n + nclusters )2
+ 5n2 + (n + 2nclusters )2 + (n − nclusters )2
nclusters
X nclusters
X nXi −1 nclusters nclusters
X nclusters
X nXi −1
n2i +
X
nj + (nj − 1)
i=1 j=1 l=1 i=1 i=1 j=1 l=1
j̸=i j̸=i
nclusters
X nclusters
X nXi −1 nclusters
X
+ (nj − 1) log(nj − 1) + (ni − 1) log(ni − 1)
i=1 j=1 l=1 i=1
j̸=i
nclusters
X nclusters
X nXi −1
+ (nj − 2) log(nj − 2)
i=1 j=1 l=1
j̸=i
79
nclusters
X nclusters
X
(ni − 1) log(ni − 1) ≤ log(n) (ni − 1) = n log(n)
i=1 i=1
y que
nclusters
X nclusters
X nXi −1 nclusters
X nclusters
X nXi −1
= n2 log(n)
conocemos como acotar todos los términos pues el que usa nj − 2 solo requiere cambiar
los cálculos por n − nclusters cuando corresponda, así se cumple que
nclusters
X nclusters
X nXi −1 nclusters nclusters
X nclusters
X nXi −1
n2i +
X
nj + (nj − 1)
i=1 j=1 l=1 i=1 i=1 j=1 l=1
j̸=i j̸=i
nclusters
X nclusters
X nXi −1 nclusters
X
+ (nj − 1) log(nj − 1) + (ni − 1) log(ni − 1)
i=1 j=1 l=1 i=1
j̸=i
nclusters
X nclusters
X nXi −1
+ (nj − 2) log(nj − 2)
i=1 j=1 l=1
j̸=i
Ahora miraremos el Relocate, si denotamos por î, ĵ los clusters modificados tenemos que
actualizar sus valores con lo que obtenemos
nclusters
X nclusters
X nXi −1 nclusters
X nX i −1 nclusters
X nX i −1
notamos que son todas estructuras que ya hemos calculado o hay que hacer leves modifi-
caciones así obtenemos la siguiente cota
80
nclusters
X nclusters
X nXi −1 nclusters
X nX i −1 nclusters
X nX i −1
nclusters j −1
i −1nX i −1 i −1
X nclusters
X nX nclusters
X nX nclusters
X nX
log(nclusters ) + (nî ) + (nĵ ) + (nî )2 + (nĵ )2
i=1 j=i+1 l=1 k=1 i=1 l=1 i=1 l=1
i̸=î i̸=ĵ
nclusters
X nX i −1 nclusters
X nX i −1
+ (nî − 1) log(nî − 1) + (nĵ − 1) log nĵ − 1
i=1 l=1 i=1 l=1
i̸=î i̸=ĵ
nî −1 nĵ −1
X X
+ (nî − 1) log(nî − 1) + (nĵ − 1) log nĵ − 1
i=1 i=1
nclusters j −1
i −1nX i −1 i −1
X nclusters
X nX nclusters
X nX nclusters
X nX
log(nclusters ) + (nî ) + (nĵ ) + (nî )2 + (nĵ )2
i=1 j=i+1 l=1 k=1 i=1 l=1 i=1 l=1
i̸=î i̸=ĵ
nclusters
X nX i −1 nclusters
X nX i −1
+ (nî − 1) log(nî − 1) + (nĵ − 1) log nĵ − 1
i=1 l=1 i=1 l=1
i̸=î i̸=ĵ
nî −1 n
ĵ
X X
+ (nî − 1) log(nî − 1) + (nĵ − 1) log nĵ−1
i=1 i=1
≤ n log(nclusters ) + n(nî + nĵ ) + (nî )2 + (nĵ )2 + n((nî − 1) log(nî − 1) + (nĵ − 1) log nĵ − 1 )
2
+ (nî − 1)2 log(nî − 1) + (nĵ − 1)2 log nĵ − 1
≤ n2 log(nclusters ) + n(n + nclusters ) + (n + nclusters )2 + n(n log(n)) + n2 log(n)
= n2 log(nclusters ) + n(n + nclusters ) + (n + nclusters )2 + 2n2 log(n)
81
así obtenemos
82
Anexo B. Feasibles
Al momento de hacer los feasibles siempre existen dos casos que considerar: (1) estamos
en una situación infactible (2) estamos en una situación factible.
Para tiempos de viajes del vehículo o travelTime, recordamos que para un CVRP se basa
en el MST y para un VRPTW en el algoritmo generado, diremos que es factible en travelTi-
me si es que el travelTime es menor o igual al tiempo disponible del vehículo.
Notar que tanto para travelTime como Unfeasible los valores utilizados en este feasible ya
están pre calculadas luego es O(1) la consulta.
B.1. Relocate
83
Código B.2: TravelTime Feasible Clustering Relocate
1 Function isTravelTimeFeasibleClusteringRelocate(xi , Clusteri , Clusterj )
2 isTravelTimeFeasible_i = Clusteri travelTime feasible
3 isTravelTimeFeasible_j = Clusterj travelTime feasible
4 newTravelTime_i = Clusteri travel time sin xi
5 newTravelTime_j = Clusterj travel time con xi
6 If (isTravelTimeFeasible_i AND isTravelTimeFeasible_j)
7 return newTravelTime_i <= Clusteri tiempo disponible AND newTravelTime_j <=
,→ Clusterj tiempo disponible
8 Else If (isTravelTimeFeasible_i)
9 If (newTravelTime_j > Clusterj travelTime)
10 return False
11 End
12
84
13 If (newNumberOfUnFeasible_i > 0)
14 return newNumberOfUnFeasible_i <= numberOfUnFeasible_j
15 End
16 Else If (numberOfUnFeasible_j == 0)
17 If (newNumberOfUnFeasible_i > numberOfUnFeasible_i)
18 return False
19 End
20
21 If (newNumberOfUnFeasible_j > 0)
22 return newNumberOfUnFeasible_j <= numberOfUnFeasible_i
23 End
24 Else
25 return newNumberOfUnFeasible_i <= numberOfUnFeasible_i AND
,→ newNumberOfUnFeasible_j <= numberOfUnFeasible_j
26 End
27 return True
28 End Function
B.2. Exchange
85
Código B.5: TravelTime Feasible Clustering Exchange
1 Function isTravelTimeFeasibleClusteringExchange(xi , xj , Clusteri , Clusterj )
2 isTravelTimeFeasible_i = Clusteri travelTime feasible
3 isTravelTimeFeasible_j = Clusterj travelTime feasible
4 newTravelTime_i = Clusteri travel time sin xi y con xj
5 newTravelTime_j = Clusterj travel time sin xj y con xi
6 If (isTravelTimeFeasible_i AND isTravelTimeFeasible_j)
7 return newTravelTime_i <= Clusteri tiempo disponible AND newTravelTime_j <=
,→ Clusterj tiempo disponible
8 Else If (isTravelTimeFeasible_i)
9 If (newTravelTime_j > Clusterj travelTime)
10 return False
11 End
12
86
13 If (newNumberOfUnFeasible_i > 0)
14 return newNumberOfUnFeasible_i <= numberOfUnFeasible_j
15 End
16 Else If (numberOfUnFeasible_j == 0)
17 If (newNumberOfUnFeasible_i > numberOfUnFeasible_i)
18 return False
19 End
20
21 If (newNumberOfUnFeasible_j > 0)
22 return newNumberOfUnFeasible_j <= numberOfUnFeasible_i
23 End
24 Else
25 return newNumberOfUnFeasible_i <= numberOfUnFeasible_i AND
,→ newNumberOfUnFeasible_j <= numberOfUnFeasible_j
26 End
27 return True
28 End Function
87
2 feasiblePartition_i = Clusteri capacity feasible
3 feasiblePartition_j = Clusterj capacity feasible
4
15 If (newNumberOfUnFeasible_i > 0)
16 return newNumberOfUnFeasible_i < numberOfUnFeasible_j
88
17 End
18 Else If (numberOfUnFeasible_j == 0)
19 If (newNumberOfUnFeasible_i >= numberOfUnFeasible_i)
20 return False
21 End
22
23 If (newNumberOfUnFeasible_j > 0)
24 return newNumberOfUnFeasible_j < numberOfUnFeasible_i
25 End
26 Else
27 return newNumberOfUnFeasible_i < numberOfUnFeasible_i AND
,→ newNumberOfUnFeasible_j < numberOfUnFeasible_j
28 End
29 return True
30 End Function
13 If (newNumberOfUnFeasible_i > 0)
14 return newNumberOfUnFeasible_i < numberOfUnFeasible_j
15 End
16 Else If (numberOfUnFeasible_j == 0)
17 If (newNumberOfUnFeasible_i >= numberOfUnFeasible_i)
18 return False
19 End
20
21 If (newNumberOfUnFeasible_j > 0)
22 return newNumberOfUnFeasible_j < numberOfUnFeasible_i
23 End
24 Else
25 return newNumberOfUnFeasible_i < numberOfUnFeasible_i AND
,→ newNumberOfUnFeasible_j < numberOfUnFeasible_j
26 End
27 return True
28 End Function
89
Anexo C. Demostraciones Capitulo 4
C.1. Demostración Proposición 4.6
En este caso tenemos que la complejidad para eliminar en vez de n2 es O(mα(n, m)), por
simplicidad definimos h = max α(i, j) de esta manera podemos considerar que
i∈[3,...,n],j∈[1,...,i(i−1)/2]
eliminar puntos es O(m) si es que al terminar los calculos se tiene la consideración de agregar
h donde corresponda. También es importante recordar que nclusters ≤ n.
nclusters
X nclusters
X nXi −1 nclusters
X q nclusters
X nclusters
X nXi −1
q 3
notando que n3i = (ni ) 2 podemos realizar las mismas cotas utilizadas en las partes
anteriores y así obtenemos que
nclusters
X nclusters
X nXi −1 nclusters
X q nclusters
X nclusters
X nXi −1
Ahora miraremos el Relocate, si denotamos por î, ĵ los clusters modificados tenemos que
actualizar sus valores con lo que obtenemos
nclusters
X nclusters
X nXi −1 nclusters
X nX i −1 nclusters
X nX i −1
90
con lo cual podemos acotar y obtener los siguiente
nclusters
X nclusters
X nXi −1 nclusters
X nX i −1 nclusters
X nX i −1
nclusters j −1
i −1 nX i −1 i −1
X nclusters
X nX nclusters
X nX nclusters
X nX q
log(nclusters ) + nî + nĵ + n3î log(nî )
i=1 j=i+1 l=1 m=1 i=1 l=1 i=1 l=1
i̸=î i̸=ĵ
nclusters
X nX i −1 nclusters
X nX i −1
r
+ n3ĵ log nĵ + (nî − 1) + (nĵ − 1)
i=1 l=1 i=1 l=1
i̸=î i̸=ĵ
q r
+ (nî − 1)3 log(nî − 1) + (nĵ − 1)3 log nĵ − 1
nclusters j −1
i −1 nX i −1 i −1
X nclusters
X nX nclusters
X nX nclusters
X nX q
log(nclusters ) + nî + nĵ + n3î log(nî )
i=1 j=i+1 l=1 m=1 i=1 l=1 i=1 l=1
i̸=î i̸=ĵ
nclusters
X nX i −1 nclusters
X nX i −1
r
+ n3ĵ log nĵ + (nî − 1) + (nĵ − 1)
i=1 l=1 i=1 l=1
i̸=î i̸=ĵ
q r
+ (nî − 1)3 log(nî − 1) + (nĵ − 1)3 log nĵ − 1
q q
≤ n2 log(nclusters ) + n(n + nclusters ) + (n + nclusters )3 log(n + nclusters ) + n2 + n3 log(n)
91
q q
5n2 + h (n + nclusters )3 log(n + nclusters ) + h n3 log(n)
+ T n2 log(nclusters ) + (nclusters − 1)n log(nclusters ) + 2n(n + nclusters )
q q
2
+ 2h (n + nclusters log(n + nclusters ) + 2n + 2h n3 log(n)
)3
q q
+ h (n − nclusters log(n − nclusters ) + h (n + 2nclusters log(n + 2nclusters )
)3 )3
es decir
q
O n + h (n + nclusters log(n + nclusters ) + T n2 log(nclusters )
2
)3
q
)3
+ h (n + nclusters log(n + nclusters )
q
n(n + nclusters ) + (n + nclusters )3 log(n + nclusters ) + n2 + log(n)n2 + n log(n)
+ (n − nclusters )n log(n − nclusters )
q
(nclusters − 1)n log(nclusters ) + n(n + nclusters ) + (n + 2nclusters )3 log(n + 2nclusters )
q
+ n3 log(n) + 2n2 log(n)
q
n2 log(nclusters ) + n(n + nclusters ) + (n + nclusters )3 log(n + nclusters ) + 2n2 log(n)
q
n(n + nclusters ) + h (n + nclusters )3 log(n + nclusters ) + n2 + log(n)n2 + n log(n)
+ (n − nclusters )n log(n − nclusters ) + T n2 log(nclusters ) + (nclusters − 1)n log(nclusters )
q
+ 2n(n + nclusters ) + h (n + nclusters )3 log(n + nclusters )
q q
2
)3
+ h (n + 2nclusters log(n + 2nclusters ) + h n3 log(n)4n log(n)
92
q
O n2 log(n) + h (n + nclusters )3 log(n + nclusters )
q
+ T n2 log(n) + h (n + nclusters )3 log(n + nclusters )
93
Anexo D. Función Objetivo y Tiempos De Ejecución
En los próximos gráficos se presenta el efecto que tiene α sobre la función objetivo y los
tiempos de ejecución.
D.1. CVRP
94
Figura D.3: Gráficos instancias tamaño 600
D.2. VRPTW
Dada la gran cantidad de casos para el VRPTW no es posible identificar cada una de las
instancias de manera individual y solo se hará de manera macro con el tipo C1, C2, R1, R2,
RC1, RC2 y el tamaño 200, 400, 600, 800, 100.
95
Figura D.6: Gráficos instancias tamaño 200
96
Figura D.9: Gráficos instancias tamaño 800
97