22.07.2013 Views

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

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

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

<strong>Estudio</strong> <strong>de</strong> <strong>técnicas</strong> <strong>de</strong> <strong>búsqueda</strong> <strong>por</strong> <strong>vecindad</strong> a <strong>muy</strong> <strong>gran</strong> <strong>escala</strong><br />

Ravindra K. Ahuja<br />

Departamento <strong>de</strong> ingeniería industrial y <strong>de</strong> sistemas<br />

Universidad <strong>de</strong> Florida<br />

Gainesville, FL 32611, USA<br />

ahuja@ufl.edu<br />

Özlem Ergun<br />

Centro <strong>de</strong> investigación operativa<br />

Instituto tecnológico <strong>de</strong> Massachussets<br />

Cambridge, MA 02139, USA<br />

ozie@mit.edu<br />

James B. Orlin<br />

Escuela Sloan <strong>de</strong> dirección<br />

Instituto tecnológico <strong>de</strong> Massachussets<br />

Cambridge, MA 02139, USA<br />

jorlin@mit.edu<br />

Abraham P. Punnen<br />

Departamento <strong>de</strong> matemáticas, estadística y ciencias informáticas<br />

Universidad <strong>de</strong> New Brunswick<br />

Saint John, New Brunswick, Canada E2L 4L5<br />

punnen@unbsj.ca<br />

(22 <strong>de</strong> julio <strong>de</strong> 1999)<br />

(Revisado el 11 <strong>de</strong> octubre <strong>de</strong> 2000)<br />

1


<strong>Estudio</strong> <strong>de</strong> <strong>técnicas</strong> <strong>de</strong> <strong>búsqueda</strong> <strong>por</strong> <strong>vecindad</strong> a <strong>muy</strong> <strong>gran</strong> <strong>escala</strong><br />

Ravindra K. Ahuja, Özlem Ergun, James B. Orlin, Abraham P. Punnen<br />

Resumen<br />

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

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

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

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

hallar, <strong>por</strong> medio <strong>de</strong> iteraciones, una solución aún mejor. Los algoritmos <strong>de</strong> <strong>búsqueda</strong> <strong>por</strong> <strong>vecindad</strong><br />

(también llamados algoritmos <strong>de</strong> <strong>búsqueda</strong> local) constituyen un tipo bastante amplio <strong>de</strong> algoritmos <strong>de</strong><br />

mejora en los que en cada iteración se obtiene una solución mejorada buscando en la "<strong>vecindad</strong>" <strong>de</strong> la<br />

solución existente. Un aspecto crítico <strong>de</strong>l diseño <strong>de</strong> esta clase <strong>de</strong> algoritmos es la elección <strong>de</strong> la<br />

estructura <strong>de</strong> la <strong>vecindad</strong>; es <strong>de</strong>cir, el modo en el que se va a <strong>de</strong>finir ésta. Como regla general, cuanto<br />

más amplia sea la <strong>vecindad</strong>, mayor será tanto la calidad <strong>de</strong> las soluciones localmente óptimas como la<br />

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

más tiempo será necesario para realizar la <strong>búsqueda</strong> <strong>de</strong>ntro <strong>de</strong> ella en cada iteración. Por esta razón, una<br />

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

realice <strong>de</strong> un modo <strong>muy</strong> eficiente. El presente estudio se concentra en algoritmos <strong>de</strong> <strong>búsqueda</strong> local en<br />

los que el tamaño <strong>de</strong> la <strong>vecindad</strong> es “<strong>muy</strong> <strong>gran</strong><strong>de</strong>” con respecto al tamaño <strong>de</strong> los datos y en los que la<br />

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

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

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

aplicación <strong>de</strong> la programación dinámica o <strong>de</strong> <strong>técnicas</strong> <strong>de</strong> flujo <strong>de</strong> re<strong>de</strong>s a vecinda<strong>de</strong>s amplias, y (3)<br />

vecinda<strong>de</strong>s <strong>gran</strong><strong>de</strong>s inducidas <strong>por</strong> restricciones <strong>de</strong>l problema original que pue<strong>de</strong>n resolverse en tiempo<br />

polinómico.<br />

1. Introducción<br />

Muchos problemas <strong>de</strong> optimización <strong>de</strong> interés práctico resultan intratables mediante <strong>técnicas</strong><br />

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

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

Los trabajos <strong>de</strong>dicados a algoritmos heurísticos suelen dividir éstos en dos amplias categorías:<br />

algoritmos <strong>de</strong> construcción (o constructivos) y algoritmos <strong>de</strong> mejora. Los primeros montan una solución<br />

partiendo <strong>de</strong> cero, mediante la asignación <strong>de</strong> valores a una o varias variables <strong>de</strong> <strong>de</strong>cisión al mismo<br />

tiempo, mientras que los algoritmos <strong>de</strong> mejora parten <strong>de</strong> una solución factible y tratan <strong>de</strong> hallar una<br />

2


mejor <strong>por</strong> medio <strong>de</strong> iteraciones. Los algoritmos <strong>de</strong> <strong>búsqueda</strong> <strong>por</strong> <strong>vecindad</strong> (también llamados algoritmos<br />

<strong>de</strong> <strong>búsqueda</strong> local) constituyen un tipo bastante amplio <strong>de</strong> algoritmos <strong>de</strong> mejora en los que en cada<br />

iteración se obtiene una solución mejorada buscando en la "<strong>vecindad</strong>" <strong>de</strong> la solución existente. El<br />

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

“<strong>muy</strong> <strong>gran</strong><strong>de</strong>” con respecto al tamaño <strong>de</strong> los datos y en los que la <strong>búsqueda</strong> local se hace con criterios <strong>de</strong><br />

máxima eficacia. En instancias <strong>gran</strong><strong>de</strong>s <strong>de</strong> problemas, la <strong>búsqueda</strong> <strong>de</strong> este tipo <strong>de</strong> vecinda<strong>de</strong>s <strong>de</strong> modo<br />

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

<strong>de</strong> la <strong>vecindad</strong> o bien <strong>de</strong>sarrollar algoritmos que resulten eficaces en <strong>búsqueda</strong>s <strong>de</strong> modo implícito en la<br />

<strong>vecindad</strong>.<br />

Un aspecto crítico <strong>de</strong>l diseño <strong>de</strong> esta clase <strong>de</strong> algoritmos es la elección <strong>de</strong> la estructura <strong>de</strong> la<br />

<strong>vecindad</strong> (es <strong>de</strong>cir, el modo en el que se va a <strong>de</strong>finir ésta), ya que <strong>de</strong>l tipo <strong>de</strong> estructura que se elija<br />

<strong>de</strong>pen<strong>de</strong>rá el que la <strong>búsqueda</strong> <strong>de</strong> <strong>vecindad</strong> <strong>de</strong>sarrolle soluciones altamente precisas o soluciones con<br />

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

calidad <strong>de</strong> las soluciones localmente óptimas como la precisión <strong>de</strong> la solución final que se obtenga. Pero,<br />

al mismo tiempo, cuanto más amplia sea la <strong>vecindad</strong>, más tiempo será necesario para realizar la<br />

<strong>búsqueda</strong> <strong>de</strong>ntro <strong>de</strong> ella en cada iteración. Dado que se suelen ejecutar varios algoritmos <strong>de</strong> <strong>búsqueda</strong><br />

local con distintos puntos <strong>de</strong> partida, la mayor duración <strong>de</strong> los tiempos <strong>de</strong> ejecución para cada iteración<br />

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

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

eficiente.<br />

Varios <strong>de</strong> los métodos más utilizados <strong>por</strong> su alta eficiencia en investigación operativa pue<strong>de</strong>n<br />

enten<strong>de</strong>rse como <strong>técnicas</strong> <strong>de</strong> <strong>búsqueda</strong> <strong>por</strong> <strong>vecindad</strong> a <strong>gran</strong> <strong>escala</strong>. Así, <strong>por</strong> ejemplo, si contemplamos el<br />

algoritmo simplex para la resolución <strong>de</strong> programas lineales como un algoritmo <strong>de</strong> <strong>búsqueda</strong> local,<br />

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

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

problemas <strong>de</strong> flujo <strong>de</strong> re<strong>de</strong>s. El algoritmo <strong>de</strong> cancelación <strong>de</strong>l ciclo <strong>de</strong> coste negativo que se usa para<br />

resolver el problema <strong>de</strong>l flujo <strong>de</strong> coste mínimo y el algoritmo <strong>de</strong>l camino <strong>de</strong> aumento que resuelve<br />

problemas <strong>de</strong> ajuste son dos ejemplos <strong>de</strong> ello.<br />

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

que pue<strong>de</strong>n coincidir parcialmente. La primera <strong>de</strong> ellas compren<strong>de</strong> los métodos <strong>de</strong> profundidad variable:<br />

una serie <strong>de</strong> algoritmos que se centran en vecinda<strong>de</strong>s exponencialmente <strong>gran</strong><strong>de</strong>s en las que realizan<br />

<strong>búsqueda</strong>s parciales <strong>por</strong> medio <strong>de</strong> la heurística. La segunda categoría compren<strong>de</strong> algoritmos <strong>de</strong> mejora<br />

basados en flujos <strong>de</strong> red; métodos <strong>de</strong> <strong>búsqueda</strong> local que emplean <strong>técnicas</strong> <strong>de</strong> flujo <strong>de</strong> red para<br />

i<strong>de</strong>ntificar posibilida<strong>de</strong>s <strong>de</strong> mejora en la <strong>vecindad</strong>. Por último, en la tercera categoría se analizan<br />

vecinda<strong>de</strong>s para problemas NP-difíciles inducidos <strong>por</strong> subconjuntos <strong>de</strong> restricciones <strong>de</strong> los problemas<br />

que se pue<strong>de</strong>n resolver en tiempo polinómico. Aunque hemos introducido el concepto <strong>de</strong> <strong>búsqueda</strong> <strong>por</strong><br />

3


<strong>vecindad</strong> a <strong>gran</strong> <strong>escala</strong> al hacer referencia a <strong>técnicas</strong> <strong>de</strong> generación <strong>de</strong> columnas para programas lineales<br />

y a <strong>técnicas</strong> <strong>de</strong> extrapolación para flujos <strong>de</strong> re<strong>de</strong>s, no se insiste sobre los programas lineales. Por el<br />

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

problemas <strong>de</strong> optimización NP-difíciles.<br />

Esta monografía se halla estructurada <strong>de</strong>l modo que a continuación se <strong>de</strong>scribe. En el apartado 2 se<br />

incluye una breve <strong>de</strong>scripción general <strong>de</strong> la <strong>búsqueda</strong> local. El apartado 3 compren<strong>de</strong> un análisis <strong>de</strong><br />

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

<strong>escala</strong> basados en <strong>técnicas</strong> <strong>de</strong> flujo <strong>de</strong> re<strong>de</strong>s. En el apartado 5 se analizan <strong>técnicas</strong> eficientes para la<br />

resolución <strong>de</strong> supuestos especiales <strong>de</strong> problemas NP-difíciles <strong>de</strong> optimización combinatoria, así como <strong>de</strong><br />

vecinda<strong>de</strong>s <strong>muy</strong> amplias basadas en ellos. El apartado 6 <strong>de</strong>scribe las mediciones <strong>de</strong> vecinda<strong>de</strong>s, que<br />

pue<strong>de</strong>n servir <strong>de</strong> guía para el <strong>de</strong>sarrollo <strong>de</strong> algoritmos <strong>de</strong> <strong>búsqueda</strong> local con respecto a una <strong>vecindad</strong><br />

dada. Por último, en el apartado 7 se analiza el rendimiento computacional <strong>de</strong> varios <strong>de</strong> los algoritmos<br />

vistos en los apartados anteriores.<br />

2. Búsqueda local: esquema general<br />

Comenzaremos <strong>por</strong> introducir formalmente un problema <strong>de</strong> optimización combinatoria, junto con el<br />

concepto <strong>de</strong> <strong>vecindad</strong>. Existen diversas maneras <strong>de</strong> representar este tipo <strong>de</strong> problemas, todas ellas<br />

basadas en métodos <strong>de</strong> representación <strong>de</strong>l conjunto <strong>de</strong> soluciones factibles. En este apartado,<br />

representaremos el conjunto <strong>de</strong> soluciones factibles como subconjuntos <strong>de</strong> un conjunto finito,<br />

formulándolo <strong>de</strong>l siguiente modo:<br />

Sea E = {1, 2,..., m} un conjunto finito. En general, la cardinalidad <strong>de</strong> un conjunto S se indica<br />

mediante |S|. Supongamos, a<strong>de</strong>más, que F ⊆ 2 E , don<strong>de</strong> 2 E indica el conjunto formado <strong>por</strong> todos los<br />

subconjuntos <strong>de</strong> E. Los elementos <strong>de</strong> F se <strong>de</strong>nominan soluciones factibles. Sea f: F → ℜ, llamándose a<br />

la función f la función objetivo. Con estos datos, una instancia <strong>de</strong> un problema <strong>de</strong> optimización<br />

combinatoria (POC) se representará <strong>de</strong>l siguiente modo:<br />

Minimizar {f(S) : S ∈ F}.<br />

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

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

f) indica una instancia <strong>de</strong> un problema <strong>de</strong> optimización combinatoria. En la mayor parte <strong>de</strong> los<br />

problemas que veremos, la función <strong>de</strong> coste es una función lineal; es <strong>de</strong>cir, existe un vector f1, f2,…, fm<br />

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

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

<strong>de</strong> <strong>vecindad</strong> es un punto <strong>de</strong> <strong>de</strong>finición <strong>de</strong>l mapa N: F→ 2 E . En esta función, cada valor <strong>de</strong> S ∈ F tiene<br />

4


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

po<strong>de</strong>mos suponer, sin pérdida <strong>de</strong> generalidad, que S ∈ N(S). Se dice que una solución S* ∈ F es<br />

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

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

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

vecinda<strong>de</strong>s <strong>de</strong> tamaño exponencial, a<strong>de</strong>más <strong>de</strong> vecinda<strong>de</strong>s cuyo tamaño es <strong>de</strong>masiado amplio para<br />

realizar en ellas <strong>búsqueda</strong>s explícitas en la práctica. Así, <strong>por</strong> ejemplo, una <strong>vecindad</strong> con m 3 elementos<br />

resultará <strong>de</strong>masiado amplia para una <strong>búsqueda</strong> en la práctica si m tiene un valor alto (<strong>por</strong> ejemplo,<br />

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

vecinda<strong>de</strong>s como algoritmos <strong>de</strong> <strong>búsqueda</strong> <strong>por</strong> <strong>vecindad</strong> a <strong>muy</strong> <strong>gran</strong> <strong>escala</strong> o algoritmos <strong>de</strong> <strong>búsqueda</strong><br />

VLSN.<br />

Para dos soluciones S y T, llamaremos S – T al conjunto <strong>de</strong> elementos que se encuentran en S pero<br />

no en T. La distancia d(S, T) la <strong>de</strong>finiremos como |S - T| + |T - S|, que es el número <strong>de</strong> elementos <strong>de</strong> E<br />

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

vecinda<strong>de</strong>s incluyan también soluciones no factibles. Por ejemplo, en el caso anterior po<strong>de</strong>mos hacer<br />

que la <strong>vecindad</strong> <strong>de</strong> un recorrido incluya cada uno <strong>de</strong> los itinerarios obtenidos mediante la supresión <strong>de</strong><br />

uno <strong>de</strong> los vértices <strong>de</strong>l mismo. Para resaltar el hecho <strong>de</strong> que una <strong>vecindad</strong> contenga otros elementos<br />

a<strong>de</strong>más <strong>de</strong>l itinerario, daremos, como norma general, una <strong>de</strong>scripción combinatoria <strong>de</strong> las soluciones no<br />

factibles permitidas en la <strong>búsqueda</strong>. Nos referiremos a estas estructuras combinatorias no factibles como<br />

estructuras <strong>de</strong> referencia. Un camino <strong>de</strong> Hamilton sería un ejemplo <strong>de</strong> este tipo <strong>de</strong> estructuras.<br />

Po<strong>de</strong>mos imaginar un algoritmo <strong>de</strong> <strong>búsqueda</strong> <strong>por</strong> <strong>vecindad</strong> (para un problema <strong>de</strong> minimización <strong>de</strong><br />

costes)como compuesto <strong>de</strong> tres partes:<br />

(i) Un grafo <strong>de</strong> <strong>vecindad</strong> (NG) <strong>de</strong>finido con respecto a una instancia <strong>de</strong> problema específica,<br />

don<strong>de</strong> NG es un grafo dirigido con un nodo para cada solución factible que se cree (o una<br />

instancia <strong>de</strong> una estructura <strong>de</strong> referencia no factible), y que consta <strong>de</strong> un arco (S, T) siempre<br />

que T ∈ N(S).<br />

(ii) Un método <strong>de</strong> <strong>búsqueda</strong> <strong>de</strong>l grafo <strong>de</strong> <strong>vecindad</strong> en cada iteración.<br />

(iii) Un método que permita <strong>de</strong>terminar cuál es el siguiente nodo <strong>de</strong>l grafo <strong>de</strong> <strong>vecindad</strong> que se<br />

elegirá en la <strong>búsqueda</strong> <strong>de</strong>l paso anterior. Nos referiremos a este nodo como solución básica.<br />

El algoritmo termina cuando S es una solución localmente óptima con respecto a la <strong>vecindad</strong> dada.<br />

(Véase [1] para un estudio extensivo).<br />

A continuación <strong>de</strong>finiremos dos vecinda<strong>de</strong>s basadas en la distancia. La primera es Nk(S) = {T ∈ F :<br />

d(S, T) ≤ k}. Nos referiremos a estas vecinda<strong>de</strong>s como vecinda<strong>de</strong>s <strong>de</strong> distancia-k.<br />

5


En <strong>de</strong>terminadas instancias <strong>de</strong> problemas, dos soluciones factibles cualesquiera tienen la misma<br />

cardinalidad, como ocurre en el problema <strong>de</strong>l viajante <strong>de</strong> comercio (TSP: Travelling Salesman Problem),<br />

don<strong>de</strong> cada solución factible S representa un recorrido en un grafo completo <strong>por</strong> un número n <strong>de</strong><br />

ciuda<strong>de</strong>s, <strong>por</strong> lo que tiene un número n <strong>de</strong> arcos (véase [48] para más <strong>de</strong>talles sobre el TSP). Como regla<br />

general, afirmamos que se pue<strong>de</strong> obtener T mediante un intercambio simple <strong>de</strong> S cuando |S - T| = |T - S|<br />

= 1; y que se pue<strong>de</strong> obtener mediante un k-intercambio cuando |T - S| = |S - T| = k. Definimos la<br />

<strong>vecindad</strong> <strong>de</strong> k- intercambios <strong>de</strong> S como {T : |S - T| = |T - S| ≤ k}. Si dos soluciones factibles<br />

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

ejemplo típico <strong>de</strong> <strong>vecindad</strong> <strong>de</strong> k-intercambios aplicada al problema <strong>de</strong>l viajante <strong>de</strong> comercio es la<br />

<strong>vecindad</strong> <strong>de</strong> doble intercambio, también conocida como <strong>vecindad</strong> 2-opt. En el grafo correspondiente a<br />

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

obtener uno a partir <strong>de</strong>l otro mediante un intercambio doble. Aplicando un método <strong>de</strong> <strong>búsqueda</strong><br />

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

De Nm(S) = F, se <strong>de</strong>spren<strong>de</strong> que realizar <strong>búsqueda</strong>s en la <strong>vecindad</strong> <strong>de</strong> distancia k pue<strong>de</strong> resultar más<br />

complicada a medida que el valor <strong>de</strong> k aumente. Por lo general, ocurre que esta <strong>vecindad</strong> crece<br />

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

solución mejorada) es NP-difícil cuando el problema original es también NP-difícil.<br />

3. Métodos <strong>de</strong> profundidad variable<br />

Para k = 1 ó 2, se pue<strong>de</strong>n realizar <strong>búsqueda</strong>s eficaces en las vecinda<strong>de</strong>s <strong>de</strong> k-intercambios (o, <strong>de</strong><br />

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

insuficiente. En cambio, para valores más altos <strong>de</strong> k, las vecinda<strong>de</strong>s <strong>de</strong> k-intercambios producen mejores<br />

óptimos locales, pero el esfuerzo necesario para realizar la <strong>búsqueda</strong> pue<strong>de</strong> ser excesivo. Los métodos <strong>de</strong><br />

profundidad variable son <strong>técnicas</strong> que permiten realizar <strong>búsqueda</strong>s parciales en las vecinda<strong>de</strong>s <strong>de</strong> k-<br />

intercambios. El objetivo <strong>de</strong> esta <strong>búsqueda</strong> parcial consiste en hallar soluciones que sean vecinas en el<br />

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

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

<strong>búsqueda</strong> <strong>por</strong> <strong>vecindad</strong> a <strong>muy</strong> <strong>gran</strong> <strong>escala</strong>, entran en juego varios tipos <strong>de</strong> algoritmos para realizar<br />

<strong>búsqueda</strong>s parciales en la <strong>vecindad</strong> <strong>de</strong> k-intercambios. En este apartado analizaremos el algoritmo <strong>de</strong> Lin<br />

y Kernighan [50] para el TSP, así como otras heurísticas <strong>de</strong> profundidad variable aplicadas a <strong>búsqueda</strong>s<br />

en vecinda<strong>de</strong>s <strong>de</strong> k-intercambio en distintos problemas <strong>de</strong> optimización combinatoria. El apartado<br />

siguiente está <strong>de</strong>dicado a la <strong>de</strong>scripción <strong>de</strong> otros enfoques que, en tiempo polinómico, permiten realizar<br />

<strong>búsqueda</strong>s <strong>de</strong> modo implícito en un subconjunto <strong>de</strong> tamaño exponencial <strong>de</strong> la <strong>vecindad</strong> <strong>de</strong> k-intercambio<br />

cuando k no es un valor fijo.<br />

6


Antes <strong>de</strong> pasar a <strong>de</strong>scribir el algoritmo <strong>de</strong> Lin y Kernighan, veremos algunos aspectos relativos a la<br />

notación. Posteriormente, explicaremos el modo <strong>de</strong> generalizar dicho algoritmo a métodos <strong>de</strong><br />

profundidad variable (y a "ejection chains") para resolver heurísticamente problemas <strong>de</strong> optimización<br />

combinatoria. Supongamos que T y T’ son subconjuntos <strong>de</strong> E, aunque no necesariamente factibles. Una<br />

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

Los métodos <strong>de</strong> profundidad variable se basan en una subrutina Move que tiene las siguientes<br />

características:<br />

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

factible Sj a partir <strong>de</strong>l par <strong>de</strong> entrada (Sj-1,Tj-1) conforme a <strong>de</strong>terminados criterios <strong>de</strong> <strong>búsqueda</strong>. El<br />

subconjunto Tj pue<strong>de</strong> ser factible o no serlo. Representaremos esta operación como Move (Sj-1,Tj-1) =<br />

(Sj, Tj)<br />

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

3. Tj cumple las propieda<strong>de</strong>s adicionales, <strong>de</strong>pendiendo <strong>de</strong>l enfoque <strong>de</strong> profundidad variable.<br />

Llamemos T al recorrido actual <strong>de</strong>l problema <strong>de</strong>l viajante <strong>de</strong> comercio, suponiendo, sin pérdida <strong>de</strong><br />

generalidad, que T visita las ciuda<strong>de</strong>s siguiendo el or<strong>de</strong>n 1, 2, 3,…, n, 1. Po<strong>de</strong>mos <strong>de</strong>finir la <strong>vecindad</strong> <strong>de</strong><br />

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

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

pue<strong>de</strong> <strong>de</strong>scribir <strong>de</strong> un modo más formal aplicando 4 operaciones <strong>de</strong> la subrutina Move, en las que la<br />

primera <strong>de</strong> ellas suprime <strong>de</strong>l recorrido el vértice (i, j), la segunda inserta el vértice (i, k), la tercera<br />

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

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

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

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

que i es un nodo extremo <strong>de</strong>l camino. Obsérvese que, al ser i y j los nodos extremos <strong>de</strong>l camino, la<br />

estructura stem and cycle es un ciclo <strong>de</strong> Hamilton, o, <strong>de</strong> modo equivalente, un recorrido. Si T es un<br />

camino o una estructura <strong>de</strong>l tipo mencionado, indicaremos su longitud total <strong>por</strong> medio <strong>de</strong> f(T).<br />

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

recorrido S a un recorrido T; es <strong>de</strong>cir, d(S, T) equivale a un valor arbitrario k = 2n. El algoritmo<br />

comienza <strong>por</strong> suprimir un vértice <strong>de</strong>l recorrido original T1 construyendo un camino <strong>de</strong> Hamilton T2. En<br />

lo sucesivo, uno <strong>de</strong> los puntos extremos <strong>de</strong> T2 será constante y permanecerá constante hasta el fin <strong>de</strong> la<br />

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

extremo en el camino <strong>de</strong> Hamilton T2j que inci<strong>de</strong> en el punto extremo no constante para obtener una<br />

7


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

extremo <strong>de</strong> la estructura stem and cycle existente T2j-1 para obtener un camino <strong>de</strong> Hamilton T2j. De cada<br />

camino <strong>de</strong> Hamilton T2j se construye implícitamente un recorrido factible S2j uniendo los dos nodos<br />

extremos. Al final <strong>de</strong> la iteración <strong>de</strong> Lin y Kernighan obtenemos el nuevo recorrido <strong>de</strong> la solución base<br />

Si, <strong>de</strong> modo que f(Si) =f(S2j) para todo j.<br />

A continuación <strong>de</strong>scribiremos con mayor <strong>de</strong>talle los pasos <strong>de</strong>l algoritmo <strong>de</strong> Lin y Kernighan. Cuando<br />

se produce un movimiento par, el vértice que se va a añadir es el <strong>de</strong> longitud mínima, que inci<strong>de</strong> sobre el<br />

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

El algoritmo <strong>de</strong> Lin y Kernighan [50] <strong>de</strong>scribe también un medio <strong>de</strong> mejorar la forma <strong>de</strong> elegir este<br />

vértice. La elección <strong>de</strong>l vértice que se va a añadir al camino <strong>de</strong> Hamilton T2j se realiza maximizando<br />

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

<strong>de</strong>terminados exclusivamente <strong>por</strong> la estructura stem and cycle T2j-1 creada en el movimiento anterior, <strong>de</strong><br />

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

pue<strong>de</strong>n tener en cuenta otras restricciones. Varios estudios han consi<strong>de</strong>rado distintas combinaciones <strong>de</strong><br />

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

previamente no pueda suprimirse en un movimiento posterior. Por último, el algoritmo <strong>de</strong> Lin y<br />

Kernighan termina con un óptimo local cuando no hay posibilidad <strong>de</strong> construir un recorrido que lo<br />

mejore tras consi<strong>de</strong>rar todos los nodos como el nodo fijo original.<br />

Veamos una ilustración <strong>de</strong>l algoritmo <strong>de</strong> Lin y Kernighan con un ejemplo numérico, partiendo<br />

<strong>de</strong>l recorrido <strong>de</strong> 10 nodos que muestra la figura 1(a). El algoritmo suprime primero el arco (1, 2)<br />

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

resultado la estructura stem and cycle <strong>de</strong> la figura 1(c).<br />

8


Figura 1. Ilustración <strong>de</strong>l algoritmo <strong>de</strong> Lin y Kernighan<br />

(a) Recorrido con 10 nodos. (b) Camino <strong>de</strong> Hamilton. (c) Estructura stem and cycle.<br />

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

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

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

"beneficio acumulativo", <strong>de</strong>finiéndose los movimientos <strong>de</strong> supresión <strong>de</strong> vértices únicamente con<br />

intención <strong>de</strong> generar la estructura <strong>de</strong>l camino. El algoritmo <strong>de</strong> Lin y Kernighan alcanza un óptimo local<br />

cuando, <strong>de</strong>spués <strong>de</strong> haber consi<strong>de</strong>rado todos los nodos como el nodo <strong>de</strong> inicio, no se obtienen<br />

soluciones <strong>de</strong> mejora.<br />

Diversas variantes <strong>de</strong> este algoritmo han dado lugar a soluciones heurísticas <strong>de</strong> <strong>gran</strong> calidad. Se<br />

9


trata <strong>de</strong> algoritmos que recurren a distintas mejoras, como los movimientos 2-opt, 3-opt y 4-opt<br />

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

mediante los movimientos básicos <strong>de</strong> la heurística <strong>de</strong> Lin y Kernighan. Asimismo, se emplean<br />

estructuras <strong>de</strong> datos capaces <strong>de</strong> actualizar <strong>de</strong> modo eficiente los itinerarios, y así po<strong>de</strong>r lograr tanto la<br />

eficiencia computacional como la calidad <strong>de</strong> la solución ([24], [42]). Papadimitriou [54] ha <strong>de</strong>mostrado<br />

que el problema <strong>de</strong> <strong>de</strong>terminar un óptimo local con respecto a una versión <strong>de</strong>l algoritmo <strong>de</strong> Lin y<br />

Kernighan es un problema PLS-completo.<br />

Po<strong>de</strong>mos <strong>de</strong>finir los métodos <strong>de</strong> profundidad variable para el TSP mediante un procedimiento <strong>de</strong><br />

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

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

iteración, esta función crea el par (Tj, Sj), en el que el subconjunto Tj pue<strong>de</strong> ser una solución factible, o<br />

bien ser una instancia no factible <strong>de</strong> una estructura <strong>de</strong> referencia; y el subconjunto Sj es factible. A<br />

continuación, se invoca la función Move para r iteraciones, <strong>de</strong>pendiendo el valor <strong>de</strong> r <strong>de</strong> la regla<br />

directriz a<strong>de</strong>cuada. Por último, el procedimiento <strong>de</strong> <strong>búsqueda</strong> <strong>de</strong> profundidad variable da como<br />

resultado el subconjunto factible Sk que tenga el mejor valor <strong>de</strong> función objetivo hallado en la<br />

<strong>búsqueda</strong>.<br />

Procedimiento: <strong>búsqueda</strong> <strong>de</strong> profundidad variable (S);<br />

Inicio:<br />

Final<br />

S1 := T1 := S;<br />

para j := 2 a r (Tj, Sj) = Move(S j-1, Tj-1);<br />

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

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

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

<strong>de</strong> un marco bastante flexible, existen varias formas <strong>de</strong> diseñar este procedimiento. Las características<br />

<strong>de</strong>l diseño <strong>de</strong> Move pue<strong>de</strong>n suponer la diferencia entre una heurística capaz <strong>de</strong> pro<strong>por</strong>cionar resultados<br />

y otra que no lo sea tanto.<br />

En el procedimiento arriba <strong>de</strong>scrito, hemos supuesto que Move crea en cada fase una solución<br />

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

fase ([30], [61]) o ninguna solución factible en una fase <strong>de</strong>terminada ([30], [58]).<br />

Muchos métodos <strong>de</strong> profundidad variable requieren las soluciones intermedias Tj para po<strong>de</strong>r<br />

cumplir ciertas propieda<strong>de</strong>s topológicas (o estructurales). En el algoritmo <strong>de</strong> Lin y Kernighan, <strong>por</strong><br />

10


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

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

ejemplos en los que Tj cumple otras propieda<strong>de</strong>s que no son estructurales; como, <strong>por</strong> ejemplo, las que<br />

<strong>de</strong>pen<strong>de</strong>n <strong>de</strong>l or<strong>de</strong>n <strong>de</strong> los índices.<br />

Glover [30] consi<strong>de</strong>ró una clase estructurada <strong>de</strong> métodos <strong>de</strong> profundidad variable llamados<br />

ejection chains y basados en métodos <strong>de</strong> itinerarios alternativos clásicos, ampliando y generalizando las<br />

i<strong>de</strong>as <strong>de</strong> Lin y Kernighan. En palabras <strong>de</strong> Glover: “De modo <strong>muy</strong> esquemático, una ejection chain se<br />

inicia seleccionando un conjunto <strong>de</strong> elementos que van a experimentar un cambio <strong>de</strong> estado (e.g, ocupar<br />

nuevas posiciones, recibir nuevos valores o ambas cosas). Este cambio tendrá <strong>por</strong> efecto i<strong>de</strong>ntificar una<br />

serie <strong>de</strong> conjuntos distintos, que tengan la propiedad <strong>de</strong> que los elementos <strong>de</strong> al menos uno <strong>de</strong> ellos<br />

<strong>de</strong>ben ser “eyectados” <strong>de</strong> su estado actual. Por lo general, los pasos <strong>de</strong> cambio <strong>de</strong> estado y <strong>de</strong> eyección<br />

se alternan, y las opciones existentes para cada uno <strong>de</strong> ellos <strong>de</strong>pen<strong>de</strong>rán <strong>de</strong>l efecto cumulativo <strong>de</strong> los<br />

pasos previos (estando influido generalmente, aunque no siempre, <strong>por</strong> el paso inmediatamente anterior).<br />

En algunos casos, una secuencia en cascada <strong>de</strong> operaciones indica que se ha producido un efecto<br />

dominó. La terminología <strong>de</strong> la "ejection chain" preten<strong>de</strong> sugerir, no limitar; pro<strong>por</strong>cionando un hilo<br />

conductor que sirva para vincular una serie <strong>de</strong> procedimientos útiles para sacar el máximo partido <strong>de</strong><br />

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

añadido).<br />

En el presente estudio, emplearemos una <strong>de</strong>finición más restrictiva <strong>de</strong> las ejection chains. Así,<br />

nos referiremos al método <strong>de</strong> profundidad variable como una ejection chain si:<br />

(i) |T1| = |T3| = |T5| =…= n, y:<br />

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

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

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

profundidad variable publicados en estudios pue<strong>de</strong>n contemplarse como ejection chains. Estos métodos<br />

suelen suponer la construcción <strong>de</strong> diferentes estructuras <strong>de</strong> referencia, junto con una serie <strong>de</strong> reglas que<br />

permitan obtener distintas soluciones factibles. Por lo que sabemos, todos los métodos <strong>de</strong> profundidad<br />

variable aplicados al problema <strong>de</strong>l viajante <strong>de</strong> comercio <strong>de</strong> los que tenemos noticia pue<strong>de</strong>n<br />

contemplarse como ejection chains.<br />

Po<strong>de</strong>mos suponer que los nodos <strong>de</strong>l grafo <strong>de</strong> <strong>vecindad</strong> referido a la <strong>vecindad</strong> <strong>de</strong> Lin y<br />

Kernighan se hallan compuestos <strong>por</strong> caminos y estructuras <strong>de</strong> stem-and-cycle. (Recuér<strong>de</strong>se que los<br />

itinerarios son también instancias <strong>de</strong> stem-and cycle. Los puntos finales <strong>de</strong> cada vértice <strong>de</strong>l grafo <strong>de</strong><br />

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

11


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

itinerarios hallados al realizar la <strong>búsqueda</strong>. Por consiguiente, las estructuras <strong>de</strong> referencia <strong>de</strong>scritas para<br />

las ejection chains serían los nodos <strong>de</strong>l grafo <strong>de</strong> <strong>vecindad</strong> <strong>de</strong> las <strong>técnicas</strong> <strong>de</strong> ejection chain. Toda técnica<br />

en la que la siguiente solución básica sea mucho mayor que la distancia unitaria <strong>de</strong>s<strong>de</strong> la solución<br />

básica existente es un "método <strong>de</strong> profundidad variable". Una ejection chain es un método <strong>de</strong><br />

profundidad variable en el que los vecinos se caracterizan <strong>por</strong> ser subconjuntos los unos <strong>de</strong> los otros (y<br />

en los que, <strong>por</strong> tanto, un elemento se eyecta al trasladarse <strong>de</strong>l más <strong>gran</strong><strong>de</strong> al más pequeño).<br />

En el método <strong>de</strong>scrito anteriormente, las <strong>técnicas</strong> <strong>de</strong> profundidad variable se basan en la función<br />

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

<strong>búsqueda</strong>s mediante flujos <strong>de</strong> re<strong>de</strong>s. En estas vecinda<strong>de</strong>s, se pue<strong>de</strong> también llegar a cualquier vecino<br />

mediante una secuencia <strong>de</strong> funciones Move en un grafo <strong>de</strong> <strong>vecindad</strong> a<strong>de</strong>cuadamente <strong>de</strong>finido. Conviene<br />

tener presente que, en el caso <strong>de</strong>l algoritmo <strong>de</strong> Lin y Kernighan, la <strong>vecindad</strong> es <strong>de</strong> tamaño polinómico, y<br />

que es la propia <strong>búsqueda</strong> la que lleva a obtener soluciones sustancialmente diferentes <strong>de</strong> la solución<br />

básica. En el siguiente apartado analizaremos estas <strong>técnicas</strong> basadas en flujos <strong>de</strong> re<strong>de</strong>s, algunas <strong>de</strong> las<br />

cuales pue<strong>de</strong>n también contemplarse como <strong>técnicas</strong> <strong>de</strong> ejection chain cuando existe un medio natural <strong>de</strong><br />

asociar una ejection chain (una secuencia alternativa <strong>de</strong> adiciones y supresiones) a elementos <strong>de</strong> la<br />

<strong>vecindad</strong> ([30], [31], [58], [21]).<br />

Los algoritmos basados en la profundidad variable y en la ejection chain se han aplicado con<br />

éxito a la obtención <strong>de</strong> soluciones válidas para diversos problemas <strong>de</strong> optimización combinatoria.<br />

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

Morton [51], y Pesch y Glover [55] han utilizado estos algoritmos para la resolución <strong>de</strong>l problema <strong>de</strong>l<br />

viajante <strong>de</strong> comercio. El problema <strong>de</strong>l enrutamiento <strong>de</strong> vehículos ha sido tratado <strong>por</strong> Rego y Roucairol<br />

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

clustering mediante ejection chains. Por su parte, Yagiura et al. ([80]) han consi<strong>de</strong>rado la aplicación <strong>de</strong><br />

métodos <strong>de</strong> profundidad variable al problema <strong>de</strong> las asignaciones en general, al igual que distintas<br />

variantes <strong>de</strong> la ejection chain [79]. Asimismo, Laguna et al. [47] aplican algoritmos cortos <strong>de</strong> estructura<br />

ejection chain al problema <strong>de</strong> las asignaciones multinivel en general. Estas <strong>técnicas</strong> se aplican también al<br />

problema <strong>de</strong> la partición <strong>de</strong>l grafo uniforme ([16], [20], [44], [53]), al problema <strong>de</strong> las asignaciones <strong>por</strong><br />

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

([14]). Por último, Sourd [70] aplica una clase <strong>muy</strong> general <strong>de</strong> procedimientos <strong>de</strong> mejora <strong>de</strong> vecinda<strong>de</strong>s<br />

a <strong>muy</strong> <strong>gran</strong> <strong>escala</strong> en los que la distancia entre dos vecinos <strong>de</strong>pen<strong>de</strong> <strong>de</strong> las tareas programadas en<br />

máquinas no relacionadas. El <strong>de</strong>sarrollo <strong>de</strong> estas vecinda<strong>de</strong>s se lleva a cabo mediante la generación <strong>de</strong><br />

árboles <strong>de</strong> enumeración parciales, aunque <strong>de</strong> tamaño <strong>gran</strong><strong>de</strong>, basados en las soluciones existentes y<br />

12


uscados <strong>por</strong> heurística.<br />

4. Algoritmos <strong>de</strong> mejora basados en flujos <strong>de</strong> re<strong>de</strong>s<br />

En este apartado estudiaremos algoritmos locales <strong>de</strong> mejora en los que la <strong>búsqueda</strong> <strong>por</strong><br />

vecinda<strong>de</strong>s se lleva a cabo mediante algoritmos basados en flujos <strong>de</strong> re<strong>de</strong>s. Las <strong>técnicas</strong> <strong>de</strong> flujos <strong>de</strong><br />

re<strong>de</strong>s empleadas para i<strong>de</strong>ntificar vecinda<strong>de</strong>s <strong>de</strong> mejora pue<strong>de</strong>n agruparse en tres categorías: (i) métodos<br />

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

<strong>de</strong>l camino más corto; y (iii) métodos basados en la <strong>búsqueda</strong> <strong>de</strong> asignaciones y ajustes <strong>de</strong> coste mínimo.<br />

Las vecinda<strong>de</strong>s <strong>de</strong>finidas <strong>por</strong> ciclos pue<strong>de</strong>n contemplarse como generalizaciones <strong>de</strong> vecinda<strong>de</strong>s <strong>de</strong> dos<br />

intercambios, mientras que las basadas en asignaciones se pue<strong>de</strong>n enten<strong>de</strong>r como generalizaciones <strong>de</strong><br />

vecinda<strong>de</strong>s a partir <strong>de</strong> inserciones. En los tres subapartados que siguen, se ofrecen <strong>de</strong>finiciones generales<br />

<strong>de</strong> estas vecinda<strong>de</strong>s exponenciales, <strong>de</strong>scribiéndose a<strong>de</strong>más los algoritmos <strong>de</strong> flujos <strong>de</strong> re<strong>de</strong>s empleados<br />

en la <strong>búsqueda</strong> <strong>de</strong> vecinda<strong>de</strong>s mejoradas. En muchos <strong>de</strong> los problemas, la <strong>vecindad</strong> <strong>de</strong> mejora se<br />

<strong>de</strong>termina aplicando un algoritmo <strong>de</strong> flujos <strong>de</strong> re<strong>de</strong>s a un grafo relacionado, lo que se conoce como grafo<br />

<strong>de</strong> mejora.<br />

4.1 Vecinda<strong>de</strong>s <strong>de</strong>finidas <strong>por</strong> ciclos<br />

En este subapartado, comenzaremos <strong>por</strong> <strong>de</strong>finir un problema <strong>de</strong> partición genérica, para a<br />

continuación pasar a <strong>de</strong>finir la <strong>vecindad</strong> <strong>de</strong> dos intercambios y la <strong>vecindad</strong> <strong>de</strong> intercambio cíclico.<br />

Sea A = {a1, a2, a3, …, an} un conjunto formado <strong>por</strong> n elementos. El conjunto {S1, S2, S3, …, SK}<br />

<strong>de</strong>fine una Kpartición <strong>de</strong> A f A cuando cada conjunto Sj es no vacío, los conjuntos no se hallan<br />

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

coste <strong>de</strong> S. Por tanto, el problema <strong>de</strong> partición consiste en hallar una partición <strong>de</strong> A en tantos<br />

subconjuntos <strong>de</strong> K como sean necesarios para minimizar Σk d[Sk].<br />

Sea {S1, S2, S3, …, SK} cualquier partición factible. Diremos entonces que {T1, T2, T3, …, TK}<br />

será un 2-vecino <strong>de</strong> {S1, S2, S3, …, SK} cuando pueda obtenerse intercambiando dos elementos que se<br />

encuentren en subconjuntos diferentes. La <strong>vecindad</strong> <strong>de</strong> dos intercambios <strong>de</strong> {S1, S2, S3, …, SK} se halla<br />

formada <strong>por</strong> todas las vecinda<strong>de</strong>s-2 <strong>de</strong> {S1, S2, S3, …, SK}. De don<strong>de</strong> <strong>de</strong>ducimos que {T1, T2, T3, …, TK}<br />

es una <strong>vecindad</strong> cíclica <strong>de</strong> {S1, S2, S3, …, SK} cuando se pueda obtener transfiriendo elementos simples a<br />

lo largo <strong>de</strong> una secuencia <strong>de</strong> subconjuntos <strong>de</strong> k ≤ K en S. Sea también (Sh 1 , Sm 2 , Sn 3 , …, Sp k ) una<br />

secuencia <strong>de</strong> k subconjuntos tal que hace necesario que h = p, que es el último subconjunto <strong>de</strong> la<br />

secuencia idéntico a Sh 1 . A esta transferencia <strong>de</strong> elementos la llamaremos intercambio cíclico, quedando<br />

13


ilustrada en la figura 2. En el presente ejemplo, el nodo 9 pasa <strong>de</strong>l subconjunto S1 al subconjunto S4; el<br />

nodo 2 se transfiere <strong>de</strong>l subconjunto S4 al subconjunto S5, el nodo 3 pasa <strong>de</strong>l subconjunto S5 al S3 y,<br />

finalmente, el intercambio se completa transfiriendo el nodo 14 <strong>de</strong>l subconjunto S3 al S1. De un modo<br />

análogo pue<strong>de</strong> <strong>de</strong>finirse un vecino <strong>de</strong> camino. Des<strong>de</strong> un punto <strong>de</strong> vista matemático, no resulta difícil<br />

convertir un intercambio <strong>de</strong> camino en un intercambio cíclico añadiendo los nodos <strong>de</strong> prueba a<strong>de</strong>cuados.<br />

Por lo general, el número <strong>de</strong> vecinda<strong>de</strong>s cíclicas es sustancialmente mayor que el <strong>de</strong> vecinda<strong>de</strong>s <strong>de</strong> dos<br />

intercambios (2-vecinda<strong>de</strong>s). Mientras que hay O(n 2 ) 2-vecinda<strong>de</strong>s para un valor fijo <strong>de</strong> k, existen O(n K )<br />

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

exponencial <strong>de</strong> vecinos cíclicos.<br />

Thompson [75], Thompson y Orlin [76], y Thompson y Psaraftis [77] han mostrado la forma <strong>de</strong><br />

obtener una <strong>vecindad</strong> mejorada en la <strong>vecindad</strong> <strong>de</strong> intercambio cíclico hallando un ciclo <strong>de</strong> "subconjunto<br />

no agrupado" <strong>de</strong> coste negativo en un grafo <strong>de</strong> mejora. Expondremos a continuación cómo construir<br />

dicho grafo. Sea A = {a1, a2,…, an} que es el conjunto <strong>de</strong> elementos que componen el problema <strong>de</strong><br />

partición <strong>de</strong>l conjunto original, y llamemos S[i] al subconjunto en el que se encuentra el elemento ai. El<br />

grafo <strong>de</strong> mejora es un grafo G = (V, E) en el que V = {1, 2,…, n} es un conjunto <strong>de</strong> nodos que se<br />

correspon<strong>de</strong> con los índices <strong>de</strong> los elementos <strong>de</strong> A <strong>de</strong>l problema original. Sea asimismo E = {(i, j): S[i]<br />

≠ S[j]}, don<strong>de</strong> un arco (i, j) correspon<strong>de</strong> a la transferencia <strong>de</strong>l nodo i <strong>de</strong>s<strong>de</strong> S[i] a S[j] y a la supresión <strong>de</strong><br />

j <strong>de</strong>s<strong>de</strong> S[j]. Para cada arco (i, j) ∈ E, haremos que c[i, j] = d[{i} ∪ S[j]\{j}] – d[S[j]], es <strong>de</strong>cir, el<br />

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

14


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

<strong>de</strong>cir, los elementos <strong>de</strong> A correspondientes a los elementos <strong>de</strong> W se encuentran todos en subconjuntos<br />

diferentes. Existe una correspon<strong>de</strong>ncia entre el mantenimiento <strong>de</strong> costes uno a uno en los intercambios<br />

cíclicos <strong>de</strong>l problema <strong>de</strong> la partición y el mantenimiento en los ciclos no asignados en el subconjunto <strong>de</strong>l<br />

grafo <strong>de</strong> mejora. Concretamente existe, para cada intercambio cíclico <strong>de</strong> coste negativo, un ciclo no<br />

asignado en el subconjunto <strong>de</strong>l grafo <strong>de</strong> mejora. Desgraciadamente, el problema consistente en<br />

<strong>de</strong>terminar si hay un ciclo no asignado en el subconjunto <strong>de</strong>l grafo <strong>de</strong> mejora es un problema NP-<br />

completo, y el consistente en hallar un ciclo no asignado en el subconjunto <strong>de</strong> coste negativo es NP-<br />

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

Aun cuando este último problema sea NP-difícil, existen heurísticas que han <strong>de</strong>mostrado su<br />

eficacia en la <strong>búsqueda</strong> <strong>de</strong>l grafo. (Véase, <strong>por</strong> ejemplo, Thompson y Psaraftis [77] y Ahuja et al. [2].)<br />

La <strong>búsqueda</strong> <strong>por</strong> <strong>vecindad</strong> <strong>de</strong> intercambio cíclico se aplica con éxito a varios problemas <strong>de</strong><br />

optimización combinatoria que pue<strong>de</strong>n caracterizarse como problemas <strong>de</strong> partición específica.<br />

Thompson y Psaraftis [77], Gendreau et al. [25], y Fahrion y Wre<strong>de</strong> [19] resuelven el problema <strong>de</strong>l<br />

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

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

han <strong>de</strong>mostrado también la aplicación <strong>de</strong> este método a problemas <strong>de</strong> programación . Por su parte, Ahuja<br />

et al. [2], empleando intercambios cíclicos, han <strong>de</strong>sarrollado las mejores soluciones existentes para un<br />

conjunto ampliamente usado <strong>de</strong> instancias <strong>de</strong> referencia en problemas <strong>de</strong> árboles <strong>de</strong> expansión mínima<br />

capacitados.<br />

La i<strong>de</strong>a <strong>de</strong> hallar soluciones <strong>de</strong> mejora mediante la <strong>de</strong>terminación <strong>de</strong> ciclos <strong>de</strong> coste negativo en<br />

grafos <strong>de</strong> mejoras se ha aplicado también en otros contextos. Talluri [74] i<strong>de</strong>ntifica intercambios <strong>de</strong><br />

ahorro <strong>de</strong> costes <strong>de</strong> equipo entre turnos <strong>de</strong> vuelos en problemas <strong>de</strong> asignación diaria <strong>de</strong> flota aérea<br />

hallando ciclos <strong>de</strong> coste negativo en una red relacionada. El problema <strong>de</strong> asignación <strong>de</strong> flota pue<strong>de</strong><br />

plantearse como un problema <strong>de</strong> flujo multiservicio entero sujeto a restricciones <strong>de</strong> lado, en el que cada<br />

servicio hace referencia a un tipo <strong>de</strong> flota. Talluri consi<strong>de</strong>ra una solución dada restringida a dos únicos<br />

tipos <strong>de</strong> flota, buscando a partir <strong>de</strong> ella mejoras que puedan obtenerse mediante el intercambio <strong>de</strong> un<br />

número <strong>de</strong> vuelos entre ambos tipos <strong>de</strong> flota. Así, <strong>de</strong>sarrolla un grafo <strong>de</strong> mejora asociado, <strong>de</strong>mostrando<br />

que las vecinda<strong>de</strong>s <strong>de</strong> mejora se correspon<strong>de</strong>n con los ciclos <strong>de</strong> coste negativo <strong>de</strong>l grafo <strong>de</strong> mejora.<br />

Schneur y Orlin [68] y Rockafellar [65] resuelven el problema <strong>de</strong> flujo multiservicio lineal <strong>de</strong>tectando<br />

flujo y enviándolos iterativamente <strong>por</strong> los ciclos <strong>de</strong> coste negativo. Esta técnica se extien<strong>de</strong>, <strong>de</strong> hecho, a<br />

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

ofrece un algoritmo <strong>de</strong> cancelación <strong>de</strong> ciclo para resolver el problema <strong>de</strong>l flujo <strong>de</strong> coste mínimo<br />

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

15


enteros cualesquiera. Los caminos y ciclos <strong>de</strong> esta red correspon<strong>de</strong>n a posibilida<strong>de</strong>s <strong>de</strong> mejora <strong>de</strong><br />

soluciones factibles. A<strong>de</strong>más, esta red da lugar a una <strong>de</strong>finición algorítmica <strong>de</strong>l problema <strong>de</strong>l b-ajuste <strong>de</strong><br />

peso bipartito. Los algoritmos analizados <strong>por</strong> Glover y Punnen [28] y Yeo [78] permiten construir<br />

itinerarios <strong>de</strong>l viajante <strong>de</strong> comercio que resultan mejores que un número exponencial <strong>de</strong> itinerarios.<br />

Estos algoritmos se pue<strong>de</strong>n contemplar, asimismo, como el cálculo <strong>de</strong> un ciclo <strong>de</strong> coste mínimo en una<br />

red consi<strong>de</strong>rada <strong>de</strong> capas especiales implícitamente consi<strong>de</strong>rada. Veremos esta heurística <strong>de</strong> forma más<br />

<strong>de</strong>tallada en el apartado 5.<br />

4.2 Vecinda<strong>de</strong>s <strong>de</strong>finidas <strong>por</strong> caminos (o <strong>por</strong> programación dinámica)<br />

A continuación analizaremos tres tipos distintos <strong>de</strong> algoritmos <strong>de</strong> <strong>búsqueda</strong> <strong>por</strong> <strong>vecindad</strong><br />

basados en caminos más cortos o en programación dinámica, tomando como contexto el problema <strong>de</strong>l<br />

viajante <strong>de</strong> comercio. Aplicados al mismo, po<strong>de</strong>mos contemplar estos enfoques <strong>de</strong> <strong>búsqueda</strong> <strong>por</strong><br />

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

paralelos múltiples, entendiendo <strong>de</strong>finido cada intercambio como la permuta <strong>de</strong>l or<strong>de</strong>n actual <strong>de</strong> dos<br />

ciuda<strong>de</strong>s en un recorrido, y (iii) cambios cíclicos en el itinerario existente. Veamos estas vecinda<strong>de</strong>s con<br />

mayor <strong>de</strong>talle.<br />

4.2.1 Creación <strong>de</strong> un nuevo vecino mediante la adición o supresión <strong>de</strong> arcos secuencialmente<br />

Examinaremos en primer lugar una clase <strong>de</strong> métodos basados en el camino más corto, que<br />

consi<strong>de</strong>ran los vecinos obtenidos añadiendo o suprimiendo vértices alternativamente <strong>de</strong>l itinerario<br />

existente. Se trata <strong>de</strong> métodos que realizan <strong>de</strong> modo exhaustivo <strong>búsqueda</strong>s en la <strong>vecindad</strong> <strong>de</strong> ejection<br />

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

simplificar, damos <strong>por</strong> hecho que el itinerario S pasa <strong>por</strong> las ciuda<strong>de</strong>s siguiendo el or<strong>de</strong>n 1, 2, 3, …, n, 1.<br />

Empleando la terminología <strong>de</strong>l apartado 3, llamaremos itinerario T a un vecino <strong>de</strong> k-intercambios <strong>de</strong> S, y<br />

al camino que va <strong>de</strong>s<strong>de</strong> S a T, la secuencia S = T1, …, TK = T. Estas vecinda<strong>de</strong>s correspon<strong>de</strong>n a<br />

soluciones <strong>por</strong> aproximaciones sucesivas creadas mediante los caminos pares e impares <strong>de</strong>scritos en<br />

Punnen y Glover [58] entre varias otras vecinda<strong>de</strong>s y soluciones <strong>por</strong> aproximaciones sucesivas<br />

construidas a partir <strong>de</strong> diversas clases <strong>de</strong> estructuras <strong>de</strong> camino. La solución <strong>por</strong> aproximaciones<br />

sucesivas generada <strong>por</strong> los caminos impares ya fue <strong>de</strong>sarrollada <strong>de</strong> modo in<strong>de</strong>pendiente <strong>por</strong> Firla et<br />

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

impares, veamos el siguiente algoritmo:<br />

(i) Se elimina el vértice (n, 1) para obtener un camino <strong>de</strong> Hamilton T2 y se aña<strong>de</strong> el vértice<br />

16


(1, i) <strong>de</strong>s<strong>de</strong> el nodo 1 al nodo i (don<strong>de</strong> i > 2) para obtener una estructura stem and cycle<br />

T3.<br />

(ii) El actual nodo terminal <strong>de</strong>l camino es el nodo i. Se elimina el vértice (i, i-1) y se aña<strong>de</strong><br />

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

continuación una estructura stem and cycle.<br />

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

paso (iv). Si no, se <strong>de</strong>fine i = j y se vuelve al paso (ii).<br />

(iii) Se elimina el vértice (j, j-1) y se aña<strong>de</strong> el vértice final (j-1, n) para completar el<br />

recorrido.<br />

Figura 3. Ilustración <strong>de</strong>l intercambio <strong>de</strong> camino alternativo.<br />

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

procedimiento <strong>de</strong> intercambio <strong>de</strong> camino se inicia con la supresión <strong>de</strong>l vértice (n, 1) y la adición <strong>de</strong>l<br />

vértice (1, 4). A continuación se elimina el vértice (3, 4) y se aña<strong>de</strong> el vértice (3, 7). Por último, se<br />

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

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

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

intercambio <strong>de</strong> camino.<br />

Firla et al.[21], Glover [30] y Punnen y Glover [58] han <strong>de</strong>mostrado que se pue<strong>de</strong> obtener una<br />

solución <strong>de</strong> mejora para esta <strong>vecindad</strong> en tiempo O(n 2 ), hallando en un grafo <strong>de</strong> mejora un camino<br />

<strong>de</strong> longitud mínima par o impar. Describimos aquí un grafo <strong>de</strong> mejora que permite i<strong>de</strong>ntificar la<br />

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

Recor<strong>de</strong>mos que S = (1, 2, 3,…, n, 1) es el itinerario existente <strong>de</strong>l problema <strong>de</strong>l viajante <strong>de</strong><br />

17


comercio con n nodos. El grafo <strong>de</strong> mejora es un grafo G = (V, E) en el que V = {1, 2,…, n}, lo que<br />

correspon<strong>de</strong> a los nodos <strong>de</strong>l problema original, y don<strong>de</strong> E = {(i, j) : 1 = i < j-1 < n} es un conjunto<br />

<strong>de</strong> arcos dirigidos. Los arcos (1, j) ∈ E (<strong>de</strong> modo que 2 < j = n) correspon<strong>de</strong>n a la supresión <strong>de</strong>l<br />

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

correspon<strong>de</strong>n a la supresión <strong>de</strong>l vértice (i-1, i) y la adición <strong>de</strong>l vértice (i-1, j) en el recorrido original<br />

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

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

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

nodo 1 a n permite i<strong>de</strong>ntificar un intercambio k provechoso.<br />

Por otra parte, en [58] se examinan soluciones <strong>por</strong> aproximaciones sucesivas creadas a<br />

partir <strong>de</strong> caminos pares e impares, nuevas estructuras <strong>de</strong> caminos, como caminos cortados y<br />

caminos inversos, que llevan a distintas soluciones <strong>por</strong> aproximaciones sucesivas, y estructuras <strong>de</strong><br />

referencia. El tamaño <strong>de</strong> la <strong>vecindad</strong> generada únicamente <strong>por</strong> caminos pares e impares es Ω (n2 n ).<br />

Las <strong>técnicas</strong> que aceleran la <strong>búsqueda</strong> en vecinda<strong>de</strong>s son im<strong>por</strong>tantes incluso en vecinda<strong>de</strong>s cuyo<br />

tamaño no sea exponencial. Así, <strong>por</strong> ejemplo, gracias al empleo <strong>de</strong> un algoritmo <strong>de</strong>l camino más<br />

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

movimientos 4-opt en tiempo O(n 2 ).<br />

4.2.2 Creación <strong>de</strong> un nuevo vecino mediante intercambios compuestos<br />

La segunda clase <strong>de</strong> algoritmos <strong>de</strong> <strong>búsqueda</strong> local <strong>de</strong>finidos mediante intercambios <strong>de</strong><br />

caminos consiste en una generalización <strong>de</strong> la <strong>vecindad</strong> <strong>de</strong> intercambio. Dado un itinerario <strong>de</strong>l<br />

problema <strong>de</strong>l viajante <strong>de</strong> comercio T = (1, 2, 3,…, n, 1) con un número n <strong>de</strong> nodos, la <strong>vecindad</strong> <strong>de</strong><br />

intercambio generará soluciones intercambiando las posiciones <strong>de</strong> los nodos i y j <strong>por</strong> 1 ≤ i ≤ j ≤ n.<br />

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

bajo la operación <strong>de</strong> intercambio. Se dice que dos operaciones <strong>de</strong> intercambio que conecten el nodo<br />

i con j, y el nodo k con l son in<strong>de</strong>pendientes cuando max{i, j} < min{k, l}, ó cuando min{i, j} ><br />

max{k, l}. Entonces, una <strong>vecindad</strong> a <strong>gran</strong> <strong>escala</strong> en el itinerario T se pue<strong>de</strong> <strong>de</strong>finir componiendo (es<br />

<strong>de</strong>cir, tomando en su totalidad) un número arbitrario <strong>de</strong> operaciones <strong>de</strong> intercambio individuales.<br />

Congram et al. [9] y Potts y van <strong>de</strong> Vel<strong>de</strong> [57] aplicaron esta <strong>vecindad</strong> <strong>de</strong> intercambios<br />

compuestos al problema <strong>de</strong> la programación <strong>de</strong> la lentitud pon<strong>de</strong>rada total <strong>de</strong> una máquina y al <strong>de</strong>l<br />

viajante <strong>de</strong> comercio (TSP), respectivamente, llamando a este enfoque dynasearch. En su estudio,<br />

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

programación dinámica capaz <strong>de</strong> hallar la mejor <strong>vecindad</strong> en tiempo O(n 3 ). Hurink [40] aplica un<br />

18


supuesto especial <strong>de</strong> la <strong>vecindad</strong> <strong>de</strong> intercambio compuesto en la que sólo se permite sustituir pares<br />

adyacentes en el contexto <strong>de</strong> problemas <strong>de</strong> funcionamiento <strong>de</strong> una única máquina, y <strong>de</strong>muestra que<br />

es posible obtener un vecino <strong>de</strong> mejora en tiempo O(n 2 ) hallando el camino más corto en el grafo <strong>de</strong><br />

mejora apropiado.<br />

A continuación <strong>de</strong>scribiremos un grafo <strong>de</strong> mejora que nos sirva <strong>de</strong> ayuda en la <strong>búsqueda</strong> <strong>de</strong> la<br />

<strong>vecindad</strong> <strong>de</strong> intercambio compuesto. Sea T = (1, 2, 3,…, n, 1) un itinerario <strong>de</strong>l viajante <strong>de</strong> comercio<br />

<strong>de</strong> n nodos. El grafo <strong>de</strong> mejora es un grafo G = (V, E), don<strong>de</strong> (i) V = {1, 2,…, n, 1' , 2' ,…, n'} es a<br />

un conjunto <strong>de</strong> nodos correspondiente a los nodos <strong>de</strong>l problema original y una copia <strong>de</strong> éstos, y (ii)<br />

E es un conjunto <strong>de</strong> arcos dirigidos (i, j') ∪ (j', k), en el que un arco (i, j') correspon<strong>de</strong> al<br />

intercambio <strong>de</strong> los nodos i y j, y un arco (j', k) indica que el nodo k es el primer nodo <strong>de</strong>l siguiente<br />

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

operaciones <strong>de</strong> intercambio que cambian el nodo i <strong>por</strong> el j, y el nodo k <strong>por</strong> l. Para construir el<br />

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

j') a E si, y solamente si, j > i.> 1. El arco (j', k) se aña<strong>de</strong> a E si, y solamente si, j = 1 y k > j ó j > 1 y<br />

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

coste óptimo <strong>de</strong>l itinerario <strong>de</strong>l viajante <strong>de</strong> comercio tras suprimir los vértices (i-1, i), (i, i+1), (j–1, j)<br />

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<br />

<strong>de</strong> trasladarse <strong>de</strong>l nodo i al nodo j en el problema original, y d[n, n+1] = d[n, 1], tenemos que:<br />

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] =<br />

(-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' ><br />

i+1.<br />

El coste c[j', k] <strong>de</strong> todos los vértices (j', k) se <strong>de</strong>fine como igual a 0.<br />

Vemos que hallar el mejor vecino <strong>de</strong> un itinerario en el TSP para la <strong>vecindad</strong> <strong>de</strong> intercambio<br />

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

O(n 2 ). Obsérvese que, al ser el TSP un problema cíclico, uno <strong>de</strong> los nodos se mantiene fijo durante el<br />

intercambio. En la construcción más arriba expuesta <strong>de</strong>l grafo <strong>de</strong> mejora, suponemos, sin pérdida <strong>de</strong><br />

generalidad, que no se permite mover el nodo 1, <strong>por</strong> lo que la <strong>búsqueda</strong> <strong>por</strong> <strong>vecindad</strong> se realiza hallando<br />

el camino más corto <strong>de</strong>s<strong>de</strong> el nodo 1' al nodo n o al nodo n'. La recursión <strong>de</strong> programación dinámica que<br />

ofrecen Congram et al. [9] para realizar <strong>búsqueda</strong>s en la <strong>vecindad</strong> llevará igualmente un tiempo O(n 2 )<br />

cuando se aplique al problema <strong>de</strong>l viajante <strong>de</strong> comercio. El algoritmo <strong>de</strong>l camino más corto visto arriba<br />

emplea un tiempo O(n 3 ) cuando se aplica al problema <strong>de</strong> la programación <strong>de</strong>l retraso pon<strong>de</strong>rado total, ya<br />

que ese tiempo O(n 3 ) es el que se precisa para calcular los costes <strong>de</strong> los arcos.<br />

19


4.2.3 Creación <strong>de</strong> un nuevo vecino mediante un intercambio cíclico<br />

La última clase <strong>de</strong> algoritmos <strong>de</strong> <strong>búsqueda</strong> local que trataremos en este apartado se basa en un<br />

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

piramidal cuando comienza en la ciudad 1, visita a continuación las ciuda<strong>de</strong>s en or<strong>de</strong>n creciente hasta<br />

llegar a la ciudad n, y termina volviendo a la ciudad 1 pasando <strong>por</strong> las restantes ciuda<strong>de</strong>s en or<strong>de</strong>n<br />

<strong>de</strong>creciente. Supongamos que T(i) representa la ciudad situada en la posición i-ésima <strong>de</strong>l itinerario T. Un<br />

recorrido T' es un vecino piramidal <strong>de</strong> un recorrido T cuando existe un número entero p tal que:<br />

(i) 0 ≤ p ≤ n,<br />

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


c[j', k] = -d[j, j+1] – d[k-1, k] + d[j, k].<br />

Visto esto, y teniendo en cuenta que es preciso poner especial cuidado a la hora <strong>de</strong> calcular el<br />

coste <strong>de</strong> los vértices en los que uno <strong>de</strong> sus puntos extremos sea 1, 1', n, o n', ya po<strong>de</strong>mos realizar la<br />

<strong>búsqueda</strong> en la <strong>vecindad</strong> hallando un camino más corto <strong>de</strong>s<strong>de</strong> el nodo 1 al nodo n o al n'. Carlier y Villon<br />

[8] <strong>de</strong>muestran también que, si un itinerario es el óptimo local <strong>de</strong> la <strong>vecindad</strong> arriba expuesta, será un<br />

óptimo local para la <strong>vecindad</strong> <strong>de</strong> dos intercambios.<br />

A<strong>de</strong>más <strong>de</strong> estas tres clases <strong>de</strong> vecinda<strong>de</strong>s, también se ha empleado la programación dinámica<br />

para <strong>de</strong>terminar soluciones óptimas a supuestos especiales <strong>de</strong>l problema <strong>de</strong>l viajante <strong>de</strong> comercio. Así,<br />

Simonetti y Balas [69] resuelven el TSP <strong>por</strong> medio <strong>de</strong> ventanas <strong>de</strong> tiempo, aplicando ciertos tipos <strong>de</strong><br />

restricciones <strong>de</strong> prece<strong>de</strong>ncia con una técnica <strong>de</strong> programación dinámica. Burkard et al. [6], <strong>por</strong> su parte,<br />

ponen <strong>de</strong> manifiesto que, para todo un conjunto <strong>de</strong> itinerarios <strong>de</strong> estructura especial que pue<strong>de</strong>n<br />

representarse <strong>por</strong> medio <strong>de</strong> árboles <strong>de</strong> prioridad, es posible resolver el TSP en tiempo polinómico<br />

aplicando una técnica <strong>de</strong> programación dinámica. También <strong>de</strong>muestran que se pue<strong>de</strong> representar el<br />

conjunto <strong>de</strong> itinerarios piramidales mediante árboles <strong>de</strong> prioridad y que existe un algoritmo O(n 2 ) para el<br />

cálculo <strong>de</strong>l itinerario piramidal más corto. Estos resultados se analizan <strong>de</strong> modo más <strong>de</strong>tallado en el<br />

apartado 5.<br />

4.3 Vecinda<strong>de</strong>s <strong>de</strong>finidas mediante asignaciones y ajustes<br />

En este apartado analizaremos una estructura <strong>de</strong> <strong>vecindad</strong> exponencial <strong>de</strong>finida <strong>por</strong> la obtención <strong>de</strong><br />

asignaciones <strong>de</strong> costes mínimos en un grafo mejorado, ilustrando este tipo <strong>de</strong> <strong>vecindad</strong> en el contexto <strong>de</strong>l<br />

problema <strong>de</strong>l viajante <strong>de</strong> comercio (TSP). Asimismo, <strong>de</strong>mostraremos que la <strong>vecindad</strong> <strong>de</strong> la asignación se<br />

pue<strong>de</strong> generalizar a vecinda<strong>de</strong>s <strong>de</strong>finidas <strong>por</strong> la obtención <strong>de</strong> ajustes <strong>de</strong> coste mínimo en un grafo <strong>de</strong><br />

mejora no bipartito. Para <strong>de</strong>mostrar esta generalización recurriremos al problema <strong>de</strong> la partición <strong>de</strong>l<br />

conjunto.<br />

La <strong>vecindad</strong> <strong>de</strong> asignación en el problema <strong>de</strong>l viajante <strong>de</strong> comercio se pue<strong>de</strong> contemplar como<br />

una generalización <strong>de</strong> la <strong>vecindad</strong> simple que se <strong>de</strong>fine retirando un nodo <strong>de</strong>l itinerario y reinsertándolo<br />

<strong>de</strong> manera óptima. Dado un itinerario T <strong>de</strong> n nodos = (1, 2, 3,…, n, 1), y siendo el coste <strong>de</strong> <strong>de</strong>splazarse<br />

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

asignación será crear un grafo <strong>de</strong> mejora bipartito <strong>de</strong>l siguiente modo:<br />

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

nodos retirados será V = {v 1, v2, …, vk} y el conjunto <strong>de</strong> nodos restantes, U = {u 1, u 2, …, u n-<br />

k}.<br />

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

21


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

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

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] -<br />

d[ui, ui+1].<br />

Un vecino <strong>de</strong> T correspon<strong>de</strong>rá a un itinerario T* obtenido mediante la inserción <strong>de</strong> los nodos <strong>de</strong><br />

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

La asignación <strong>de</strong>l coste mínimo <strong>de</strong> k arcos correspon<strong>de</strong>rá al vecino <strong>de</strong> coste mínimo <strong>de</strong> T.<br />

Por medio <strong>de</strong> la figura 4, vamos a <strong>de</strong>mostrar que la <strong>vecindad</strong> <strong>de</strong> asignación en el itinerario <strong>de</strong> 9<br />

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<br />

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

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

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

2⌋!).<br />

22


Figura 4. Ilustración <strong>de</strong> la <strong>vecindad</strong> <strong>de</strong> ajuste.<br />

La <strong>vecindad</strong> <strong>de</strong> asignación fue introducida <strong>por</strong> primera vez en el contexto <strong>de</strong>l TSP <strong>por</strong> Sarvanov y<br />

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

teórica entre el algoritmo <strong>de</strong> <strong>búsqueda</strong> <strong>por</strong> vecinda<strong>de</strong>s <strong>de</strong> asignación y los algoritmos <strong>de</strong> <strong>de</strong>scenso <strong>por</strong><br />

gradiente local para k = n/2. Punnen [60] ha consi<strong>de</strong>rado la <strong>vecindad</strong> <strong>de</strong> asignación general para valores<br />

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

nodos, se retiran y se reinsertan caminos <strong>de</strong> modo óptimo resolviendo un problema <strong>de</strong> ajuste <strong>de</strong> peso<br />

mínimo. Gutin [34], a su vez, <strong>de</strong>muestra que, para ciertos valores <strong>de</strong> k, es posible maximizar el tamaño<br />

<strong>de</strong> la <strong>vecindad</strong>, junto con ciertos algoritmos <strong>de</strong> baja complejidad, <strong>por</strong> medio <strong>de</strong> <strong>búsqueda</strong>s en vecinda<strong>de</strong>s<br />

relacionadas. Gutin y Yeo [37] han <strong>de</strong>sarrollado una <strong>vecindad</strong> basada en la <strong>vecindad</strong> <strong>de</strong> asignación, con<br />

la que <strong>de</strong>muestran que es posible trasladarse <strong>de</strong> cualquier itinerario T a otro itinerario T' a través <strong>de</strong><br />

dicha <strong>vecindad</strong> en un máximo <strong>de</strong> 4 pasos. Deineko y Woeginger [12] han estudiado varias vecinda<strong>de</strong>s<br />

exponenciales para su aplicación al problema <strong>de</strong>l viajante <strong>de</strong> comercio y al problema <strong>de</strong> asignación<br />

cuadrática, basadas en asignaciones y ajustes en grafos bipartitos, así como vecinda<strong>de</strong>s basadas en<br />

23


ór<strong>de</strong>nes parciales, árboles y otras estructuras combinatorias. La heurística <strong>de</strong> vecinda<strong>de</strong>s basada en<br />

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

Pue<strong>de</strong> obtenerse otra clase <strong>de</strong> vecinda<strong>de</strong>s basadas en ajustes mediante el agrupamiento <strong>de</strong> sub-<br />

itinerarios, don<strong>de</strong> éstos se generan resolviendo un problema <strong>de</strong> ajuste <strong>de</strong> peso mínimo bipartito ([43],<br />

[59]). En este caso, la <strong>búsqueda</strong> <strong>de</strong>l mejor itinerario es un problema NP-difícil. Para realizar la <strong>búsqueda</strong><br />

en este tipo <strong>de</strong> vecinda<strong>de</strong>s existen heurísticas eficaces ([27], [43], [59]), y es posible <strong>de</strong>sarrollar<br />

algoritmos <strong>de</strong> <strong>búsqueda</strong> en los mismos aplicando modificaciones <strong>de</strong> coste u otros medios <strong>de</strong> control <strong>de</strong>l<br />

ajuste generado.<br />

A continuación veremos una estructura <strong>de</strong> <strong>vecindad</strong> basada en ajustes no bipartitos, <strong>de</strong>ntro <strong>de</strong>l<br />

contexto <strong>de</strong>l problema <strong>de</strong> la partición general <strong>de</strong> conjuntos contemplado en el apartado 3. Llamemos S =<br />

{S1, S2, S3,…, SK} a una partición <strong>de</strong>l conjunto A = {a1, a2, a3,…, an}. A continuación, construyamos un<br />

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

pesos c[i, j] <strong>de</strong>l vértice (i, j) <strong>de</strong> G se pue<strong>de</strong>n construir separadamente conforme a una variedad <strong>de</strong> reglas,<br />

una <strong>de</strong> las cuales es la siguiente:<br />

(i) Sea la contribución <strong>de</strong>l coste <strong>de</strong>l subconjunto Si al problema <strong>de</strong> la partición d[Si].<br />

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

repartir óptimamente en dos subconjuntos, a los que llamaremos Si y Sj.<br />

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

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

negativo que se haga en este grafo <strong>de</strong>finirá un coste vecino <strong>de</strong> mejora <strong>de</strong> S. Tailard ha aplicado este tipo<br />

<strong>de</strong> i<strong>de</strong>as a una clase general <strong>de</strong> problemas <strong>de</strong> clustering ([71]), y al problema <strong>de</strong>l enrutamiento <strong>de</strong><br />

vehículos ([72]).<br />

5. Casos especiales resolubles y vecinda<strong>de</strong>s relacionadas<br />

Existen <strong>gran</strong> cantidad <strong>de</strong> estudios relativos a casos especiales <strong>de</strong> problemas <strong>de</strong> optimización<br />

combinatoria NP-difíciles que pue<strong>de</strong>n resolverse <strong>de</strong> forma eficiente. Particularmente interesantes para<br />

nosotros son aquellos casos especiales que se pue<strong>de</strong>n obtener a partir <strong>de</strong>l problema NP-difícil original<br />

limitando la topología <strong>de</strong>l problema, o añadiendo restricciones al problema original, o <strong>por</strong> medio <strong>de</strong> una<br />

combinación <strong>de</strong> estos dos factores. Al basar vecinda<strong>de</strong>s en estos supuestos especiales, a menudo se<br />

pue<strong>de</strong>n <strong>de</strong>sarrollar vecinda<strong>de</strong>s <strong>de</strong> tamaño exponencial en las que es posible realizar <strong>búsqueda</strong>s en tiempo<br />

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

<strong>por</strong> lo que cabe esperar que produzcan óptimos locales poco satisfactorios. Obsérvese asimismo que la<br />

<strong>vecindad</strong> <strong>de</strong> intercambio cíclico vista en el apartado 4 se basa en un algoritmo O(n 2 ) para la obtención<br />

<strong>de</strong>l itinerario piramidal <strong>de</strong> coste mínimo.<br />

24


La siguiente ilustración tiene que ver con los grafos <strong>de</strong> Halin. Un grafo <strong>de</strong> Halin es aquel que se<br />

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

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

propuesto un algoritmo O(n) que resuelve el problema <strong>de</strong>l viajante <strong>de</strong> comercio mediante un grafo <strong>de</strong><br />

este tipo. Hay que tener en cuenta que los grafos <strong>de</strong> Halin pue<strong>de</strong>n tener un número exponencial <strong>de</strong><br />

itinerarios TSP, como ocurre en el ejemplo <strong>de</strong> la figura 3 (tomado <strong>de</strong> [10]).<br />

Vamos a <strong>de</strong>mostrar cómo los grafos <strong>de</strong> Halin pue<strong>de</strong>n emplearse para construir vecinda<strong>de</strong>s <strong>de</strong><br />

<strong>muy</strong> <strong>gran</strong> tamaño para su aplicación al problema <strong>de</strong>l viajante <strong>de</strong> comercio. Supongamos que T es un<br />

itinerario. Decimos que H es una extensión <strong>de</strong> Halin <strong>de</strong> T cuando H es un grafo <strong>de</strong> Halin y T es un<br />

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

Imaginemos que existe un procedimiento eficiente Extensión-<strong>de</strong>-Halin(T), que permite crear una<br />

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

N(T) = {T' : T' es un itinerario en H(T)}. Para hallar el mejor itinerario en esta <strong>vecindad</strong>, buscaríamos el<br />

mejor itinerario en H(T). En principio, se podría <strong>de</strong>finir una <strong>vecindad</strong> mucho mayor: N(T) = { T': existe<br />

una extensión <strong>de</strong> Halin <strong>de</strong> T <strong>de</strong>ntro <strong>de</strong> T'}. Pero, <strong>por</strong> <strong>de</strong>sgracia, sería <strong>de</strong>masiado difícil realizar una<br />

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

Halin <strong>de</strong> T. Sería posible <strong>de</strong>sarrollar soluciones parecidas, basadas en el grafo <strong>de</strong> Halin, para la variante<br />

<strong>de</strong> cuello <strong>de</strong> botella <strong>de</strong>l problema <strong>de</strong>l viajante <strong>de</strong> comercio y para el problema <strong>de</strong>l árbol <strong>de</strong> Steiner,<br />

aplicando el algoritmo <strong>de</strong> tiempo lineal <strong>de</strong> Philips et al [56] y el <strong>de</strong> Winter [82], respectivamente.<br />

Figura 5. Grafo <strong>de</strong> Halin<br />

(a) Itinerario con 10 nodos. (b) Extensión <strong>de</strong> Halin<br />

25


En los anteriores ejemplos hemos visto itinerarios piramidales, que pue<strong>de</strong>n consi<strong>de</strong>rarse<br />

como un problema <strong>de</strong>l viajante <strong>de</strong> comercio con restricciones adicionales. También hemos<br />

analizado el TSP restringido a grafos <strong>de</strong> Halin. En el siguiente ejemplo, en cambio, veremos una<br />

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

adicionales <strong>de</strong> lado. Glover y Punnen [28] han i<strong>de</strong>ntificado la siguiente clase <strong>de</strong> itinerarios, en los<br />

que se pue<strong>de</strong> hallar el mejor miembro en tiempo lineal. Sean C1, C2,..., Ck ciclos disjuntos <strong>de</strong> k<br />

vértices, cada uno <strong>de</strong> los cuales contiene al menos tres nodos, hallándose cada nodo en uno <strong>de</strong> los<br />

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

T que presenta las siguientes características:<br />

1. | T ∩ Ci| = |Ci| - 1 para i = 1 a k, es <strong>de</strong>cir, T tiene |Ci| - 1 arcos en común con Ci.<br />

2. Hay un arco <strong>de</strong> T dirigido <strong>de</strong>s<strong>de</strong> Ci a Ci+1 para i = 1 a k-1 y <strong>de</strong>s<strong>de</strong> Ck a C1.<br />

El número <strong>de</strong> formas <strong>de</strong> suprimir arcos <strong>de</strong> los ciclos es, como mínimo, Πi |Ci|, lo que pue<strong>de</strong><br />

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

hallar el itinerario <strong>de</strong> eyección único que resulte óptimo, es preciso resolver un problema <strong>de</strong>l camino más<br />

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

itinerario dado, se pue<strong>de</strong>n suprimir k+1 arcos <strong>de</strong>l mismo, crear k caminos, y a continuación transformar<br />

éstos en la unión <strong>de</strong> k ciclos <strong>de</strong>scrita más arriba. Aunque, en principio, la <strong>búsqueda</strong> <strong>por</strong> <strong>vecindad</strong><br />

explicada anteriormente es fácil <strong>de</strong> realizar, la calidad <strong>de</strong> la técnica <strong>de</strong> <strong>búsqueda</strong> tien<strong>de</strong> a ser sensible a<br />

las características <strong>de</strong> la implementación. Glover y Punnen [28] han consi<strong>de</strong>rado asimismo vecinda<strong>de</strong>s<br />

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

doble"). También han propuesto un algoritmo que se ha <strong>de</strong>mostrado eficiente en la optimización <strong>de</strong> esta<br />

clase <strong>de</strong> itinerarios.<br />

Yeo [78] ha estudiado otra <strong>vecindad</strong> para la versión asimétrica <strong>de</strong>l TSP. Se trata <strong>de</strong> una<br />

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

y para la que muestra que el tiempo <strong>de</strong> <strong>búsqueda</strong> es O(n 3 ). Burkard y Deineko [7], <strong>por</strong> su parte, han<br />

<strong>de</strong>scubierto otra clase <strong>de</strong> <strong>vecindad</strong> exponencial, en la que es posible i<strong>de</strong>ntificar al mejor miembro en<br />

tiempo cuadrático. Cada uno <strong>de</strong> estos tres algoritmos pue<strong>de</strong>n emplearse para <strong>de</strong>sarrollar algoritmos <strong>de</strong><br />

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

ellos ha sido implementado.<br />

Resumiremos las conclusiones <strong>de</strong>l presente apartado presentando un método general para<br />

convertir una técnica <strong>de</strong> solución <strong>de</strong> problemas con restricciones en una técnica <strong>de</strong> <strong>búsqueda</strong> <strong>por</strong><br />

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

una restricción <strong>de</strong> X resoluble en tiempo polinómico. Supongamos, a<strong>de</strong>más, que para una instancia<br />

26


particular (F, f) <strong>de</strong> X, y para cada subconjunto factible S en F, existe una subrutina llamada<br />

"CreateNeighborhood(S)" que crea una instancia bien estructurada (F ', f) <strong>de</strong> X' tal que<br />

1. S sea un elemento <strong>de</strong> F'<br />

2. F' sea un subconjunto <strong>de</strong> F<br />

3. (F ', f) sea una instancia <strong>de</strong> X'<br />

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

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

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

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

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

explícitamente. Si bien estamos convencidos <strong>de</strong>l enorme potencial <strong>de</strong> este enfoque en el contexto <strong>de</strong> la<br />

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

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

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

restringidos a grafos <strong>de</strong> re<strong>de</strong>s en serie-paralelo. Son ejemplos <strong>de</strong> ello el problema <strong>de</strong> la fiabilidad <strong>de</strong><br />

re<strong>de</strong>s ([67]), el <strong>de</strong>l árbol <strong>de</strong> expansión <strong>de</strong> comunicación óptima ([18]), el <strong>de</strong> cubierta <strong>de</strong> vértices ([5],<br />

[73]), el <strong>de</strong>l conjunto <strong>de</strong> vértices ([5], [73]), etc. Parecidos resultados se obtienen con problemas <strong>de</strong><br />

planificación <strong>de</strong> horarios comerciales con restricciones <strong>de</strong> prece<strong>de</strong>ncia específicas [46]. Queda en el aire<br />

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

aplicarlos a grafos <strong>de</strong> re<strong>de</strong>s en serie-paralelo <strong>de</strong>ntro <strong>de</strong>l contexto <strong>de</strong> la <strong>búsqueda</strong> <strong>por</strong> <strong>vecindad</strong>.<br />

6. Medición <strong>de</strong> vecinda<strong>de</strong>s<br />

En este apartado <strong>de</strong>scribiremos <strong>técnicas</strong> <strong>de</strong> medición <strong>de</strong> vecinda<strong>de</strong>s, que pue<strong>de</strong>n servir como guía<br />

para calibrar el rendimiento <strong>de</strong> algoritmos <strong>de</strong> <strong>búsqueda</strong> local con respecto a las vecinda<strong>de</strong>s. Como ya<br />

hemos indicado, uno <strong>de</strong> los aspectos críticos <strong>de</strong>l diseño <strong>de</strong> la heurística <strong>de</strong> <strong>búsqueda</strong> <strong>por</strong> <strong>vecindad</strong><br />

consiste en hallar el equilibrio entre el tamaño <strong>de</strong> la <strong>vecindad</strong> y el tiempo necesario para llevar a cabo la<br />

<strong>búsqueda</strong>. De ahí que un elemento im<strong>por</strong>tante en la medición <strong>de</strong> vecinda<strong>de</strong>s sea el tamaño <strong>de</strong> la<br />

<strong>vecindad</strong>. Des<strong>de</strong> el punto <strong>de</strong> vista <strong>de</strong>l grafo <strong>de</strong> <strong>vecindad</strong>, el tamaño <strong>de</strong> ésta para una solución S pue<strong>de</strong><br />

contemplarse como el número <strong>de</strong> arcos dirigidos que salen <strong>de</strong> S, o, lo que es lo mismo, el grado <strong>de</strong><br />

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

necesariamente exponencial, sino que es la <strong>búsqueda</strong> en sí la que lleva a hallar soluciones radicalmente<br />

diferentes a la solución base. Por el contrario, para las <strong>técnicas</strong> basadas en re<strong>de</strong>s y las que se hallan<br />

inducidas <strong>por</strong> supuestos resolubles, el tamaño <strong>de</strong> la <strong>vecindad</strong> es generalmente exponencial.<br />

27


La siguiente tabla (tomada en su mayor parte <strong>de</strong> [6]) muestra un resumen <strong>de</strong>l tamaño <strong>de</strong> las<br />

vecinda<strong>de</strong>s anteriormente vistas para el problema <strong>de</strong>l viajante <strong>de</strong> comercio:<br />

Vecindad Tamaño log(tamaño) Tiempo <strong>búsqueda</strong> Referencia:<br />

2-Opt Ω(n 2 ) Θ(log n) O(n 2 ) Croes [11]<br />

k-Opt Ω (n k ) Θ (log n) O(n k ) Lin [49]<br />

Piramidal Ω (2 n ) Θ (n) O(n 2 ) Klyaus [45]<br />

Intercambio cíclico Ω (n2 n ) Θ (n) O(n 3 ) Carlier y Villion [8]<br />

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

Edge ejection basada<br />

en el camino más<br />

corto<br />

Intercambio cíclico<br />

(subconjuntos k-fijos)<br />

Ω (n2 n ) Ω (n) O(n 2 ) Punnen y Glover [58],<br />

Glover [30]<br />

Θ (n k ) Θ (log n) O(n 2 ) Ahuja et al. [2]<br />

Interc. compuestos Θ (2 n-1 ) Θ (n) O(n 2 ) Potts y van <strong>de</strong> Vel<strong>de</strong> [57]<br />

Basada en ajustes 1 Θ(n!/2) Θ (n log n) O(n 3 ) Sarvanov y Doroshko [66]<br />

Grafos <strong>de</strong> Halin Ω(2 n ) Θ (n) O(n) Cornuejols et al. [10]<br />

Árboles PQ<br />

2 Θ (n loglog n)<br />

Θ (n loglog n) O(n 3 )<br />

Burkard et al. [6]<br />

Otra técnica <strong>de</strong> medición <strong>de</strong> vecinda<strong>de</strong>s que se estudia en la literatura es el grafo <strong>de</strong>l diámetro <strong>de</strong> la<br />

<strong>vecindad</strong>. La distancia <strong>de</strong>s<strong>de</strong> un nodo S a un nodo T en el grafo <strong>de</strong> <strong>vecindad</strong> es la longitud <strong>de</strong>l camino<br />

más corto entre ambos. El diámetro <strong>de</strong>l grafo <strong>de</strong> <strong>vecindad</strong> NG es el valor entero positivo más bajo d tal<br />

que d(S, T) = d para todos los nodos S y T <strong>de</strong> NG. Gutin y Yeo [37] han <strong>de</strong>sarrollado vecinda<strong>de</strong>s <strong>de</strong><br />

tamaño exponencial que admiten <strong>búsqueda</strong>s polinómicas para el TSP, y cuyos grafos <strong>de</strong> <strong>vecindad</strong> son<br />

<strong>de</strong> diámetro 4; es <strong>de</strong>cir, que para cualquier par <strong>de</strong> itinerarios T1 y T5, existen itinerarios T2, T3, y T4 tales<br />

1 Esto está suponiendo que cuando k = ⌊n/2⌋, los nodos se han suprimido. Si se suprimen menos nodos, es<br />

posible obtener mejores cotas <strong>de</strong> tiempo, <strong>por</strong> lo que el tamaño <strong>de</strong> la <strong>vecindad</strong> disminuirá<br />

pro<strong>por</strong>cionalmente.<br />

28


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

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

Para un grafo <strong>de</strong> <strong>vecindad</strong> dado, <strong>de</strong>cimos que P = i1, i2, …, iK es monótono cuando el valor objetivo<br />

f(ij) < f(ij-1) para j = 2 a K. Sea dm(S) la longitud <strong>de</strong>l camino monótono más corto <strong>de</strong>s<strong>de</strong> S a una<br />

solución óptima local. Si dm(S) es exponencialmente <strong>gran</strong><strong>de</strong> para cualquier S, se garantiza que una<br />

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

sentido contrario, que dm p (S, T) indica el camino monótono más largo <strong>de</strong>s<strong>de</strong> S hasta T. Si se garantiza<br />

que dm p (S, T) es polinómico, toda técnica <strong>de</strong> <strong>búsqueda</strong> <strong>por</strong> <strong>vecindad</strong> basada en esta <strong>vecindad</strong> tendrá un<br />

número polinómico <strong>de</strong> iteraciones.<br />

Veamos <strong>por</strong> último el análisis <strong>de</strong> dominio <strong>de</strong> algoritmos <strong>de</strong> <strong>búsqueda</strong> <strong>por</strong> <strong>vecindad</strong>. El análisis <strong>de</strong><br />

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

un algoritmo heurístico para un problema <strong>de</strong> optimización combinatoria que produce una solución S*<br />

en F. El número <strong>de</strong> dominio <strong>de</strong> α, representado <strong>por</strong> dom(α), será la cardinalidad <strong>de</strong>l conjunto F(S*),<br />

don<strong>de</strong> F(S*) = {S ∈ F : f(S) ≥ f(S*)}. Si dom(α) = |F|, S* será una solución óptima. El análisis <strong>de</strong><br />

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

7. Rendimiento computacional <strong>de</strong> algoritmos <strong>de</strong> <strong>búsqueda</strong> <strong>por</strong><br />

<strong>vecindad</strong> a <strong>muy</strong> <strong>gran</strong> <strong>escala</strong><br />

En este apartado estudiaremos brevemente el rendimiento computacional <strong>de</strong> algunos <strong>de</strong> los<br />

algoritmos <strong>de</strong> <strong>búsqueda</strong> <strong>por</strong> <strong>vecindad</strong> a <strong>muy</strong> <strong>gran</strong> <strong>escala</strong> vistos en los apartados anteriores.<br />

Comenzaremos <strong>por</strong> consi<strong>de</strong>rar el problema <strong>de</strong>l viajante <strong>de</strong> comercio. El algoritmo <strong>de</strong> Lin y Kernighan y<br />

sus variantes se consi<strong>de</strong>ran mayoritariamente como los mejores heurísticos para este problema. El<br />

amplio estudio computacional llevado a cabo <strong>por</strong> Johnson y McGeoch [42] corrobora esta impresión en<br />

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

experimentalmente algoritmos <strong>de</strong> ejection chain para el TSP con excelentes resultados que <strong>de</strong>muestran<br />

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

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

implementaciones <strong>de</strong> Rego [61] y Punnen y Glover [58] son relativamente sencillas y emplean<br />

estructuras <strong>de</strong> datos simples.<br />

Recientemente, Helsgaun [39] ha obtenido resultados computacionales más que notables a partir <strong>de</strong><br />

29


una implementación compleja <strong>de</strong>l algoritmo <strong>de</strong> Lin y Kernighan. Aunque su algoritmo emplea los<br />

elementos fundamentales <strong>de</strong> la <strong>búsqueda</strong> <strong>de</strong> profundidad variable <strong>de</strong> estos dos autores, se diferencia <strong>de</strong><br />

implementaciones anteriores en varios aspectos clave. Consigue un mejor rendimiento computacional<br />

gracias al manejo eficiente <strong>de</strong> datos, a movimientos especiales 5-opt, a nuevos movimientos no<br />

secuenciales, a listas <strong>de</strong> candidatos efectivos, a cálculos <strong>de</strong> costes, al uso eficiente <strong>de</strong> cotas superiores en<br />

costes <strong>de</strong> elementos, a la aplicación <strong>de</strong> información proce<strong>de</strong>nte <strong>de</strong>l algoritmo <strong>de</strong> un árbol <strong>de</strong> Held y Karp<br />

y a la aplicación <strong>de</strong>l análisis <strong>de</strong> sensibilidad, entre otras cosas. Helsgaun afirma que su algoritmo ha<br />

producido soluciones óptimas en todos los problemas <strong>de</strong> prueba para los que se conoce una solución<br />

óptima, entre ellos los <strong>de</strong> 7.397 ciuda<strong>de</strong>s y <strong>de</strong> 13.509 ciuda<strong>de</strong>s estudiados <strong>por</strong> Applegate et al.[4].<br />

Helsgaun ha calculado que el tiempo <strong>de</strong> ejecución medio <strong>de</strong> este algoritmo es O(n 2.2 ). Para dar una<br />

perspectiva a<strong>de</strong>cuada <strong>de</strong> lo que este logro supone, hay que tener en cuenta que, para resolver con<br />

optimalidad el problema <strong>de</strong> 13.509 ciuda<strong>de</strong>s mediante un algoritmo exacto <strong>de</strong> ramificación y corte,<br />

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

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

su parte, utilizó un Macintosh <strong>de</strong> 300 MHz y 3Gigas. Para el problema <strong>de</strong> 85.900 ciuda<strong>de</strong>s, (pla85900<br />

<strong>de</strong>l TSPLIB) consiguió obtener una solución mejorada en apenas dos semanas <strong>de</strong> cálculo en CPU.<br />

(Obsérvese también que casi todo el tiempo empleado <strong>por</strong> Applegate et al. [4] se <strong>de</strong>dicó a probar que la<br />

solución óptima lo era efectivamente.)<br />

En la tabla 1 presentamos un resumen <strong>de</strong>l rendimiento <strong>de</strong>l algoritmo <strong>de</strong> Rego (REGO) [61], <strong>de</strong>l<br />

algoritmo <strong>de</strong> Helsgaun-Lin-Kernighan (HLK) [39], <strong>de</strong>l algoritmo <strong>de</strong> Lin y Kernighan modificado <strong>por</strong><br />

Mak y Morton [51] y <strong>de</strong>l algoritmo <strong>de</strong>l camino más corto <strong>de</strong> Punnen y Glover (SPG) [58] en instancias<br />

pequeñas <strong>de</strong>l problema <strong>de</strong>l viajante <strong>de</strong> comercio. La tabla refleja el mejor caso para cada uno <strong>de</strong> ellos.<br />

30


Tabla 1. Instancias pequeñas <strong>de</strong>l TSP: mejor % <strong>de</strong> <strong>de</strong>sviación <strong>de</strong>l óptimo<br />

Problema REGO HLK MLK SPG<br />

bier127 0,12 0,00 0,42 0,10<br />

u159 0,00 0,00 0,00 ----<br />

ch130 ----- 0,00 ----- 0,23<br />

ch150 ----- 0,00 ----- 0,40<br />

d198 0,30 0,00 0,53 0,33<br />

d493 0,97 0,00 ----- 2,65<br />

eil101 0,00 0,00 0,00 0,79<br />

fl417 0,78 0,00 ----- 0,41<br />

gil262 0,13 0,00 1,30 1,81<br />

kroA150 0,00 0,00 0,00 0,00<br />

kroA200 0,27 0,00 0,41 0,68<br />

kroB150 0,02 0,00 0,01 0,07<br />

kroB200 0,11 0,00 0,87 0,42<br />

kroC100 0,00 0,00 0,00 0,00<br />

kroD100 0,00 0,00 0,00 0,00<br />

kroE100 0,00 0,00 0,21 0,02<br />

lin105 0,00 0,00 0,00 0,00<br />

lin318 0,00 0,00 0,57 1,03<br />

pcb442 0,22 0,00 1,06 2,41<br />

pr107 0,05 0,00 0,00 0,00<br />

pr124 0,10 0,00 0,08 0,00<br />

pr136 0,15 0,00 0,15 0,00<br />

pr144 0,00 0,00 0,39 0,00<br />

pr152 0,90 0,00 4,73 0,00<br />

pr226 0,22 0,00 0,09 0,11<br />

pr264 0,00 0,00 0,59 0,20<br />

pr299 0,22 0,00 0,44 1,30<br />

pr439 0,55 0,00 0,54 1,29<br />

rd100 0,00 0,00 ----- 0,00<br />

rd400 0,29 0,00 ----- 2,45<br />

ts225 0,25 0,00 ----- 0,00<br />

gr137 0,20 0,00 0,00 ----<br />

31


gr202 1,02 0,00 0,81 ----<br />

gr229 0,23 0,00 0,20 ----<br />

gr431 0,91 0,00 1,14 ----<br />

La tabla 2 muestra un resumen <strong>de</strong>l rendimiento <strong>de</strong>l algoritmo <strong>de</strong> (REGO) [61], <strong>de</strong>l <strong>de</strong> Helsgaun-Lin-<br />

Kernighan (HLK) [39], y <strong>de</strong> la implementación <strong>de</strong> Lin y Kernighan (JM-LK) <strong>de</strong> Johnson et al. [42]<br />

(Atención al error: no se ha encontrado la fuente <strong>de</strong> referencia) para instancias <strong>gran</strong><strong>de</strong>s <strong>de</strong>l problema <strong>de</strong>l<br />

viajante <strong>de</strong> comercio. La tabla refleja el % <strong>de</strong> <strong>de</strong>sviación media para cada algoritmo.<br />

Tabla 2. Instancias <strong>gran</strong><strong>de</strong>s <strong>de</strong>l TSP: % <strong>de</strong> <strong>de</strong>sviación media tras varias ejecuciones<br />

Problema Rego JM-LK HLK<br />

dsj1000 1,10 3,08 0,035<br />

pr1002 0,86 2,61 0,00<br />

pr2392 0,79 2,85 0,00<br />

pcb3038 0,97 2,04 0,00<br />

fl3795 7,16 8,41 ----<br />

fl4461 1,06 1,66 0,001<br />

pla7397 1,57 2,19 0,001<br />

A continuación nos fijaremos en el problema <strong>de</strong>l árbol <strong>de</strong> expansión mínima capacitado; un supuesto<br />

especial <strong>de</strong>l problema <strong>de</strong> la partición ya visto en el apartado 4. Abundando en la estructura <strong>de</strong>l problema,<br />

Ahuja et al. [2] han <strong>de</strong>sarrollado un algoritmo <strong>de</strong> <strong>búsqueda</strong> <strong>por</strong> <strong>vecindad</strong> a <strong>muy</strong> <strong>gran</strong> <strong>escala</strong> basado en<br />

vecinda<strong>de</strong>s <strong>de</strong> intercambios cíclicos. Se trata <strong>de</strong> un algoritmo <strong>de</strong> <strong>gran</strong> eficiencia con el que se han<br />

obtenido soluciones mejoradas para muchos problemas patrón. Actualmente, ofrece la mejor solución<br />

existente para cada una <strong>de</strong> las instancias que aparecen en la lista <strong>de</strong> patrones, a la que se pue<strong>de</strong> acce<strong>de</strong>r<br />

en http://www.ms.ic.ac.uk/info.html.<br />

Finalmente, en nuestro último ejemplo nos fijaremos en algoritmos <strong>de</strong> <strong>búsqueda</strong> <strong>por</strong> <strong>vecindad</strong> a <strong>muy</strong><br />

<strong>gran</strong> <strong>escala</strong> para problemas <strong>de</strong> asignación generalizada (GAP). Yagiura et al. [80] han <strong>de</strong>sarrollado un<br />

algoritmo <strong>de</strong> <strong>búsqueda</strong> tabú basado en ejection chain para este tipo <strong>de</strong> problemas y afirman haber<br />

obtenido, en un tiempo <strong>de</strong> cálculo razonable, soluciones superiores o, al menos, comparables, a las<br />

32


obtenidas con los algoritmos ya existentes. A partir <strong>de</strong> comparaciones y experimentos computacionales,<br />

se afirma que, en instancias patrón, las soluciones obtenidas <strong>por</strong> este algoritmo se hallan <strong>de</strong>ntro <strong>de</strong><br />

óptimos <strong>de</strong>l 16%.<br />

Muchas <strong>de</strong> las referencias <strong>de</strong> autores citadas a lo largo <strong>de</strong>l presente estudio dan cuenta asimismo <strong>de</strong><br />

resultados <strong>de</strong> cálculos basados en sus algoritmos. A ellos nos remitimos para más <strong>de</strong>talles. Por otra parte,<br />

varias vecinda<strong>de</strong>s <strong>de</strong> <strong>muy</strong> <strong>gran</strong> <strong>escala</strong> tratadas en este estudio no han sido probadas experimentalmente<br />

<strong>de</strong>ntro <strong>de</strong> un marco <strong>de</strong> <strong>búsqueda</strong> <strong>por</strong> <strong>vecindad</strong> a <strong>muy</strong> <strong>gran</strong> <strong>escala</strong>. Las implementaciones efectivas <strong>de</strong><br />

éstas y otras vecinda<strong>de</strong>s son temas para posteriores investigaciones.<br />

Agra<strong>de</strong>cimientos:<br />

La investigación <strong>de</strong>l primer autor recibió el apoyo <strong>de</strong> la beca NSF (DMI-9900087). El segundo y<br />

tercer autor fueron apoyados parcialmente <strong>por</strong> las becas NSF (DMI-9810359 y DMI-9820998). El cuarto<br />

autor recibió el apoyo <strong>de</strong> la beca NSERC (OPG0170381).<br />

33


Referencias<br />

[1] E. Aarts and J.K. Lenstra, Local Search in Combinatorial Optimization, (John Wiley & Sons, New<br />

York, 1997).<br />

[2] R.K. Ahuja, J.B. Orlin, and D. Sharma, New neighborhood search structures for the capacitated<br />

minimum spanning tree problem, Research Re<strong>por</strong>t 99-2, Department of Industrial & Systems<br />

Engineering, University of Florida, 1999.<br />

[3] V. Aggarwal, V.G. Tikekar, and Lie-Fer Hsu, Bottleneck assignment problem un<strong>de</strong>r categorization,<br />

Computers and Operations Research 13 (1986) 11-26.<br />

[4] D. Applegate, R. Bixby, V. Chvatal, and W. Cook, On the solution of traveling salesman problems,<br />

Documenta Mathematica, Extra volume ICM (1998), 645-656.<br />

[5] S. Arnborg and A. Proskurowski, Linear time algorithms for NP-hard problems restricted to partial<br />

k-trees, Discrete Applied Mathematics 23 (1989), 11-24.<br />

[6] R. E. Burkard, V. G. Deineko, and G. J. Woeginger, The travelling salesman problem and the PQtree,<br />

in: Proc. IPCO V, Lecture Notes in Computer Science, Vol. 1084 (Springer, 1996) 490-504.<br />

[7] R.E. Burkard and V.G. Deineko, Polynomially solvable cases of the traveling salesman problem and<br />

a new exponential neighborhood, Computing 54 (1995) 191-211.<br />

[8] J. Carlier and P. Villon, A new heuristic for the traveling salesman problem, RAIRO - Operations<br />

Research 24 (1990) 245-253.<br />

[9] R.K. Congram, C.N. Potts, S. L. van <strong>de</strong> Vel<strong>de</strong>, An iterated dynasearch algorithm for the single<br />

machine total weighted tardiness scheduling problem, paper in preparation, 1998.<br />

[10] G. Cornuejols, D. Nad<strong>de</strong>f, and W.R. Pulleyblank, Halin graphs and the traveling salesman problem,<br />

Mathematical Programming 26 (1983) 287-294.<br />

[11] G. A. Croes, A method for solving traveling-salesman problems, Operations Research 6 (1958)<br />

791-812.<br />

[12] V. Deineko and G.J. Woeginger, A study of exponential neighborhoods for the traveling salesman<br />

problem and the quadratic assignment problem, Re<strong>por</strong>t Woe-05, Technical University Graz, 1997.<br />

[13] U. Dorndorf and E. Pesch, Fast clustering algorithms, ORSA Journal of Computing 6 (1994) 141-<br />

153.<br />

[14] K.A. Dowsland, Nurse scheduling with tabu search and strategic oscillation, European Journal of<br />

Operations Research 106 (1998) 393-407.<br />

[15] M. Dror and L. Levy, A vehicle routing improvement algorithm comparison of a “greedy” and a<br />

“matching” implementation for inventory routing, Computers and Operations Research 13 (1986) 3345.<br />

31<br />

[16] A.E. Dunlop and B.W. Kernighan, A procedure for placement of standard cell VLSI circuits, IEEE<br />

Transactions on Computer-Ai<strong>de</strong>d Design 4 (1985) 92-98.<br />

34


[17] M. Duque-Anton, Constructing efficient simulated annealing algorithms, Discrete Applied<br />

Mathematics 77 (1997) 139-159.<br />

[18] E.S. El-Mallah and C.J. Colbourn, Optimum communication spanning trees in series parallel<br />

networks, SIAM Journal of Computing 14 (1985) 915-925.<br />

[19] R. Fahrion and M. Wre<strong>de</strong>, On a principle of chain exchange for vehicle routing problems (IVRP),<br />

Journal of Operational Research Society (1990) 821-827.<br />

[20] C.M. Fiduccia and R.M. Mattheyses, A linear time heuristic for improving network partitions, in:<br />

ACM IEEE Nineteenth Design Automation Conference Proceedings, IEEE Computer Society, (Los<br />

Alamitos, CA, 1982) 175-181.<br />

[21] R.T.Firla, B.Spille and R.Weismantel, personal communication.<br />

[22] R.T.Firla, B.Spille and R.Weismantel, A primal analogue of cutting plane algorithms, Depatment of<br />

Mathematics, Otto-von-Guericke-University Mag<strong>de</strong>burg, 1999.<br />

[23] A. Frangioni, E. Necciari, M.G. Scutella, Multi-exchange algorithms for the minimum makespan<br />

machine scheduling problem, paper in preparation, Dipartimento di Informatica, University of Pisa,<br />

2000.<br />

[24] M.L. Fredman, D.S. Johnson, and L.A McGeoch, Data structures for traveling salesman, Journal of<br />

Algorithms 16 (1995) 432-479.<br />

[25] M. Gendreau, F. Guertin, J.Y. Potvin, R. Seguin, Neighborhood search heuristics for a dynamic<br />

vehicle dispatching problem with pick-ups and <strong>de</strong>liveries, CRT-98-10, 1998.<br />

[26] P.C. Gilmore, E.L. Lawler, and D.B. Shmoys, Well-solved special cases, in: E.L. Lawler, J.K.<br />

Lenstra, A.H.G. Rinnooy Kan, and D.B. Shmoys, eds., The Traveling Salesman Problem (Wiley, New<br />

York, 1985) 87-143.<br />

[27] F. Glover, G.M. Gutin, A. Yeo, and Zverovich, Construction heuristics and domination analysis for<br />

the asymmetric TSP, Research re<strong>por</strong>t, Brunel University, 1999.<br />

[28] F. Glover and A.P. Punnen, The traveling salesman problem: New solvable cases and linkages with<br />

the <strong>de</strong>velopment of approximation algorithms, Journal of the Operational Research Society 48 (1997)<br />

502-510.<br />

[29] F. Glover and M. Laguna, Tabu Search, (Kluwer Aca<strong>de</strong>mic Publishers, 1997).<br />

[30] F. Glover, Ejection chains, reference structures, and alternating path algorithms for the traveling<br />

salesman problem, Research Re<strong>por</strong>t, University of Colorado-Boul<strong>de</strong>r, Graduate School of Business,<br />

1992. {A short version appeared in Discrete Applied Mathematics 65 (1996) 223-253.}<br />

32<br />

[31] F. Glover, Finding the best traveling salesman 4-opt move in the same time as a best 2-opt move,<br />

Journal of Heuristics 2 (1996) 169-179.<br />

[32] G.M. Gutin, On approach to solving the traveling salesman problem, in: Theory, Methodology, and<br />

Practice of System Research, Mathematical Methods of Systems Analysis, VNIIST (Moscow, 1984)<br />

184-186.<br />

35


[33] G.M. Gutin, On the efficiency of a local algorithm for solving the traveling salesman problem,<br />

Automation and Remote Control No. 11(part 2) (1988) 1514-1519.<br />

[34] G.M. Gutin, Exponential neighborhood local search for the traveling salesman problem, Computers<br />

and Operations Research 26 (1999) 313-320.<br />

[35] G.M. Gutin, and A. Yeo, Polynomial algorithms for the TSP and the QAP with a factorial<br />

domination number, Manuscript, Brunel University, UK, 1998.<br />

[36] G.M. Gutin, and A. Yeo, TSP heuristics with large domination number, Re<strong>por</strong>t 12/98, Department<br />

of Mathematics and Statistics, Brunel University, UK, 1998.<br />

[37] G.M. Gutin, and A. Yeo, Small diameter neighborhood graphs for the traveling salesman problem,<br />

Computers and Operations Research 26 (1999) 321-327.<br />

[38] G.M. Gutin, and A. Yeo, TSP tour domination and Hamiltonian cycle <strong>de</strong>composition of regular<br />

digraphs, Manuscript, Brunel University, UK, 1999.<br />

[39] K. Helsgaun, An effective implementation of the Lin-Kernighan traveling salesman heuristic,<br />

Manuscript, Roskil<strong>de</strong> University, Denmark, 1999.<br />

[40] J. Hurink, An exponential neighborhood for a one machine batching problem, University of<br />

Twente, Faculty of Mathematical Sciences, The Netherlands, 1998. To appear in OR-Spektrum 1999.<br />

[41] D.S. Johnson, Local search and the traveling salesman problem, in: Proceedings of 17th<br />

International Colloquium on Automata Languages and Programming, Lecture Notes in Computer<br />

Science, (Springer-Verlag, Berlin, 1990) 443-460.<br />

[42] D.S. Johnson, L.A. McGeoch, The travelling salesman problem: a case study in local optimization,<br />

in: E.H.L Aarts and J.K. Lenstra, eds., Local Search in Combinatorial Optimization, (Wiley, N.Y., 1997)<br />

in press.<br />

[43] R.M. Karp, A patching algorithm for the non-symmetric traveling salesman problem, SIAM Journal<br />

of Computing 8 (1979) 561-573.<br />

[44] B.W. Kernighan and S. Lin, An efficient heuristic procedure for partitioning graphs, Bell System<br />

Technical Journal 49 (1970) 291-307.<br />

[45] P.S. Klyaus, The structure of the optimal solution of certain classes of the traveling salesman<br />

problems, (in Russian), Vestsi Akad. Nauk BSSR, Physics and Math. Sci., Minsk, (1976) 95-98.<br />

33<br />

[46] S. Knust, Optimality conditions and exact neighborhoods for sequencing problems, Universitat<br />

Osnabruck, Fachbereich Mathematik/Informatik, Osnabruck, Germany, 1997.<br />

[47] M. Laguna, J. Kelly, J.L. Gonzales-Velar<strong>de</strong>, and F. Glover, Tabu search for multilevel generalized<br />

assignment problem, European Journal of Operations Research 82 (1995) 176-189.<br />

[48] E.L. Lawler, J.K. Lenstra, A.H.G. Rinnooy Kan, and D.B. Shmoys, eds., The Traveling Salesman<br />

Problem (Wiley, New York, 1985).<br />

[49] S. Lin, Computer solutions to the traveling salesman problem, Bell System Tech. Journal 44 (1965)<br />

36


2245-2269.<br />

[50] S. Lin and B. Kernighan, An effective heuristic algorithm for the traveling salesman problem,<br />

Operations Research 21 (1973) 498-516.<br />

[51] K. Mak and A. Morton, A modified Lin-Kernighan traveling salesman heuristic, ORSA Journal of<br />

Computing 13 (1992) 127-132.<br />

[52] I.I. Melamed, S.I. Sergeev, and I.K. Sigal, The traveling salesman problem: approximation<br />

algorithms, Avtomat Telemekh 11 (1989) 3-26.<br />

[53] C.H. Papadimitriou and K. Steiglitz, Combinatorial Optimization: Algorithms and Complexity<br />

(Prentice-Hall, Englewood Cliffs, NJ, 1982).<br />

[54] C.H. Papadimitriou, The complexity of Lin-Kernighan algorithm, SIAM Journal of Computing<br />

(1992) 450-465.<br />

[55] E. Pesch and F. Glover, TSP ejection chains, Discrete Applied Mathematics 76 (1997) 165-181.<br />

[56] J.M. Phillips, A.P. Punnen, and S.N. Kabadi, A linear time algorithm for the bottleneck traveling<br />

salesman problem on a Halin graph, Information Processing Letters 67 (1998) 105-110.<br />

[57] C.N. Potts and S.L. van <strong>de</strong> Vel<strong>de</strong>, Dynasearch - Iterative local improvement by dynamic<br />

programming: Part I, The traveling salesman problem, Techinical Re<strong>por</strong>t, University of Twente, The<br />

Netherlands, 1995.<br />

[58] A.P. Punnen and F. Glover, Ejection chains with combinatorial leverage for the TSP, Research<br />

Re<strong>por</strong>t, University of Colorado-Boul<strong>de</strong>r, 1996.<br />

[59] A.P. Punnen, S.N. Kabadi, Domination analysis of heuristics for the asymmetric traveling salesman<br />

problem, Manuscript, University of New Brunswick, 1998.<br />

[60] A.P. Punnen, The traveling salesman problem: New polynomial approximation algorithms and<br />

domination analysis, To Appear in Journal of Information and Optimization Sciences.<br />

[61] C. Rego, Relaxed tours and path ejections for the traveling salesman problem, European Journal of<br />

Operational Research 106 (1998a) 522-538.<br />

[62] C. Rego, A subpath ejection method for the vehicle routing problem, Management Science 44<br />

(1998b) 1447-1459.<br />

34<br />

[63] C. Rego, C. Roucairol, A parallel tabu search algorithm using ejection chains for the vehicle routing<br />

problem, in: I. H. Osman, J. P. Kelly, eds., Meta-Heuristics: Theory and Applications, (Kluwer<br />

Aca<strong>de</strong>mic Publishers, 1996).<br />

[64] G. Reinelt, The traveling salesman computational solutions for TSP application, Lecture Notes in<br />

Computer Science, Vol. 840 (Springer, 1994).<br />

[65] R.T. Rockafellar, Network Flows and Monotropic Optimization (John Wiley and Sons, New York,<br />

1984).<br />

[66] V.I. Sarvanov and N.N. Doroshko, Approximate solution of the traveling salesman problem by a<br />

37


local algorithm with scanning neighborhoods of factorial cardinality in cubic time, Software: Algorithms<br />

and Programs, Mathematics Institute of the Belorussia Aca<strong>de</strong>my of Science., Minsk, No. 31, (1981) 11-<br />

13. (In Russian)<br />

[67] A Satyanarayana and R K Wood, A linear time algorithm for computing k-terminal reliability in<br />

series parallel networks, SIAM Journal of Computing 14 (1985) 818-832.<br />

[68] R.R. Schneur and J.B. Orlin, A scaling algorithm for multicommodity flow problems, Operations<br />

Research 46 (1998).<br />

[69] N. Simonetti and E. Balas, Implementation of a linear time algorithm for certain generalized<br />

traveling salesman problems, in: Proc. IPCO V, Lecture Notes in Computer Science, Vol. 1084<br />

(Springer, 1996) 316-329.<br />

[70] F. Sourd, Scheduling tasks on unrelated machines: large neighborhood improvement procedures,<br />

submitted to Journal of Heuristics.<br />

[71] E.D. Taillard, Heuristic methods for large centroid clustering problems, Technical re<strong>por</strong>t IDSIA-96-<br />

96, Lugano, 1996.<br />

[72] E.D. Taillard, Parallel iterative search methods for vehicle routing problems, Network 23 (1993)<br />

661-673.<br />

[73] T. Takamizawa, T. Nishizeki, and N. Sato, Linear time computability of combinatorial problems on<br />

series-parallel graphs, Journal of ACM 29 (1982) 623-641.<br />

[74] K.T. Talluri, Swapping applications in a daily airline fleet assignment, Trans<strong>por</strong>tation Science. 30<br />

(1996).<br />

[75] P.M. Thompson, Local search algorithms for vehicle routing and other combinatorial problems,<br />

Ph.D. Thesis, Operations Research Center, MIT, 1988.<br />

[76] P.M. Thompson and J.B. Orlin, The theory of cyclic transfers, Operations Research Center Working<br />

Paper, MIT, August 1989.<br />

[77] P.M. Thompson and H.N. Psaraftis, Cyclic transfer algorithms for multivehicle routing and<br />

scheduling problems, Operations Research 41 (1993).<br />

35<br />

[78] A. Yeo, Large exponential neighborhoods for the traveling salesman problem, Preprint no 47,<br />

Department of Mathematics and Computer Science, O<strong>de</strong>nse University, 1997.<br />

[79] M. Yagiura, T. Ibaraki, and F. Glover, An ejection chain approach for the generalized assignment<br />

problem, Technical Re<strong>por</strong>t #99013, Department of Applied Mathematics and Physics, Kyoto University,<br />

1999.<br />

[80] M. Yagiura, T. Yamaguchi, and T. Ibaraki, A variable-<strong>de</strong>pth search algorithm for the generalized<br />

assignment problem, in: S. Voss, S. Martello and I.H. Osman, eds., Metaheuristics: Advances and<br />

Trends in Local Search Paradigms for Optimization (Kluwer Aca<strong>de</strong>mic Publishers, Boston, 1999) 459-<br />

471.<br />

[81] K. Wayne, A polynomial combinatorial algorithm for generalized minimum cost flow, STOC 1999.<br />

38


[82] P. Winter, Steiner problem in Halin networks, Discrete Applied Mathematics 17 (1987) 281294.<br />

[83] M. Zachariasen and M. Dam, Tabu search on the geometric traveling salesman problem”, in: I. H.<br />

Osman, J. P. Kelly, eds., Meta-Heuristics: Theory and Applications, (Kluwer Aca<strong>de</strong>mic Publishers,<br />

1996).<br />

36<br />

39

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!