Aladin: algoritmo de adición e inserción para la planificación de rutas de transporte en entornos de tiempos restringidos
Abstract
En este artículo presentamos un Nuevo modelo para resolver el conocido problema de planificación de rutas de transporte con restricciones temporales. El método se basa en una nueva combinación de los métodos tradicionales de adición e inserción, al que hemos denominado ALADIN. Presentamos igualmente una descripción de los métodos clásicos comparados con los nuevos procedimientos de construcción recogidos en nuestro modelo. Todos ellos se han validado a través de su aplicación a los 56 problemas tipo de Solomon, demostrando que nuestro método obtiene mejores resultados en algunos de los ejemplos. El método se presenta a través de su notación matemática.
Full text
17 ALADIN: ALGORITMO DE ADICIÓN E INSERCIÓN PARA LA PLANIFICACIÓN DE RUTAS DE TRANSPORTE EN ENTORNOS DE TIEMPOS RESTRINGIDOS Eduardo Guillén Solórzano Susana Barbeito Roiba Manuel Martínez Carballo RESUMEN En este artículo presentamos un Nuevo modelo para resolver el conocido problema de planificación de rutas de transporte con restricciones temporales. El método se basa en una nueva combinación de los métodos tradicionales de adición e inserción, al que hemos denominado ALADIN. Presentamos igualmente una descripción de los métodos clásicos comparados con los nuevos procedimientos de construcción recogidos en nuestro modelo. Todos ellos se han validado a través de su aplicación a los 56 problemas tipo de Solomon, demostrando que nuestro método obtiene mejores resultados en algunos de los ejemplos. El método se presenta a través de su notación matemática. PALABRAS CLAVE: VRPTW, Logística, heurísticos ABSTRACT In this paper we present a new construction model for solving the well known problem of vehicle routing with time windows. The method is based on a new combination of the traditional addition and insertion procedures, which we have named ALADIN. A description of some traditional methods is presented, compared to the new constructional procedures developed in our model. All methods are tested on Solomon’s 56 benchmark problems, showing that our method provides better results for some of the instances. The method is deployed by means of its mathematical notation. KEYWORDS: VRPTW, Logistics, heuristics. INTRODUCCIÒN El problema de la planificación de rutas de transporte se conoce en la literatura como VRP o Vehicle Routing Problem, que deriva de la problemática del TSP, o Traveling Salesman Problem, en la que un vehículo ha de encontrar la ruta mínima entre un conjunto de puntos geográficamente dispersos. En el caso del VRP, se generaliza el problema del TSP, y se contemplan un número NV de vehículos, con unas limitaciones de tiempos, o de cargas, de manera que es necesaria la utilización de esta flota de vehículos para visitar todos los puntos del problema. Desde mediados del siglo XX, esta problemática fue abordada por la línea de Investigación Operativa, donde se enmarcan la mayor parte de los trabajos existentes, y cuya evolución ha sido notable sobre todo en los últimos 10 años. Merece la pena destacar una fecha, 1987, que es cuando Marius M. Solomon recoge toda la información relativa a los sistemas existentes para la planificación de rutas de transporte en el marco del VRP, y los adapta al problema del VRP con Time Windows (VRPTW), o VRP con Ventanas de Tiempo, con el ánimo de
CITIES IN COMPETITION 18 acercar todavía más la línea de investigación existente a la problemática empresarial. La peculiaridad del VRPTW deriva en la consideración de intervalos de apertura para cada uno de los clientes, así como los plazos de apertura del depósito central en el que se encuentran los vehículos. De esta manera se aporta un mayor realismo al problema general del VRP. Para ello Solomon (1983) recoge en su Tesis Doctoral esta problemática, publicando en 1987 uno de los artículos más recurrentes en todos los trabajos en el que resume los resultados de aplicación de diferentes métodos de construcción de rutas al problema del VRPTW. Igualmente desarrolla una batería de ejemplos sobre los que valida estos desarrollos, y que servirían de base para la inmensa mayoría de los autores con la finalidad de normalizar los resultados de los diferentes métodos aplicados. En este trabajo se presenta un método propio desarrollado para resolver el problema del VRPTW, el cuál consta de las siguientes características: • Depósito central único, y múltiples clientes con cualquier tipo de dispersión (uniforme o clusterizados) • Depósito sujeto a ventana de tiempo, indicativa del horizonte temporal de las rutas. • Clientes sujetos a ventanas de tiempo no necesariamente iguales. • Distancias euclídeas entre nodos (Fácilmente ampliable a tiempos de desplazamiento no euclídeos) • Tiempos de servicio en cada cliente no necesariamente iguales • Capacidades de los vehículos limitadas e iguales. • Flota de vehículos ilimitada • Objetivo último de la planificación: Minimizar la distancia total recorrida por todos los vehículos. Estas características de los problemas particulares del VRPTW que trata de resolver el algoritmo, coinciden con las características de los problemas tipo planteados por Solomon (1987), por lo que servirán en este trabajo como medida comparativa de la eficiencia y eficacia del modelo desarrollado, a través de la comparación de la distancia total conseguida por los modelos de otros autores. MODELO DE ADICIÓN E INSERCIÓN: ALADIN En esta sección se desarrolla la modelización matemática del algoritmo. Para ello se ha seguido un esquema lógico de trabajo que comienza con las primeras tareas realizadas en el algoritmo. Es necesario tener en cuenta que en este trabajo se ha partido de cero para la construcción del método heurístico, lo cual lo diferencia de la mayor parte de los algoritmos presentados en la literatura y que se servían los unos de los otros para establecer combinaciones entre los mismos tratando siempre de superar las mejores soluciones halladas hasta la fecha. La notación a ser utilizada es la siguiente: N Número total de clientes i Índice de los clientes: i = 1, 2, …, N xi Abscisa de la posición del cliente i yi Ordenada de la posición del cliente i cij Coste de viajar del nodo i al nodo j. tij Tiempo de desplazamiento entre el cliente i y el cliente j tsi Tiempo de servicio del cliente i. V Número total de vehículos disponibles k Índice de los vehículos. k=1,...,V q Capacidad de los vehículos en consideración
INNOVATIONS AND TECHNOLOGY PROJECTS AND OPERATIONS MANAGEMENT IN THE CITY DEVELOPMENT 19 di Demanda del cliente i tai Momento de apertura del cliente i tci Momento de cierre del cliente i ta0 Momento de apertura del depósito central tc0 Momento de cierre del depósito central R Número de nodos semilla a considerar inicialmente por el algoritmo. β Parámetro penalizador de desplazamientos en inserciones simples γ Parámetro multiplicador de zonas de inserción para inserciones dobles teki Tiempo de espera antes de visitar el nodo i por el vehículo k. LRk Lista de nodos que pertenecen a la ruta k. Se trata de un vector de nodos ordenados que indican las sucesivas visitas que realiza el vehículo k. trk Momento en el que se encuentra el vehículo k. Esta variable será igual a la suma de los tiempos de desplazamiento entre los nodos que visita este vehículo k, más los tiempos de servicio de los nodos de la ruta k, más las esperas que se han de realizar antes de visitar cada uno de los nodos de la ruta k. Los tiempos de desplazamiento de los nodos será la suma de tpq cuando q>p ck Carga total del vehículo k. La carga total del vehículo k es la suma de las demandas de los nodos que ha visitado. CRk La cabeza de la ruta k se corresponde con el nodo en el que está ubicado el vehículo k . Dk Distancia total recorrida por el vehículo k. Esta variable es igual a la suma de los desplazamientos entre los nodos que visita este vehículo. Ek Espera total que realiza el vehículo k. Cálculo de la matriz de distancias El algoritmo calcula una matriz de distancias entre todos y cada uno de los nodos, incluyendo tanto los clientes como el depósito central. Las distancias entre cada par de nodos i y j se calcula a través de la fórmula de Pitágoras que proporciona la distancia euclídea entre dos puntos. () ( ) [] 2/1 22 ijijij yyxxd −+−= De esta manera se calculan todas las distancias entre cada dos nodos del problema resultando en una matriz de N+1 filas y N+1 columnas. Esta matriz de distancias, en el caso del VRPTW también es la matriz de tiempos de desplazamiento, ya que se asume que todos los camiones viajan a una velocidad de 1 unidad de espacio por unidad de tiempo. Definición de parámetros Número de nodos semilla R R: Número de rutas a considerar inicialmente por el algoritmo. En este sentido el usuario puede optar por dos vertientes. La primera consiste en considerar inicialmente el número de rutas reducido, dejando al propio algoritmo la generación o creación de posteriores rutas cuando esto se considere necesario, y la segunda alternativa consiste en considerar un número elevado de rutas iniciales, de manera que el algoritmo contempla
CITIES IN COMPETITION 20 desde el momento inicial la existencia de nuevas rutas que proporcionan más flexibilidad a la planificación inicial. Parámetro β Se trata del parámetro que impide grandes desplazamientos. El algoritmo puede considerar en la programación de las rutas movimientos que aparentemente supongan grandes desplazamientos. Sin embargo, ha de ser el propio usuario quien determine qué desplazamientos son grandes y cuáles no. El parámetro β hace referencia al número de veces de la distancia original entre dos puntos que se permite como desplazamiento total máximo para realizar una visita intermedia. La opción contra el rechazo de posibles inserciones es la espera, por lo que indirectamente este parámetro β es un parámetro penalizador de las esperas. Parametro γ El algoritmo presentado en este trabajo contempla la posibilidad de realizar inserciones dobles de dos nodos simultáneamente, entre el nodo origen y el nodo destino. En ese sentido la limitación de desplazamientos grandes impuesta por β, resulta insuficiente para el caso de la inserción de dos nodos simultáneamente, teniendo en cuenta que estas inserciones dobles provocan necesariamente desplazamientos superiores, y que no por ello han de ser penalizadas. En este sentido se plantea la posibilidad de incrementar esta zona de inserción impuesta por el parámetro β. Las dos opciones eran, o bien incrementarlo dentro del propio algoritmo a través de un multiplicador fijo, o bien establecer un nuevo parámetro multiplicador con el que se pudiese flexibilizar el algoritmo. En este caso se optó por la segunda opción de manera que se ha incluido un valor γ a ser fijado por el usuario para incrementar el valor de β originalmente dispuesto para el caso de las inserciones sencillas. Inicio del problema Una vez introducidos todos los datos necesarios para el algoritmo, entonces da comienzo la planificación de las rutas. En este tipo de problemas, generalmente las variables más críticas son las ventanas de tiempo que proporcionan los nodos y que otorgan al planificador muy breves espacios de tiempo en los que se ha de servir el nodo en cuestión. Por ello en un elevado grado, las variables a tener en cuenta en todo momento son las ventanas de tiempo de estos nodos, además de los tiempos de desplazamiento a los mismos y de los tiempos de servicio. En este sentido las distancias, quedan relegadas a un segundo puesto en importancia, dado que las ventanas de tiempo son restricciones que han de ser respetadas en el problema muchas veces a costa de recorrer mayores distancias, en contra de lo que establecen otras variantes del problema, como el VRPSTW (VRP con ventanas de tiempo no rígidas). Por otro lado es conveniente minimizar el número de vehículos a ser utilizados en la planificación, y que generalmente también tiene una relación inversa con la distancia total recorrida. En primer lugar, se genera la Lista de Nodos no asignados L0. Esta lista recoge todos los nodos del problema en cuestión. En el momento inicial de la computación todos los tiempos de las rutas son equivalentes a 0, al igual que las cargas de las mismas. Estas variables son meros contadores acumulativos de las inserciones que se van realizando a cada una de las rutas, al igual que las variables de esperas, y distancias totales recorridas. Se generan las k=1,...,R rutas a tener en cuenta desde el momento inicial de la planificación, y a todas ellas se les añade el nodo 0 como punto de partida. Para todas las rutas k=1,...,R se definen las siguientes variables, utilizando la notación presentada en la sección anterior: LRk=[0] CRk=[0] ck=0 trk=0
INNOVATIONS AND TECHNOLOGY PROJECTS AND OPERATIONS MANAGEMENT IN THE CITY DEVELOPMENT 21 Dk=0 Ek=0 Generación de la lista L1 de nodos semilla El primer paso es la generación de la lista inicial de candidatos a ser servidos por los vehículos que recorrerán las R primeras rutas diseñadas, esta primera lista la llamamos L1, y contendrá exactamente R nodos semilla. L1 será la lista de nodos candidatos a ser servidos inicialmente por el problema. Tal y como se comentaba al principio, los primeros nodos que han de ser servidos derivan de la consideración de sus ventanas de tiempo. Por ello el algoritmo se ha de centrar en el análisis de las ventanas de tiempo de estos nodos, y en especial en el momento de cierre de los mismos. Este dato es crítico porque marca el plazo límite para visitar estos nodos, por lo que nunca se puede violar esta restricción. En este modelo el valor de referencia es la holgura resultante tras la potencial visita de ese nodo, de manera que cuanto menor sea, mayor prioridad de asignación tendrá el nodo a una ruta, debido a su mayor urgencia. hi=tci-t0i A continuación se ordena la lista con todos los nodos de menor a mayor holgura, y se escogen aquellos R nodos con holguras menores para formar parte de la lista de nodos semilla L1. Asignación y adición directa a una ruta sin espera Para aquellos nodos i donde la holgura es menor que min tsi (mínimo tiempo de servicio entre todos los nodos del problema) entonces se generan las correspondientes rutas entre el depósito y estos nodos. Para ello se procederá a computar una espera en caso de que la entrada no sea directa en el nodo, caso contrario se entrará directamente a realizar el servicio. Así las rutas generadas inicialmente se actualizan de la siguiente manera con los nodos i que implican asignaciones directas: LRk=[0, i] CRk=[i] ck=di trk=t0i + tsi +teki Dk=t0i Ek=teki En este caso la espera sería teki=[tai-(t0i)]+ Seguidamente se elimina el nodo i de la lista L1. Para el resto de los nodos de L1 se estudia uno a uno comenzando por aquellos con menor holgura, para analizar las posibles inserciones de nodos intermedios entre el depósito central y cada uno de los nodos semilla en consideración. Generación de la lista L2 de nodos para la inserción simple Se selecciona el candidato i con menor holgura de entre aquellos que no se han asignado directamente. Después de comprobar su holgura verificamos si ésta es mayor que min tsi y si la holgura supera en 1 ó 2 veces este mínimo tiempo de servicio.
CITIES IN COMPETITION 22 Si su holgura supera el valor de un solo tiempo de servicio, entonces se genera la lista L2 de posibles nodos intermedios (nodos m) para realizar inserciones simples. Los nodos en camino son aquellos cuyo servicio permiten llegar a tiempo al nodo en consideración, y además no suponen un gran desplazamiento (parámetro β), e igualmente no violen las restricciones de carga total del vehículo, así como del tiempo de llegada estimado de regresar al depósito central. Las restricciones aplicables son las siguientes: Restricción de apertura del nodo m El nodo ha de estar abierto en el momento en que llega el vehículo en cuestión. Por ello se establece la siguiente restricción: tam ≤ t0m En esta restricción se indica que el momento de apertura de m ha de ser anterior a la llegada del vehículo desde 0 hasta m. Restricción de llegada a tiempo al nodo i en cuestión. tam+ tsm + tmi ≤ tci Dicho de otra forma, los nodos m en consideración como candidatos a ser escalas intermedias son aquellos que permiten llegar al nodo i en cuestión antes de que éste cierre. Para ello se contempla un incremento en el tiempo de viaje equivalente al tiempo de desplazarse hasta ese nodo m y realizar su servicio, a partir de su apertura, y el consiguiente desplazamiento de m a i. Restricción de tiempos de desplazamiento totales Además es necesario comprobar que la visita de los nodos m en cuestión me permite llegar a tiempo al nodo i que estoy considerando por eso se establece una restricción temporal consistente en el cómputo de todos los desplazamientos y tiempos de servicio hasta el nodo i. t0m+tsm+tmi ≤ tci Suponiendo que la visita del nodo m en consideración permita llegar antes del momento de cierre, esto provocará un tiempo que se computa como nueva holgura del nodo i, de manera que la inecuación anterior resultaría en la siguiente ecuación. t0m+tsm+tmi+nhi =tci donde nhi ha de ser mayor o igual que 0. Restricción de desplazamiento geográfico máximo autorizado Es necesario establecer una restricción que evite grandes desplazamientos, y que depende del parámetro β seleccionado. En este sentido solamente se permitirán aquellos desplazamientos para realizar las visitas de los nodos intermedios m que supongan un máximo de β veces el desplazamiento original entre el depósito y el nodo i. t0m+tmi ≤ β ·t0i Asignación y adición directa a una ruta k con espera Si la lista L2 está vacía, entonces la opción es esperar y visitar después de la espera el nodo i en consideración
INNOVATIONS AND TECHNOLOGY PROJECTS AND OPERATIONS MANAGEMENT IN THE CITY DEVELOPMENT 23 Para ello se amplía una ruta k comenzando en 0 y visitando el nodo i en cuestión, aunque esperando un tiempo equivalente a teki, y que implica una espera total de la ruta Ek Se amplía una de las rutas inicializadas al comienzo de la planificación, actualizando todos los valores de la siguiente manera: LRk=[0, i] CRk=[i] ck=di trk=t0i+ tsi + teki Dk=t0i Ek=teki En este caso la espera sería teki=[tai-(t0i)]+ A continuación se elimina el nodo i de la lista L1 Si la lista L2 no está vacía entonces el algoritmo procede a la generación de la lista de posibles inserciones dobles de nodos intermedios, L3. Generación de la lista de inserciones dobles L3 Se comprueba si existe posibilidad de realizar una segunda parada antes de realizar el servicio al nodo i en estudio. Para ello se genera una segunda lista de dobles paradas denominada L3. La lista L3 está formada por pares de nodos de L2 que permiten la realización de dos paradas antes del servicio del nodo i en consideración. Para ello se seleccionan de L2 el conjunto n2 de pares de nodos m y l tales que: Restricción de apertura de los nodos m y l Cumplen la restricción temporal expuesta para L2, o lo que es lo mismo, se trata de nodos que están abiertos para realizar la escala intermedia. Estas restricciones son las siguientes: tam ≤ t0m tal ≤ tom+tsm+tml Restricción de llegada a tiempo al nodo i en cuestión Cumplen la restricción de llegada a tiempo al nodo i, en caso de visita de ambas escalas intermedias de los nodos m y l. t0m+tsm+ tml+tsl+tli ≤ tci Incluyendo la variable de holgura para deshacer la inecuación, la expresión anterior resultaría en: t0m+tsm+ tml+tsl+tli+ nh'i = tci donde nh'i ha de ser mayor o igual que 0. Restricción de desplazamiento geográfico máximo autorizado. Es necesario comprobar que no implican un gran desplazamiento, por lo que el desplazamiento total ha de ser menor o igual que γ veces el valor de β veces la distancia original. Matemáticamente:
CITIES IN COMPETITION 24 t0m+ tml+tli ≤ γ β t0i Una vez computadas todas las nuevas holguras, se procede de la siguiente manera: Si L3 está vacía, entonces escogemos el nodo m de L2 que maximiza nhi, y se añaden a una de las rutas creadas al principio de la siguiente manera: LRk=[0, m, i] CRk=[i] ck= dm + di trk=t0m + tsm+tmi+tsi+teki Dk= t0m + tmi Ek=teki En este caso teki=[tai-( t0m + tsm + tmi)]+ A continuación se elimina el nodo i de la lista L1 y se elimina el nodo m de la lista L0 Si L3 no está vacía entonces se seleccionan los nodos m y l que maximizan el valor de la nh'i de manera que se procede a añadir estos dos nodos a una de las rutas originalmente creadas al principio de la planificación de la siguiente manera: LRk=[0, m, l, i] CRk=[i] ck= dm + dl + di trk= t0m + tsm + tml + tsl + tli+tsi+teki Dk= t0m + tml+ tli Ek=teki En este caso el teki=[tai- (t0m + tsm + tml + tsl + tli)]+ A continuación se elimina el nodo i de la lista L1 y se eliminan los nodos m y l de la lista L0 El hecho de escoger aquel o aquellos nodos que minimicen el desplazamiento total, o lo que es lo mismo, que maximizan la nueva holgura resultante para el nodo i en estudio, implica lo mismo que escoger aquel o aquellos nodos que estando entre los dos nodos en consideración, minimizan la desviación sobre la pendiente original, en este sentido se minimiza la desviación generada por los nodos insertados y que serán escalas antes de llegar al nodo destino. De esta manera se procede a la construcción de las R primeras rutas de la solución, con los primeros R nodos semilla seleccionados, hasta que se vacía la lista L1. Regeneración de la lista de los R siguientes nodos críticos L1 Hasta el momento se han construido un total de R rutas iniciales y se han actualizado todos los valores para cada una de las mismas y que servirán para esta segunda etapa de planificación. Esta segunda fase se desarrolla de la siguiente manera. La idea consiste en ir seleccionando en cada una de las iteraciones del problema un total de R nodos para su asignación a las R rutas ya existentes. En este sentido se trata de un algoritmo de construcción
INNOVATIONS AND TECHNOLOGY PROJECTS AND OPERATIONS MANAGEMENT IN THE CITY DEVELOPMENT 25 paralela dado que las rutas se construyen simultáneamente en contra de los procedimientos de construcción de rutas secuenciales. Una vez seleccionados los R siguientes nodos a ser asignados se buscan aquellas rutas en las que su inserción es factible en términos de temporalidad, y en segundo lugar se tiene en cuenta los criterios de cercanía de cada uno de los nuevos nodos a las cabezas de ruta existentes. Una vez asignados los nodos en consideración se vuelven a contemplar las posibilidades de inserción simple y doble. A partir de esta segunda etapa se procede a tener en cuenta los tiempos de cierre, y no las holguras como se realizó en la primera fase de la planificación. En este sentido nos encontramos con los nodos que requieren una atención más inmediata en la planificación de las rutas, y que por ello han de ser asignados inmediatamente a las rutas existentes. Estos nodos pasan a conformar la lista L1, que en este caso se ordena de forma creciente atendiendo a los momentos de cierre de cada uno de los R nodos seleccionados. Procedimiento de asignación de un nodo i a una ruta k Se seleccionan los R nodos con momentos de cierre más tempranos de la lista de nodos no asignados L0. A continuación estos nodos se ordenan de forma ascendente teniendo en cuenta sus momentos de cierre, de forma que los nodos con momentos de cierre más tempranos son aquellos que primero serán atendidos. En este caso, en contra de lo que ocurría al comienzo de la fase de planificación, la holgura ya no es una medida válida, debido a que para cada uno de los nodos en consideración de la lista L1 , las holguras son diferentes según la ruta que se considere. Por ello se opta primero por ordenar los nodos según su requerimiento de inmediatez representado ahora por su momento de cierre, para posteriormente analizarlos en detalle. Para estos nodos se genera una tabla en la que establecen los cálculos de los tiempos de llegada estimados desde cada una de las cabezas de ruta existentes hasta cada uno de los nodos en consideración. El cómputo del tiempo estimado de llegada del vehículo que está sirviendo la ruta k al nodo en consideración i equivale al cálculo de trk+tCRk i Es decir que se computa el tiempo acumulado de la ruta k en cuestión más el tiempo de desplazamiento entre el último nodo de la ruta k, denominado cabeza de ruta k, hasta el nodo i en cuestión. Este cómputo se realiza para todos y cada uno de los nodos integrados en L1, y para todas las rutas existentes en ese momento, de manera que obtenemos una matriz con L1 filas y R columnas donde se disponen todos los valores del problema. A continuación se comparan estos tiempos estimados de llegada con los momentos de cierre de cada uno de los nodos de la lista L1 para verificar si la llegada de los vehículos se produce a tiempo para realizar el servicio. De esta forma es posible volver a calcular unas holguras que van a servir para decidir cuáles de los nodos serán asignados a continuación. El cálculo de las holguras para un nodo i a ser visitado por la ruta k se realiza de la siguiente manera: hi=tci-[trk+tCRk i] En este sentido solamente se pueden considerar las holguras positivas dado que en caso de resultar negativa implicaría que el vehículo de esa ruta no llegaría a tiempo de realizar el servicio de ese nodo.
CITIES IN COMPETITION 32 Potvin J.Y., y Bengio S., (1996), “The Vehicle Routing Problem with Time Windows - Part 2: Genetic Search”, INFORMS J. Comp., Vol. 8, No. 2, p. 165-172. Potvin J.Y., Dubé D. y Robillard C., (1996), "A Hybrid Approach to Vehicle Routing Using Neural Solomon, M., (1983), “Vehicle Routing and Scheduling With Time Window Constraints: Models and Algorithms”, working paper, No. 83- 42, College of Business Administration, Northeastern Univeristy. Solomon M., (1986), “On the Worst-Case Performance of Some Heuristics for the Vehicle Routing and Scheduling Problem with Time Window Constarints”, Networks, Vol. 16, p. 161-174. Solomon M., (1987), “Algorithms for the vehicle routing and scheduling problem with time window constraints”, Oper. Res. Vol. 32, p.254- 265. Solomon M., Baker E.K. y Schaffer J.R., (1988), “Vehicle Routing and Scheduling Problems with Time Windows Constraints: Efficient Implementations of Solution Improvement Procedures”, en: Vehicle Routing: Methods and Studies, Ed. Golden B. G. and Assad A. A., Elsevier Science Publishers B.V. (North Holland), p. 85-105. Solomon M. y Desrosiers J., (1988), “Time Window Constrained Routing and Scheduling Problems”, Transp. Sci., Vol. 22, No. 1, p.1-13.