análisis de un problema logístico a varios niveles en la industria del

Anuncio
ANÁLISIS DE UN PROBLEMA LOGÍSTICO A VARIOS
NIVELES EN LA INDUSTRIA DEL AUTOMOVIL.
DISEÑO DE SOLUCIONES APROXIMADAS
JESÚS ALEGRE, SILVIA CASADO, CRISTINA DELGADO Y
JOAQUÍN PACHECO
Dpto. Economía Aplicada. Univ.Burgos. Fac. C EE y EE.
Pza. Infanta Elena s/n BURGOS 09001
jfalegre{scasado,cdelgado,jpacheco}@ubu.es
TELÉFONO 947 25 90 24/21; FAX: 947 25 89 56
Resumen.- En este trabajo se analiza un problema planteado muy recientemente a los
autores por los responsables de un operador logístico situado en Villafría (Burgos). Este
operador trabaja para una empresa fabricante de componentes de automóviles,
gestionando y realizando las operaciones de entrega a clientes y recogida de materia
prima. En este modelo se incluyen varios niveles de decisión fuertemente
interaccionados entre sí que tienen como fin último la minimización del coste de estas
operaciones (entrega de pedidos a clientes y recogida de materia prima). Aunque sea un
modelo aparentemente demasiado específico y para una situación muy concreta,
entendemos que su análisis resulta interesante, puesto que cada vez se tiende a
considerar y analizar las operaciones logísticas de forma global y no de forma
individualizada. Dada la complejidad del modelo en esta primer trabajo se realiza la
descripción del mismo y se propone un primer y sencillo procedimiento heurístico para
su resolución. Se analizan las soluciones obtenidas con datos reales.
Palabras Clave:
Problemas Logísticos, Multiprocessor Scheduling Problem,
Problemas de Planificación, Problemas de Rutas,
Búsqueda Local
Planteamiento del Problema
El problema logístico que se plantea afecta a un operador logístico, (OL), que tiene
como cliente una empresa fabricante de componentes de automóviles (EF). El operador
logístico organiza, gestiona y realiza las actividades de recogida de materias primas en
las factorías suministradoras, y la entrega de productos elaborados a los clientes de
dicha empresa.
La empresa debe entregar determinados pedidos de productos elaborados
(componentes de automóviles) a sus clientes (básicamente diferentes tipos de volantes).
Cada pedido lleva asociado un número de unidades a entregar del producto y una
frecuencia. Cada producto elaborado requiere para su fabricación determinadas piezas
(materias primas), que deben ser recogidas en las factorías correspondientes.
El operador logístico dispone de un almacén regulador (AR) donde guarda las piezas
o materias primas, hasta que son recogidos por la empresa fabricante para su
manipulación. En este almacén regulador también se guardan los productos elaborados
por la empresa hasta que llegan los clientes a recoger los pedidos. El esquema básico se
ilustra con el siguiente gráfico. Los clientes se denotan por C_1, C_2, ..., C_nc y las
factorías de materias primas se denotan por F_1, F_2, ..., F_nf; donde nc y nf indican
respectivamente el número de clientes y el número de factorías.
C_1
EF
F_1
C_2
F_2
C_3
AR
(OL)
F_nf
C_nc
Esquema básico del funcionamiento del sistema.
El operador logístico intenta minimizar los costes de estas operaciones en un
horizonte temporal, (número de días = ndias) determinado, que son:
1) Coste de transportar las materias primas desde las factorías hasta el almacén
regulador
2) Coste del personal (‘carretilleros’) contratado para realizar las cargas de los pedidos
en los vehículos de los correspondientes clientes
Como se verá con más detalle en los siguientes apartados el tratamiento de este
problema va a implicar la modelización y la toma de decisiones a varios niveles, que
van a estar fuertemente relacionados unos con otros: diseño de calendarios de entregas
de productos, programación de las horas de dichas entregas, programación de las días y
cantidades de recogidas de materias primas y diseño de las rutas diarias de dichas
recogidas.
Además, en este interacción hay varios elementos a tener en cuenta como capacidad
productiva (tanto de factorías como de la empresa), stocks iniciales de productos
elaborados y materias primas, tiempos de transporte, tamaño de la flota y características
de la misma etc ...
La dificultad computacional de este modelo en su conjunto es evidente. Si nos
fijamos solamente en los niveles de decisión ‘más bajos’ (las horas de entrega de los
productos y el diseño de rutas de recogida de materias primas) de forma aislada y para
cada día, los modelos resultantes (el Multiprocessor Scheduling Problem, MSP¸y el
Problema de Rutas de Vehículos o VRP) son conocidos problemas NP-Hard. Por tanto
teniendo en cuenta además la rapidez con la que muchas veces se han de tomar las
decisiones en las empresas y que el operador logístico en cuestión es una pequeñamediana empresa que no dispone potentes ordenadores de cálculo en este caso lo más
adecuado es intentar desarrollar técnicas de solución aproximadas o heurísticas.
En este trabajo se va a desarrollar un ‘conceptualmente’ sencillo pero eficaz
procedimiento de búsqueda local. Nuestra intención es desarrollar procedimientos más
sofisticados en posteriores trabajos. El trabajo se estructura de la siguiente manera: en la
siguiente sección se explica la modelización del problema con los diferentes niveles de
decisión, su interacción entre ellos y la representación de las soluciones; en el tercer
apartado se definen movimientos vecinales entre soluciones y el procedimiento de
búsqueda local al que dan lugar; en el cuarto apartado se realizan diferentes pruebas con
datos reales.
2.- Modelización y representación de las soluciones
Las decisiones a tomar en este problema se pueden dividir en 4 partes o niveles
según la siguiente figura
Asignación de calendarios a los
pedidos de Productos Elaborados ( A )
Determinación en cada d ía de la
hora de entrega de cada pedido
al correspondiente cliente (B)
Programación de las cantidades y
los días de recogida en las
factorias de cada una de las
materias primas (C )
Diseño de las rutas de recogida
diarias (D )
A continuación se explican cada uno de ellos.
2.1.- Asignación de calendarios de los productos elaborados
Cada una de los nc pedidos de productos elaborados viene determinado por una
determinado número de unidades q(i), i = 1...nc y una frecuencia con la que es recogido.
En función de esa frecuencia se establece el conjunto de calendarios posibles de
recogida para cada producto (pedido de componentes). Por ejemplo, si el pedido tiene
una frecuencia de 1 entrega cada 4 días los posibles calendarios de entrega serán los
siguientes
{1, 5, 9, 13, 17, ....} o {2, 6, 10, 14, 18, ....} o {3, 7, 11, 15, 19, ....} o
{4, 8, 12, 16, 20, ....} (con algunas modificaciones por los días festivos).
Se trata de asignar a cada producto un calendario de entre los posibles. Se va a denotar
por: Γi ={Ci1, Ci 2,..., C i Ti } : Conjunto de calendarios del pedido i (i.e. del producto i).
C ri : Calendario r del pedido i.
Ti :
número de calendarios del pedido i.
Así mismo se va a denotar por el vector S = (j1, j2, j3,..., jnp), la solución en este nivel,
donde S(i) = ji indica el calendario asignado al pedido i.
2.2.- Hora de entrega de los pedidos de productos elaborados
Una vez conocidos que pedidos hay que entregar cada día, hay que asignar a cada
uno de ellos un slot u horario de entrega. Es decir, hay que indicar a los clientes, además
de los días, las horas en cada uno de estos días que deben ir a recoger sus pedidos.
En este sentido hay que tener en cuenta que:
- Las entregas de los pedidos se realizan en forma de pallets
- El numero de carretilleros necesarios en un slot determinado va a ser
proporcional al número de pallets que hay que cargar en ese slot
- Los contratos de los carretilleros son diarios y, por tanto, el número de
carretilleros a contratar cada día vendrá dado por el slot más ‘ocupado’ (con más
pallets asignado)
- En consecuencia, desde un punto de vista racional, se debe procurar que los
slots de cada día estén lo más compensados posibles. Es decir, se deben evitar
planificaciones que den lugar a días en los que haya un slot muy ‘ocupado’
(muchos pallets a cargar) junto con slots vacíos o casi vacíos, ya que esto
obligaría a contratar mucho personal que estaría desocupado la mayor parte de
ese día.
Con R se representa, en el conjunto de días, la distribución de pedidos por slots.
Donde R = {R(d)/ d=1...ndias}, y R(d) representa, la distribución del día d.
Supongamos un día con cuatro slots u horas de carga: de 9 a 10 (1), de 10 a 11 (2), de
11 a 12 (3) y de 12 a 13 (4); supongamos la siguiente distribución de pedidos R(d) para
un día cualquiera:
Slots
Pedidos (n. palets)
1
2
3
4
6–3-5
9
10 – 2
7–8
Para cada slot, la suma de palets de cada pedido, indica la proporción del numero de
carretilleros necesarios o nivel de ocupación. El slot de mayor valor (mayor numero de
palets), determina el numero de carretilleros a contratar cada día. En el ejemplo
propuesto vendría determinado por el slot 4: en este caso 15 pallets.
La distribución para cada de las entregas por slots se ajusta al conocido se ajusta al
conocido Multiprocessor Scheduling Problem (MSP). El MSP es un problema muy
estudiado en la literatura muy estrechamente relacionado con el Bin Packing. Conocidos
algoritmos constructivos para este problema, son los conocidos LPT (largest processing
time first) de Graham (1969) y MULTIFIT de Coffman et al. (1984). Un reciente
‘survey’ sobre este problema se pueden encontrar en Fujita y Yamashita, (2000).
Por otra parte un modelo que considera sólo estos 2 primeros niveles, A y B,
(asignación de calendarios y horas de recogidas diarias) propuso recientemente a los
autores de esta comunicación y los primeros resultados se han reflejado en algunos
trabajos anteriores: Delgado et al. (2002), Pacheco et al. (2002).
2.3.- Recogida de materias primas (días y cantidades)
Una vez conocidos las unidades solicitadas de los diferentes productos elaborados
por los clientes en los diferentes días, estos requerimientos van a obligar a realizar una
serie de recogidas de los correspondientes materias primas. Se ha de tener en cuenta los
siguientes aspectos:
- Capacidad productiva de las factorías: Las fechas de entrega de las materias primas
deben ‘permitir’ o hacer factible la producción de las cantidades requeridas.
- Las materias primas se entregan por lotes, con un número fijo de unidades por lote.
Es decir, si cada lote de una pieza es de 1000 unidades, la fabrica solo entregará
cantidades múltiplos de 1000, (1, 2, 3 lotes ...)
- Stocks de materia prima: Al comienzo del horizonte temporal pudiera existir un
determinado stock disponible de unidades de cada pieza, que se pueden usar. En este
sentido, a veces podría interesar usar la capacidad del almacén y realizar pocos viajes
con mucha mercancía en cada una de ellos en vez de muchos viajes con menos
mercancía.
- Capacidad de producción de los productos elaborados y Tiempos de Transporte: Las
fechas de recogida de materia prima deben permitir que teniendo en cuenta los tiempos
de transporte (de las materias primas de las factorías a almacén regulador y la empresa;
y de los productos elaborados de la empresa al almacén regulador), y los tiempos de
fabricación de los productos elaborados, estos estén preparados en las fechas señaladas
de entrega a los clientes.
Se va a denotar por hk el nº de piezas por día que puede producir la factoria k; sk el
stock de unidades de la pieza k; ltk el nº de unidades por lote de la pieza k, k =1...nf; hpi
el nº de unidades del producto i que produce la fábrica al día, i = 1...nc. Por otra parte se
va a considerar un tiempo (máximo) de trasporte de 2 días desde la recogida de las
materias primas hasta la llegada a la empresa tras pasar por el almacén regulador.
Considérese el siguiente ejemplo ilustrativo: se han de realizar 3 entregas de un
determinado producto V los días 11, 16 y 21, de 3200 unidades cada uno. El ritmo de
producción del producto V es de hpV = 800 unidades al día. En la elaboración del
producto V forma parte, entre otras, una pieza Y (y sólo una), de la que hay un stock
inicial de sY = 1000 unidades. La factoría correspondiente entrega lotes de ltY = 2500
unidades. En la siguiente figura se denota cuales serían las recogidas y las fechas
máximas que se deberían realizar
Stock =1000
3200
3200
3200
5
10
15
5000
2 lotes
2500
1 lote
2500
1 lote
Es decir se deberían recoger 1 lote como muy tarde el día 5, otros 2 lotes al día 10 y
otro más como máximo el día 15. Para cada materia prima k, se va a definir CP(k) =
{(lpk,1, dpk,1), (lpk,2, dpk,2), ..., (lpk,npk, dpj,npj)} conjunto de recogidas de lotes que se
deben realizar de la pieza k, donde lpk,s indica el número de lotes en la recogida s, y
dpk,s indica la fecha máxima de esa recogida. Sin perdida de generalidad se toma dpk,s ≤
dpk,s+1, s = 1...npk-1. En el caso anterior CP(Y) = {(1,5), (2,10), (1,15)}.
Así mismo se define CX(k) = {(lxk,1, dxk,1), (lxk,2, dxk,2), ..., (lxk,npk, dxk,nxk)} el
conjunto de recogidas que en realidad se van a hacer del pedido k, donde lxk,s indica el
número de lotes de la recogida s y dxk,s indica la fecha de esa recogida, (dxk,s ≤ dxk,s+1, s
= 1...nxk-1). Obviamente los valores de lxk,s y dxk,s deben ser compatibles con los del
correspondiente CP(k) y con la capacidad productiva de la factoría k. Es decir, se debe
cumplir que
∀ k = 1..nf :
s
∑ lxk ,s '' ≥ ∑ lpk ,s '
s '' / dxk ,s '' ≤ dpk ,s
s = 1,.., npk
s '=1
 s

 ∑ lxk , s '  ⋅ lt k ≤ hk ⋅ (dxk , s − d k ,0 )
 s '=1

s = 1,.., nxk ;
siendo dk,0 la fecha de la última recogida del periodo de planificación anterior.
2.4.- Rutas diarias
Una vez determinadas todas las cantidades a recoger y fechas para cada tipo de
piezas, o materia prima, (conjunto CX(k)) para cada día se deberán diseñar las rutas de
recogida las piezas correspondientes. Para la recogida de las materias primas se dispone
de una flota homogénea de vehículos con capacidad conocida tanto en peso, como en nº
de pallets. Como se ha comentado anteriormente los vehículos salen y llegan al mismo
punto: el almacén regulador. Cada recogida de materia prima debe ser realizada por un
solo vehículo en cada día. Existen una serie de normas conocidas referidas a los tiempos
de conducción y descanso.
Por tanto este problema se ajusta al conocido Problema de Rutas de Vehículos o
VRP (Vehicle Routing Problem), o para ser más precisos es un Problema de Rutas de
Vehículos con Restricciones de carga y tiempo (ver Laporte y otros, (1985)). Existen
muchos algoritmos de solución para el VRP, (y/o de variantes, principalmente del
VRPTW), en la literatura. Se pueden encontrar recopilaciones en Laporte y otros,
(1998), (1999), y Desaulniers, (1999).
Con RT se representa, en el conjunto de días, la configuración de las rutas. Donde
RT = {RT(d)/ d=1...ndias}, y RT(d) representa, las rutas del día d como un conjunto de
cadenas de puntos, una cadena por cada ruta, de la forma siguiente
RT(d) :
0 – 2 – 4 – 5 – 0;
0 – 1 – 3 – 7 – 0.
Los ‘0’ representan el origen y destino final de los vehículos (AR); los demás
elementos de las cadenas indican las piezas que se recogen en esa ruta y el orden de
visita. Por ejemplo en este caso, en el día d, la primera ruta realiza la recogida de las
piezas 2, 4 y 5, y la segunda ruta la de las piezas 1, 3 y 7, (la pieza 6 por ejemplo no se
recoge ese día).
La suma de las distancias recorridas por todas las rutas determinará el coste de
transporte. Obsérvese que las soluciones en este nivel van a estar condicionadas
fuertemente por los valores en los niveles superiores (A) y (C).
3.- Movimientos vecinales y procedimiento de Búsqueda Local
Dada una vector S, de calendarios de pedidos de productos elaborados, definimos su
vecindario N(S) de la siguiente forma:
S’∈N(S) ⇔ ∃1 i’∈{1,2,…,np}/ S’(i’) ≠ S(i’) y ∀i ≠i’ S’(i) = S(i).
Es decir, soluciones vecinas de S son todas aquellas a las que se da lugar cuando un
pedido (y sólo uno) cambia su calendario.
Para valorar los posibles movimientos de una solución a otra (en el nivel A), veamos
como se modifican inicialmente las variables de decisión en el resto de los niveles.
Cuando un pedido de producto elaborado i cambia del calendario C al C’, los valores de
R cambian de la siguiente manera:
- Para cada día d ∈ C-C’ eliminar el pedido i de R(d)
- Para cada día d ∈ C’-C añadir el pedido i a R(d) insertándolo en el slot menos
ocupado.
Para el conjunto de los día afectados es fácil calcular la diferencia entre el slot más
ocupado antes y después del cambio, y por tanto la variación del personal necesario.
Por otra parte para cada pieza k del producto i (es decir, materias primas afectadas
por el cambio) se determinan los nuevos conjunto CP(k) a que el cambio daría lugar, y
se toma CX’(k) = CP(k). Es decir suponemos que las ‘nuevas’ recogidas se realizan en
las fechas topes requeridas.
Finalmente para cada una de las materias primas afectadas k, se realizan los
siguientes pasos:
- ∀ s = 1..nxk,s se elimina la ‘vieja’ recogida s de RT(dxk,s). Para ello vale unir los
puntos de visita anterior y posterior
- ∀ s = 1..nx’k,s se añade la ‘nueva’ recogida s de RT(dx’k,s). Para ello se inserta
entre 2 puntos de RT(dx’k,s) de forma que se incremente menos la ruta resultante
sin violar ninguna restricción.
La variación de la distancia total recorrida se puede calcular fácilmente a partir de los
arcos que se eliminan y los que se añaden.
Además de para cada uno de los niveles B, C y D también se van considerar
diferentes movimientos vecinales que pueden ayudar a mejorar las soluciones una vez
que se ejecuta un movimiento. Así la composición de slots diarias, R(d), pueden ser
mejoradas con movimientos 0-1 (un pedido pasa de un slot a otro), o 1-1 (intercambios
de pedidos de diferentes slots). Estos intercambios han sido usados frecuentemente en
múltiples trabajos para el MSP, como en Hubscher y Glover (1994), y Thesen, (1998).
De la misma forma en el nivel C, se van a considerar cambios en la que la recogida s
de una pieza j puede adelantarse o atrasarse siempre que no se violen las restricciones
señaladas en el apartado 2.3., (y considerando siempre que dxk,s ∈( dxk,s-1 , dxk,s+1)). Al
realizar estos intercambios se modifican las rutas de los días afectados según se señaló
en este mismo apartado. Para valorarlos vale considerar los arcos que se eliminan y
añaden.
Finalmente las rutas diarias pueden ser mejoradas usando movimientos propuestos en
Pacheco y Delgado, (2001), basados en CROSS intercambios de Taillard et al., (1997),
y Or-intercambios, (1976). Los CROSS intercambios consisten en intercambiar cadenas
de puntos entre 2 rutas diferentes, y los Or-intercambios consiste en recolocar una
cadena de puntos en una posición diferente dentro de la misma ruta.
De esta forma el procedimiento de búsqueda local que se propone para el problema
completo, a partir de una solución inicial, (S, R, CX = {CX(k), k=1..nf}, y RT), actúa de
la siguiente manera.
Procedimiento de Búsqueda Local
Repetir
Buscar la mejor solución vecina de S
Si produce mejora en la función objetivo entonces:
Ejecutar el movimiento modificando las componentes de R, CX(k)
correspondientes y RT, (1)
Mejorar los R(d) afectados con movimientos 0-1 y 1-1, (2)
Mejorar las rutas modificando los días de recogida de piezas (3)
Para cada RT(d) modificado por los pasos (1) o (3) mejorar las rutas
con CROSS intercambios y Or- intercambios
hasta que no haya ninguna solución vecina mejor
4.- Problemas con datos reales: Resultados
Finalmente se van a mostrar los resultados obtenidos por el algoritmo propuesto para
un ejemplo con datos reales. El algoritmo va a usar como solución inicial los obtenidos
por el operador logístico (OL) y se va a analizar cuanto mejora dicha solución.
Se trata de datos referentes a entregas de productos en el almacén regulador del 11 al
28 de Junio de 2001, y las correspondientes entradas de piezas del 1 al 25 de Junio de
2001. Los productos son 8 tipos de cinturones de seguridad para diferentes versiones del
Opel Astra, mientras que en total hay 117 piezas diferentes. Cada cinturón está
compuesto de entre 21 y 24 piezas, (obviamente algunos tipos de cinturones pueden
tener algunos piezas iguales).
Tanto el almacén regulador como la empresa fabricante se localizan en el polígono
de Villalonquejar (Burgos). En cuanto a las factorías se distribuyen en 24 localidades de
España (9; 4 en Barcelona, 2 en Burgos y 1 en Guipuzcoa), Alemania (8), Francia (4),
Suiza (2) e Italia (1).
El capacidad de producción de la empresa es de unos 900000 cinturones por mes
(entre 3400 y 5000 cinturones al día según el tipo), aunque en las entregas
correspondientes a estos datos quedan bastante por debajo (1800 como máxima entrega
en un día para un tipo de cinturón).
Se dispone de una flota de vehículos de una capacidad de 66 europallets para las
recogidas de piezas. El coste por Kilómetro recorrido es de 145 pesetas; y el coste por
carretillero de 12000 pesetas al día; (1 carretillero carga 10 pallets por hora). A
continuación se muestran la solución obtenida por el operador logístico (OL), y la
resultante de aplicar a esta el procedimiento de Búsqueda Local (OL+BL).
Kilómetros
Contratos carretilleros
Coste Total
OL
13543
53
2599735
OL+BL
13186
50
2511970
La reducción en el coste total de las operaciones es de un 3,37 %, cantidad que puede
parecer pequeña. Sin embargo estos resultados entendemos que son esperanzadores
puesto que no se parte de una solución arbitraria o aleatoria, sino de la aportada por los
responsables del operador logístico con mucha experiencia. Por otra parte los
movimientos vecinales así definidos han resultado eficaces al demostrar conseguir leves
mejoras, y pueden formar parte de otras estrategias más sofisticadas como Búsqueda
Tabú, Path Relinking, VNS, etc que no se limitan a obtener un mínimo local.
Referencias y Bibliografía
COFFMAN Jr.,E.G., GAREY,.M.R. and JOHNSON,D.S. (1.978): “An Application
to the Bin-Packing to Multiprocessor Scheduling”, SIAM J. Comput., 7, 1-17.
DELGADO,C., CASADO,S. y ALEGRE,J. (2002): “Problema de contratacion de
carretilleros para un almacén de productos manufacturados”. Aceptada para su
publicación en Questiio.
FUJITA,S. and YAMASHITA,M. (2.000): “Approximation Algorithms for
Multiprocessor Scheduling Problem”. IEICE Trans. Inf. & Syst., vol. E83-D, nº 3, 503509.
GRAHAM,R.L. (1.969): “Bounds on Multiprocessing Timing Anomalies”. SIAM J.
appl. Math. 17, 416-429.
HUBSCHER,R. and GLOVER,F. (1.994): “Applying Tabu Search with Influential
Diversification to Multiprocessor Scheduling”. Computers and Operations Research 21,
877-844.
LAPORTE,G, GENDREAU,M., POTVIN,J.-Y. and SEMET,F. (1.999): “Clasical
and Moderns Heuristics for the Vehicle Routing Problem”. Les Cahiers du GERAD, G99-21. Montreal, Canada.
LAPORTE,G. NOBERT,Y. and DESROCHERS,M. (1.985). "Optimal routing under
capacity and distance restrictions". Operations Research 33, 1.075-1.073.
LAPORTE,G and SEMET,F. (1.998): “Clasical Heuristics for the Vehicle Routing
Problem”. Les Cahiers du GERAD, G-98-52. Montreal, Canada.
OR, I. (1.976). “Traveling Salesman Type Combinatorial Problems y their Relations
to the Logistics of Blood Banking.” Ph. Thesis. Dpt. of Industrial Engineering y
Management Sciences, Northwestern Univ.
PACHECO,J. y DELGADO,C. (2.000). “Resultados de diferentes experiencias con
Búsqueda Local aplicadas a problemas de rutas”. Revista Electrónica Rect@.
ASEPUMA, vol.2, nº 1, pgs. 54-81.
PACHECO,J., LAGUNA,M., CASADO,S. y ALEGRE,J. (2002): “Problema de
contratación de carretilleros en un fábrica de componentes de automóviles”. I Congreso
Español de Algoritmos Evolutivos y Bioinspirados, AEB’02, Mérida Febrero, 2002.
TAILLARD,E., BADEAU,P., GENDREAU,M., GUERTAIN,F. and POTVIN,J.Y.
(1.997). "A Tabu Search heuristic for the Vehicle Routing Problem with Time
Windows". Transportation Science. Vol. 31, pp 170-186.
THESEN,A. (1.998). “Design and Evaluation of Tabu Search Algorithms for
Multiprocessor Scheduling”. Journal of Heursitics, 4: 141-160.
Descargar