Está en la página 1de 10

1

De La Cruz, Nafeth., Landzury, Fernando.

METAHEURISTICA
BSQUEDA TAB
naferthd@uninorte.edu.co, landazuryf@uninorte.edu.co
Universidad del Norte
(TABU SEARCH)

Abstract This paper presents the Metaheuristics


optimization algorithm Tabu search with a practical application
example. The article describes the operation of tabu search
algorithm and its application in solving problems as travelling
salesman problem, Single machine scheduling setup time and the
vehicle routing problem with time windows. Finally an algorithm
in Matlab published by an author of free distribution is
presented.
Index Terms Algorithm, Metaheuristics, Single machine
scheduling setup time, Tabu search, Traveling salesman problem
and Vechicle routing problem.

I.

INTRODUCCIN

La abundancia de problemas de optimizacin de alto grado de


dificultad en el mundo real, ha sido una de las causas
principales por la que en las ltimas dcadas se ha
desarrollado un nmero considerable de tcnicas heursticas,
que permiten obtener al menos un resultado sub-ptimo en un
perodo de tiempo relativamente corto en problemas que
resultara imprctico resolver mediante "fuerza bruta". [1]
Es por esto que en la dcada de los 80, Fred Glover desarroll
una heurstica para tratar de resolver problemas de cubierta no
lineal, llamada Bsqueda Tab, la cual da a conocer en su
mismo artculo donde introdujo el trmino Metaheurstica. Los
principios fundamentales de este algoritmo de bsqueda
fueron publicados en una serie de artculos de finales de los
aos 80 y principios de los 90 y finalmente unificados en el
libro Tabu Search en 1997.
Las tcnicas heursticas ms conocidas hoy en da no hacen
ms que adaptar ideas conocidas desde hace mucho tiempo en
otras disciplinas. Por ejemplo, los algoritmos genticos
emulan los mecanismos de la evolucin; los mtodos de flujo
de redes se fundamentan en ideas de la electricidad y la
hidrulica, y el "recocido simulado" se basa en un proceso
fsico de la industria metalrgica. Similarmente, la tcnica
conocida como bsqueda tab se basa en ciertos conceptos
tomados de la Inteligencia Artificial y se utiliza como una
Metaheurstica (o una heurstica de "alto nivel") para resolver
problemas de optimizacin combinatoria. [1]

Por otra parte, el termino Metaheurstica se refiere a


estrategias generales para el diseo de procedimientos
heursticos inteligentes, es decir, las Metaheursticas son el
resultado de aplicar la estrategia general de la Inteligencia
Artificial en el rea de las heursticas. Adems, las
Metaheursticas se configuran como un elemento propio de la
Inteligencia Artificial ya que pueden integrarse con otras

herramientas para actuar como un sistema experto y facilitar


su uso genrico a la vez que mejorar su rendimiento.
Siguiendo las pautas marcadas por las Metaheursticas es
posible obtener algoritmos con un alto rendimiento para la
toma asistida de decisiones. Las situaciones que surgen en
circunstancias reales precisan, dada la gran complejidad y el
nmero de variables a tener en cuenta, la utilizacin de
herramientas informticas en el anlisis del problema para
determinar rpidamente propuestas de alta calidad. En estas
ocasiones es de gran importancia contar con un procedimiento
capaz de explorar de forma eficiente el espacio de soluciones
alternativas para seleccionar una que alcance las mximas
cotas posibles en los objetivos propuestos. Ante la ausencia de
un procedimiento exacto que permita obtener en todas las
circunstancias una solucin ptima en tiempo razonable es
importante contar con un algoritmo heurstico que aporte una
alternativa con una alta confianza de que es la mejor solucin
posible o est muy prxima a serlo. [2]
La bsqueda tab puede verse como una Metaheurstica que se
superpone a una tcnica de bsqueda y que trata de evitar que
dicha tcnica caiga en ptimos locales prohibiendo ciertos
movimientos. Tambin puede entenderse como una
Metaheurstica que gua un procedimiento heurstico de
bsqueda local en la bsqueda del ptimo global. Su filosofa
se basa en derivar y explotar una coleccin de estrategias
inteligentes para la resolucin de problemas, basadas en
procedimientos implcitos y explcitos de aprendizaje [3]. El
problema de este algoritmo es que se puede quedar atrapado
en ptimos locales, por lo cual se debe considerar la
posibilidad de avanzar segn pasos que no mejoren la
solucin, con esto el riesgo de repetir soluciones aumenta, por
lo tanto la solucin es utilizar memoria para descartar los ya
visitados.
El propsito de clasificar ciertos movimientos como
prohibidos (o "tab") es para evitar que se caiga en ciclos
durante la bsqueda. Debido a esto, Glover sugiere como
nombre alternativo para su mtodo, el de bsqueda con
"inhibicin dbil", ya que los movimientos que se consideran
prohibidos constituyen generalmente una pequea fraccin del
total de movimientos disponibles, y un movimiento pierde su
status de prohibido despus de un perodo de tiempo
relativamente corto, volvindose despus nuevamente
accesible. [1]
Ms particularmente, la bsqueda tab est basada en la
premisa de que para clasificar un procedimiento de resolucin
como inteligente, es necesario que este incorpore memoria
adaptativa y exploracin responsiva. La memoria adaptativa
en bsqueda tab permite la implementacin de
procedimientos capaces de realizar la bsqueda en el espacio
de soluciones eficaz y eficientemente. Dado que las decisiones

2
locales estn por tanto guiadas por informacin obtenida a lo
largo del proceso de bsqueda, la bsqueda tab contrasta con
diseos que por contra confan en procesos semialeatorios, que
implementan una forma de muestreo. La memoria adaptativa
tambin contrasta con los tpicos diseos de memoria rgidos
tales como las estrategias de ramificacin y acotacin. [3]
El nfasis en la exploracin responsiva considerada en la
bsqueda tab deriva de la suposicin de que una mala
eleccin estratgica puede proporcionar ms informacin que
una buena eleccin realizada al azar, dado que una eleccin
estratgica mala puede proporcionar pistas tiles sobre como
guiar la bsqueda hacia zonas prometedoras. Por lo tanto, la
exploracin responsiva integra los principios bsicos de la
bsqueda inteligente; explota las caractersticas de las
soluciones buenas a la vez que explora nuevas regiones
prometedoras.
II.

USOS FRECUENTES DE LA BUSQUEDA TABU

Desde que se dio a conocer a finales de los 80 y comienzo de


los 90 por Fred Glover, la Bsqueda Tab ha tenido
innumerables aplicaciones en diferentes reas de la
investigacin de operaciones. Las aplicaciones ms frecuentes
que se encuentran en la literatura se pueden clasificar en las
siguientes categoras segn Glover [4]:
- Planificacin (por ejemplo: planificacin de horarios, de
mquinas, de fuerza de trabajo, etc.)
- Diseo (por ejemplo: diseo de topologas de redes,
planeacin de espacios arquitectnicos, de redes tolerantes a
errores, etc.)
- Lgica e Inteligencia Artificial (por ejemplo: reconocimiento
de patrones y caracteres, integridad de datos, diseo de redes
neuronales, lgica probabilstica, etc.)
- Tecnologa (por ejemplo: inversin ssmica, distribucin de
potencia elctrica, construccin de estaciones espaciales,
exploracin de yacimientos petrolferos, diseo estructural,
etc.)
- Telecomunicaciones (por ejemplo: asignacin de rutas,
planeacin de descuentos a clientes, redes ptimas sncronas,
arquitecturas inmunes a fallas, etc.)
- Produccin, inventario e inversin (por ejemplo:
manufactura flexible, seleccin de partes, planeacin de
inventarios, etc.)
- Localizacin y asignacin (por ejemplo: flujo de mltiples
productos bsicos, asignacin cuadrtica, etc.)
- Ruteo (por ejemplo: ruteo de vehculos, de flotas mixtas, el
problema del agente viajero, etc.)
- Optimizacin de grficas (por ejemplo: divisin de grafos,
coloreado de grafos, etc.)
- Problemas de optimizacin combinatoria en general (por
ejemplo, programacin cero-uno, programacin no lineal y no
convexa, optimizacin entera mixta, etc.)

En general, esta tcnica ha tenido mucho xito en problemas


de optimizacin combinatoria que pueden expresarse en la
forma de una grfica o una red de flujos. Glover [5] afirma
haber resuelto con este mtodo problemas que involucran
entre uno y cuatro millones de variables en menos de media
hora, usando slo una computadora personal, y obteniendo
resultados que se encuentran dentro del 98% de lmite superior
de optimalidad. Tan slidos resultados la hacen ver como una
tcnica de bsqueda muy prometedora dentro de la
investigacin de operaciones, y a la cual se le sigue dando
mltiples usos y combinaciones con otras Metaheursticas
conocidas como hbridas.
III.

FUNCIONAMIENTO DEL ALGORITMO

Una enfoque general del algoritmo de bsqueda tab es[6]:


Notacin
S, la solucin Inicial.
S*, la mejor solucin hallada.
f* Valor de S*.
N(S), el vecindario de S.
( S ) el subconjunto admisible de N(S)

N
Suponga que se desea minimizar una funcin f (S) sobre
algn dominio y se aplica la versin mejor mejora de la
bsqueda tab, que corresponde a la versin en la cual se opta
en cada iteracin el mejor movimiento disponible.
1.

Inicializacin
Escoge (Construye) una solucin inicial S0.
Inicia S= S0, f*=f (S0), S*= S0, T=

2.

Bsqueda
Mientras el criterio de terminacin no sea satisfecho
hacer:
Selecciona S con el argmin [f(S)]; S

(S )
N

Si f(S) < f*, entonces selecciona f*:=f(S),


S*:= ;
Guardar como Tab el movimiento en T
(borrar la entrada ms antigua si es
necesario);
Iterar el algoritmo

El esquema general del algoritmo de bsqueda Tab plantea la


adopcin de mtodos de bsqueda local, o en otras palabras,
exploracin de un vecindario de soluciones para la obtencin
de ptimos locales.
Supngase un espacio de soluciones como el contemplado en
la Error: Reference source not found, el algoritmo bsqueda
tab parte de una solucin inicial, que se encuentra en un
vecindario de soluciones (el vecindario de soluciones son
todas y cada una de las soluciones dentro del valo) y con el
uso de mtodos o heursticas de bsqueda local se busca
probar las posibles soluciones del vecindario (soluciones

3
dentro del ovalo), encontrando de esta manera un ptimo local
para el vecindario de soluciones.
50
40
30
20
10
0

10 15 20 25 30 35 40 45 50
Ilustracin 1 Universo de soluciones

IV. PARAMETROS DE DISCUSION


El principal inconveniente de las bsquedas locales, es que en
general, suministran soluciones localmente ptimas que
pueden estar muy alejadas de la solucin ptima global[7].
Para el algoritmo bsqueda tab, la calidad de la solucin
inicial juega un factor significativo, dado que la baja calidad
de la solucin inicial, puede ocasionar la bsqueda de un
ptimo local muy alejado del ptimo global. Por lo anterior
existen muchos mtodos para la construccin de una solucin
inicial. Algunos que involucran desde heursticas simples,
como la del vecino ms cercano o insercin ms prxima, a
otras ms complejas como el uso de la meta heurstica Grasp
(Greedy randomized adaptative search procedure) un mtodo
multi-arranque (mtodos que generan soluciones iniciales y las
mejoran) de bsqueda miope (busca sesgada) aleatorizado y
adaptativo, que asegura soluciones iniciales (combinado con
bsqueda tab) que permitan conseguir ptimos locales ms
cercanos al ptimo global.
La heurstica de bsqueda local es otro factor significativo en
la solucin del algoritmo de bsqueda tab, al igual que la
solucin inicial existen diversas heursticas y el nivel de
complejidad de ests influyen en la calidad de las soluciones
del vecindario o la posibilidad de acceder a otros vecindarios
de soluciones. Uno de los algoritmos ms usados es el
algoritmo k-opt que consiste en mover k secuencias de las
soluciones de modo que se puedan probar otras soluciones del
vecindario[8]. El uso de heursticas ms complejas involucra a
algunas como GENI o US, las cuales han sido diseadas para
el problema del agente viajero y son utilizadas para problemas
de ruteo.
Uno de los elementos fundamentales de esta meta heurstica es
la lista tab, la cual simula de manera artificial la memoria
humana, mediante una lista que es empleada en el
almacenamiento de las caractersticas de los movimientos
aceptados, de modo que estas caractersticas sean clasificadas
como tab en prximas iteraciones del algoritmo.
En lo que respecta a la lista tab el algoritmo consiste en tres
estrategias: Estrategia de olvido, estrategia de liberacin y
la estrategia de intensificacin.

La estrategia de olvido, controla las entradas a la lista tab y


es empleada para evitar problemas cclicos previniendo de
visitar soluciones ya exploradas en iteraciones anteriores,
clasificndolas como tab. Idealmente, la lista tab debera
recordar todas y cada una de las soluciones, empero, realizar
esta labor requiere un alto esfuerzo computacional, para lo que
una alternativa para este problema es la de recordar no visitar
soluciones visitas durante Ts iteraciones previniendo la
escogencia de movimiento que represente reversin de
cualquier solucin tomada durante la secuencias de las ltimas
Ts iteraciones y alejando la bsqueda de todas las soluciones
de las Ts iteraciones. Las Ts iteraciones son llamadas
comnmente el tamao de la lista tab. En un tamao de
lista muy pequeo la probabilidad de encontrarse en un una
bsqueda cclica es alta, si el tamao de la lista es muy grande
la bsqueda puede estar siendo alejada de vecindarios con
buenas soluciones antes de que sean exploradas.
No obstante, la condicin tab de una solucin puede ser
violada mediante el criterio de aspiracin, el cual es usado
para liberar soluciones tab con la suficiente calidad y que
pueden prevenir un ciclo. El criterio de aspiracin tiene un rol
de gua en el proceso de bsqueda, la estrategia de olvido
tienen un rol restrictivo del espacio de bsqueda para el
algoritmo. Una solucin es aceptada como nueva solucin
inicial si las restricciones tab son cumplidas. Sin embargo,
una solucin tab es asumida aceptable si el criterio de
aspiracin aplica de manera independiente[9]. En otras
palabras una solucin tab podr ser aceptada si y solo s la
solucin tab es mejor que la mejor solucin obtenida de
manera global por las iteraciones del algoritmo, llamado este
tipo de criterio de aspiracin tiempo-dependiente. Un criterio
de aspiracin tiempo-independiente es la aceptacin de una
solucin tab cuando las soluciones de una iteracin se
encuentran truncadas (todas las soluciones de una iteracin
son tab). El uso apropiado de los criterios de aspiracin
pueden ser significativo para permitir que la bsqueda tab
alcance su mayor desempeo.[9]
Por otro lado, la estrategia de liberacin es usada para
decidir las salidas de la lista tab. La estrategia borra las
restricciones tab de las soluciones para que puedan ser
consideradas en iteraciones en adelante de la bsqueda. Los
atributos de una solucin tab permanecen en la lista tab una
duracin de Ts iteraciones. Una solucin es considerada
admisible si sus atributos no son tab o pasan el criterio de
aspiracin.
La estrategia de intensificacin utiliza funciones de memoria
a mediano y largo plazo. La idea detrs del concepto de una
bsqueda intensa es lo que una mente humana probablemente
hara, buscar con mayor atencin las porciones del espacio de
bsqueda que parezca prometedor de manera que se asegure
las mejores soluciones en esas reas o vecindarios de
bsqueda; un humano regular parara la bsqueda normal para
intensificar la bsqueda en las combinaciones que parezcan
promisorias. Esta estrategia opera creando una sub lista de una
seleccin de un nmero de movimientos generados durante la
ejecucin del algoritmo. Se cataloga como una estrategia de
aprendizaje de largo plazo que busca nuevas soluciones que

4
exhiban similar desempeo a las de las mejores soluciones.
Esto se logra a travs de restringir movimientos a soluciones
de menor desempeo.
Tal y como se ha descrito hasta el momento, el algoritmo
podra ser corrido, tericamente, de manera infinita, en la
prctica, la bsqueda tiene que ser terminada en un en el
tiempo que haga factible la obtencin, de si bien no el ptimo
global, una muy buena solucin. La culminacin del algoritmo
se realiza a travs de un criterio de terminacin, el cual
suspende el procedimiento luego de:

La existencia de un nmero especificado de


iteraciones,
Determinacin de un nmero preciso de iteraciones
que deban pasar de forma consecutiva, desde que
fuera hallada la mejor solucin.
EL objetivo alcance un valor pre-especificado.

V.

APLICACIONES

La Metaheurstica de Bsqueda Tab, es til para resolver


problemas frecuentes en el rea de ingeniera, como lo son el
Problema del agente viajero, Secuenciacin con tiempos de
alistamiento y Ruteo de vehculos con ventanas de tiempo.
Cada uno de estos problemas se plantea a continuacin:

A. Problema del agente viajero


El problema del agente viajero o TSP pos sus siglas en ingls
(Travelling Salesmen Problem), consiste en un agente de
ventas que debe visitar n sitios o ciudades, pasando una sola
vez por cada uno de estos, excepto del inicial, al cual debe
volver. Este es uno de los problemas ms famosos y complejos
de las ciencias computacionales y ha sido abordado por varias
ramas de la ingeniera y por distintas razones, su principal
aplicacin es la del ruteo desde distintas perspectivas, ya sea
un proceso que lleva una secuencia especfica o una
distribucin de carcter logstico en la que intervienen
elementos del transporte, buscando la mejor ruta posible con
criterios de economa en distancia o en costo. Proveer
soluciones contribuye a mejorar tareas y procesos en distintos
mbitos, cientficos e industriales, proponiendo alternativas
para el mejor uso de los recursos.
De acuerdo con De los Cobos et al. [10], se define el problema
del agente viajero, dado un entero n>0 y las distancias
entre cada par de las n ciudades, estas distancias se da por
medio de la matriz (d ij ) de dimensin n n , donde
dij es un entero mayor o igual a cero. Un recorrido es una
trayectoria que visita todas las ciudades exactamente una vez.
El problema consiste en encontrar un recorrido con longitud
total mnima.
Una permutacin
interpreta ( j)

cclica representa un recorrido, si se


como la ciudad despus de la ciudad
. As, el costo del recorrido de un punto a

j , j=1,2, , n
otro es:
n

c j( j)
j=1

Ciuda
1 2 n
d
c 11 c 12 c 1 n
1
c 21 c 22 c 2 n
2

cn 1

cn 2

c nn

La resolucin de este tipo de problemas a travs del algoritmo


de optimizacin de bsqueda tab, parte a travs de la tabla
anterior. Se busca una solucin inicial y se ejecuta el algoritmo
de bsqueda a partir de la solucin inicial. Es comn que la
construccin de esta tabla las distancias de un punto a otro
sean distancias euclidianas o distancias de Manhattan. Las
distancias euclidianas son las menores distancias de un punto a
otro, geomtricamente son las curvas que representan la
distancia entre dos puntos. Las distancias de Manhattan son
las distancias entre dos puntos pero cruzando por el camino
construido para esos puntos. En una ciudad, la distancia de
Manhattan representan las distancias de las calles necesarias
para llegar de un punto i a uno j. Las distancia euclidiana en el
mismo ejemplo representan las distancias entre el mismo

5
punto i a otro j, sin tener en cuenta los obstculos que hacen
inviable transportarse de manera directa esa distancia.
Es normal encontrar en este tipo de problema que el costo, la
distancia o el tiempo representado en la tabla sea el mismo al
ir de una ciudad i a una j y viceversa.
B. Problema de Ruteo de Vehculos con Ventanas
de Tiempo.
Este problema es una variante de VRP conocida como
Problema de Ruteo de Vehculos con Ventanas de Tiempo
Parciales (Vehicle Routing Problem with Time Windows,
VRPTW).
A continuacin se definen los parmetros del problema en
cuestin:
En el problema VRPTW tenemos un conjunto de clientes
C={1, 2, ,n } , que residen en n ubicaciones
diferentes. Utilizamos el 0 para denotar la ubicacin del
depsito, con lo cual N=C U {0 } es el conjunto de
ubicaciones consideradas por el problema. A cada par de
clientes (i; j) , donde i, j , i j , se le asocia un
costo de viaje d ij > 0 y un tiempo de viaje t ij >0 .
Cada cliente i C
tiene una demanda w i > 0 . El
conjunto {d ij } define la matriz de costos del problema. La
matriz de costos satisface la desigualdad triangular si y solo si
d ik + d kj d ij i , j , k N . En nuestro caso, las instancias
del problema definen las ubicaciones de los clientes como
puntos en el plano y por lo tanto se definen los costos de viaje
como la distancia euclidiana entre los puntos. La matriz de
costos resultante es simtrica y satisface la desigualdad
triangular.
El conjunto de camiones o vehculos homogneos se denota
V , siendo m la capacidad de cada vehculo. En
algunas variantes del problema la cantidad de vehculos es una
variable a minimizar.
Ventana de Tiempo: Cada cliente i tiene una ventana de
tiempo o simplemente ventana, es decir, un intervalo
[ ai ; bi ] R donde ai y bi representan los horarios
de comienzo y el fin del abastecimiento del cliente i . Un
vehculo puede arribar a la ubicacin del cliente i antes de
ai , pero el abastecimiento no puede comenzar hasta el
horario de apertura de la
vehculo no puede arribar
finalizacin de la ventana
tambin tiene una ventana

a0

ai . Un
ventana de tiempo
al cliente i despus de la
de tiempo bi . El depsito
de tiempo [a0 ; b0 ] , donde

representa el horario en que los vehculos salen del

depsito y b0 representa el horario en que los vehculos


deben retornar al depsito.

Aunque existen diversas adaptaciones del algoritmo bsqueda


tab al problema del ruteo de vehculos con ventanas de
tiempo una adaptacin prctica consiste en los siguientes
pasos.
1. Utilizacin de la heurstica de barrido o sweep. En la
cual se forman clster o se aglomeran vrtices del
grafo en subgrupos. Estos se forman girando una
semirrecta con el origen en el depsito hasta que se
cumpla la capacidad de vehculos y demanda.
2. Luego se utiliza la Metaheurstica bsqueda tab para
encontrar la ruta adecuada entre nodos para cada
vehculo.
Otro enfoque sugiere la adaptacin del algoritmo a uno
conocido como ruta tab (Taburoute) el cual posee las
siguientes componentes adicionales;
1. Una solucin S es un conjunto de m rutas R1,, Rm
donde cada vrtice vi, salvo el depsito, pertenece a
un nica ruta.
2. La existencia de dos funciones objetivos una F 1(S) =
tij. Donde tij es el tiempo para ir de la ciudad i a
la j. F2(S) = F1(S)+max{0,(qi)-(Q)}+max{0,
[(tij+ti)-L}.
3. Criterio de aspiracin: Un movimiento de la lista tab
es aceptado si la solucin que produce es factible y es
mejor que el valor de F1 mejor encontrado o no es
factible y mejora el valor de F2
4. Al inicio de cada iteracin se elige un cierto de
nmero de ciudades al azar. Siendo que una ciudad se
inserta en otra ruta solo si ella est en una de sus k
vecinos ms prximos, o en una ruta vaca si hace
falta crear una nueva ruta.
C. Problema de Secuenciacin de Tareas con
tiempos de alistamiento
El problema a discutir es la programacin de n trabajos en una
sola mquina, donde el objetivo es minimizar la tardanza total
ponderada, con secuencias que dependen del tiempo de
preparacin. La mquina es capaz de manejar exactamente un
trabajo u operacin en cualquier momento dado, y cada uno de
tales trabajos u operaciones deben terminar el proceso una vez
se haya iniciado (es decir, el modelo es no preferente). Las
nicas decisiones que s que podrn ser tomadas son acerca de
la secuencia y el tiempo de liberacin de las ordenes de trabajo
orden u operaciones desde la entrada a la cola hasta la fuente
de salida.
La mquina procesa los trabajos de uno en uno en serie, el
recurso est disponible el intervalo de programacin de t s

a t e , los n trabajos de operaciones llegaran durante el


intervalo, el trabajo i tiene un tiempo de procesamiento
pi , un tiempo de alistamiento r i , y una fecha de
vencimiento

di

, la secuencia

depender

configuracin representada por una matriz de

de la

Ti, j ,

la

funcin objetivo es reducir al mnimo el total de la tardanza


ponderada.
El retraso" del trabajo i es la cantidad de tiempo (positivo
o negativo) por que la terminacin de actividad i excede
su vencimiento, Li=C i d i . La tardanza se define como
el retraso rectificado, i, e , es decir; el retraso de trabajo
i si es positivo. Si el retraso de trabajo i no es
positivo, la tardanza es el cero: T i =mximo{0, Li } . La
tardanza refleja el hecho de que en muchas situaciones, las
penalizaciones y otros gastos sern asociados slo con el
retraso positivo. La tardanza mnima ponderada

wT T i
i

es un objetivo til, pero los problemas que

usan este objetivo son muy complejos para solucionar


exactamente.
En este problema se debe considerar las permutaciones de los
n trabajos para encontrar la secuencia ptima. Sin embargo,
hasta para problemas de tamao modesto, la enumeracin
completa no es computacionalmente factible ya que esto
requiere la evaluacin de n secuencias. [11]
Un sin nmero de enfoques han sido sugeridos para la
solucin de este problema sin realizar una enumeracin
explcita. Held, Karp y Lawler presentaron formulaciones de
programacin dinmica, que requieren el examen 2 n de
subconjuntos posible de los n Trabajos. A pesar de ser mucho
ms eficiente que una enumeracin completa, este mtodo
sigue siendo computacionalmente imposible para los
problemas de tamao modesto. En las ltimas dcadas se han
desarrollado varias tcnicas, por ejemplo las normas-OPT que
llegaron a finales del 1970 y principios del 1980, mientras que
la dinmica de cuello de botella comenz a principios del
1980. Nuevos mtodos matemticos han ido apareciendo,
como la bsqueda en haz, recocido simulado, algoritmo
gentico, bsqueda tab y otros mtodos.
Desde la ptica del algoritmo la resolucin de este tipo de
problemas es similar a la del problema del agente viajero, sin
embargo una diferencia particular es que las distancias en la
tabla de informacin para este caso tiempo, no hay
reversibilidad o proporcionalidad por lo tanto el tiempo que
toma cambiar una tarea i a una j no es el mismo que al de una
tarea j a una i.
VI.

DESARROLLO EN MATLAB

Para el desarrollo del algoritmo de bsqueda Tab en Matlab,


se utiliz un cdigo desarrollado por Steve [12], el cual est
planteado para resolver el Problema del Agente Viajero. Este
algoritmo consta de una matriz d, la cual representa la matriz
de costos o distancia del problema a la cual tambin se le
conoce como matriz de adyacencia.
Los criterios de terminacin del algoritmo son los que se
muestran a continuacin:

Cuando se alcancel el nmero mximo de iteraciones


posibles.
Cuando despus de 10000 iteraciones la mejor
solucin encontrada aun no mejore.

Por otro lado, el tamao de la lista tab est definido por el


entero de la raz cuadrada de
siendo
n,
n=tamao de lamatriz , (cabe resaltar que el
algoritmo supone matrices simtricas). Para ver el cdigo
dirjase al Anexo 1.
VII. EJEMPLO PRCTICO
Pa ya es una compaa de la ciudad dedicada a como ellos
lo describen servicios domicilios varios. La compaa pone a
disposicin de los clientes motociclistas que deben recibir
documentos, encomiendas o recibos bancarios por parte de los
clientes y deben realizar las encomiendas o consignaciones
pendientes que el cliente no puede realizar. Una unidad de
negocio de la organizacin corresponde a el pago de
obligaciones bancarias a nivel corporativo, para lo cual los
recibos y el dinero de las transacciones es recogido por un
mensajero de la compaa y luego es llevado a la central para
ser clasificadas las cuentas y ser repartidas a un mensajero
destinado a un banco a la vez.
El mensajero encargado de recibir las consignaciones empieza
su da laboral en la compaa donde debe reportar su entrada y
luego debe visitar las 12 corporaciones adscritas al servicio
especial ofrecido por la compaa y al final debe regresar con
las transacciones bancarias solicitadas. Se desea conocer una
ruta que disminuya la distancia total recorrida por el
mensajero, que ayude a disminuir los costos de transporte.
Utilizando el algoritmo de bsqueda tab se propone una
secuencia que disminuya la distancia. Los parmetros de
bsqueda son los siguientes:
Bsqueda de una solucin inicial mediante la
heurstica del vecino ms cercano
La heurstica de prueba es 2-opt de movimientos
adyacentes,
El tamao de la lista tab es 5
El criterio de aspiracin es si y solo si se aceptara una
respuesta tab si la solucin de esa respuesta es mejor
que la mejor respuesta obtenida en las iteraciones
anteriores.
El criterio de terminacin del algoritmo, es un
nmero de iteraciones igual a 8 sin mejora.
La tabla de distancias se muestra a continuacin
1

10

11

12

13

29

10

26

20

26

22 10

18

17

28

22

30

17

17 23

12

30

17

29

11

27

14

20

13

26

10

25

30

13 20

14

11

24

15

7
5

26

22

11

25

10 23

11

17

10

20

30

27

17

16

25

26

17

30

15 27

21

29

30

22

17

13

10

15

24

24

10

23

14

20

23

17

27

15

20

10

18

12

20

14

21

10

13

15

11

17

13

11

11

24

10

30

14

12

28

30

24

17

16

29

15

13

30

13

17

26

15

10

25

30

24 20

15

14

0
1

12 13 3

1
0

11

147

Ntese que por las condiciones del problema el ciclo comienza


en 1 y termina en 1. Luego de 8 iteraciones adicionales el
criterio de terminacin se activa y obtenemos que el algoritmo
mejoro la solucin inicial en su 1er iteracin, siendo la
secuencia la siguiente:
1-13-12-3-4-6-5-8-10-9-11-7-2-1 F.O. 73
VIII. CONCLUSIONES

Haciendo uso de la heurstica del vecino ms cercano


obtenemos la ruta:
1-13-12-3-4-6-5-8-9-10-11-7-2-1 F.O. 74
1

10

11

12

13

29

10

26

20

26

22 10

18

17

28

22

30

17

17 23

12

30

17

29

11

27

14

20

13

26

10

25

30

13 20

14

11

24

15

26

22

11

25

10 23

11

17

10

20

30

27

17

16

25

26

17

30

15 27

21

29

30

22

17

13

10

15

24

24

10

23

14

20

23

17

27

15

20

10

18

12

20

14

21

10

13

15

11

17

13

11

11

24

10

30

14

12

28

30

24

17

16

29

15

13

30

13

17

26

15

10

25

30

24 20

15

14

Haciendo uso del algoritmo bsqueda tab obtenemos en la


primera iteracin:

A lo largo de estas pginas se ha intentado proporcionar un


panorama muy general de la llamada bsqueda tab, aunque
debido a su infinidad de variantes, el contenido de este artculo
dista mucho de ser un tratamiento exhaustivo del tema, pero
las referencias bibliogrficas proporcionadas debern ser un
buen punto de partida para el lector interesado en aprender
ms sobre esta rea.
Por otra Parte, la Metaheuristica de Bsqueda Tab representa
un procedimiento que es capaz de explorar un universo de
soluciones, encontrando una solucin que si bien no representa
el ptimo global, si es aproximado o est muy prximo a serlo.
Los Algoritmos de Bsqueda Tab son de gran utilidad en
problemas donde la cantidad de variables son considerables,
ya que tienen la capacidad de encontrar en un tiempo
razonable, soluciones aproximadas a la ptima. La filosofa de
este no es compleja, solamente necesita para su
implementacin el contexto del problema y la historia del
proceso. Adems, es flexible y puede ser aplicado a cualquier
problema combinatorio en el que se defina con claridad y
precisin los elementos que intervienen, como por ejemplo el
problema del agente viajero, secuenciacin con tiempo de
alistamiento y ruteo de vehculos con ventanas de tiempo.
REFERENCIAS

F.O
1
0
1
0
1
0
1
0
1
0
1
0
1
0

12 13 3

13

13 12 4

13 12 3

13 12 3

13 12 3

13 12 3

13 12 3

10

13 12 3

13 12 3

11

123

11

109

11

121

11

119

11

90

11

94

11

89

11

73

11

10

97

11

75

[1]C. Coello, Busqueda Tabu: Evitando lo Prohibido. vol. 49, 1997.


[2]
J. A. M. Prez and B. M. Batista, "METAHEURSTICAS PARA
LA PLANIFICACIN LOGSTICA," 2005.
[3]
B. M. Batista and F. Glover, "Introduccin a la Bsqueda Tab."
[4]
F. Glover, Tabu search fundamentals and uses: Citeseer, 1995.
[5]
F. Glover, "Tabu search: A tutorial," Interfaces, vol. 20, pp. 74-94,
1990.
[6]
F. Glover and G. A. Kochenberger, Handbook of metaheuristics:
Springer, 2003.
[7]
R. Mart and J. Moreno-Vega, "Mtodos multi-arranque,"
Inteligencia Artificial. Revista Iberoamericana de Inteligencia
Artificial, vol. 19, pp. 48-49, 2003.
[8]
J. M. Daza-Escorcia, J. R. Montoya-Torres, and F. NarducciMarn, "Resolucin del problema de enrutamiento de vehculos
con limitaciones de capacidad utilizando un procedimiento
metaheurstico de dos fases," Revista EIA, 2013.
[9]
D. Pham and D. Karaboga, "Intelligent optimisation techniques,"
Genetic Algorithms, Tabu Search, Simulated Annealing and Neural
Networks, Springer, New York, 2000.

8
[10]
[11]
[12]

S. De los Cobos, J. Goddard, M. Gutirrez, and A. Martnez,


"Bsqueda y Exploracin Estocstica," U. A. Metropolitana, Ed.,
ed, 2010.
R. Beausoleil, "A TABU SEARCH APPROACH FOR THE
WEIGHTED TARDINESS WITH SEQUENCE-DEPENDET
SETUPS IN ONE MACHINE PROBLEM," ed, 2002.
Steve.
(2012).
Tabu
Search.
Available:
http://www.mathworks.com/matlabcentral/fileexchange/37402tabu-search/content/Testing.m

ANEXO 1
A continuacin se muestra el cdigo en matlab para resolver
problemas del vendedor viajero a partir de la metaheuristica de
Bsqueda Tab.
% Problema del vendedor viajero usando Tabu
% Este algoritmo asume que la matriz de distancia es
simetrica
% El recorrido siempre incia desde el punto 1
clc
d = ['Insertar matriz de valores']
d_orig = d;
start_time = cputime;
dim1 = size(d,1);
dim12 = size(d);
for i=1:dim1
d(i,i)=10e+06;
end
%
*****************Inicializacion
de
parametros**********************
d1=d;
tour = zeros(dim12);
cost = 0;
min_dist=[ ];
short_path=[ ];
best_nbr_cost = 0;
best_nbr = [ ];
% *******Generar la solucion inicial -encontrar camino ms
corto desde cada nodo****
% Si se seleccionan los nodos 1-2, encontrar la distancia de 2
a cada uno de los nodos
k = 1;
for i=1:dim1-1
min_dist(i) = min(d1(k,:));
short_path(i) = find((d1(k,:)==min_dist(i)),1);
cost = cost+min_dist(i);
k = short_path(i);
% Prohibir todos los caminos desde el nodo actual visitado a
todos los nodos anteriores visitados
d1(k,1)=10e+06;
for visited_node = 1:length(short_path);
d1(k,short_path(visited_node))=10e+06;
end
end
tour(1,short_path(1))=1;
for i=2:dim1-1
tour(short_path(i-1),short_path(i))=1;
end

%El ultimo nodo visitado es k;


last_indx = length(short_path)+1;
short_path(last_indx)=1;
tour(k,short_path(last_indx))=1;
cost = cost+d(k,1);
% Un recorrido se representa como una secuencia de nodos
crnt_tour = short_path;
best_tour = short_path;
best_obj =cost;
crnt_tour_cost = cost;
fprintf('\nInitial solution\n');
crnt_tour
fprintf('\nInitial tour cost = %d\t', crnt_tour_cost);
nbr_cost=[ ];
% Inicializar lista tabu "tabu_tenure" dando el nmero de
iteraciones para el
%que un par de nodos en concreto tienen prohibido el
intercambio
tabu_tenure = zeros(dim12);
max_tabu_tenure = round(sqrt(dim1));
%max_tabu_tenure = dim1;
penalty = zeros(1,(dim1-1)*(dim1-2)/2);
frequency = zeros(dim12);
frequency(1,:)=100000;
frequency(:,1)=100000;
for i=1:dim1
frequency(i,i)=100000;
end
iter_snc_last_imprv = 0;
% ********* Realizar la iteracin hasta que uno de los
criterios se cumple ***********
% 1. Nmero mximo de iteraciones alcanzadas
***************************************
% 2. Iteraciones desde la ltima mejora en el mejor objetivo
encontrado hasta
%Alcanza
un
umbral
**********************************************
********
best_nbr = crnt_tour;
for iter=1:10000
fprintf('\n*****iteration number = %d*****\n', iter);
nbr =[];
% ******************* Buscar todos los vecinos de la
actual gira de un intercambio
% ****************** entre cada par de nodos
***********************
% **** Calcular el costo de cada uno de los vecinos *****
nbr_cost = inf(dim12);
for i=1:dim1-2
for j=i+1:dim1-1
if i==1
if j-i==1
nbr_cost(crnt_tour(i),crnt_tour(j))=crnt_tour_costd(1,crnt_tour(i))+d(1,crnt_tour(j))d(crnt_tour(j),crnt_tour(j+1))+d(crnt_tour(i),crnt_tour(j+1));
best_i=i;
best_j=j;
best_nbr_cost = nbr_cost(crnt_tour(i),crnt_tour(j));
tabu_node1 = crnt_tour(i)
tabu_node2 = crnt_tour(j)

9
else
nbr_cost(crnt_tour(i),crnt_tour(j))=crnt_tour_costd(1,crnt_tour(i))+d(1,crnt_tour(j))d(crnt_tour(j),crnt_tour(j+1))+d(crnt_tour(i),crnt_tour(j+1))d(crnt_tour(i),crnt_tour(i+1))+d(crnt_tour(j),crnt_tour(i+1))d(crnt_tour(j-1),crnt_tour(j))+d(crnt_tour(j-1),crnt_tour(i));
end
else
if j-i==1
nbr_cost(crnt_tour(i),crnt_tour(j))=crnt_tour_costd(crnt_tour(i-1),crnt_tour(i))+d(crnt_tour(i-1),crnt_tour(j))d(crnt_tour(j),crnt_tour(j+1))+d(crnt_tour(i),crnt_tour(j+1));
else
nbr_cost(crnt_tour(i),crnt_tour(j))=crnt_tour_costd(crnt_tour(i-1),crnt_tour(i))+d(crnt_tour(i-1),crnt_tour(j))d(crnt_tour(j),crnt_tour(j+1))+d(crnt_tour(i),crnt_tour(j+1))d(crnt_tour(i),crnt_tour(i+1))+d(crnt_tour(j),crnt_tour(i+1))d(crnt_tour(j-1),crnt_tour(j))+d(crnt_tour(j-1),crnt_tour(i));
end
end
if nbr_cost(crnt_tour(i),crnt_tour(j)) < best_nbr_cost
best_nbr_cost = nbr_cost(crnt_tour(i),crnt_tour(j));
best_i=i;
best_j=j;
tabu_node1 = crnt_tour(i);
tabu_node2 = crnt_tour(j);
end
end
end
%*********** Aqui termina el calculo de los costos de los
vecinos***********
best_nbr(best_i) = crnt_tour(best_j);
best_nbr(best_j) = crnt_tour(best_i);
% **** Sustituya solucin actual por el mejor vecino.
*******************
% ************** Entrar en ella en la lista TABU
******************
% *** Nodos tab Etiqueta tal que nodo2 tab es siempre
mayor que tabu node1.
% Esto es necesario para mantener el carcter reciente basada
y frecuencia basado tabu la lista
% en la misma estructura de datos.
% ****** Encuentra el mejor vecino que no implique swaps
en la lista tab ***
% ************ Tomara la Respuesta tabu si se encuentra el
criterio de aspiracion **************
% ************** Se cumplen los criterios de aspiracin si
es un miembro de Tabu es mejor
% de la mejor solucin encontrada hasta el momento
**********************************
%, mientras que (tabu_tenure (tabu_node1, tabu_node2) |
tabu_tenure (tabu_node2, tabu_node1))> 0
while (tabu_tenure(tabu_node1,tabu_node2))>0
if best_nbr_cost < best_obj
%(TABU solution better than
the best found so far)
fprintf('\nbest nbr cost = %d\t and best obj = %d\n, hence
breaking',best_nbr_cost, best_obj);
break;
else

%***********Hacer que el costo de mover TABU


prohibitivos para
% *** no permitir su seleccin y buscar la siguiente mejor
vecino
%
****
eso
no
es
TABU
activo
****************************
nbr_cost(tabu_node1,tabu_node2)=nbr_cost(tabu_node1,ta
bu_node2)*1000;
best_nbr_cost_col = min(nbr_cost);
best_nbr_cost = min(best_nbr_cost_col);
[R,C] = find((nbr_cost==best_nbr_cost),1);
tabu_node1 = R;
tabu_node2 = C;
end
end
% ******* costo del tour penalizando objetiva por la
frecuencia de movimientos ********
if best_nbr_cost > crnt_tour_cost
fprintf('\nbest neighbor cost greater than current tour
cost\n');
min_d_col = min(d);
penal_nbr_cost = nbr_cost + min(min_d_col)*frequency;
penal_best_nbr_cost_col = min(penal_nbr_cost);
penal_best_nbr_cost = min(penal_best_nbr_cost_col);
[Rp,Cp] = find((penal_nbr_cost==penal_best_nbr_cost),1);
tabu_node1 = Rp;
tabu_node2 = Cp;
best_nbr_cost = nbr_cost(tabu_node1,tabu_node2);
end
% *****************Disminuir todas las tenencias del tab
por 1******************
for row = 1:dim1-1
for col = row+1:dim1
if tabu_tenure(row,col)>0
tabu_tenure(row,col)=tabu_tenure(row,col)-1;
tabu_tenure(col,row)=tabu_tenure(row,col);
end
end
end
%**********************RECENCY
TABU*****************************
tabu_tenure(tabu_node1,tabu_node2)=max_tabu_tenure;
tabu_tenure(tabu_node2,tabu_node1)=
tabu_tenure(tabu_node1,tabu_node2);
%**********************FREQUENCY
TABU*****************************
% Aumentar la frecuencia de la corriente se mueve en la lista
tab por 1 ********
% tabu_tenure (tabu_node2, tabu_node1) = tabu_tenure
(tabu_node2, tabu_node1) 1;
frequency(tabu_node1,tabu_node2)
=
frequency(tabu_node1,tabu_node2)+1;
%********Actualizacion
de
la
secuencia
actual**************
crnt_tour=best_nbr;
crnt_tour_cost=best_nbr_cost;
%************Actualizar
mejor
frecuencia*******************
if crnt_tour_cost < best_obj
best_obj = crnt_tour_cost;

10
best_tour = crnt_tour;
iter_snc_last_imprv = 0;
else
iter_snc_last_imprv = iter_snc_last_imprv + 1;
%if iter_snc_last_imprv >= (dim1-1)*(dim1-2)/2
if iter_snc_last_imprv >= 400
fprintf('\n NO improvmennt since last % iterations, hence
diversify\n',iter_snc_last_imprv);
min_freq_col = min(frequency);
%gives minimum of
each column
min_freq = min(min_freq_col);
[R,C] = find((frequency==min_freq),1); %find the moves
with lowest frequency
freq_indx1 = R
freq_indx2 = C
indx_in_crnt_tour1 = find(crnt_tour==R); %locate the
moves in the crnt tour
indx_in_crnt_tour2 = find(crnt_tour==C);
%Diversify using a move that has the lowest frequency
temp = crnt_tour(indx_in_crnt_tour1);
crnt_tour(indx_in_crnt_tour1)
=
crnt_tour(indx_in_crnt_tour2);
crnt_tour(indx_in_crnt_tour2) = temp;
tabu_tenure = zeros(dim12);
frequency = zeros(dim12);
frequency(1,:)=100000;
frequency(:,1)=100000;
for i=1:dim1
frequency(i,i)=100000;
end
tabu_tenure(R,C)=max_tabu_tenure;
tabu_tenure(C,R)=max_tabu_tenure;

frequency(R,C)=frequency(R,C)+1;
frequency(C,R) = frequency(R,C);
%Re-calculare crnt tour cost
crnt_tour_cost = d(1,crnt_tour(1));
for i=1:dim1-1
crnt_tour_cost
crnt_tour_cost+d(crnt_tour(i),crnt_tour(i+1));
end
iter_snc_last_imprv = 0;
if crnt_tour_cost < best_obj
best_obj = crnt_tour_cost;
best_tour = crnt_tour;
end
end
end
%fprintf('\ncurrent tour\n')
%crnt_tour
fprintf('\ncurrent tour cost = %d\t', crnt_tour_cost);
%fprintf('\nbest tour\n');
%best_tour
fprintf('best obj =%d\t',best_obj);
%pause;
End
fprintf('\nbest tour\n');
best_tour
fprintf('best obj =%d\n',best_obj);
end_time = cputime;
exec_time = end_time - start_time;
fprintf('\ntime taken = %f\t', exec_time);