Estudio de técnicas de búsqueda por vecindad a muy gran escala

39
Estudio de técnicas de búsqueda por vecindad a muy gran escala Ravindra K. Ahuja Departamento de ingeniería industrial y de sistemas Universidad de Florida Gainesville, FL 32611, USA [email protected] Özlem Ergun Centro de investigación operativa Instituto tecnológico de Massachussets Cambridge, MA 02139, USA [email protected] James B. Orlin Escuela Sloan de dirección Instituto tecnológico de Massachussets Cambridge, MA 02139, USA [email protected] Abraham P. Punnen Departamento de matemáticas, estadística y ciencias informáticas Universidad de New Brunswick Saint John, New Brunswick, Canada E2L 4L5 [email protected] (22 de julio de 1999) (Revisado el 11 de octubre de 2000) 1

Transcript of Estudio de técnicas de búsqueda por vecindad a muy gran escala

Page 1: Estudio de técnicas de búsqueda por vecindad a muy gran escala

Estudio de técnicas de búsqueda por vecindad a muy gran escala

Ravindra K. Ahuja Departamento de ingeniería industrial y de sistemas

Universidad de Florida Gainesville, FL 32611, USA

[email protected]

Özlem Ergun Centro de investigación operativa

Instituto tecnológico de Massachussets Cambridge, MA 02139, USA

[email protected]

James B. Orlin Escuela Sloan de dirección

Instituto tecnológico de Massachussets Cambridge, MA 02139, USA

[email protected]

Abraham P. Punnen Departamento de matemáticas, estadística y ciencias informáticas

Universidad de New Brunswick Saint John, New Brunswick, Canada E2L 4L5

[email protected]

(22 de julio de 1999) (Revisado el 11 de octubre de 2000)

1

Page 2: Estudio de técnicas de búsqueda por vecindad a muy gran escala

Estudio de técnicas de búsqueda por vecindad a muy gran escala

Ravindra K. Ahuja, Özlem Ergun, James B. Orlin, Abraham P. Punnen

Resumen

Muchos problemas de optimización de interés práctico resultan intratables mediante técnicas de cálculo.

Ante esta dificultad, los algoritmos heurísticos (o de aproximación) se revelan como un medio útil para

su resolución, ya que permiten obtener soluciones casi óptimas en un tiempo razonable. Los algoritmos

de mejora son algoritmos heurísticos que, por lo general, parten de una solución factible y tratan de

hallar, por medio de iteraciones, una solución aún mejor. Los algoritmos de búsqueda por vecindad

(también llamados algoritmos de búsqueda local) constituyen un tipo bastante amplio de algoritmos de

mejora en los que en cada iteración se obtiene una solución mejorada buscando en la "vecindad" de la

solución existente. Un aspecto crítico del diseño de esta clase de algoritmos es la elección de la

estructura de la vecindad; es decir, el modo en el que se va a definir ésta. Como regla general, cuanto

más amplia sea la vecindad, mayor será tanto la calidad de las soluciones localmente óptimas como la

precisión de la solución final que se obtenga. Pero, al mismo tiempo, cuanto más amplia sea la vecindad,

más tiempo será necesario para realizar la búsqueda dentro de ella en cada iteración. Por esta razón, una

vecindad muy amplia produce necesariamente una heurística más eficaz, a menos que la búsqueda se

realice de un modo muy eficiente. El presente estudio se concentra en algoritmos de búsqueda local en

los que el tamaño de la vecindad es “muy grande” con respecto al tamaño de los datos y en los que la

búsqueda local se hace con criterios de máxima eficiencia. En él se analizan tres tipos muy amplios de

algoritmos de búsqueda por vecindad a muy gran escala (VLSN: Very Large-Scale Neighborhood): (1)

métodos de profundidad variable en los que la búsqueda local se realiza de modo heurístico, (2)

aplicación de la programación dinámica o de técnicas de flujo de redes a vecindades amplias, y (3)

vecindades grandes inducidas por restricciones del problema original que pueden resolverse en tiempo

polinómico.

1. Introducción Muchos problemas de optimización de interés práctico resultan intratables mediante técnicas

de cálculo. Ante esta dificultad, los algoritmos heurísticos (o de aproximación) se revelan como un

medio útil para su resolución, ya que permiten obtener soluciones casi óptimas en un tiempo razonable.

Los trabajos dedicados a algoritmos heurísticos suelen dividir éstos en dos amplias categorías:

algoritmos de construcción (o constructivos) y algoritmos de mejora. Los primeros montan una solución

partiendo de cero, mediante la asignación de valores a una o varias variables de decisión al mismo

tiempo, mientras que los algoritmos de mejora parten de una solución factible y tratan de hallar una

2

Page 3: Estudio de técnicas de búsqueda por vecindad a muy gran escala

mejor por medio de iteraciones. Los algoritmos de búsqueda por vecindad (también llamados algoritmos

de búsqueda local) constituyen un tipo bastante amplio de algoritmos de mejora en los que en cada

iteración se obtiene una solución mejorada buscando en la "vecindad" de la solución existente. El

presente estudio se concentra en algoritmos de búsqueda local en los que el tamaño de la vecindad es

“muy grande” con respecto al tamaño de los datos y en los que la búsqueda local se hace con criterios de

máxima eficacia. En instancias grandes de problemas, la búsqueda de este tipo de vecindades de modo

explícito resulta poco práctica, lo que hace necesario realizar la búsqueda en un segmento más pequeño

de la vecindad o bien desarrollar algoritmos que resulten eficaces en búsquedas de modo implícito en la

vecindad.

Un aspecto crítico del diseño de esta clase de algoritmos es la elección de la estructura de la

vecindad (es decir, el modo en el que se va a definir ésta), ya que del tipo de estructura que se elija

dependerá el que la búsqueda de vecindad desarrolle soluciones altamente precisas o soluciones con

óptimos locales muy pobres. Como regla general, cuanto más amplia sea la vecindad, mayor será tanto la

calidad de las soluciones localmente óptimas como la precisión de la solución final que se obtenga. Pero,

al mismo tiempo, cuanto más amplia sea la vecindad, más tiempo será necesario para realizar la

búsqueda dentro de ella en cada iteración. Dado que se suelen ejecutar varios algoritmos de búsqueda

local con distintos puntos de partida, la mayor duración de los tiempos de ejecución para cada iteración

requiere un menor número de ejecuciones por tiempo unitario. Por esta razón, una vecindad muy amplia

produce necesariamente una heurística más eficaz, a menos que la búsqueda se realice de un modo muy

eficiente.

Varios de los métodos más utilizados por su alta eficiencia en investigación operativa pueden

entenderse como técnicas de búsqueda por vecindad a gran escala. Así, por ejemplo, si contemplamos el

algoritmo simplex para la resolución de programas lineales como un algoritmo de búsqueda local,

tendremos que la generación de columnas es a su vez un método de búsqueda por vecindad a gran

escala, al igual que ocurre con las técnicas de extrapolación empleadas para la resolución de muchos

problemas de flujo de redes. El algoritmo de cancelación del ciclo de coste negativo que se usa para

resolver el problema del flujo de coste mínimo y el algoritmo del camino de aumento que resuelve

problemas de ajuste son dos ejemplos de ello.

En el presente estudio, hemos clasificado los métodos de vecindad a gran escala en tres categorías

que pueden coincidir parcialmente. La primera de ellas comprende los métodos de profundidad variable:

una serie de algoritmos que se centran en vecindades exponencialmente grandes en las que realizan

búsquedas parciales por medio de la heurística. La segunda categoría comprende algoritmos de mejora

basados en flujos de red; métodos de búsqueda local que emplean técnicas de flujo de red para

identificar posibilidades de mejora en la vecindad. Por último, en la tercera categoría se analizan

vecindades para problemas NP-difíciles inducidos por subconjuntos de restricciones de los problemas

que se pueden resolver en tiempo polinómico. Aunque hemos introducido el concepto de búsqueda por

3

Page 4: Estudio de técnicas de búsqueda por vecindad a muy gran escala

vecindad a gran escala al hacer referencia a técnicas de generación de columnas para programas lineales

y a técnicas de extrapolación para flujos de redes, no se insiste sobre los programas lineales. Por el

contrario, el estudio se concentra en la aplicación de técnicas de búsqueda por vecindad a gran escala a

problemas de optimización NP-difíciles.

Esta monografía se halla estructurada del modo que a continuación se describe. En el apartado 2 se

incluye una breve descripción general de la búsqueda local. El apartado 3 comprende un análisis de

métodos de profundidad variable. El apartado 4 trata sobre algoritmos de búsqueda por vecindad a gran

escala basados en técnicas de flujo de redes. En el apartado 5 se analizan técnicas eficientes para la

resolución de supuestos especiales de problemas NP-difíciles de optimización combinatoria, así como de

vecindades muy amplias basadas en ellos. El apartado 6 describe las mediciones de vecindades, que

pueden servir de guía para el desarrollo de algoritmos de búsqueda local con respecto a una vecindad

dada. Por último, en el apartado 7 se analiza el rendimiento computacional de varios de los algoritmos

vistos en los apartados anteriores.

2. Búsqueda local: esquema general Comenzaremos por introducir formalmente un problema de optimización combinatoria, junto con el

concepto de vecindad. Existen diversas maneras de representar este tipo de problemas, todas ellas

basadas en métodos de representación del conjunto de soluciones factibles. En este apartado,

representaremos el conjunto de soluciones factibles como subconjuntos de un conjunto finito,

formulándolo del siguiente modo:

Sea E = 1, 2,..., m un conjunto finito. En general, la cardinalidad de un conjunto S se indica

mediante |S|. Supongamos, además, que F ⊆ 2E, donde 2E indica el conjunto formado por todos los

subconjuntos de E. Los elementos de F se denominan soluciones factibles. Sea f: F → ℜ, llamándose a

la función f la función objetivo. Con estos datos, una instancia de un problema de optimización

combinatoria (POC) se representará del siguiente modo:

Minimizar f(S) : S ∈ F.

Damos por hecho que la familia F no nos viene dada explícitamente mediante el listado de todos sus

elementos; sino que se halla representada en una forma compacta de tamaño polinómico en m. El par (F,

f) indica una instancia de un problema de optimización combinatoria. En la mayor parte de los

problemas que veremos, la función de coste es una función lineal; es decir, existe un vector f1, f2,…, fm

tal que, para todos los conjuntos factibles, S, f(S) = Σi∈Sfi.

Supongamos que (F, f) es una instancia de un problema de optimización combinatoria. La función

de vecindad es un punto de definición del mapa N: F→ 2E. En esta función, cada valor de S ∈ F tiene

4

Page 5: Estudio de técnicas de búsqueda por vecindad a muy gran escala

asociado un subconjunto N(S) de E. El conjunto N(S) recibe el nombre de vecindad de la solución S, y

podemos suponer, sin pérdida de generalidad, que S ∈ N(S). Se dice que una solución S* ∈ F es

localmente óptima con respecto a una función de vecindad N cuando f(S*) ≤ f(S) para todo S ∈ N(S*).

Asimismo, se dice que N(S) es exponencial cuando |N(S)| crece de manera exponencial en m a medida

que el valor de esta última se incrementa. A lo largo de la mayor parte de este estudio, veremos

vecindades de tamaño exponencial, además de vecindades cuyo tamaño es demasiado amplio para

realizar en ellas búsquedas explícitas en la práctica. Así, por ejemplo, una vecindad con m3 elementos

resultará demasiado amplia para una búsqueda en la práctica si m tiene un valor alto (por ejemplo,

superior a un millón). Nos referiremos a las técnicas de búsqueda por vecindad empleando dichas

vecindades como algoritmos de búsqueda por vecindad a muy gran escala o algoritmos de búsqueda

VLSN.

Para dos soluciones S y T, llamaremos S – T al conjunto de elementos que se encuentran en S pero

no en T. La distancia d(S, T) la definiremos como |S - T| + |T - S|, que es el número de elementos de E

que se encuentran en S o en T, pero no en ambos. Ocasionalmente, podremos permitir que las

vecindades incluyan también soluciones no factibles. Por ejemplo, en el caso anterior podemos hacer

que la vecindad de un recorrido incluya cada uno de los itinerarios obtenidos mediante la supresión de

uno de los vértices del mismo. Para resaltar el hecho de que una vecindad contenga otros elementos

además del itinerario, daremos, como norma general, una descripción combinatoria de las soluciones no

factibles permitidas en la búsqueda. Nos referiremos a estas estructuras combinatorias no factibles como

estructuras de referencia. Un camino de Hamilton sería un ejemplo de este tipo de estructuras.

Podemos imaginar un algoritmo de búsqueda por vecindad (para un problema de minimización de

costes)como compuesto de tres partes:

(i) Un grafo de vecindad (NG) definido con respecto a una instancia de problema específica,

donde NG es un grafo dirigido con un nodo para cada solución factible que se cree (o una

instancia de una estructura de referencia no factible), y que consta de un arco (S, T) siempre

que T ∈ N(S).

(ii) Un método de búsqueda del grafo de vecindad en cada iteración.

(iii) Un método que permita determinar cuál es el siguiente nodo del grafo de vecindad que se

elegirá en la búsqueda del paso anterior. Nos referiremos a este nodo como solución básica.

El algoritmo termina cuando S es una solución localmente óptima con respecto a la vecindad dada.

(Véase [1] para un estudio extensivo).

A continuación definiremos dos vecindades basadas en la distancia. La primera es Nk(S) = T ∈ F :

d(S, T) ≤ k. Nos referiremos a estas vecindades como vecindades de distancia-k.

5

Page 6: Estudio de técnicas de búsqueda por vecindad a muy gran escala

En determinadas instancias de problemas, dos soluciones factibles cualesquiera tienen la misma

cardinalidad, como ocurre en el problema del viajante de comercio (TSP: Travelling Salesman Problem),

donde cada solución factible S representa un recorrido en un grafo completo por un número n de

ciudades, por lo que tiene un número n de arcos (véase [48] para más detalles sobre el TSP). Como regla

general, afirmamos que se puede obtener T mediante un intercambio simple de S cuando |S - T| = |T - S|

= 1; y que se puede obtener mediante un k-intercambio cuando |T - S| = |S - T| = k. Definimos la

vecindad de k- intercambios de S como T : |S - T| = |T - S| ≤ k. Si dos soluciones factibles

cualesquiera tienen la misma cardinalidad, la vecindad de k-intercambios de S será igual a N2k(S). Un

ejemplo típico de vecindad de k-intercambios aplicada al problema del viajante de comercio es la

vecindad de doble intercambio, también conocida como vecindad 2-opt. En el grafo correspondiente a

ella, cada uno de los nodos representa un recorrido, y dos recorridos serán vecinos cuando se pueda

obtener uno a partir del otro mediante un intercambio doble. Aplicando un método de búsqueda

exhaustiva (o con algunos atajos), la siguiente solución básica será una solución de mejora.

De Nm(S) = F, se desprende que realizar búsquedas en la vecindad de distancia k puede resultar más

complicada a medida que el valor de k aumente. Por lo general, ocurre que esta vecindad crece

exponencialmente cuando k no es un valor fijo, y que hallar la mejor solución (o incluso una

solución mejorada) es NP-difícil cuando el problema original es también NP-difícil. 3. Métodos de profundidad variable

Para k = 1 ó 2, se pueden realizar búsquedas eficaces en las vecindades de k-intercambios (o, de

modo similar, las de distancia k), aunque la media de los óptimos locales que se obtienen suele resultar

insuficiente. En cambio, para valores más altos de k, las vecindades de k-intercambios producen mejores

óptimos locales, pero el esfuerzo necesario para realizar la búsqueda puede ser excesivo. Los métodos de

profundidad variable son técnicas que permiten realizar búsquedas parciales en las vecindades de k-

intercambios. El objetivo de esta búsqueda parcial consiste en hallar soluciones que sean vecinas en el

valor de la función objetivo a los óptimos globales, y que a la vez sean capaces de reducir drásticamente

el tiempo de búsqueda en la vecindad, si bien no suelen garantizar óptimos locales. En los algoritmos de

búsqueda por vecindad a muy gran escala, entran en juego varios tipos de algoritmos para realizar

búsquedas parciales en la vecindad de k-intercambios. En este apartado analizaremos el algoritmo de Lin

y Kernighan [50] para el TSP, así como otras heurísticas de profundidad variable aplicadas a búsquedas

en vecindades de k-intercambio en distintos problemas de optimización combinatoria. El apartado

siguiente está dedicado a la descripción de otros enfoques que, en tiempo polinómico, permiten realizar

búsquedas de modo implícito en un subconjunto de tamaño exponencial de la vecindad de k-intercambio

cuando k no es un valor fijo.

6

Page 7: Estudio de técnicas de búsqueda por vecindad a muy gran escala

Antes de pasar a describir el algoritmo de Lin y Kernighan, veremos algunos aspectos relativos a la

notación. Posteriormente, explicaremos el modo de generalizar dicho algoritmo a métodos de

profundidad variable (y a "ejection chains") para resolver heurísticamente problemas de optimización

combinatoria. Supongamos que T y T’ son subconjuntos de E, aunque no necesariamente factibles. Una

ruta que vaya de T a T’ será una secuencia T = T1, …, TK = T’ tal que d(Tj, Tj+1) = 1 para j = 1 a K - 1.

Los métodos de profundidad variable se basan en una subrutina Move que tiene las siguientes características:

1. En cada iteración, esta subrutina crea un subconjunto Tj y posiblemente también un subconjunto

factible Sj a partir del par de entrada (Sj-1,Tj-1) conforme a determinados criterios de búsqueda. El

subconjunto Tj puede ser factible o no serlo. Representaremos esta operación como Move (Sj-1,Tj-1) =

(Sj, Tj)

2. d(Tj, Tj+1) = 1 para todo j = 1 a K - 1.

3. Tj cumple las propiedades adicionales, dependiendo del enfoque de profundidad variable.

Llamemos T al recorrido actual del problema del viajante de comercio, suponiendo, sin pérdida de

generalidad, que T visita las ciudades siguiendo el orden 1, 2, 3,…, n, 1. Podemos definir la vecindad de

intercambio-2 para T como la sustitución de los vértices (i, j), y (k, l) por otros dos; (i, k) y (j, l), o bien

(i, l) y (j, k) para formar otro recorrido T’. Obsérvese que d(T, T’) = 4. La vecindad de intercambio-2 se

puede describir de un modo más formal aplicando 4 operaciones de la subrutina Move, en las que la

primera de ellas suprime del recorrido el vértice (i, j), la segunda inserta el vértice (i, k), la tercera

suprime el vértice (k, l) y la cuarta y última inserta el vértice (j, l).

Llamemos G = (N, A) a un grafo no dirigido en los nodos n; y P = v1, …, vn a un camino de

Hamilton de G con n nodos. Por otra parte, un stem and cycle (término acuñado por Glover [30]) es un

subgrafo expandido de n arcos que se obtiene añadiendo un arco (i, j) a un camino de Hamilton, en el

que i es un nodo extremo del camino. Obsérvese que, al ser i y j los nodos extremos del camino, la

estructura stem and cycle es un ciclo de Hamilton, o, de modo equivalente, un recorrido. Si T es un

camino o una estructura del tipo mencionado, indicaremos su longitud total por medio de f(T).

La heurística de Lin y Kernighan permite la sustitución de un total de n vértices al moverse de un

recorrido S a un recorrido T; es decir, d(S, T) equivale a un valor arbitrario k = 2n. El algoritmo

comienza por suprimir un vértice del recorrido original T1 construyendo un camino de Hamilton T2. En

lo sucesivo, uno de los puntos extremos de T2 será constante y permanecerá constante hasta el fin de la

iteración. El otro punto extremo se selecciona al comenzar la búsqueda. El movimiento par inserta un

extremo en el camino de Hamilton T2j que incide en el punto extremo no constante para obtener una

7

Page 8: Estudio de técnicas de búsqueda por vecindad a muy gran escala

estructura stem and cycle T2j+1. Por su parte, los movimientos impares de la iteración suprimen un

extremo de la estructura stem and cycle existente T2j-1 para obtener un camino de Hamilton T2j. De cada

camino de Hamilton T2j se construye implícitamente un recorrido factible S2j uniendo los dos nodos

extremos. Al final de la iteración de Lin y Kernighan obtenemos el nuevo recorrido de la solución base

Si, de modo que f(Si) =f(S2j) para todo j.

A continuación describiremos con mayor detalle los pasos del algoritmo de Lin y Kernighan. Cuando

se produce un movimiento par, el vértice que se va a añadir es el de longitud mínima, que incide sobre el

punto extremo no constante, lo que se añade al camino de Hamilton T2j únicamente si f(S)-f(T2j+1) > 0.

El algoritmo de Lin y Kernighan [50] describe también un medio de mejorar la forma de elegir este

vértice. La elección del vértice que se va a añadir al camino de Hamilton T2j se realiza maximizando

f(T2j) – f(T2j+2). Por otra parte, los vértices que se van a suprimir en los movimientos impares vienen

determinados exclusivamente por la estructura stem and cycle T2j-1 creada en el movimiento anterior, de

modo que T2j sea un camino de Hamilton. A la hora de elegir los vértices que se van a añadir, también se

pueden tener en cuenta otras restricciones. Varios estudios han considerado distintas combinaciones de

restricciones, como que un vértice ya suprimido no se pueda volver a añadir o que un vértice añadido

previamente no pueda suprimirse en un movimiento posterior. Por último, el algoritmo de Lin y

Kernighan termina con un óptimo local cuando no hay posibilidad de construir un recorrido que lo

mejore tras considerar todos los nodos como el nodo fijo original.

Veamos una ilustración del algoritmo de Lin y Kernighan con un ejemplo numérico, partiendo

del recorrido de 10 nodos que muestra la figura 1(a). El algoritmo suprime primero el arco (1, 2)

creando el camino de Hamilton de la figura 1(b). A continuación se añade el arco (2, 6), lo que da como

resultado la estructura stem and cycle de la figura 1(c).

8

Page 9: Estudio de técnicas de búsqueda por vecindad a muy gran escala

Figura 1. Ilustración del algoritmo de Lin y Kernighan

(a) Recorrido con 10 nodos. (b) Camino de Hamilton. (c) Estructura stem and cycle.

Al suprimir el vértice (6, 5) de esta estructura obtenemos un camino de Hamilton, mientras que si

añadimos el vértice (5, 8) tenemos otra estructura stem and cycle. Los movimientos de inserción de

vértices en la heurística de Lin y Kernighan se hallan guiados por criterios de costes basados en el

"beneficio acumulativo", definiéndose los movimientos de supresión de vértices únicamente con

intención de generar la estructura del camino. El algoritmo de Lin y Kernighan alcanza un óptimo local

cuando, después de haber considerado todos los nodos como el nodo de inicio, no se obtienen

soluciones de mejora.

Diversas variantes de este algoritmo han dado lugar a soluciones heurísticas de gran calidad. Se

9

Page 10: Estudio de técnicas de búsqueda por vecindad a muy gran escala

trata de algoritmos que recurren a distintas mejoras, como los movimientos 2-opt, 3-opt y 4-opt

especial. ([29], [41], [42], [50], [51], [52], [64]) a fin de obtener un itinerario que no se podría diseñar

mediante los movimientos básicos de la heurística de Lin y Kernighan. Asimismo, se emplean

estructuras de datos capaces de actualizar de modo eficiente los itinerarios, y así poder lograr tanto la

eficiencia computacional como la calidad de la solución ([24], [42]). Papadimitriou [54] ha demostrado

que el problema de determinar un óptimo local con respecto a una versión del algoritmo de Lin y

Kernighan es un problema PLS-completo.

Podemos definir los métodos de profundidad variable para el TSP mediante un procedimiento de

generalización de la heurística de Lin y Kernighan. Se trata de un procedimiento que toma como datos

de partida un itinerario factible S, aplicando a continuación la función Move más arriba. En cada

iteración, esta función crea el par (Tj, Sj), en el que el subconjunto Tj puede ser una solución factible, o

bien ser una instancia no factible de una estructura de referencia; y el subconjunto Sj es factible. A

continuación, se invoca la función Move para r iteraciones, dependiendo el valor de r de la regla

directriz adecuada. Por último, el procedimiento de búsqueda de profundidad variable da como

resultado el subconjunto factible Sk que tenga el mejor valor de función objetivo hallado en la

búsqueda.

Procedimiento: búsqueda de profundidad variable (S);

Inicio:

S1 := T1 := S; para j := 2 a r (Tj, Sj) = Move(S j-1, Tj-1);

seleccionar el conjunto Sk que minimice (f(Sj): 1 ≤ j ≤ r);

Final

Este tipo concreto de búsqueda de profundidad variables se basa en una heurística llamada “Move”,

que crea de forma sistemática un itinerario de soluciones comenzando por la solución inicial. Al tratarse

de un marco bastante flexible, existen varias formas de diseñar este procedimiento. Las características

del diseño de Move pueden suponer la diferencia entre una heurística capaz de proporcionar resultados

y otra que no lo sea tanto.

En el procedimiento arriba descrito, hemos supuesto que Move crea en cada fase una solución

simple. En realidad, esta heurística ofrece la posibilidad de crear soluciones factibles múltiples en cada

fase ([30], [61]) o ninguna solución factible en una fase determinada ([30], [58]).

Muchos métodos de profundidad variable requieren las soluciones intermedias Tj para poder

cumplir ciertas propiedades topológicas (o estructurales). En el algoritmo de Lin y Kernighan, por

10

Page 11: Estudio de técnicas de búsqueda por vecindad a muy gran escala

ejemplo, es necesario que para cada valor impar de j, Tj sea una estructura stem and cycle, así como que,

para cada valor par de j, Tj sea un camino de Hamilton. En el siguiente apartado veremos también

ejemplos en los que Tj cumple otras propiedades que no son estructurales; como, por ejemplo, las que

dependen del orden de los índices.

Glover [30] consideró una clase estructurada de métodos de profundidad variable llamados

ejection chains y basados en métodos de itinerarios alternativos clásicos, ampliando y generalizando las

ideas de Lin y Kernighan. En palabras de Glover: “De modo muy esquemático, una ejection chain se

inicia seleccionando un conjunto de elementos que van a experimentar un cambio de estado (e.g, ocupar

nuevas posiciones, recibir nuevos valores o ambas cosas). Este cambio tendrá por efecto identificar una

serie de conjuntos distintos, que tengan la propiedad de que los elementos de al menos uno de ellos

deben ser “eyectados” de su estado actual. Por lo general, los pasos de cambio de estado y de eyección

se alternan, y las opciones existentes para cada uno de ellos dependerán del efecto cumulativo de los

pasos previos (estando influido generalmente, aunque no siempre, por el paso inmediatamente anterior).

En algunos casos, una secuencia en cascada de operaciones indica que se ha producido un efecto

dominó. La terminología de la "ejection chain" pretende sugerir, no limitar; proporcionando un hilo

conductor que sirva para vincular una serie de procedimientos útiles para sacar el máximo partido de

la estructura sin fijar reglas de admisión que excluyan otros tipos de clasificaciones.” (La cursiva es un

añadido).

En el presente estudio, emplearemos una definición más restrictiva de las ejection chains. Así,

nos referiremos al método de profundidad variable como una ejection chain si:

(i) |T1| = |T3| = |T5| =…= n, y:

(ii) |T 2| = |T4| = |T6| =…= n +1 (o n-1).

Para cada valor par de j, si |Tj| = |S|- 1, Tj se obtiene a partir de Tj-1 eyectando un elemento. De otro

modo, |Tj| = |S|+1, y Tj+1 se obtiene eyectando un elemento a partir de Tj. Muchos de los métodos de

profundidad variable publicados en estudios pueden contemplarse como ejection chains. Estos métodos

suelen suponer la construcción de diferentes estructuras de referencia, junto con una serie de reglas que

permitan obtener distintas soluciones factibles. Por lo que sabemos, todos los métodos de profundidad

variable aplicados al problema del viajante de comercio de los que tenemos noticia pueden

contemplarse como ejection chains.

Podemos suponer que los nodos del grafo de vecindad referido a la vecindad de Lin y

Kernighan se hallan compuestos por caminos y estructuras de stem-and-cycle. (Recuérdese que los

itinerarios son también instancias de stem-and cycle. Los puntos finales de cada vértice del grafo de

vecindad enlazarían un camino con una estructura stem and cycle. La técnica de búsqueda sería la

11

Page 12: Estudio de técnicas de búsqueda por vecindad a muy gran escala

propuesta por Lin y Kernighan [44], y el proceso de selección consistiría en elegir el mejor de los

itinerarios hallados al realizar la búsqueda. Por consiguiente, las estructuras de referencia descritas para

las ejection chains serían los nodos del grafo de vecindad de las técnicas de ejection chain. Toda técnica

en la que la siguiente solución básica sea mucho mayor que la distancia unitaria desde la solución

básica existente es un "método de profundidad variable". Una ejection chain es un método de

profundidad variable en el que los vecinos se caracterizan por ser subconjuntos los unos de los otros (y

en los que, por tanto, un elemento se eyecta al trasladarse del más grande al más pequeño).

En el método descrito anteriormente, las técnicas de profundidad variable se basan en la función

Move. También es posible crear subconjuntos de tamaño exponencial de Nk en los que se realicen

búsquedas mediante flujos de redes. En estas vecindades, se puede también llegar a cualquier vecino

mediante una secuencia de funciones Move en un grafo de vecindad adecuadamente definido. Conviene

tener presente que, en el caso del algoritmo de Lin y Kernighan, la vecindad es de tamaño polinómico, y

que es la propia búsqueda la que lleva a obtener soluciones sustancialmente diferentes de la solución

básica. En el siguiente apartado analizaremos estas técnicas basadas en flujos de redes, algunas de las

cuales pueden también contemplarse como técnicas de ejection chain cuando existe un medio natural de

asociar una ejection chain (una secuencia alternativa de adiciones y supresiones) a elementos de la

vecindad ([30], [31], [58], [21]).

Los algoritmos basados en la profundidad variable y en la ejection chain se han aplicado con

éxito a la obtención de soluciones válidas para diversos problemas de optimización combinatoria.

Autores como Glover [30], Rego [61], Zachariasen y Dum [83], Johnson y McGeoch [42], Mak y

Morton [51], y Pesch y Glover [55] han utilizado estos algoritmos para la resolución del problema del

viajante de comercio. El problema del enrutamiento de vehículos ha sido tratado por Rego y Roucairol

[63] y Rego [62], mientras que Dondorf y Pesch [13] han propuesto la solución a algoritmos de

clustering mediante ejection chains. Por su parte, Yagiura et al. ([80]) han considerado la aplicación de

métodos de profundidad variable al problema de las asignaciones en general, al igual que distintas

variantes de la ejection chain [79]. Asimismo, Laguna et al. [47] aplican algoritmos cortos de estructura

ejection chain al problema de las asignaciones multinivel en general. Estas técnicas se aplican también al

problema de la partición del grafo uniforme ([16], [20], [44], [53]), al problema de las asignaciones por

categorías ([3]), al problema de asignación de canal ([17]), y al de distribución de turnos de enfermería-

([14]). Por último, Sourd [70] aplica una clase muy general de procedimientos de mejora de vecindades

a muy gran escala en los que la distancia entre dos vecinos depende de las tareas programadas en

máquinas no relacionadas. El desarrollo de estas vecindades se lleva a cabo mediante la generación de

árboles de enumeración parciales, aunque de tamaño grande, basados en las soluciones existentes y

12

Page 13: Estudio de técnicas de búsqueda por vecindad a muy gran escala

buscados por heurística. 4. Algoritmos de mejora basados en flujos de redes

En este apartado estudiaremos algoritmos locales de mejora en los que la búsqueda por

vecindades se lleva a cabo mediante algoritmos basados en flujos de redes. Las técnicas de flujos de

redes empleadas para identificar vecindades de mejora pueden agruparse en tres categorías: (i) métodos

de búsqueda de ciclo de coste mínimo; (ii) métodos basados en la programación dinámica o en la técnica

del camino más corto; y (iii) métodos basados en la búsqueda de asignaciones y ajustes de coste mínimo.

Las vecindades definidas por ciclos pueden contemplarse como generalizaciones de vecindades de dos

intercambios, mientras que las basadas en asignaciones se pueden entender como generalizaciones de

vecindades a partir de inserciones. En los tres subapartados que siguen, se ofrecen definiciones generales

de estas vecindades exponenciales, describiéndose además los algoritmos de flujos de redes empleados

en la búsqueda de vecindades mejoradas. En muchos de los problemas, la vecindad de mejora se

determina aplicando un algoritmo de flujos de redes a un grafo relacionado, lo que se conoce como grafo

de mejora.

4.1 Vecindades definidas por ciclos

En este subapartado, comenzaremos por definir un problema de partición genérica, para a

continuación pasar a definir la vecindad de dos intercambios y la vecindad de intercambio cíclico.

Sea A = a1, a2, a3, …, an un conjunto formado por n elementos. El conjunto S1, S2, S3, …, SK

define una Kpartición de A f A cuando cada conjunto Sj es no vacío, los conjuntos no se hallan

agrupados por pares, y su punto de unión es A. Para cualquier subconjunto S de A, llamaremos d[S] al

coste de S. Por tanto, el problema de partición consiste en hallar una partición de A en tantos

subconjuntos de K como sean necesarios para minimizar Σk d[Sk].

Sea S1, S2, S3, …, SK cualquier partición factible. Diremos entonces que T1, T2, T3, …, TK

será un 2-vecino de S1, S2, S3, …, SK cuando pueda obtenerse intercambiando dos elementos que se

encuentren en subconjuntos diferentes. La vecindad de dos intercambios de S1, S2, S3, …, SK se halla

formada por todas las vecindades-2 de S1, S2, S3, …, SK. De donde deducimos que T1, T2, T3, …, TK

es una vecindad cíclica de S1, S2, S3, …, SK cuando se pueda obtener transfiriendo elementos simples a

lo largo de una secuencia de subconjuntos de k ≤ K en S. Sea también (Sh1, Sm

2, Sn3, …, Sp

k) una

secuencia de k subconjuntos tal que hace necesario que h = p, que es el último subconjunto de la

secuencia idéntico a Sh1. A esta transferencia de elementos la llamaremos intercambio cíclico, quedando

13

Page 14: Estudio de técnicas de búsqueda por vecindad a muy gran escala

ilustrada en la figura 2. En el presente ejemplo, el nodo 9 pasa del subconjunto S1 al subconjunto S4; el

nodo 2 se transfiere del subconjunto S4 al subconjunto S5, el nodo 3 pasa del subconjunto S5 al S3 y,

finalmente, el intercambio se completa transfiriendo el nodo 14 del subconjunto S3 al S1. De un modo

análogo puede definirse un vecino de camino. Desde un punto de vista matemático, no resulta difícil

convertir un intercambio de camino en un intercambio cíclico añadiendo los nodos de prueba adecuados.

Por lo general, el número de vecindades cíclicas es sustancialmente mayor que el de vecindades de dos

intercambios (2-vecindades). Mientras que hay O(n2) 2-vecindades para un valor fijo de k, existen O(nK)

vecinos cíclicos. Si se permite que la variación de k sea paralela a la de n, tendremos un número

exponencial de vecinos cíclicos.

Thompson [75], Thompson y Orlin [76], y Thompson y Psaraftis [77] han mostrado la forma de

obtener una vecindad mejorada en la vecindad de intercambio cíclico hallando un ciclo de "subconjunto

no agrupado" de coste negativo en un grafo de mejora. Expondremos a continuación cómo construir

dicho grafo. Sea A = a1, a2,…, an que es el conjunto de elementos que componen el problema de

partición del conjunto original, y llamemos S[i] al subconjunto en el que se encuentra el elemento ai. El

grafo de mejora es un grafo G = (V, E) en el que V = 1, 2,…, n es un conjunto de nodos que se

corresponde con los índices de los elementos de A del problema original. Sea asimismo E = (i, j): S[i]

≠ S[j], donde un arco (i, j) corresponde a la transferencia del nodo i desde S[i] a S[j] y a la supresión de

j desde S[j]. Para cada arco (i, j) ∈ E, haremos que c[i, j] = d[i ∪ S[j]\j] – d[S[j]], es decir, el

incremento en el coste de S[j] cuando se añade i al conjunto y se suprime j. Decimos que un ciclo W en

14

Page 15: Estudio de técnicas de búsqueda por vecindad a muy gran escala

G no está agrupado en el subconjunto cuando, para cada par i y j de los nodos de W, S[i] ≠ S[j], es

decir, los elementos de A correspondientes a los elementos de W se encuentran todos en subconjuntos

diferentes. Existe una correspondencia entre el mantenimiento de costes uno a uno en los intercambios

cíclicos del problema de la partición y el mantenimiento en los ciclos no asignados en el subconjunto del

grafo de mejora. Concretamente existe, para cada intercambio cíclico de coste negativo, un ciclo no

asignado en el subconjunto del grafo de mejora. Desgraciadamente, el problema consistente en

determinar si hay un ciclo no asignado en el subconjunto del grafo de mejora es un problema NP-

completo, y el consistente en hallar un ciclo no asignado en el subconjunto de coste negativo es NP-

difícil. (Véase, por ejemplo, Thompson [75], Thompson y Orlin [76], y Thompson y Psaraftis [77].)

Aun cuando este último problema sea NP-difícil, existen heurísticas que han demostrado su

eficacia en la búsqueda del grafo. (Véase, por ejemplo, Thompson y Psaraftis [77] y Ahuja et al. [2].)

La búsqueda por vecindad de intercambio cíclico se aplica con éxito a varios problemas de

optimización combinatoria que pueden caracterizarse como problemas de partición específica.

Thompson y Psaraftis [77], Gendreau et al. [25], y Fahrion y Wrede [19] resuelven el problema del

enrutamiento de vehículos mediante este tipo de búsqueda, mientras que Frangioni et al. [23] aplican

intercambios cíclicos a la programación de máquinas en periodos mínimos. Thompson y Psaraftis [77]

han demostrado también la aplicación de este método a problemas de programación . Por su parte, Ahuja

et al. [2], empleando intercambios cíclicos, han desarrollado las mejores soluciones existentes para un

conjunto ampliamente usado de instancias de referencia en problemas de árboles de expansión mínima

capacitados.

La idea de hallar soluciones de mejora mediante la determinación de ciclos de coste negativo en

grafos de mejoras se ha aplicado también en otros contextos. Talluri [74] identifica intercambios de

ahorro de costes de equipo entre turnos de vuelos en problemas de asignación diaria de flota aérea

hallando ciclos de coste negativo en una red relacionada. El problema de asignación de flota puede

plantearse como un problema de flujo multiservicio entero sujeto a restricciones de lado, en el que cada

servicio hace referencia a un tipo de flota. Talluri considera una solución dada restringida a dos únicos

tipos de flota, buscando a partir de ella mejoras que puedan obtenerse mediante el intercambio de un

número de vuelos entre ambos tipos de flota. Así, desarrolla un grafo de mejora asociado, demostrando

que las vecindades de mejora se corresponden con los ciclos de coste negativo del grafo de mejora.

Schneur y Orlin [68] y Rockafellar [65] resuelven el problema de flujo multiservicio lineal detectando

flujo y enviándolos iterativamente por los ciclos de coste negativo. Esta técnica se extiende, de hecho, a

la heurística de mejora basada en ciclos para el problema de flujo multiservicio entero. En [81], Wayne

ofrece un algoritmo de cancelación de ciclo para resolver el problema del flujo de coste mínimo

generalizado. Firla et al. [22] introducen un grafo de mejora para la intersección de dos programas

15

Page 16: Estudio de técnicas de búsqueda por vecindad a muy gran escala

enteros cualesquiera. Los caminos y ciclos de esta red corresponden a posibilidades de mejora de

soluciones factibles. Además, esta red da lugar a una definición algorítmica del problema del b-ajuste de

peso bipartito. Los algoritmos analizados por Glover y Punnen [28] y Yeo [78] permiten construir

itinerarios del viajante de comercio que resultan mejores que un número exponencial de itinerarios.

Estos algoritmos se pueden contemplar, asimismo, como el cálculo de un ciclo de coste mínimo en una

red considerada de capas especiales implícitamente considerada. Veremos esta heurística de forma más

detallada en el apartado 5.

4.2 Vecindades definidas por caminos (o por programación dinámica)

A continuación analizaremos tres tipos distintos de algoritmos de búsqueda por vecindad

basados en caminos más cortos o en programación dinámica, tomando como contexto el problema del

viajante de comercio. Aplicados al mismo, podemos contemplar estos enfoques de búsqueda por

vecindad como: (i) adición y supresión de vértices secuencialmente, (ii) aceptación en intercambios

paralelos múltiples, entendiendo definido cada intercambio como la permuta del orden actual de dos

ciudades en un recorrido, y (iii) cambios cíclicos en el itinerario existente. Veamos estas vecindades con

mayor detalle.

4.2.1 Creación de un nuevo vecino mediante la adición o supresión de arcos secuencialmente

Examinaremos en primer lugar una clase de métodos basados en el camino más corto, que

consideran los vecinos obtenidos añadiendo o suprimiendo vértices alternativamente del itinerario

existente. Se trata de métodos que realizan de modo exhaustivo búsquedas en la vecindad de ejection

chain tratada en el apartado 3, con el añadido de restricciones adicionales en los vértices. Para

simplificar, damos por hecho que el itinerario S pasa por las ciudades siguiendo el orden 1, 2, 3, …, n, 1.

Empleando la terminología del apartado 3, llamaremos itinerario T a un vecino de k-intercambios de S, y

al camino que va desde S a T, la secuencia S = T1, …, TK = T. Estas vecindades corresponden a

soluciones por aproximaciones sucesivas creadas mediante los caminos pares e impares descritos en

Punnen y Glover [58] entre varias otras vecindades y soluciones por aproximaciones sucesivas

construidas a partir de diversas clases de estructuras de camino. La solución por aproximaciones

sucesivas generada por los caminos impares ya fue desarrollada de modo independiente por Firla et

al.[21]. A efectos ilustrativos de este tipo de solución generada a partir de caminos tanto pares como

impares, veamos el siguiente algoritmo:

(i) Se elimina el vértice (n, 1) para obtener un camino de Hamilton T2 y se añade el vértice

16

Page 17: Estudio de técnicas de búsqueda por vecindad a muy gran escala

(1, i) desde el nodo 1 al nodo i (donde i > 2) para obtener una estructura stem and cycle

T3.

(ii) El actual nodo terminal del camino es el nodo i. Se elimina el vértice (i, i-1) y se añade

el vértice (i-1, j) para i < j < n, creando primero un camino de Hamilton y a

continuación una estructura stem and cycle.

(iii) Se comprueba si se ha alcanzado un criterio de terminación. Si se alcanza, se sigue al

paso (iv). Si no, se define i = j y se vuelve al paso (ii).

(iii) Se elimina el vértice (j, j-1) y se añade el vértice final (j-1, n) para completar el recorrido.

Figura 3. Ilustración del intercambio de camino alternativo.

La figura 3 ilustra este proceso en un itinerario de 9 nodos S = (1, 2,…, 9, 1). El

procedimiento de intercambio de camino se inicia con la supresión del vértice (n, 1) y la adición del

vértice (1, 4). A continuación se elimina el vértice (3, 4) y se añade el vértice (3, 7). Por último, se

crea el nuevo itinerario T suprimiendo el vértice (6, 7) y añadiendo el vértice (6, 9). En la figura

3(a) los vértices añadidos aparecen representados mediante líneas en negrita y los eliminados

mediante una raya sobre el vértice. La figura 3(b) ilustra el nuevo itinerario que se obtiene tras el

intercambio de camino.

Firla et al.[21], Glover [30] y Punnen y Glover [58] han demostrado que se puede obtener una

solución de mejora para esta vecindad en tiempo O(n2), hallando en un grafo de mejora un camino

de longitud mínima par o impar. Describimos aquí un grafo de mejora que permite identificar la

mejor vecindad de un itinerario hallando un camino más corto con un número de nodos par o impar.

Recordemos que S = (1, 2, 3,…, n, 1) es el itinerario existente del problema del viajante de

17

Page 18: Estudio de técnicas de búsqueda por vecindad a muy gran escala

comercio con n nodos. El grafo de mejora es un grafo G = (V, E) en el que V = 1, 2,…, n, lo que

corresponde a los nodos del problema original, y donde E = (i, j) : 1 = i < j-1 < n es un conjunto

de arcos dirigidos. Los arcos (1, j) ∈ E (de modo que 2 < j = n) corresponden a la supresión del

vértice (n, 1) y a la adición del vértice (1, j), y los arcos (i, j) ∈ E (de modo que 1 < i < j-1 < n)

corresponden a la supresión del vértice (i-1, i) y la adición del vértice (i-1, j) en el recorrido original

S. Si d[i, j] es el coste de trasladarse de la ciudad i a la ciudad j cuando asociamos un coste c[1, j] =

-d[n, 1] + d[1, j].a cada arco (1, j) ∈ E de modo que 2 < j = n y un coste c[i, j] = -d[i-1, i] + d[i-1, j] a

cada arco (i, j) ∈ E tal que 1 < i < j-1 < n. Por último, hallar un camino de coste negativo G desde el

nodo 1 a n permite identificar un intercambio k provechoso.

Por otra parte, en [58] se examinan soluciones por aproximaciones sucesivas creadas a

partir de caminos pares e impares, nuevas estructuras de caminos, como caminos cortados y

caminos inversos, que llevan a distintas soluciones por aproximaciones sucesivas, y estructuras de

referencia. El tamaño de la vecindad generada únicamente por caminos pares e impares es Ω (n2n).

Las técnicas que aceleran la búsqueda en vecindades son importantes incluso en vecindades cuyo

tamaño no sea exponencial. Así, por ejemplo, gracias al empleo de un algoritmo del camino más

corto en un grafo de mejora acíclico, Glover [31] ha obtenido una clase con los mejores

movimientos 4-opt en tiempo O(n2).

4.2.2 Creación de un nuevo vecino mediante intercambios compuestos

La segunda clase de algoritmos de búsqueda local definidos mediante intercambios de

caminos consiste en una generalización de la vecindad de intercambio. Dado un itinerario del

problema del viajante de comercio T = (1, 2, 3,…, n, 1) con un número n de nodos, la vecindad de

intercambio generará soluciones intercambiando las posiciones de los nodos i y j por 1 ≤ i ≤ j ≤ n.

Por ejemplo, supongamos que i = 3 y que j = 6, T' = (1, 2, 6, 4, 5, 3, 7,…, n, 1) es un vecino) de T

bajo la operación de intercambio. Se dice que dos operaciones de intercambio que conecten el nodo

i con j, y el nodo k con l son independientes cuando maxi, j < mink, l, ó cuando mini, j >

maxk, l. Entonces, una vecindad a gran escala en el itinerario T se puede definir componiendo (es

decir, tomando en su totalidad) un número arbitrario de operaciones de intercambio individuales.

Congram et al. [9] y Potts y van de Velde [57] aplicaron esta vecindad de intercambios

compuestos al problema de la programación de la lentitud ponderada total de una máquina y al del

viajante de comercio (TSP), respectivamente, llamando a este enfoque dynasearch. En su estudio,

Congram et al. [9] demuestran que el tamaño de la vecindad es O(2n-1) y presentan una recursión de

programación dinámica capaz de hallar la mejor vecindad en tiempo O(n3). Hurink [40] aplica un

18

Page 19: Estudio de técnicas de búsqueda por vecindad a muy gran escala

supuesto especial de la vecindad de intercambio compuesto en la que sólo se permite sustituir pares

adyacentes en el contexto de problemas de funcionamiento de una única máquina, y demuestra que

es posible obtener un vecino de mejora en tiempo O(n2) hallando el camino más corto en el grafo de

mejora apropiado.

A continuación describiremos un grafo de mejora que nos sirva de ayuda en la búsqueda de la

vecindad de intercambio compuesto. Sea T = (1, 2, 3,…, n, 1) un itinerario del viajante de comercio

de n nodos. El grafo de mejora es un grafo G = (V, E), donde (i) V = 1, 2,…, n, 1' , 2' ,…, n' es a

un conjunto de nodos correspondiente a los nodos del problema original y una copia de éstos, y (ii)

E es un conjunto de arcos dirigidos (i, j') ∪ (j', k), en el que un arco (i, j') corresponde al

intercambio de los nodos i y j, y un arco (j', k) indica que el nodo k es el primer nodo del siguiente

intercambio. Así, por ejemplo, un camino de tres arcos (i, j'), (j', k), (k, l) ) en G representa dos

operaciones de intercambio que cambian el nodo i por el j, y el nodo k por l. Para construir el

conjunto de arcos E, se tiene en cuenta cada par de nodos (i, j') y (j', k) en V, añadiéndose el arco (i,

j') a E si, y solamente si, j > i.> 1. El arco (j', k) se añade a E si, y solamente si, j = 1 y k > j ó j > 1 y

k > j + 1. Para cada arco (i, j') ∈ E, se asocia un coste c[i, j] equivalente al incremento neto en el

coste óptimo del itinerario del viajante de comercio tras suprimir los vértices (i-1, i), (i, i+1), (j–1, j)

y (j, j+1) y añadir los vértices (i-1, j), (j, i+1), (j-1, i) y (i, j+1). En otras palabras, si d[i, j] es el coste

de trasladarse del nodo i al nodo j en el problema original, y d[n, n+1] = d[n, 1], tenemos que:

c[i, j'] = (-d[i-1, i] – d[i, j] - d[j, j+1] ) + (d[i-1, j] + d[j, i] + d[i, j+1]) para j' = i+1, y c[i, j] =

(-d[i-1, i] – d[i, i+1] - d [j-1, j] - d[j, j+1] ) + (d[i-1, j] + d[j, i+1] + d[j-1, i] + d[i, j+1]) para j' >

i+1.

El coste c[j', k] de todos los vértices (j', k) se define como igual a 0.

Vemos que hallar el mejor vecino de un itinerario en el TSP para la vecindad de intercambio

compuesto equivale a hallar el camino más corto en el grafo de mejora y, por tanto, precisa un tiempo

O(n2). Obsérvese que, al ser el TSP un problema cíclico, uno de los nodos se mantiene fijo durante el

intercambio. En la construcción más arriba expuesta del grafo de mejora, suponemos, sin pérdida de

generalidad, que no se permite mover el nodo 1, por lo que la búsqueda por vecindad se realiza hallando

el camino más corto desde el nodo 1' al nodo n o al nodo n'. La recursión de programación dinámica que

ofrecen Congram et al. [9] para realizar búsquedas en la vecindad llevará igualmente un tiempo O(n2)

cuando se aplique al problema del viajante de comercio. El algoritmo del camino más corto visto arriba

emplea un tiempo O(n3) cuando se aplica al problema de la programación del retraso ponderado total, ya

que ese tiempo O(n3) es el que se precisa para calcular los costes de los arcos.

19

Page 20: Estudio de técnicas de búsqueda por vecindad a muy gran escala

4.2.3 Creación de un nuevo vecino mediante un intercambio cíclico

La última clase de algoritmos de búsqueda local que trataremos en este apartado se basa en un

tipo de intercambio cíclico de itinerarios piramidales (Carlier y Villon [8]). Se dice que un itinerario es

piramidal cuando comienza en la ciudad 1, visita a continuación las ciudades en orden creciente hasta

llegar a la ciudad n, y termina volviendo a la ciudad 1 pasando por las restantes ciudades en orden

decreciente. Supongamos que T(i) representa la ciudad situada en la posición i-ésima del itinerario T. Un

recorrido T' es un vecino piramidal de un recorrido T cuando existe un número entero p tal que:

(i) 0 ≤ p ≤ n,

(ii) T' (1) T' (2) = T(i2),…, T' (p) = T(ip) con i1 < i2 <…< ip y

(iii) T'(p+1) = T(j1), T'(p+2) = T(j2),…, T'(n) = T(jn-p) con j1 > j2 >…> jn-p.

Así, por ejemplo, si el itinerario T = (1, 2, 3, 4, 5, 1), el itinerario T' = (1, 3, 5, 4, 2, 1) será un vecino

piramidal. Esta vecindad presenta el inconveniente de que (1, 2) y (1, n) pertenecen a todos los

itinerarios. Para superarla, Carlier y Villon [8] consideran las rotaciones n asociadas a un itinerario dado.

El tamaño de esta vecindad es θ(n2n-1) y en ella puede realizarse una búsqueda en un tiempo O(n3)

utilizando n iteraciones de un algoritmo del camino más corto en el grafo de mejora.

Describiremos a continuación un grafo de mejora en el que puede hallarse el mejor vecino

piramidal para el TSP resolviendo éste conforme al camino más corto de dicho grafo. Llamemos T = (1,

2, 3, …, n, 1) a un recorrido del viajante de comercio con n nodos. El grafo de mejora es un grafo G =

(V, E) donde (i) V = 1, 2, …, n, 1', 2',…, n' corresponde a los nodos del problema original y a una

copia de los mismos, y (ii) E es un conjunto de arcos dirigidos (i, j') ∪ (j', k), donde un arco (i, j')

corresponde a que los nodos i a j se hallen en un orden consecutivo, y un arco (j', k) corresponde a omitir

los nodos j + 1 a k - 1 y añadirlos en orden inverso al final del itinerario. Para construir el conjunto de

arcos E, se tiene en cuenta cada par de nodos en V (i, j') y (j', k). El arco (i, j') se añade a E si, y

solamente si, i ≤ j, y el arco (j', k) se añade a E si, y solamente si, j < k + 1. Para cada arco (i, j') ∈ E,

asociamos un coste c[i, j] ] que sea equivalente al incremento neto en el coste del vecino piramidal del

itinerario del TSP tras haber añadido el vértice (j+1, i-1,) cuando el itinerario pase en orden inverso por

las ciudades previamente omitidas. Para cada arco (j', k) ∈ E, asociamos un coste c[j', k] que sea

equivalente al incremento neto en el coste óptimo del itinerario del TSP tras haber añadido el vértice (j,

k) y haber suprimido los vértices (j, j+1) y (k-1, k). Dicho de otro modo, si d[i, j] es el coste de

desplazarse de la ciudad i a la ciudad j en el problema original, entonces, para i < j y j < n-1:

c[i, j'] = d[j+1, i-1],

20

Page 21: Estudio de técnicas de búsqueda por vecindad a muy gran escala

c[j', k] = -d[j, j+1] – d[k-1, k] + d[j, k].

Visto esto, y teniendo en cuenta que es preciso poner especial cuidado a la hora de calcular el

coste de los vértices en los que uno de sus puntos extremos sea 1, 1', n, o n', ya podemos realizar la

búsqueda en la vecindad hallando un camino más corto desde el nodo 1 al nodo n o al n'. Carlier y Villon

[8] demuestran también que, si un itinerario es el óptimo local de la vecindad arriba expuesta, será un

óptimo local para la vecindad de dos intercambios.

Además de estas tres clases de vecindades, también se ha empleado la programación dinámica

para determinar soluciones óptimas a supuestos especiales del problema del viajante de comercio. Así,

Simonetti y Balas [69] resuelven el TSP por medio de ventanas de tiempo, aplicando ciertos tipos de

restricciones de precedencia con una técnica de programación dinámica. Burkard et al. [6], por su parte,

ponen de manifiesto que, para todo un conjunto de itinerarios de estructura especial que pueden

representarse por medio de árboles de prioridad, es posible resolver el TSP en tiempo polinómico

aplicando una técnica de programación dinámica. También demuestran que se puede representar el

conjunto de itinerarios piramidales mediante árboles de prioridad y que existe un algoritmo O(n2) para el

cálculo del itinerario piramidal más corto. Estos resultados se analizan de modo más detallado en el

apartado 5.

4.3 Vecindades definidas mediante asignaciones y ajustes

En este apartado analizaremos una estructura de vecindad exponencial definida por la obtención de

asignaciones de costes mínimos en un grafo mejorado, ilustrando este tipo de vecindad en el contexto del

problema del viajante de comercio (TSP). Asimismo, demostraremos que la vecindad de la asignación se

puede generalizar a vecindades definidas por la obtención de ajustes de coste mínimo en un grafo de

mejora no bipartito. Para demostrar esta generalización recurriremos al problema de la partición del

conjunto.

La vecindad de asignación en el problema del viajante de comercio se puede contemplar como

una generalización de la vecindad simple que se define retirando un nodo del itinerario y reinsertándolo

de manera óptima. Dado un itinerario T de n nodos = (1, 2, 3,…, n, 1), y siendo el coste de desplazarse

de la ciudad i a la ciudad j d[i, j], el primer paso para realizar la búsqueda en la vecindad de la

asignación será crear un grafo de mejora bipartito del siguiente modo:

(i) Para k = ⌊n / 2⌋, se eligen los nodos k del itinerario actual T y se retiran. El conjunto de

nodos retirados será V = v1, v2, …, vk y el conjunto de nodos restantes, U = u1, u 2, …, u n-

k.

(ii) Se construye un sub-itinerario T´ = (u1, u 2, …, u n-k, u1) qi indica el vértice correspondiente a

21

Page 22: Estudio de técnicas de búsqueda por vecindad a muy gran escala

cada (ui, ui+1) para i = 1 a n – k – 1, y qn-k indica el vértice (u n-k, u1)

(iii) A continuación se construye un grafo bipartito completo G = (N, N', E) tal que N = qi: i =

1 a n – k, N' = V, y que el peso en cada vértice (qi, vj) sea c[qi, vj] = d[ui, vj] + d[vj, ui+1] -

d[ui, ui+1].

Un vecino de T corresponderá a un itinerario T* obtenido mediante la inserción de los nodos de

V en el sub-itinerario T´ y que tenga como máximo un nodo insertado entre los nodos adyacentes de T´.

La asignación del coste mínimo de k arcos corresponderá al vecino de coste mínimo de T.

Por medio de la figura 4, vamos a demostrar que la vecindad de asignación en el itinerario de 9

nodos T = (1, 2, 3, 4, 5, 6, 7, 8, 9, 1). Si V = 2, 3, 5, 8, podremos construir el sub-itinerario en los

nodos en U como T' = (1, 4, 6, 7, 9, 1). La figura 4 ilustra el grafo bipartito G únicamente con los

vértices de los ajustes, a fin de simplificar. El nuevo itinerario que se obtiene será T" " = (1, 3, 4, 8, 6, 5,

7, 9, 2, 1). Obsérvese que cuando k = ⌊n / 2⌋, el tamaño de la vecindad de asignación es igual a Ω(⌊n /

2⌋!).

22

Page 23: Estudio de técnicas de búsqueda por vecindad a muy gran escala

Figura 4. Ilustración de la vecindad de ajuste.

La vecindad de asignación fue introducida por primera vez en el contexto del TSP por Sarvanov y

Doroshko [66] para el supuesto en que k = n/2 y n es un valor par. Gutin [33] ofrece una comparación

teórica entre el algoritmo de búsqueda por vecindades de asignación y los algoritmos de descenso por

gradiente local para k = n/2. Punnen [60] ha considerado la vecindad de asignación general para valores

arbitrarios de k y n. En [60] se muestra asimismo una extensión de la vecindad en la que, en vez de

nodos, se retiran y se reinsertan caminos de modo óptimo resolviendo un problema de ajuste de peso

mínimo. Gutin [34], a su vez, demuestra que, para ciertos valores de k, es posible maximizar el tamaño

de la vecindad, junto con ciertos algoritmos de baja complejidad, por medio de búsquedas en vecindades

relacionadas. Gutin y Yeo [37] han desarrollado una vecindad basada en la vecindad de asignación, con

la que demuestran que es posible trasladarse de cualquier itinerario T a otro itinerario T' a través de

dicha vecindad en un máximo de 4 pasos. Deineko y Woeginger [12] han estudiado varias vecindades

exponenciales para su aplicación al problema del viajante de comercio y al problema de asignación

cuadrática, basadas en asignaciones y ajustes en grafos bipartitos, así como vecindades basadas en

23

Page 24: Estudio de técnicas de búsqueda por vecindad a muy gran escala

órdenes parciales, árboles y otras estructuras combinatorias. La heurística de vecindades basada en

ajustes se aplica también al problema de ruta de inventarios en los trabajos de Dror y Levy [15].

Puede obtenerse otra clase de vecindades basadas en ajustes mediante el agrupamiento de sub-

itinerarios, donde éstos se generan resolviendo un problema de ajuste de peso mínimo bipartito ([43],

[59]). En este caso, la búsqueda del mejor itinerario es un problema NP-difícil. Para realizar la búsqueda

en este tipo de vecindades existen heurísticas eficaces ([27], [43], [59]), y es posible desarrollar

algoritmos de búsqueda en los mismos aplicando modificaciones de coste u otros medios de control del

ajuste generado.

A continuación veremos una estructura de vecindad basada en ajustes no bipartitos, dentro del

contexto del problema de la partición general de conjuntos contemplado en el apartado 3. Llamemos S =

S1, S2, S3,…, SK a una partición del conjunto A = a1, a2, a3,…, an. A continuación, construyamos un

grafo completo G = (N, E) tal que cada nodo i para 1 ≤ i ≤ K represente el subconjunto Si en S. Los

pesos c[i, j] del vértice (i, j) de G se pueden construir separadamente conforme a una variedad de reglas,

una de las cuales es la siguiente:

(i) Sea la contribución del coste del subconjunto Si al problema de la partición d[Si].

(ii) Para cada vértice (i, j) en E, se combinan los elementos de Si and Sj, y se vuelven a

repartir óptimamente en dos subconjuntos, a los que llamaremos Si y Sj.

(iii) Luego c[i, j] = (d[Si'] + d[Sj']) – (d[Si] + d[Sj]).

Obsérvese que, si se eliminan de G los vértices con pesos no negativos, cualquier ajuste de coste

negativo que se haga en este grafo definirá un coste vecino de mejora de S. Tailard ha aplicado este tipo

de ideas a una clase general de problemas de clustering ([71]), y al problema del enrutamiento de

vehículos ([72]). 5. Casos especiales resolubles y vecindades relacionadas

Existen gran cantidad de estudios relativos a casos especiales de problemas de optimización

combinatoria NP-difíciles que pueden resolverse de forma eficiente. Particularmente interesantes para

nosotros son aquellos casos especiales que se pueden obtener a partir del problema NP-difícil original

limitando la topología del problema, o añadiendo restricciones al problema original, o por medio de una

combinación de estos dos factores. Al basar vecindades en estos supuestos especiales, a menudo se

pueden desarrollar vecindades de tamaño exponencial en las que es posible realizar búsquedas en tiempo

polinómico. Conviene señalar que la mayoría de estas técnicas no se han probado experimentalmente,

por lo que cabe esperar que produzcan óptimos locales poco satisfactorios. Obsérvese asimismo que la

vecindad de intercambio cíclico vista en el apartado 4 se basa en un algoritmo O(n2) para la obtención

del itinerario piramidal de coste mínimo.

24

Page 25: Estudio de técnicas de búsqueda por vecindad a muy gran escala

La siguiente ilustración tiene que ver con los grafos de Halin. Un grafo de Halin es aquel que se

obtiene insertando en el plano un árbol que no tenga nodos de grado 2, y uniendo a continuación los

nodos hoja mediante un ciclo, de forma que el resultado sea un grafo planar. Cornuejols et al. [10] han

propuesto un algoritmo O(n) que resuelve el problema del viajante de comercio mediante un grafo de

este tipo. Hay que tener en cuenta que los grafos de Halin pueden tener un número exponencial de

itinerarios TSP, como ocurre en el ejemplo de la figura 3 (tomado de [10]).

Vamos a demostrar cómo los grafos de Halin pueden emplearse para construir vecindades de

muy gran tamaño para su aplicación al problema del viajante de comercio. Supongamos que T es un

itinerario. Decimos que H es una extensión de Halin de T cuando H es un grafo de Halin y T es un

subgrafo de H. La figura 5 ilustra una extensión de Halin para el itinerario T = (0, 1, 2, …, 9, 0).

Imaginemos que existe un procedimiento eficiente Extensión-de-Halin(T), que permite crear una

extensión de Halin de T. Para crear la vecindad N(T), se haría que H(T) = Extensión-de-Halin(T), y que

N(T) = T' : T' es un itinerario en H(T). Para hallar el mejor itinerario en esta vecindad, buscaríamos el

mejor itinerario en H(T). En principio, se podría definir una vecindad mucho mayor: N(T) = T': existe

una extensión de Halin de T dentro de T'. Pero, por desgracia, sería demasiado difícil realizar una

búsqueda eficiente en tal vecindad, ya que supondría optimizar simultáneamente todas las extensiones de

Halin de T. Sería posible desarrollar soluciones parecidas, basadas en el grafo de Halin, para la variante

de cuello de botella del problema del viajante de comercio y para el problema del árbol de Steiner,

aplicando el algoritmo de tiempo lineal de Philips et al [56] y el de Winter [82], respectivamente.

Figura 5. Grafo de Halin

(a) Itinerario con 10 nodos. (b) Extensión de Halin

25

Page 26: Estudio de técnicas de búsqueda por vecindad a muy gran escala

En los anteriores ejemplos hemos visto itinerarios piramidales, que pueden considerarse

como un problema del viajante de comercio con restricciones adicionales. También hemos

analizado el TSP restringido a grafos de Halin. En el siguiente ejemplo, en cambio, veremos una

vecindad ([28]) que se basa simultáneamente en una clase restringida de grafos con restricciones

adicionales de lado. Glover y Punnen [28] han identificado la siguiente clase de itinerarios, en los

que se puede hallar el mejor miembro en tiempo lineal. Sean C1, C2,..., Ck ciclos disjuntos de k

vértices, cada uno de los cuales contiene al menos tres nodos, hallándose cada nodo en uno de los

ciclos. Llamamos "itinerario de eyección de vértice único" (single edge ejection tour) al itinerario

T que presenta las siguientes características:

1. | T ∩ Ci| = |Ci| - 1 para i = 1 a k, es decir, T tiene |Ci| - 1 arcos en común con Ci.

2. Hay un arco de T dirigido desde Ci a Ci+1 para i = 1 a k-1 y desde Ck a C1.

El número de formas de suprimir arcos de los ciclos es, como mínimo, Πi |Ci|, lo que puede

resultar un valor exponencialmente alto, al igual que el número de itinerarios de eyección únicos. Para

hallar el itinerario de eyección único que resulte óptimo, es preciso resolver un problema del camino más

corto relacionado en un grafo de mejora. El tiempo de ejecución es lineal en el número de arcos. En un

itinerario dado, se pueden suprimir k+1 arcos del mismo, crear k caminos, y a continuación transformar

éstos en la unión de k ciclos descrita más arriba. Aunque, en principio, la búsqueda por vecindad

explicada anteriormente es fácil de realizar, la calidad de la técnica de búsqueda tiende a ser sensible a

las características de la implementación. Glover y Punnen [28] han considerado asimismo vecindades

más amplias, entre ellas lo que han dado en llamar "double ejection tours" ("itinerarios de eyección

doble"). También han propuesto un algoritmo que se ha demostrado eficiente en la optimización de esta

clase de itinerarios.

Yeo [78] ha estudiado otra vecindad para la versión asimétrica del TSP. Se trata de una

vecindad que guarda relación con la de Glover y Punnen [28] (aunque su tamaño es muchísimo mayor),

y para la que muestra que el tiempo de búsqueda es O(n3). Burkard y Deineko [7], por su parte, han

descubierto otra clase de vecindad exponencial, en la que es posible identificar al mejor miembro en

tiempo cuadrático. Cada uno de estos tres algoritmos pueden emplearse para desarrollar algoritmos de

búsqueda por vecindad a muy gran escala. Sin embargo, por lo que sabemos hasta ahora, ninguno de

ellos ha sido implementado.

Resumiremos las conclusiones del presente apartado presentando un método general para

convertir una técnica de solución de problemas con restricciones en una técnica de búsqueda por

vecindad a muy gran escala. Sea X un tipo de problema de optimización combinatoria NP-difícil, y X'

una restricción de X resoluble en tiempo polinómico. Supongamos, además, que para una instancia

26

Page 27: Estudio de técnicas de búsqueda por vecindad a muy gran escala

particular (F, f) de X, y para cada subconjunto factible S en F, existe una subrutina llamada

"CreateNeighborhood(S)" que crea una instancia bien estructurada (F ', f) de X' tal que

1. S sea un elemento de F'

2. F' sea un subconjunto de F

3. (F ', f) sea una instancia de X'

Llamaremos F' a la vecindad X'-inducida de S. El enfoque de búsqueda por vecindad consiste en

invocar la subrutina CreateNeighborhood(S) en cada iteración, para luego optimizar (F', f) mediante el

algoritmo de tiempo polinómico. A continuación se sustituye S por el óptimo de (F', f), y el algoritmo se

itera. Especial interés presenta el supuesto en el que la subrutina CreateNeighborhood se ejecuta en

tiempo polinómico y el tamaño de F' es exponencial. En este caso, la vecindad no se creará

explícitamente. Si bien estamos convencidos del enorme potencial de este enfoque en el contexto de la

búsqueda por vecindad, lo cierto es que se trata de un potencial sin explotar en su mayor parte, y, lo que

es más, que en muchos casos no se sabe bien cómo explotar. Por ejemplo, muchos problemas de

optimización combinatoria NP-difíciles son resolubles en tiempo polinómico cuando se hallan

restringidos a grafos de redes en serie-paralelo. Son ejemplos de ello el problema de la fiabilidad de

redes ([67]), el del árbol de expansión de comunicación óptima ([18]), el de cubierta de vértices ([5],

[73]), el del conjunto de vértices ([5], [73]), etc. Parecidos resultados se obtienen con problemas de

planificación de horarios comerciales con restricciones de precedencia específicas [46]. Queda en el aire

una cuestión sumamente interesante: cómo sacar el máximo partido de estos algoritmos eficientes para

aplicarlos a grafos de redes en serie-paralelo dentro del contexto de la búsqueda por vecindad.

6. Medición de vecindades

En este apartado describiremos técnicas de medición de vecindades, que pueden servir como guía

para calibrar el rendimiento de algoritmos de búsqueda local con respecto a las vecindades. Como ya

hemos indicado, uno de los aspectos críticos del diseño de la heurística de búsqueda por vecindad

consiste en hallar el equilibrio entre el tamaño de la vecindad y el tiempo necesario para llevar a cabo la

búsqueda. De ahí que un elemento importante en la medición de vecindades sea el tamaño de la

vecindad. Desde el punto de vista del grafo de vecindad, el tamaño de ésta para una solución S puede

contemplarse como el número de arcos dirigidos que salen de S, o, lo que es lo mismo, el grado de

salida de S. Para los métodos de profundidad variable, el tamaño de la vecindad no tiene por qué ser

necesariamente exponencial, sino que es la búsqueda en sí la que lleva a hallar soluciones radicalmente

diferentes a la solución base. Por el contrario, para las técnicas basadas en redes y las que se hallan

inducidas por supuestos resolubles, el tamaño de la vecindad es generalmente exponencial.

27

Page 28: Estudio de técnicas de búsqueda por vecindad a muy gran escala

La siguiente tabla (tomada en su mayor parte de [6]) muestra un resumen del tamaño de las

vecindades anteriormente vistas para el problema del viajante de comercio:

Vecindad log(tamaño) Tiempo búsqueda Referencia: Tamaño

2-Opt Ω(n2) Θ(log n) O(n2) Croes [11]

k-Opt Ω (nk) Θ (log n) O(nk) Lin [49]

Piramidal Ω (2n) Θ (n) O(n2) Klyaus [45]

Intercambio cíclico Ω (n2n) Θ (n) O(n3) Carlier y Villion [8]

Edge ejection Ω ((12n)1/3) Θ (n) O(n) Glover y Punnen [28]

Edge ejection basada

en el camino más corto

Ω (n2n) Ω (n) O(n2) Punnen y Glover [58],

Glover [30]

Intercambio cíclico

(subconjuntos k-fijos)

Θ (nk) Θ (log n) O(n2) Ahuja et al. [2]

Interc. compuestos Θ (2n-1) Θ (n) O(n2) Potts y van de Velde [57]

Basada en ajustes1 Θ(n!/2) Θ (n log n) O(n3) Sarvanov y Doroshko [66]

Grafos de Halin Ω(2n) Θ (n) O(n) Cornuejols et al. [10]

Árboles PQ 2Θ(n loglog n) Θ (n loglog n) O(n3) Burkard et al. [6]

Otra técnica de medición de vecindades que se estudia en la literatura es el grafo del diámetro de la

vecindad. La distancia desde un nodo S a un nodo T en el grafo de vecindad es la longitud del camino

más corto entre ambos. El diámetro del grafo de vecindad NG es el valor entero positivo más bajo d tal

que d(S, T) = d para todos los nodos S y T de NG. Gutin y Yeo [37] han desarrollado vecindades de

tamaño exponencial que admiten búsquedas polinómicas para el TSP, y cuyos grafos de vecindad son

de diámetro 4; es decir, que para cualquier par de itinerarios T1 y T5, existen itinerarios T2, T3, y T4 tales 1 Esto está suponiendo que cuando k = ⌊n/2⌋, los nodos se han suprimido. Si se suprimen menos nodos, es posible obtener mejores cotas de tiempo, por lo que el tamaño de la vecindad disminuirá proporcionalmente.

28

Page 29: Estudio de técnicas de búsqueda por vecindad a muy gran escala

que Ti ∈ N(Ti-1) para todo i = 2, 3, 4, 5. El grafo de vecindad para la vecindad basada en intercambios

cíclicos estudiada por Carlier y Villon [8] es de diámetro θ(log n).

Para un grafo de vecindad dado, decimos que P = i1, i2, …, iK es monótono cuando el valor objetivo

f(ij) < f(ij-1) para j = 2 a K. Sea dm(S) la longitud del camino monótono más corto desde S a una

solución óptima local. Si dm(S) es exponencialmente grande para cualquier S, se garantiza que una

técnica de búsqueda por vecindad que comience en S sea exponencialmente larga. Supongamos, en el

sentido contrario, que dmp(S, T) indica el camino monótono más largo desde S hasta T. Si se garantiza

que dmp(S, T) es polinómico, toda técnica de búsqueda por vecindad basada en esta vecindad tendrá un

número polinómico de iteraciones.

Veamos por último el análisis de dominio de algoritmos de búsqueda por vecindad. El análisis de

dominio de un heurístico analiza el número de soluciones "dominadas" por la solución obtenida . Sea α

un algoritmo heurístico para un problema de optimización combinatoria que produce una solución S*

en F. El número de dominio de α, representado por dom(α), será la cardinalidad del conjunto F(S*),

donde F(S*) = S ∈ F : f(S) ≥ f(S*). Si dom(α) = |F|, S* será una solución óptima. El análisis de

dominio de varios algoritmos para el TSP se estudia en [27], [28], [35], [36], [38], [59], y [60].

7. Rendimiento computacional de algoritmos de búsqueda por vecindad a muy gran escala

En este apartado estudiaremos brevemente el rendimiento computacional de algunos de los

algoritmos de búsqueda por vecindad a muy gran escala vistos en los apartados anteriores.

Comenzaremos por considerar el problema del viajante de comercio. El algoritmo de Lin y Kernighan y

sus variantes se consideran mayoritariamente como los mejores heurísticos para este problema. El

amplio estudio computacional llevado a cabo por Johnson y McGeoch [42] corrobora esta impresión en

el exhaustivo análisis de rendimiento comparativo que se incluye en él. Rego [61] ha implementado

experimentalmente algoritmos de ejection chain para el TSP con excelentes resultados que demuestran

las ventajas de su técnica con respecto al algoritmo original de Lin y Kernighan. Punnen y Glover [58],

por su parte, han puesto en práctica un algoritmo de ejection chain basado en el camino más corto. Las

implementaciones de Rego [61] y Punnen y Glover [58] son relativamente sencillas y emplean

estructuras de datos simples.

Recientemente, Helsgaun [39] ha obtenido resultados computacionales más que notables a partir de

29

Page 30: Estudio de técnicas de búsqueda por vecindad a muy gran escala

una implementación compleja del algoritmo de Lin y Kernighan. Aunque su algoritmo emplea los

elementos fundamentales de la búsqueda de profundidad variable de estos dos autores, se diferencia de

implementaciones anteriores en varios aspectos clave. Consigue un mejor rendimiento computacional

gracias al manejo eficiente de datos, a movimientos especiales 5-opt, a nuevos movimientos no

secuenciales, a listas de candidatos efectivos, a cálculos de costes, al uso eficiente de cotas superiores en

costes de elementos, a la aplicación de información procedente del algoritmo de un árbol de Held y Karp

y a la aplicación del análisis de sensibilidad, entre otras cosas. Helsgaun afirma que su algoritmo ha

producido soluciones óptimas en todos los problemas de prueba para los que se conoce una solución

óptima, entre ellos los de 7.397 ciudades y de 13.509 ciudades estudiados por Applegate et al.[4].

Helsgaun ha calculado que el tiempo de ejecución medio de este algoritmo es O(n2.2). Para dar una

perspectiva adecuada de lo que este logro supone, hay que tener en cuenta que, para resolver con

optimalidad el problema de 13.509 ciudades mediante un algoritmo exacto de ramificación y corte,

Applegate et al. [4] necesitaron tres meses de cálculos realizados con un clúster de tres servidores Digital

Alpha 4100 (con 12 procesadores) y otro clúster de 32 PCs con procesadores Pentium –II. Helsgaun, por

su parte, utilizó un Macintosh de 300 MHz y 3Gigas. Para el problema de 85.900 ciudades, (pla85900

del TSPLIB) consiguió obtener una solución mejorada en apenas dos semanas de cálculo en CPU.

(Obsérvese también que casi todo el tiempo empleado por Applegate et al. [4] se dedicó a probar que la

solución óptima lo era efectivamente.)

En la tabla 1 presentamos un resumen del rendimiento del algoritmo de Rego (REGO) [61], del

algoritmo de Helsgaun-Lin-Kernighan (HLK) [39], del algoritmo de Lin y Kernighan modificado por

Mak y Morton [51] y del algoritmo del camino más corto de Punnen y Glover (SPG) [58] en instancias

pequeñas del problema del viajante de comercio. La tabla refleja el mejor caso para cada uno de ellos.

30

Page 31: Estudio de técnicas de búsqueda por vecindad a muy gran escala

Tabla 1. Instancias pequeñas del TSP: mejor % de desviación del óptimo

Problema REGO HLK MLK SPG

bier127 0,12 0,00 0,42 0,10u159 0,00 0,00 0,00 ----

ch130 ----- 0,00 ----- 0,23

ch150 ----- 0,00 ----- 0,40

d198 0,30 0,00 0,53 0,33

d493 0,97 0,00 ----- 2,65

eil101 0,00 0,00 0,00 0,79

fl417 0,78 0,00 ----- 0,41

gil262 0,13 0,00 1,30 1,81

kroA150 0,00 0,00 0,00 0,00

kroA200 0,27 0,00 0,41 0,68

kroB150 0,02 0,00 0,01 0,07

kroB200 0,11 0,00 0,87 0,42

kroC100 0,00 0,00 0,00 0,00

kroD100 0,00 0,00 0,00 0,00

kroE100 0,00 0,00 0,21 0,02

lin105 0,00 0,00 0,00 0,00

lin318 0,00 0,00 0,57 1,03

pcb442 0,22 0,00 1,06 2,41

pr107 0,05 0,00 0,00 0,00

pr124 0,10 0,00 0,08 0,00

pr136 0,15 0,00 0,15 0,00

pr144 0,00 0,00 0,39 0,00

pr152 0,90 0,00 4,73 0,00

pr226 0,22 0,00 0,09 0,11

pr264 0,00 0,00 0,59 0,20

pr299 0,22 0,00 0,44 1,30

pr439 0,55 0,00 0,54 1,29

rd100 0,00 0,00 ----- 0,00

rd400 0,29 0,00 ----- 2,45

ts225 0,25 0,00 ----- 0,00

gr137 0,20 0,00 0,00 ----

31

Page 32: Estudio de técnicas de búsqueda por vecindad a muy gran escala

gr202 1,02 0,00 0,81 ----gr229 0,23 0,00 0,20 ----gr431 0,91 0,00 1,14 ----

La tabla 2 muestra un resumen del rendimiento del algoritmo de (REGO) [61], del de Helsgaun-Lin-

Kernighan (HLK) [39], y de la implementación de Lin y Kernighan (JM-LK) de Johnson et al. [42]

(Atención al error: no se ha encontrado la fuente de referencia) para instancias grandes del problema del

viajante de comercio. La tabla refleja el % de desviación media para cada algoritmo.

Tabla 2. Instancias grandes del TSP: % de desviación media tras varias ejecuciones

Problema Rego JM-LK HLK

dsj1000 1,10 3,08 0,035pr1002 0,86 2,61 0,00

pr2392 0,79 2,85 0,00

pcb3038 0,97 2,04 0,00

fl3795 7,16 8,41 ----

fl4461 1,06 1,66 0,001

pla7397 1,57 2,19 0,001

A continuación nos fijaremos en el problema del árbol de expansión mínima capacitado; un supuesto

especial del problema de la partición ya visto en el apartado 4. Abundando en la estructura del problema,

Ahuja et al. [2] han desarrollado un algoritmo de búsqueda por vecindad a muy gran escala basado en

vecindades de intercambios cíclicos. Se trata de un algoritmo de gran eficiencia con el que se han

obtenido soluciones mejoradas para muchos problemas patrón. Actualmente, ofrece la mejor solución

existente para cada una de las instancias que aparecen en la lista de patrones, a la que se puede acceder

en http://www.ms.ic.ac.uk/info.html.

Finalmente, en nuestro último ejemplo nos fijaremos en algoritmos de búsqueda por vecindad a muy

gran escala para problemas de asignación generalizada (GAP). Yagiura et al. [80] han desarrollado un

algoritmo de búsqueda tabú basado en ejection chain para este tipo de problemas y afirman haber

obtenido, en un tiempo de cálculo razonable, soluciones superiores o, al menos, comparables, a las

32

Page 33: Estudio de técnicas de búsqueda por vecindad a muy gran escala

obtenidas con los algoritmos ya existentes. A partir de comparaciones y experimentos computacionales,

se afirma que, en instancias patrón, las soluciones obtenidas por este algoritmo se hallan dentro de

óptimos del 16%.

Muchas de las referencias de autores citadas a lo largo del presente estudio dan cuenta asimismo de

resultados de cálculos basados en sus algoritmos. A ellos nos remitimos para más detalles. Por otra parte,

varias vecindades de muy gran escala tratadas en este estudio no han sido probadas experimentalmente

dentro de un marco de búsqueda por vecindad a muy gran escala. Las implementaciones efectivas de

éstas y otras vecindades son temas para posteriores investigaciones.

Agradecimientos:

La investigación del primer autor recibió el apoyo de la beca NSF (DMI-9900087). El segundo y

tercer autor fueron apoyados parcialmente por las becas NSF (DMI-9810359 y DMI-9820998). El cuarto

autor recibió el apoyo de la beca NSERC (OPG0170381).

33

Page 34: Estudio de técnicas de búsqueda por vecindad a muy gran escala

Referencias

[1] E. Aarts and J.K. Lenstra, Local Search in Combinatorial Optimization, (John Wiley & Sons, New York, 1997). [2] R.K. Ahuja, J.B. Orlin, and D. Sharma, New neighborhood search structures for the capacitated minimum spanning tree problem, Research Report 99-2, Department of Industrial & Systems Engineering, University of Florida, 1999. [3] V. Aggarwal, V.G. Tikekar, and Lie-Fer Hsu, Bottleneck assignment problem under categorization, Computers and Operations Research 13 (1986) 11-26. [4] D. Applegate, R. Bixby, V. Chvatal, and W. Cook, On the solution of traveling salesman problems, Documenta Mathematica, Extra volume ICM (1998), 645-656. [5] S. Arnborg and A. Proskurowski, Linear time algorithms for NP-hard problems restricted to partial k-trees, Discrete Applied Mathematics 23 (1989), 11-24. [6] R. E. Burkard, V. G. Deineko, and G. J. Woeginger, The travelling salesman problem and the PQ-tree, in: Proc. IPCO V, Lecture Notes in Computer Science, Vol. 1084 (Springer, 1996) 490-504. [7] R.E. Burkard and V.G. Deineko, Polynomially solvable cases of the traveling salesman problem and a new exponential neighborhood, Computing 54 (1995) 191-211. [8] J. Carlier and P. Villon, A new heuristic for the traveling salesman problem, RAIRO - Operations Research 24 (1990) 245-253. [9] R.K. Congram, C.N. Potts, S. L. van de Velde, An iterated dynasearch algorithm for the single machine total weighted tardiness scheduling problem, paper in preparation, 1998. [10] G. Cornuejols, D. Naddef, and W.R. Pulleyblank, Halin graphs and the traveling salesman problem, Mathematical Programming 26 (1983) 287-294. [11] G. A. Croes, A method for solving traveling-salesman problems, Operations Research 6 (1958) 791-812. [12] V. Deineko and G.J. Woeginger, A study of exponential neighborhoods for the traveling salesman problem and the quadratic assignment problem, Report Woe-05, Technical University Graz, 1997. [13] U. Dorndorf and E. Pesch, Fast clustering algorithms, ORSA Journal of Computing 6 (1994) 141-153. [14] K.A. Dowsland, Nurse scheduling with tabu search and strategic oscillation, European Journal of Operations Research 106 (1998) 393-407. [15] M. Dror and L. Levy, A vehicle routing improvement algorithm comparison of a “greedy” and a “matching” implementation for inventory routing, Computers and Operations Research 13 (1986) 3345.

31

[16] A.E. Dunlop and B.W. Kernighan, A procedure for placement of standard cell VLSI circuits, IEEE Transactions on Computer-Aided Design 4 (1985) 92-98.

34

Page 35: Estudio de técnicas de búsqueda por vecindad a muy gran escala

[17] M. Duque-Anton, Constructing efficient simulated annealing algorithms, Discrete Applied Mathematics 77 (1997) 139-159. [18] E.S. El-Mallah and C.J. Colbourn, Optimum communication spanning trees in series parallel networks, SIAM Journal of Computing 14 (1985) 915-925. [19] R. Fahrion and M. Wrede, On a principle of chain exchange for vehicle routing problems (IVRP), Journal of Operational Research Society (1990) 821-827. [20] C.M. Fiduccia and R.M. Mattheyses, A linear time heuristic for improving network partitions, in: ACM IEEE Nineteenth Design Automation Conference Proceedings, IEEE Computer Society, (Los Alamitos, CA, 1982) 175-181. [21] R.T.Firla, B.Spille and R.Weismantel, personal communication. [22] R.T.Firla, B.Spille and R.Weismantel, A primal analogue of cutting plane algorithms, Depatment of Mathematics, Otto-von-Guericke-University Magdeburg, 1999. [23] A. Frangioni, E. Necciari, M.G. Scutella, Multi-exchange algorithms for the minimum makespan machine scheduling problem, paper in preparation, Dipartimento di Informatica, University of Pisa, 2000. [24] M.L. Fredman, D.S. Johnson, and L.A McGeoch, Data structures for traveling salesman, Journal of Algorithms 16 (1995) 432-479. [25] M. Gendreau, F. Guertin, J.Y. Potvin, R. Seguin, Neighborhood search heuristics for a dynamic vehicle dispatching problem with pick-ups and deliveries, CRT-98-10, 1998. [26] P.C. Gilmore, E.L. Lawler, and D.B. Shmoys, Well-solved special cases, in: E.L. Lawler, J.K. Lenstra, A.H.G. Rinnooy Kan, and D.B. Shmoys, eds., The Traveling Salesman Problem (Wiley, New York, 1985) 87-143. [27] F. Glover, G.M. Gutin, A. Yeo, and Zverovich, Construction heuristics and domination analysis for the asymmetric TSP, Research report, Brunel University, 1999. [28] F. Glover and A.P. Punnen, The traveling salesman problem: New solvable cases and linkages with the development of approximation algorithms, Journal of the Operational Research Society 48 (1997) 502-510. [29] F. Glover and M. Laguna, Tabu Search, (Kluwer Academic Publishers, 1997). [30] F. Glover, Ejection chains, reference structures, and alternating path algorithms for the traveling salesman problem, Research Report, University of Colorado-Boulder, Graduate School of Business, 1992. A short version appeared in Discrete Applied Mathematics 65 (1996) 223-253.

32

[31] F. Glover, Finding the best traveling salesman 4-opt move in the same time as a best 2-opt move, Journal of Heuristics 2 (1996) 169-179. [32] G.M. Gutin, On approach to solving the traveling salesman problem, in: Theory, Methodology, and Practice of System Research, Mathematical Methods of Systems Analysis, VNIIST (Moscow, 1984) 184-186.

35

Page 36: Estudio de técnicas de búsqueda por vecindad a muy gran escala

[33] G.M. Gutin, On the efficiency of a local algorithm for solving the traveling salesman problem, Automation and Remote Control No. 11(part 2) (1988) 1514-1519. [34] G.M. Gutin, Exponential neighborhood local search for the traveling salesman problem, Computers and Operations Research 26 (1999) 313-320. [35] G.M. Gutin, and A. Yeo, Polynomial algorithms for the TSP and the QAP with a factorial domination number, Manuscript, Brunel University, UK, 1998. [36] G.M. Gutin, and A. Yeo, TSP heuristics with large domination number, Report 12/98, Department of Mathematics and Statistics, Brunel University, UK, 1998. [37] G.M. Gutin, and A. Yeo, Small diameter neighborhood graphs for the traveling salesman problem, Computers and Operations Research 26 (1999) 321-327. [38] G.M. Gutin, and A. Yeo, TSP tour domination and Hamiltonian cycle decomposition of regular digraphs, Manuscript, Brunel University, UK, 1999. [39] K. Helsgaun, An effective implementation of the Lin-Kernighan traveling salesman heuristic, Manuscript, Roskilde University, Denmark, 1999. [40] J. Hurink, An exponential neighborhood for a one machine batching problem, University of Twente, Faculty of Mathematical Sciences, The Netherlands, 1998. To appear in OR-Spektrum 1999. [41] D.S. Johnson, Local search and the traveling salesman problem, in: Proceedings of 17th International Colloquium on Automata Languages and Programming, Lecture Notes in Computer Science, (Springer-Verlag, Berlin, 1990) 443-460. [42] D.S. Johnson, L.A. McGeoch, The travelling salesman problem: a case study in local optimization, in: E.H.L Aarts and J.K. Lenstra, eds., Local Search in Combinatorial Optimization, (Wiley, N.Y., 1997) in press. [43] R.M. Karp, A patching algorithm for the non-symmetric traveling salesman problem, SIAM Journal of Computing 8 (1979) 561-573. [44] B.W. Kernighan and S. Lin, An efficient heuristic procedure for partitioning graphs, Bell System Technical Journal 49 (1970) 291-307. [45] P.S. Klyaus, The structure of the optimal solution of certain classes of the traveling salesman problems, (in Russian), Vestsi Akad. Nauk BSSR, Physics and Math. Sci., Minsk, (1976) 95-98.

33

[46] S. Knust, Optimality conditions and exact neighborhoods for sequencing problems, Universitat Osnabruck, Fachbereich Mathematik/Informatik, Osnabruck, Germany, 1997. [47] M. Laguna, J. Kelly, J.L. Gonzales-Velarde, and F. Glover, Tabu search for multilevel generalized assignment problem, European Journal of Operations Research 82 (1995) 176-189. [48] E.L. Lawler, J.K. Lenstra, A.H.G. Rinnooy Kan, and D.B. Shmoys, eds., The Traveling Salesman Problem (Wiley, New York, 1985). [49] S. Lin, Computer solutions to the traveling salesman problem, Bell System Tech. Journal 44 (1965)

36

Page 37: Estudio de técnicas de búsqueda por vecindad a muy gran escala

2245-2269. [50] S. Lin and B. Kernighan, An effective heuristic algorithm for the traveling salesman problem, Operations Research 21 (1973) 498-516. [51] K. Mak and A. Morton, A modified Lin-Kernighan traveling salesman heuristic, ORSA Journal of Computing 13 (1992) 127-132. [52] I.I. Melamed, S.I. Sergeev, and I.K. Sigal, The traveling salesman problem: approximation algorithms, Avtomat Telemekh 11 (1989) 3-26. [53] C.H. Papadimitriou and K. Steiglitz, Combinatorial Optimization: Algorithms and Complexity (Prentice-Hall, Englewood Cliffs, NJ, 1982). [54] C.H. Papadimitriou, The complexity of Lin-Kernighan algorithm, SIAM Journal of Computing (1992) 450-465.

[55] E. Pesch and F. Glover, TSP ejection chains, Discrete Applied Mathematics 76 (1997) 165-181. [56] J.M. Phillips, A.P. Punnen, and S.N. Kabadi, A linear time algorithm for the bottleneck traveling salesman problem on a Halin graph, Information Processing Letters 67 (1998) 105-110. [57] C.N. Potts and S.L. van de Velde, Dynasearch - Iterative local improvement by dynamic programming: Part I, The traveling salesman problem, Techinical Report, University of Twente, The Netherlands, 1995. [58] A.P. Punnen and F. Glover, Ejection chains with combinatorial leverage for the TSP, Research Report, University of Colorado-Boulder, 1996. [59] A.P. Punnen, S.N. Kabadi, Domination analysis of heuristics for the asymmetric traveling salesman problem, Manuscript, University of New Brunswick, 1998. [60] A.P. Punnen, The traveling salesman problem: New polynomial approximation algorithms and domination analysis, To Appear in Journal of Information and Optimization Sciences. [61] C. Rego, Relaxed tours and path ejections for the traveling salesman problem, European Journal of Operational Research 106 (1998a) 522-538. [62] C. Rego, A subpath ejection method for the vehicle routing problem, Management Science 44 (1998b) 1447-1459.

34

[63] C. Rego, C. Roucairol, A parallel tabu search algorithm using ejection chains for the vehicle routing problem, in: I. H. Osman, J. P. Kelly, eds., Meta-Heuristics: Theory and Applications, (Kluwer Academic Publishers, 1996). [64] G. Reinelt, The traveling salesman computational solutions for TSP application, Lecture Notes in Computer Science, Vol. 840 (Springer, 1994). [65] R.T. Rockafellar, Network Flows and Monotropic Optimization (John Wiley and Sons, New York, 1984). [66] V.I. Sarvanov and N.N. Doroshko, Approximate solution of the traveling salesman problem by a

37

Page 38: Estudio de técnicas de búsqueda por vecindad a muy gran escala

local algorithm with scanning neighborhoods of factorial cardinality in cubic time, Software: Algorithms and Programs, Mathematics Institute of the Belorussia Academy of Science., Minsk, No. 31, (1981) 11-13. (In Russian) [67] A Satyanarayana and R K Wood, A linear time algorithm for computing k-terminal reliability in series parallel networks, SIAM Journal of Computing 14 (1985) 818-832. [68] R.R. Schneur and J.B. Orlin, A scaling algorithm for multicommodity flow problems, Operations Research 46 (1998). [69] N. Simonetti and E. Balas, Implementation of a linear time algorithm for certain generalized traveling salesman problems, in: Proc. IPCO V, Lecture Notes in Computer Science, Vol. 1084 (Springer, 1996) 316-329. [70] F. Sourd, Scheduling tasks on unrelated machines: large neighborhood improvement procedures, submitted to Journal of Heuristics. [71] E.D. Taillard, Heuristic methods for large centroid clustering problems, Technical report IDSIA-96-96, Lugano, 1996. [72] E.D. Taillard, Parallel iterative search methods for vehicle routing problems, Network 23 (1993) 661-673. [73] T. Takamizawa, T. Nishizeki, and N. Sato, Linear time computability of combinatorial problems on series-parallel graphs, Journal of ACM 29 (1982) 623-641. [74] K.T. Talluri, Swapping applications in a daily airline fleet assignment, Transportation Science. 30 (1996). [75] P.M. Thompson, Local search algorithms for vehicle routing and other combinatorial problems, Ph.D. Thesis, Operations Research Center, MIT, 1988. [76] P.M. Thompson and J.B. Orlin, The theory of cyclic transfers, Operations Research Center Working Paper, MIT, August 1989. [77] P.M. Thompson and H.N. Psaraftis, Cyclic transfer algorithms for multivehicle routing and scheduling problems, Operations Research 41 (1993).

35

[78] A. Yeo, Large exponential neighborhoods for the traveling salesman problem, Preprint no 47, Department of Mathematics and Computer Science, Odense University, 1997. [79] M. Yagiura, T. Ibaraki, and F. Glover, An ejection chain approach for the generalized assignment problem, Technical Report #99013, Department of Applied Mathematics and Physics, Kyoto University, 1999. [80] M. Yagiura, T. Yamaguchi, and T. Ibaraki, A variable-depth search algorithm for the generalized assignment problem, in: S. Voss, S. Martello and I.H. Osman, eds., Metaheuristics: Advances and Trends in Local Search Paradigms for Optimization (Kluwer Academic Publishers, Boston, 1999) 459-471. [81] K. Wayne, A polynomial combinatorial algorithm for generalized minimum cost flow, STOC 1999.

38

Page 39: Estudio de técnicas de búsqueda por vecindad a muy gran escala

[82] P. Winter, Steiner problem in Halin networks, Discrete Applied Mathematics 17 (1987) 281294. [83] M. Zachariasen and M. Dam, Tabu search on the geometric traveling salesman problem”, in: I. H. Osman, J. P. Kelly, eds., Meta-Heuristics: Theory and Applications, (Kluwer Academic Publishers, 1996).

36

39