Programación Lineal y Entera

88
Programación Lineal y Entera Balbina Virginia Casas Méndez Tema 3 MÁSTER EN TÉCNICAS ESTADÍSTICAS Curso 2021/2022

Transcript of Programación Lineal y Entera

Page 1: Programación Lineal y Entera

Programación Lineal y Entera

Balbina Virginia Casas Méndez

Tema 3

MÁSTER EN TÉCNICAS ESTADÍSTICAS

Curso 2021/2022

Page 2: Programación Lineal y Entera

Tema 3: Programación entera

Introducción y ejemplos

Técnicas de resolución: Ramificación y Acotación (Branch andBound)

Formulando relaciones lógicas con variables binarias

Introducción a los algoritmos heurísticosAlgoritmos heurísticos

Page 3: Programación Lineal y Entera

Tema 3: Programación entera

Introducción y ejemplos

Técnicas de resolución: Ramificación y Acotación (Branch andBound)

Formulando relaciones lógicas con variables binarias

Introducción a los algoritmos heurísticosAlgoritmos heurísticos

Page 4: Programación Lineal y Entera

Tema 3: Programación entera

Introducción y ejemplos

Técnicas de resolución: Ramificación y Acotación (Branch andBound)

Formulando relaciones lógicas con variables binarias

Introducción a los algoritmos heurísticosAlgoritmos heurísticos

Page 5: Programación Lineal y Entera

Tema 3: Programación entera

Introducción y ejemplos

Técnicas de resolución: Ramificación y Acotación (Branch andBound)

Formulando relaciones lógicas con variables binarias

Introducción a los algoritmos heurísticosAlgoritmos heurísticos

Page 6: Programación Lineal y Entera

Tema 3: Programación entera

Introducción y ejemplos

Técnicas de resolución: Ramificación y Acotación (Branch andBound)

Formulando relaciones lógicas con variables binarias

Introducción a los algoritmos heurísticosAlgoritmos heurísticos

Page 7: Programación Lineal y Entera

La programación lineal y entera

Los modelos de programación entera son una extensión de losmodelos lineales en los que algunas variables toman valoresenteros.

En ocasiones estas variables enteras sólo toman valores 0 o 1,ya que este tipo de variables permiten representar condicioneslógicas.

Este tipo de modelos permite representar sistemas máscomplejos.

A cambio, la resolución de los mismos se complica.

Page 8: Programación Lineal y Entera

Algunos modelos básicos son, entre otros:

I El problema del transporte.I Los problemas de asignación.I El problema del viajante.I . . .

Page 9: Programación Lineal y Entera

Resolución del problema

La primera idea a la hora de abordar la resolución de unproblema de programación entera es redondear la soluciónobtenida al relajar la condición de integralidad. Pero no es unabuena estrategia ya que:

1. No siempre proporciona la solución óptima.2. No garantiza la obtención de soluciones factibles.

Page 10: Programación Lineal y Entera

Ejemplo

I min z = x1 − 11x2

sujeto a:

I −x1 + 10x2 ≤ 40I 10x1 + 10x2 ≤ 205I x1, x2 ≥ 0 y enteras.

La solución óptima sin considerar que las variables son enterases x1 = 15 y x2 = 5′5. Posibles redondeos son x1 = 15 yx2 = 6 que no verifica la primera restricción y x1 = 15 y x2 = 5que es factible con z = −40. La solución x1 = 10 y x2 = 5 esfactible y z = −45.

Page 11: Programación Lineal y Entera

Otra idea es que dado que un problema lineal continuo es“sencillo” de resolver, vamos a desarrollar métodos queempleen la programación lineal continua como herramientapara resolver el problema entero.Los métodos más usados parten de la relajación del problema,esto es, eliminar la condición de que las variables tomenvalores enteros.El gran problema es que los vértices de la región factiblecontinua no tienen porqué ser enteros y obtener la envolturaconvexa puede ser muy costoso.Los métodos más extendidos de solución son:

Page 12: Programación Lineal y Entera

I Métodos enumerativos: consisten en enumerar de formaimplícita las soluciones y mediante tests o cotas para lafunción objetivo ir descartándolas antes de conocerlasexplícitamente. De entre estos métodos, el más conocidoes el de Branch & Bound (ramificación y acotación) quedivide el problema en problemas menores (ramificación) ydescarta algunos de ellos (acotación).

I Métodos de planos de corte: introduce nuevasrestricciones al problema relajado hasta lograr que lasolución óptima del nuevo problema sea entero.

I Métodos híbridos: combinan las dos estrategias anteriores(branch & cut).

Page 13: Programación Lineal y Entera

Motivación y ejemplo branch & bound

I max z = 8x1 + 5x2

sujeto a:

I x1 + x2 ≤ 6I 9x1 + 5x2 ≤ 45I x1, x2 ≥ 0 y enteras.

La solución al problema relajado (sin considerar la restricciónde que las variables tienen que ser enteras) es el punto(3’75,2’25) pero la solución al problema entero es (5,0).

Page 14: Programación Lineal y Entera

(3’75,2’25): óptimo del problema relajado

(5,0): óptimo del problema entero

9X+5Y=45

X+Y=6 (0,6)

Curva de nivel del objetivo

max 8X+5Y sujeto a: 9X+5Y≤45 X+Y≤6 X≥0, Y≥0 X,Y enteras

Page 15: Programación Lineal y Entera

Subproblema L1, LB1=-∞ Z*=-41’25, X=(3’75,2’25)

Subproblema L2, LB2=-41’25 Z*=-39, X=(3,3)

Subproblema L3, LB3=-41’25 Z*=-41, X=(4,1’8)

Subproblema L5, LB5=-41 No tiene soluciones factibles

Subproblema L4, LB4=-41 Z*=-40’55, X=(4’44,1)

Subproblema L7, LB7=-40’55 Z*=-40<-39, X=(5,0)

Subproblema L6, LB6=-40’55 Z*=-37>-39, X=(4,1)

LB= -∞, UB=+ ∞, L={1}, Xbest={}

LB= -41’25, UB=+ ∞, Xbest={}, L={2,3}

LB= -41’25, UB=-39, Xbest=(3,3), L={3}

X1≤3 X1≥4

X2≤1 X2≥2

X1≤4 X1≥5

LB= -41, UB=-39, Xbest=(3,3), L={4,5}

LB= -41, UB=-39, Xbest=(3,3), L={5,6,7}

“podamos” y candidato

a óptimo

“podamos”

LB= -40’55, UB=-39,

Xbest=(3,3), L={6,7}

LB= -40’55, UB=-39,

Xbest=(3,3), L={7}

LB= -40’55, UB=-40,

Xbest=(5,0), L={}

“podamos”

La solución óptima es (5,0) y el objetivo óptimo -40

“podamos” y obtenemos

el óptimo

Page 16: Programación Lineal y Entera

(3’75,2’25): óptimo del problema relajado (subproblema 1)

9X+5Y=45

X+Y=6

max 8X+5Y sujeto a: 9X+5Y≤45 X+Y≤6 X≥0, Y≥0 X,Y enteras

X≤3

(3,3): óptimo del subproblema 2

X≥4

(4,1’8): óptimo del subproblema 3

Subproblemas 2 y 3: intuición del algoritmo de ramificación y acotación

Page 17: Programación Lineal y Entera

Método Branch & Bound: ideas generales

I Descompone el problema en varios con región factiblemás pequeña.

I Resuelve los subproblemas: descompone recursivamenteen problemas de menor tamaño.

I Usa cotas superiores, a partir de subproblemas consolución entera, para identificar los subproblemas que novan a generar la solución.

Page 18: Programación Lineal y Entera

El Método Branch & Bound (para minimizar unafunción z)

I Paso 0 Resolver el problema original relajado (sinconsiderar la restricción de que las variables han de serenteras). Si el problema no es factible se para. Si lasolución es entera será la óptima. Si no, considerar la cotasuperior para z∗ (el óptimo de z) como +∞ y la inferiorcomo la función objetivo del problema relajado. Ir al Paso1.

I Paso 1 Ramificar: se escoge una variable que ha de serentera y no lo es y se generan mediante ramificación dosproblemas. Estos problemas se colocan ordenadamenteen una lista de problemas que se resuelven, en serie oparalelo. Ir al Paso 2.

Page 19: Programación Lineal y Entera

I Paso 2I Si la solución de un subproblema es entera se poda. Si el

valor de la función objetivo es menor que la cota superioractual, entonces se actualiza con el nuevo valor,disponemos de un candidato a óptimo y se actualizantodas las cotas superiores. Si no, se desecha estasolución. Ir a Paso 3.

I Si la solución no es entera y el valor de la función objetivoes mayor que la cota inferior de su nodo, entonces seactualiza dicha cota. Ir al Paso 1.

I Si la solución no es entera y el valor de la función objetivoes mayor que la cota superior de su nodo, entonces sepoda. Ir a Paso 3.

I Si la solución es infactible, entonces se poda. Ir al Paso 3.

I Paso 3 Si se han resuelto todos los problemas de la listael procedimiento concluye con un candidato que será elóptimo. Si no, resolver los problemas pendientes deprocesar e ir al Paso 2.

Page 20: Programación Lineal y Entera

Branch & Bound: comentarios

I Es necesario decidir qué variable utilizar para lasramificaciones.

I Los problemas almacenados a resolver se pueden tratarmediante estrategias en anchura, en profundidad o mixtas.

I El método se aplica a problemas enteros puros o aproblemas enteros mixtos.

I Actualmente, se pueden resolver eficazmente problemasde programación entera de más de 10000 variables.

I En la hoja resumen de algoritmos encontramos unadescripción detallada del algoritmo.

Page 21: Programación Lineal y Entera

Resolvemos ahora el ejemplo siguiendo la hojaresumen de algoritmos

Para empezar escribimos el objetivo como de minimizar:

min−8x1 − 5x2.

Ya podemos empezar a aplicar el algoritmo de ramificación yacotación.

Inicialización. Definimos la cota inferior LB = −∞ y la cotasuperior UB = +∞. Definimos L1 como la relajación delproblema a resolver, con (cota inferior para el objetivo)potencial LB1 = −∞. Definimos L = {1}, tot=1 y xbest = ∅.

Page 22: Programación Lineal y Entera

Paso principal. Como L = {1}, tomamos L1. ActualizamosL = ∅. Al resolver L1 obtenemos x = (3′75,2′25) y z = −41′25.Como x no es entera y z = −41′25 < UB = +∞:

I Variable de ramificación. x1 y x2 están igual de lejos deser enteras. Elegimos x1 por tener índice más bajo.

I Ramificamos. Actualizamos L = ∅ ∪ {2,3}.I En L2 incorporamos la restricción x1 ≤ 3 = b3′75c.

Potencial de L2: LB2 = −41′25.I En L3 incorporamos la restricción x1 ≥ 4 = d3′75e.

Potencial de L3: LB3 = −41′25.

Paso de control. Actualizamos cota inferior.LB = minj∈L LBj = min{LB2,LB3} = −41′25. L 6= ∅ yLB = −41′25 < UB = +∞. Repetimos el paso principal.

Page 23: Programación Lineal y Entera

Paso principal. L = {2,3} y L2 y L3 tienen el mismo potencial.Tomamos L2 por tener el índice más bajo. ActualizamosL = {3}. Al resolver L2 obtenemos x = (3,3) y z = −39. Comox sí es una solución entera y z = −39 < UB = +∞:

I Actualizamos cota superior. UB = −39 y xbest = (3,3).I Acotamos. En este caso LB3 = −41′25 < UB = −39, con

lo que no eliminamos ningún subproblema de L.Paso de control. Actualizamos cota inferior.LB = LB3 = −41′25. L 6= ∅ y LB = −41′25 < −39. Repetimosel paso principal.

Page 24: Programación Lineal y Entera

Paso principal. Como L = {3}, tomamos L3. ActualizamosL = ∅. Al resolver L3 obtenemos x = (4,1′8) y z = −41. Comox no es entera y z = −41 < UB = −39:

I Variable de ramificación. Elegimos x2 por ser la únicavariable no entera.

I Ramificamos. Actualizamos L = ∅ ∪ {4,5}.I En L4 incorporamos la restricción x2 ≤ 1. Potencial de L4:

LB4 = −41.I En L5 incorporamos la restricción x2 ≥ 2. Potencial de L5:

LB5 = −41.

Paso de control. Actualizamos cota inferior.LB = min{LB4,LB5} = −41. L 6= ∅ y LB = −41 < UB = −39.Repetimos el paso principal.

Page 25: Programación Lineal y Entera

Paso principal. L = {4,5}. L4 y L5 tienen el mismo potencial.Tomamos L4 por tener el índice más bajo. ActualizamosL = {5}. Al resolver L4 obtenemos x = (4′44,1) y z = −40′55.Como x no es entera y z = −40′55 < UB = −39:

I Variable de ramificación. Elegimos x1 por ser la únicavariable no entera.

I Ramificamos. Actualizamos L = {5} ∪ {6,7}.I En L6 incorporamos la restricción x1 ≤ 4. Potencial de L6:

LB6 = −40′55.I En L7 incorporamos la restricción x1 ≥ 5. Potencial de L7:

LB7 = −40′55.

Paso de control. Actualizamos cota inferior.LB = min{LB5,LB6,LB7} = −41. L 6= ∅ yLB = −41 < UB = −39. Repetimos el paso principal.

Page 26: Programación Lineal y Entera

Paso principal. L = {5,6,7}. Tomamos L5 por ser elsubproblema con mejor potencial. Actualizamos L = {6,7}. Alresolver L5 vemos que no tiene soluciones factibles, con lo quevamos directamente al paso de control.Paso de control. Actualizamos cota inferior.LB = min{LB6,LB7} = −40′55. L 6= ∅ yLB = −40′55 < UB = −39. Repetimos el paso principal.

Paso principal. L = {6,7}. L6 y L7 tienen el mismo potencial.Tomamos L6 por tener el índice más bajo. ActualizamosL = {7}. Al resolver L6 obtenemos x = (4,1) yz = −37 > UB = −39. Esta solución es peor que xbest , con loque vamos directamente al paso de control.Paso de control. Actualizamos cota inferior.LB = LB7 = −40′55. L 6= ∅ y LB = −40′55 < UB = −39.Repetimos el paso principal.

Page 27: Programación Lineal y Entera

Paso principal. L = {7}. Tomamos L7 y actualizamos L = ∅.Al resolver L7 obtenemos x = (5,0) y z = −40. x es unasolución entera y z = −40 < UB = −39:

I Actualizamos cota superior. UB = −40 y xbest = (5,0).I Acotamos. En este caso L = ∅, con lo que no hay

subproblemas que eliminar.Paso de control. Como L = ∅ no actualizamos la cota inferior.L = ∅ con lo que el algoritmo termina.

La solución óptima es (5,0) y el objetivo óptimo -40.

Page 28: Programación Lineal y Entera

Otro ejemplo de aplicación de branch & bound

I min z = x1 + x2

sujeto a:

I 20x1 + 25x2 ≥ 750I 20x1 + 15x2 ≥ 600I x1, x2 ≥ 0 y enteras.

Page 29: Programación Lineal y Entera

Aplicamos el algoritmo de ramificación y acotación a estesegundo ejemplo.

Inicialización. Definimos la cota inferior LB = −∞ y la cotasuperior UB = +∞. Definimos L1 como la relajación delproblema a resolver, con (cota inferior para el objetivo)potencial LB1 = −∞. Definimos L = {1}, tot=1 y xbest = ∅.

Page 30: Programación Lineal y Entera

Paso principal. Como L = {1}, tomamos L1. ActualizamosL = ∅. Al resolver L1 obtenemos x = (18′75,15) y z = 33′75.Como x no es entera y z = 33′75 < UB = +∞:

I Variable de ramificación. Elegimos xM por ser la únicavariable no entera.

I Ramificamos. Actualizamos L = ∅ ∪ {2,3}.I En L2 incorporamos la restricción x1 ≤ 18. Potencial de L2:

LB2 = 33′75.I En L3 incorporamos la restricción x1 ≥ 19. Potencial de L3:

LB3 = 33′75.

Paso de control. Actualizamos cota inferior.LB = minj∈L LBj = min{LB2,LB3} = 33′75. L 6= ∅ yLB = 33′75 < UB = +∞. Repetimos el paso principal.

Page 31: Programación Lineal y Entera

Paso principal. L = {2,3} y L2 y L3 tienen el mismo potencial.Tomamos L2 por tener el índice más bajo. ActualizamosL = {3}. Al resolver L2 obtenemos x = (18,16) y z = 34.Como x sí es una solución entera y z = 34 < UB = +∞:

I Actualizamos cota superior. UB = 34 y xbest = (18,16).I Acotamos. En este caso LB3 = 33′75 < UB = 34, con lo

que no eliminamos ningún subproblema de L.Paso de control. Actualizamos cota inferior.LB = LB3 = 33′75. L 6= ∅ y LB = 33′75 < 34. Repetimos elpaso principal.

Page 32: Programación Lineal y Entera

Paso principal. Como L = {3}, tomamos L3. ActualizamosL = ∅. Al resolver L3 obtenemos x = (19,14′8) y z = 33′8.Como x no es entera y z = 33′8 < UB = 34:

I Variable de ramificación. Elegimos x2 por ser la únicavariable no entera.

I Ramificamos. Actualizamos L = ∅ ∪ {4,5}.I En L4 incorporamos la restricción x2 ≤ 14. Potencial de L4:

LB4 = 33′8.I En L5 incorporamos la restricción x2 ≥ 15. Potencial de L5:

LB5 = 33′8.

Paso de control. Actualizamos cota inferior.LB = min{LB4,LB5} = 33′8. L 6= ∅ y LB = 33′8 < UB = 34.Repetimos el paso principal.

Page 33: Programación Lineal y Entera

Paso principal. L = {4,5} y L4 y L5 tienen el mismo potencial.Tomamos L4 por tener el índice más bajo. ActualizamosL = {5}. Al resolver L4 obtenemos x = (20,14) y z = 34.Como x sí es una solución entera y z = 34 = UB = 34:

I Actualizamos cota superior. UB = 34 yxbest = {(18,16), (20,14)}.

I Acotamos. En este caso LB5 = 33′8 < UB = 34, con loque no eliminamos ningún subproblema de L.

Paso de control. Actualizamos cota inferior.LB = LB5 = 33′8. L 6= ∅ y LB = 33′8 < 34. Repetimos el pasoprincipal.

Page 34: Programación Lineal y Entera

Paso principal. L = {5}. Tomamos L5 y actualizamos L = ∅.Al resolver L5 obtenemos x = (19,15) y z = 34. x es unasolución entera y z = 34 = UB = 34:

I Actualizamos cota superior. UB = 34 yxbest = {(18,16), (20,14), (19,15)}.

I Acotamos. En este caso L = ∅, con lo que no haysubproblemas que eliminar.

Paso de control. Como L = ∅ no actualizamos la cota inferior.L = ∅ con lo que el algoritmo termina.

La solución óptima es {(18,16), (20,14), (19,15)} y el objetivoóptimo 34.

Page 35: Programación Lineal y Entera

Proporcionamos, sin hacer la demostración, el siguienteresultado:Teorema. Sea (P) un problema de programación lineal enteraen el que la región factible es no vacía y acotada, entonces elalgoritmo de ramificación y acotación que hemos descritoencuentra la solución óptima en una cantidad finita de pasos.

Page 36: Programación Lineal y Entera

Ejemplo con variables binarias: Problema de optimizaruna localización

Se dispone de 3 posibles ubicaciones para localizar un serviciode ambulancias. Dependiendo de la ubicación, el posibleservicio supondrá un coste diario de mantenimiento y podrásatisfacer una demanda total máxima, según la siguiente tabla:

Ubicación 1 2 3Coste de mantenimiento 10 14 13Demanda total máxima 25 32 30

Cuatro grandes hospitales, cada uno con una cierta demandaestimada de servicios diarios deben ser atendidosexactamente por un servicio de ambulancias. Esta demanda,así como el coste medio por desplazamiento estimado derealizar un viaje de ambulancia desde cada servicio, está dadopor la siguiente tabla:

Page 37: Programación Lineal y Entera

Hospital 1 2 3 4Demanda 15 16 10 14Ubicación 1 4 2 3 2Ubicación 2 3 3 5 1Ubicación 3 1 5 2 4

Definimos un modelo matemático: Para cada i ∈ {1,2,3,4},que denotará los distintos hospitales, y cada j ∈ {1,2,3}, quedenotará las distintas ubicaciones, definimos las variables:

yj =

{1 si se construye el servicio de ambulancias en la ubicación j .0 en otro caso.

xij =

{1 si se asigna el hospital i al servicio de ambulancias j .0 en otro caso.

El modelo de programación lineal puede escribirse como:

Page 38: Programación Lineal y Entera

Minimizar 15(4x11 + 3x12 + 1x13) + 16(2x21 + 3x22 + 5x23)+

10(3x31 + 5x32 + 2x33) + 14(2x41 + 1x42 + 4x43)+10y1 + 14y2 + 13y3

sujeto a x11 + x12 + x13 = 1x21 + x22 + x23 = 1x31 + x32 + x33 = 1x41 + x42 + x43 = 115x11 + 16x21 + 10x31 + 14x41 ≤ 25y1

15x12 + 16x22 + 10x32 + 14x42 ≤ 32y2

15x13 + 16x23 + 10x33 + 14x43 ≤ 30y3

xij , yj ∈ {0,1}; ∀i ∈ {1,2,3,4},∀j ∈ {1,2,3}A partir de aquí, resolviendo el modelo, se determina losservicios de ambulancias que deben ser creados y loshospitales que debe servir cada una, minimizando los costesde desplazamiento más los costes de mantenimiento.

Page 39: Programación Lineal y Entera

Nociones básicas de teoría grafos

Un grafo G es un par (N,M) consistente en un conjunto N deelementos llamados nodos o vértices y un conjunto M cuyoselementos son subconjuntos de dos elementos de N, y quellamaremos arcos o aristas. Además, usaremos n y m parareferirnos al número total de nodos y aristas respectivamente.Un grafo orientado o dirigido es aquel en el que los arcos sonpares ordenados; el arco (i , j) empieza en el nodo i y terminaen el nodo j . En este caso M ⊆ N × N y, si i 6= j , (i , j) 6= (j , i).En un grafo no orientado, (i , j) y (j , i) representan el mismoarco. En principio, no consideraremos grafos en los que haylazos, es decir, arcos de la forma (i , i).Un grafo es completo si todas las aristas posibles estánpresentes.

Page 40: Programación Lineal y Entera

Un subgrafo de un grafo G es un grafo G′ = (N ′,M ′) que tienetodos sus vértices y aristas en G, es decir, N ′ ⊆ N y M ′ ⊆ M.Un subgrafo de expansión de G es un subgrafo G′ = (N ′,M ′)tal que N ′ = N.Si la arista (i , j) está presente en un grafo G, decimos que losnodos i y j son adyacentes y también que son incidentes con laarista (i , j) y que la arista (i , j) es incidente con los nodos i y j .El grado de un nodo cualquiera de un grafo G es el número dearistas incidentes con él.Sea G un grafo no orientado y sea (a1,a2, . . . ,ar ) unasecuencia de aristas en G. Si existen vértices (v0, v1, . . . , vr )tales que, para l ∈ {1,2, . . . , r}, al = (vl−1, vl), decimos que lasecuencia es una cadena. Para referirnos a una cadenausaremos indistintamente la secuencia de aristas o lasecuencia de nodos que la forma.

Page 41: Programación Lineal y Entera

Tenemos los siguientes tipos de cadenas: 1

Cadena cerrada: Una cadena en la que v0 = vr .Camino: Una cadena en la que todos los vértices son

distintos.Circuito o ciclo: Una cadena cerrada en la que no hay más

nodos coincidentes que el primero y el último.

1No es raro encontrar definiciones ligeramente distintas de estosconceptos; por ejemplo, se puede exigir que en una cadena no se repitaninguna arista, se puede definir un camino como una cadena en la que losúnicos nodos coincidentes pueden ser el primero y el último. Es decir, uncircuito sería un tipo especial de camino. A veces también se define un ciclocomo una cadena cerrada sin más.

Page 42: Programación Lineal y Entera

Un grafo no orientado

1

23

4

5 6

Page 43: Programación Lineal y Entera

Un grafo orientado

1

2

3

4

5

Page 44: Programación Lineal y Entera

Un circuito hamiltoniano en un grafo G es un circuito quecontiene a todos los vértices de G (por ser circuito, sólo podrárepetir el primer nodo, que coincidirá con el último). Un grafoque contiene a un circuito hamiltoniano se llama grafohamiltoniano.Supongamos ahora que tenemos un grafo en el que cadaarista tiene asociado un coste (tiempo que se tarda enatravesarla). El problema del viajante de comercio consisteen encontrar un circuito hamiltoniano que minimice el tiempoque se tarda en recorrerlo. Es decir, nuestro viajante tiene quevisitar todos los nodos (ciudades) y quiere tardar lo menosposible sin repetir ciudad.

Page 45: Programación Lineal y Entera

El problema del viajante de comercio

Presentamos ahora el problema del viajante de comercio, TSPpor sus siglas en inglés (traveling salesman problem). Este es,sin duda, uno de los problemas más estudiados en eldesarrollo del diseño de algoritmos y de la teoría decomplejidad computacional. Recordemos que un circuitohamiltoniano en un grafo G es un circuito que recorre todos losnodos del grafo (por ser circuito, todos los nodos serándistintos, salvo el primero y el último que coincidirán). Uncamino hamiltoniano en un grafo G es un camino que recorretodos los nodos del grafo (una única vez). Claramente, todocircuito hamiltoniano puede transformarse en un caminohamiltoniano sin más que eliminar uno de sus arcos.DEFINICIÓN El problema del viajante de comercio en un grafono orientado G con costes c consiste en encontrar un circuitohamiltoniano en G de coste mínimo.

Page 46: Programación Lineal y Entera

Problema del viajante de comercio

3

7

2

4

3

1

2

3

4

Page 47: Programación Lineal y Entera

Solución del problema del viajante de comercio

3

7

4

3

1

2

3

4

Page 48: Programación Lineal y Entera

En el ejemplo de la Figura anterior es fácil ver que no hayningún circuito hamiltoniano que contenga al arco (2,3), ya queesto nos obligaría necesariamente a repetir algún nodoademás del nodo inicial y final del circuito.Una de las razones por las que este problema ha sido tanestudiado es porque, a pesar de la sencillez de su enunciado,es un problema realmente difícil de resolver. No sólo no hayalgoritmos para resolverlo en tiempo polinomial sino que nisiquiera hay algoritmos para verificar una solución en tiempopolinomial. Además, otro motivo para su popularidad es quecaptura la esencia combinatoria de muchos problemas másgenerales muy habituales en la práctica, principalmenteproblemas de enrutamiento, con lo que cualquier progreso enla resolución de este problema conllevaría progreso en laresolución de otros muchos problemas.

Page 49: Programación Lineal y Entera

Este problema puede ser formulado desde distintos campos yen versiones ligeramente distintas, aunque todas ellas sonesencialmente igual de complejas de analizar. A continuaciónpresentamos un par de observaciones en este sentido:

I El problema se puede definir análogamente para grafosorientados, sin que esto cambie la complejidad deresolución del problema.

I El problema de determinar simplemente si un grafo admiteun circuito hamiltoniano es en sí un problema difícil. Si nosdan una cadena podemos verificar fácilmente si es uncircuito hamiltoniano o no sin más que recorrerlaverificando que es un circuito que incluye a todos losnodos del grafo.

I Es habitual asumir que todos los costes son no negativos.

Page 50: Programación Lineal y Entera

Tras plantear el problema del viajante como un problema deoptimización en redes y como un problema de optimización engeneral, vamos a ver su representación algebraica como unproblema de programación lineal entera:

min∑k∈M

ck fk

s.a (1)∑

k∈MOi

fk = 1 i ∈ N

(2)∑

k∈MTi

fk = 1 i ∈ N

(3)∑

k∈M(X)

fk ≤ |X | − 1 X ( N

fk ∈ {0,1} k ∈ M.

Page 51: Programación Lineal y Entera

A cada arco del problema le asociamos una variable fk que vaa valer 0si dicho arco no se usa para construir el ciclo y va avaler 1 en otro caso.Las restricciones en (1) y (2) nos aseguran que en cada nodoentra exactamente un arco y sale exactamente un arcoentonces, ¿es necesario imponer la condición (3)? Sí, sin ellapodríamos tener soluciones con varios subcircuitos. Esto loilustramos en la Figura siguiente.La gran dificultad del problema del viajante es que es unproblema de programación entera puro. A diferencia de otrosproblemas, no hay ninguna garantía de que las soluciones alproblema de programación lineal relajado vayan a ser enteras.

Page 52: Programación Lineal y Entera

Otro problema del viajante de comercio

●●

●●

1

2

3

4

5

6

7

Page 53: Programación Lineal y Entera

Subcircuitos factibles en el problema del viajante si noimponemos las restricciones dadas en (3)

1

2

3

4

5

6

7

Page 54: Programación Lineal y Entera

¿Cómo atacar el problema del viajante?

Por supuesto, un primer enfoque sería fuerza bruta,examinando todas las permutaciones de las n ciudades ymirando cuál es la de mínimo coste de entre las que induzcanun circuito hamiltoniano. Como el número de permutaciones den elementos es n! la velocidad de estos algoritmos nuncamejoraría O(n!), con lo que serían inútiles ya en problemas de25 ciudades.Un primer enfoque sería usar algoritmos que, según el análisisdel peor caso son exponenciales, pero que tienen un buencomportamiento en la práctica (como el Símplex).Desafortunadamente, no existe ningún algoritmo con estascaracterísticas para el problema del viajante. Se conocenalgoritmos exactos con una velocidad exponencial del ordenO(2n), que no son prácticos para problemas grandes.

Page 55: Programación Lineal y Entera

Ejemplo: cadenas universales de ADN

Tenemos una colección de cadenas de ADN, todas ellas delongitud k . A partir de ella queremos construir una cadenauniversal que contenga como subcadenas a todas las cadenasoriginales. Claramente esto puede hacerse sin más queconcatenar todas las cadenas originales. Sin embargo, nosgustaría que esta cadena universal fuese lo más pequeñaposible.

Page 56: Programación Lineal y Entera

Para ello, si tenemos una cadena que termina con CTTAGG yla siguiente empieza CTTAGG, entonces podríamosconcatenarlas y eliminar la parte común. De esta forma, lacadena grande contendría a las dos cadenas iniciales perohabríamos ahorrado espacio al aprovechar el solapamiento. Acontinuación vamos a ver que el problema de encontrar lacadena universal de ADN longitud mínima se puede modelarcomo un problema del viajante. La clave está en que elproblema de la cadena universal es un problema de “decidir enqué orden concatenamos nuestras cadenas de ADN” y elproblema del viajante es “decidir en qué orden visitamos lasciudades”.

Page 57: Programación Lineal y Entera

En la tabla siguiente representamos una situación con 5pequeñas cadenas de ADN de tamaño 11. Sabemos que, en elpeor de los casos, podremos concatenar todas las cadenasobteniendo una cadena universal de tamaño 5 · 11 = 55. Paradefinir el problema del viajante partiremos de un grafo dirigidocompleto G = (N,M), donde N = {1,2,3,4,5}. Es decir, cadacadena de ADN es un nodo en nuestro grafo. Además, el costedel arco (i , j) será 11 menos el solapamiento que haya entre elfinal de la cadena i y el principio de la cadena j (cuanto mayorsea el solapamiento, mayor será el “ahorro”). Nótese que, engeneral, los arcos (i , j) y (j , i) tienen costes distintos. Porejemplo, en nuestra red tenemos que el arco (1,2) tiene uncoste de 11− 5 = 6 mientras que el arco (2,1) tiene un costede 11− 1 = 10.

Page 58: Programación Lineal y Entera

Cadenas de ADN

T H H C D T D G H A AD G H A A D B B T T TA T B B G A G B H H AD D D G G G B B T D TD D D A H H G T T A A

Una vez que hemos definido este grafo y estos costes, estáclaro que cualquier circuito que definamos será unaconcatenación de las cadenas de ADN originales cuyo costetendrá en cuenta el aprovechamiento de solapamientosasociado. Por tanto, un óptimo del problema del viajante deesta red se corresponderá con una cadena universal de ADNde longitud mínima.

Page 59: Programación Lineal y Entera

Un ejemplo de 6 ciudades

Page 60: Programación Lineal y Entera

Resolviendo informáticamente TSP

En el archivo “TSP para CONCORDE 6.txt” presentamos laforma de guardar los datos para resolverlos a través de lapágina siguiente:http://www.neos-server.org/neos/solvers/co:concorde/TSP.html(este solver usa métodos exactos o heurísticos, segúnelijamos; sólo para problemas simétricos). Además, losllamados archivos .tsp debidamente creados tambiénpodremos resolverlos con R (usando la librería TSP, permiteresolver problemas asimétricos, ya que tiene una función quetransforma problemas asimétricos en simétricos duplicando losnodos).En el archivo “TSP con R (script).txt” tenemos el código pararesolver con R el ejemplo anterior de 6 ciudades.

Page 61: Programación Lineal y Entera

Algoritmos heurísticos

En el campo de la optimización, hay cierta ambigüedad en ladefinición de lo que es un heurístico y no es raro ver utilizaresta palabra con distintos significados.

I En su sentido más amplio, un algoritmo heurístico será unalgoritmo para un problema de optimización basado enuna estrategia (idea) transparente (habitualmente sencilla)para buscar dentro del conjunto de soluciones factibles yque no presenta ninguna garantía de encontrar el óptimo.

I En un sentido un poco más específico, un heurístico es unalgoritmo para el que nadie ha sido capaz de probar quelleva a soluciones razonablemente óptimas en un tiemporazonable (polinomial), pero cuya idea parece asegurar unbuen comportamiento para la mayoría de los ejemplos delproblema en cuestión.

Page 62: Programación Lineal y Entera

Según la segunda definición, en cuanto hay alguna cota acercadel grado de optimalidad del algoritmo ya tendríamos quehablar de un algoritmo aproximado o exacto y no de unheurístico. Una propiedad general de los heurísticos es queson muy robustos, en el sentido de que esa estrategiatransparente de búsqueda puede trasladarse fácilmente deunos problemas a otros; siendo esta una de las razones por laque los heurísticos se han vuelto tan populares en la práctica:son habitualmente fáciles de implementar y “portables” de unosproblemas a otros. En esta sección, aunque existe diversidadde enfoques que uno puede elegir al optar por este tipo dealgoritmos, comenzamos por presentar un tipo de algoritmosheurísticos: los llamados heurísticos basados en “técnicas debúsqueda local”. Para facilitar la exposición, la mayor partedel tiempo consideraremos que el problema a resolver es unproblema del viajante sobre un grafo no orientado completo,aunque las técnicas que vamos a definir son técnicasgenerales que se pueden aplicar a otros muchos problemas.

Page 63: Programación Lineal y Entera

Heurísticos de búsqueda local. Algoritmos debúsqueda local

Los algoritmos de búsqueda local ya sean exactos,aproximados, o heurísticos se basan en una sencilla idea.Partiendo de una solución factible, buscamos mejoras en unentorno de ella. En un problema de minimización, elfuncionamiento general de un algoritmo de búsqueda local esel siguiente:

Algoritmo de búsqueda local (Esquema general)

I Paso 1: Elegimos una solución factible x de nuestroproblema de optimización.

I Paso 2: Buscar un “vecino” y de x tal que c(y) < c(x). Siexiste, reemplazar x por y .

I Paso 3: Repetir el Paso 2 hasta que ningún vecino de lasolución actual la mejore. Es decir, continuar hasta quelleguemos a un óptimo local.

Page 64: Programación Lineal y Entera

Como ya hemos comentado, en cierto modo el Símplex es unalgoritmo exacto que se puede ver como un algoritmo debúsqueda local en el que, en cada paso, nos movemos de unpunto extremo de la región factible a otro. Este algoritmo semueve de solución básica factible en solución básica factible,de punto extremo en punto extremo de la región factible; los“vecinos” de un punto extremo son aquellos puntos extremosadyacentes con él (unidos por una arista de la región factible).

A pesar de su sencillez, hay varios elementos clave a tener encuenta a la hora de diseñar un algoritmo de búsqueda local:

I Elección apropiada de los entornos: Este es el principalingrediente del que depende un algoritmo de búsquedalocal. Por un lado, interesa que los entornos seanrelativamente pequeños, para que el Paso 2 del algoritmosea rápido. Por otro lado, cuanto más pequeños sean losentornos más riesgo habrá de que el algoritmo termine enóptimos locales, que pueden estar muy lejos del óptimoglobal.

Page 65: Programación Lineal y Entera

I Solución inicial: El resultado final de un algoritmo debúsqueda local puede depender crucialmente de lasolución inicial escogida. Ésta puede elegirsealeatoriamente o utilizando algún otro algoritmo previo(Christofides, por ejemplo, para el problema del viajante).De todos modos, para mitigar un poco la dependencia dela solución inicial, es habitual ejecutar el algoritmomúltiples veces con diferentes soluciones iniciales.

I Criterio de mejora: En el Paso 2, hay dos formasprincipales de elegir la nueva solución y . Elegir la primerasolución y que encontremos en el entorno de x y quemejore a x . Elegir la mejor solución y del entorno de x . Laprimera opción asegura que el algoritmo realiza másrápidamente cada iteración y la segunda permite darpasos más grandes en cada iteración.

Page 66: Programación Lineal y Entera

En el caso del problema del viajante sobre un grafo completo,la búsqueda de una solución inicial es trivial, ya que cualquiercadena cerrada que contenga a todos los nodos del grafo(repitiendo sólo el primero y el último) será una soluciónfactible. En lo que se refiere a la definición de entornos, losmás populares son los basados en intercambios de aristas.

DEFINICIÓN Supongamos que tenemos un circuitohamiltoniano con dos aristas {i , j}, {k , l} incidentes en 4 nodosdistintos (es decir, |{i , j , k , l}| = 4) y tales que el tour visita estosnodos en el orden i, j, k, l. Entonces, el 2-intercambioasociado con las aristas {i , j} y {k , l} consiste enreemplazarlas por las aristas {i , k} y {j , l}.

Page 67: Programación Lineal y Entera

Un 2-intercambio en un circuito hamiltoniano

●●

● ●

0

1

23

4

5

6

7 8

9

Page 68: Programación Lineal y Entera

Vamos a considerar la Figura anterior para ilustrar un2-intercambio en un circuito hamiltoniano. Las flechassimplemente marcan un posible sentido para recorrer elcircuito. Tomamos las aristas {2,3} y {5,6} y lasreemplazamos por las aristas {2,5} y {3,6}. Se origina elcircuito hamiltoniano de la Figura siguiente.

Nótese que un 2-intercambio en un circuito hamiltonianosiempre dará lugar a un nuevo circuito hamiltoniano. Ladiferencia de coste entre el circuito original y el nuevo circuitose corresponderá con la diferencia de costes entre las aristasintercambiadas; algunas aristas pueden recorrerse ahora ensentido contrario, pero en el caso del problema del viajante noorientado el coste de una arista es independiente del sentidoen el que se recorra.

Page 69: Programación Lineal y Entera

●●

● ●

0

1

23

4

5

6

7 8

9

Page 70: Programación Lineal y Entera

Cuando consideramos que los vecinos de un circuitohamiltoniano τ son aquellos circuitos hamiltonianos que seencuentran a un 2-intercambio de distancia de τ , es fácilcomprobar que todo circuito τ tendrá n(n − 3)/2 vecinos.La definición anterior de 2-intercambio se puede modificarconvenientemente para definir k-intercambios. Cuanto mayorsea k , mayor será el entorno de un circuito dado. Másconcretamente, si consideramos k-intercambios, el número devecinos de un circuito será del orden O(nk ).Los algoritmos (heurísticos) de búsqueda local basados enk -intercambios se conocen como k -opt. En la práctica, casisiempre se trabaja con 2-intercambios y 3-intercambios, ya quepara valores mayores de k se ha comprobadoexperimentalmente que el tiempo extra de computación nocompensa la mejora en los resultados.

Page 71: Programación Lineal y Entera

Por ejemplo, en el tiempo de ejecución de un 5-opt seobtendrían mejores resultados ejecutando múltiples 2-optcambiando aleatoriamente el circuito inicial. Sin embargo, elmayor problema de este tipo de algoritmos es que es muyprobable que se detengan en óptimos locales sin ningunagarantía de proximidad al óptimo. A continuación presentamosdos algoritmos que, basándose en las ideas de búsquedalocal, introducen mejoras que permiten reducir la posibilidad de“atascarse” en óptimos locales.

Page 72: Programación Lineal y Entera

Búsqueda tabú

La búsqueda tabú es una técnica general de diseño deheurísticos.Como en otros algoritmos heurísticos, siempre habráprobabilidad positiva de abandonar cualquier óptimo local. Adiferencia de algunos algoritmos puros de búsqueda local, latécnica de búsqueda tabú tiene “memoria” ya que los futurospasos a tomar por el algoritmo usan la información pasada,que podría ser de utilidad. Por ejemplo, esto también se haceen el paso 2 de Lin-Kernighan, cuando usamos la informaciónrelativa a las aristas que hemos cambiado dentro de ese pasoa la hora de estudiar los posibles intercambios futuros.

Page 73: Programación Lineal y Entera

Búsqueda tabú

La principal idea de los algoritmos de búsqueda tabú esguardar información acerca de las últimas soluciones factiblesy usar esta información para generar las nuevas soluciones.La forma de guardar esta información es a través de una listatabú, que contiene un conjunto de soluciones factibles que nopueden ser elegidas en el presente paso. Esta lista se vaactualizando tras cada iteración del algoritmo.Por supuesto, esta metodología es muy general y la eficacia deun algoritmo en esta familia radica en la elección apropiada delas reglas que determinan la actualización de la lista tabú.Un algoritmo determinístico de búsqueda tabú tendría lasiguiente formulación:

Page 74: Programación Lineal y Entera

Algoritmo determinístico de búsqueda tabúPASO 1:

Elegimos una solución factible x del problema. Inicializamosla variable que contiene la información acerca de la mejorsolución encontrada hasta ahora: MEJOR = x . Inicializamos lalista tabú: TABÚ={x} (para asegurar que en este paso no nosquedamos en la misma solución).PASO 2:

A continuación:a) Elegimos la mejor solución y 6∈ TABÚ en el entorno de x .b) Si c(y) < c(MEJOR), MEJOR = y .c) Remplazamos x por y .d) Actualizamos TABÚ según las reglas fijadas.

PASO 3:Aplicamos un criterio de parada para decidir si detenemos el

algoritmo o repetimos el PASO 2 con respecto a la nuevasolución. En caso de terminar, nos quedamos con la MEJORsolución encontrada.

Page 75: Programación Lineal y Entera

Nótese que en la búsqueda tabú no es necesario que lasolución “activa” al final de cada iteración sea la mejorencontrada hasta el momento. Esta información se guarda enla variable MEJOR.En la versión no determinística de este algoritmo introducimosuna aleatorización para asegurar que, en cada paso, laprobabilidad de cambiar a la solución y es más baja cuantomayor sea c(y). En este caso, la expresión del algoritmo seríala siguiente:

Page 76: Programación Lineal y Entera

Algoritmo no determinístico de búsqueda tabúPASO 1:

Elegimos una solución factible x del problema. Inicializamosla variable que contiene la información acerca de la mejorsolución encontrada hasta ahora: MEJOR = x . Inicializamos lalista tabú: TABÚ={x} (para asegurar que en este paso no nosquedamos en la misma solución). Elegimos una funcióndecreciente p que nos devuelva la probabilidad de cambiar.PASO 2:

A continuación:a) Elegimos la mejor solución y 6∈ TABÚ en el entorno de x .b) Si c(y) < c(MEJOR), MEJOR = y .c) Remplazamos x por y con probabilidad p(c(y)− c(x)).d) Actualizamos TABÚ según las reglas fijadas.

PASO 3:Aplicamos un criterio de parada para decidir si detenemos el

algoritmo o repetimos el Paso 2 con respecto a la nuevasolución. En caso de terminar, nos quedamos con la MEJORsolución encontrada.

Page 77: Programación Lineal y Entera

Una aplicación a un problema del viajante de comercio

Page 78: Programación Lineal y Entera

Un algoritmo de búsqueda local simple

Un subviaje inverso ajusta la secuencia de ciudades visitadasen la solución de prueba actual mediante la selección de unasubsecuencia de las ciudades y simplemente invierte el ordenen el cual se visita esa subsecuencia de ciudades. Lasubsecuencia invertida puede consistir cuando menos en dosciudades.Para ilustrar un subviaje inverso, supongamos que la soluciónde prueba inicial del ejemplo de la figura anterior es visitar lasciudades en orden numérico:1-2-3-4-5-6-7-1 Distancia=69Por ejemplo, si selecciona la secuencia 3-4 y se invierte, seobtiene la siguiente nueva solución de prueba:1-2-4-3-5-6-7-1 Distancia=65

Page 79: Programación Lineal y Entera

Observamos que la nueva solución de prueba eliminaexactamente dos ligaduras del viaje previo y los reemplaza porexactamente dos nuevas ligaduras para formar el nuevo viaje.Ésta es una característica de cualquier subviaje inverso,incluso en los que la subsecuencia de ciudades invertida estáformada por más de dos ciudades. Por tanto, un subviajeinverso particular es posible sólo si las dos nuevas ligadurascorrespondientes en realidad existen. Este ejemplo sugiere elsiguiente método heurístico para buscar una buena soluciónfactible para cualquier problema del agente viajero.

Page 80: Programación Lineal y Entera

Algoritmo del subviaje inverso:

I Paso inicial. Empezamos con cualquier viaje factiblecomo solución de prueba inicial.

I Iteración. Para la solución de prueba actual,consideramos todas las formas posibles de realizar unsubviaje inverso (excepto el inverso del viaje completo).Seleccionamos el que proporciona la mayor disminuciónen la distancia viajada para que sea la nueva solución deprueba (los empates se rompen de manera arbitraria).

I Regla de detención. El proceso se detiene cuandoninguna inversión de un subviaje mejora la solución deprueba actual, la cual se acepta como la solución final.

Usuario
Resaltado
Usuario
Resaltado
Page 81: Programación Lineal y Entera

Vamos a aplicar este algoritmo al ejemplo. Se inicia con1-2-3-4-5-6-7-1 como la solución de prueba inicial. Existencuatro posibles subviajes que mejoran esta solución:

1-2-3-4-5-6-7-1 Distancia=69inverso 2-3 1-3-2-4-5-6-7-1 Distancia=68inverso 3-4 1-2-4-3-5-6-7-1 Distancia=65inverso 4-5 1-2-3-5-4-6-7-1 Distancia=65inverso 5-6 1-2-3-4-6-5-7-1 Distancia=66

Las dos soluciones con distancia igual a 65 empatan ya queproporcionan la mayor disminución en la distancia viajada,entonces supongamos que se elige de manera arbitraria laprimera de ellas: 1-2-4-3-5-6-7-1, como la siguiente soluciónde prueba y con lo que se completa la primera iteración.

Usuario
Resaltado
Usuario
Resaltado
Page 82: Programación Lineal y Entera

Segunda iteración: en este caso, existe sólo un subviaje queproporciona una mejora, como se muestra a continuación:

1-2-4-3-5-6-7-1 Distancia=65inverso 3-5-6 1-2-4-6-5-3-7-1 Distancia=64

A continuación se tratará de encontrar el inverso que mejoraráesta nueva solución de prueba. Sin embargo, no existeninguna, por lo que se detiene el algoritmo del subviaje inversocon esta solución de prueba como la solución final.La cuestión es si 1-2-4-6-5-3-7-1 es la solución óptima.Desafortunadamente no, pues la solución óptima resulta ser:1-2-4-6-7-5-3-1 Distancia=63 (o 1-3-5-7-6-4-2-1 al invertir ladirección de este viaje completo)Sin embargo, no se puede llegar a esta solución al realizar lainversión de un subviaje que mejore 1-2-4-6-5-3-7-1.

Usuario
Resaltado
Usuario
Resaltado
Usuario
Resaltado
Page 83: Programación Lineal y Entera

Un algoritmo de búsqueda tabú

Un algoritmo de búsqueda tabú básico se indica acontinuación:1. Algoritmo de búsqueda local: En cada iteración,seleccionaremos el mejor vecino inmediato de la solución deprueba actual que no esté descartado por la lista tabú.2. Estructura de vecindad: Un vecino inmediato de lasolución de prueba actual es aquél al que se llega por mediode un subviaje inverso.3. Forma de los movimientos tabú: Enumerar las ligadurasde forma que un subviaje inverso sea tabú si las dos ligadurasque se eliminan por esta inversión se encuentran en la lista,con lo que se evitará regresar con rapidez a la solución deprueba anterior.

Usuario
Resaltado
Page 84: Programación Lineal y Entera

4. Adición de un movimiento tabú: En cada iteración, traselegir las dos ligaduras que deben agregarse a la solución deprueba actual, incorporarlas a la lista tabú.5. Longitud máxima de la lista tabú: Cuatro (dos de cadauna de las dos iteraciones más recientes). Siempre que seagregue un par de ligaduras a una lista llena, eliminamos lasdos ligaduras que han permanecido por más tiempo en la lista.6. Regla de detención. Detenemos el proceso tras tresiteraciones consecutivas sin mejorar el mejor valor de lafunción objetivo o en cualquier iteración donde la solución deprueba actual no tenga vecinos inmediatos que no esténdescartados por la lista tabú.

Page 85: Programación Lineal y Entera

Vamos a aplicar este algoritmo de búsqueda tabú al ejemplo yaconsiderado y empezaremos con la misma solución de pruebainicial, 1-2-3-4-5-6-7-1. Aplicando el algoritmo del subviajeinverso con esta solución de prueba inicial, habíamos llegadoen dos iteraciones a un óptimo local en 1-2-4-6-5-3-7-1, encuyo punto se detenía el algoritmo. Por tanto, para el algoritmode búsqueda tabú, empezaremos como sigue:Solución de prueba inicial: 1-2-3-4-5-6-7-1 Distancia=69.Lista tabú: En blanco.Iteración 1: Se elige invertir 3-4.Ligaduras borradas: 2-3 y 4-5.Ligaduras agregadas: 2-4 y 3-5.Lista tabú: Ligaduras 2-4 y 3-5.Nueva solución de prueba: 1-2-4-3-5-6-7-1 Distancia=65.

Usuario
Resaltado
Usuario
Resaltado
Usuario
Resaltado
Usuario
Resaltado
Usuario
Resaltado
Usuario
Resaltado
Usuario
Resaltado
Usuario
Resaltado
Usuario
Resaltado
Page 86: Programación Lineal y Entera

Iteración 2: Se elige invertir 3-5-6.Ligaduras borradas: 4-3 y 6-7.Ligaduras agregadas: 4-6 y 3-7.Lista tabú: Ligaduras 2-4, 3-5, 4-6 y 3-7.Nueva solución de prueba: 1-2-4-6-5-3-7-1 Distancia=64.Sin embargo, en lugar de terminar, el algoritmo de búsquedatabú escapa de este óptimo local porque se traslada hacia elmejor vecino inmediato de la solución de prueba actual aunquesu distancia sea mayor. Debido a la disponibilidad limitada deligaduras entre pares de ciudades, sólo tenemos un vecinoinmediato, que es el que se describe a continuación:Si invertimos 3-7: 1-2-4-6-5-7-3-1 Distancia=66.El correspondiente vecino inmediato se selecciona como lapróxima solución de prueba, como se resume a continuación:

Usuario
Resaltado
Usuario
Resaltado
Usuario
Resaltado
Page 87: Programación Lineal y Entera

Iteración 3: Se elige invertir 3-7.Ligaduras borradas: 5-3 y 7-1.Ligaduras agregadas: 5-7 y 3-1.Lista tabú: Ligaduras 4-6, 3-7, 5-7 y 3-1.Nueva solución de prueba: 1-2-4-6-5-7-3-1 Distancia=66.Notemos que una de las ligaduras borradas es 5-3, que estabaen la lista tabú al final de la iteración 2. Esto es correcto, yaque un subviaje inverso es tabú sólo si las dos ligadurasborradas están en la lista tabú.La nueva solución tiene los dos vecinos inmediatos que sedescriben a continuación:Invertimos 2-4-6-5-7: 1-7-5-6-4-2-3-1 Distancia=65.Invertimos 5-7: 1-2-4-6-5-7-3-1 Distancia=63.Como el último de estos vecinos tiene la distancia más corta,se convierte en la próxima solución de prueba, como seresume a continuación:

Usuario
Resaltado
Usuario
Resaltado
Usuario
Resaltado
Usuario
Resaltado
Usuario
Resaltado
Usuario
Resaltado
Usuario
Resaltado
Page 88: Programación Lineal y Entera

Iteración 4: Se elige invertir 5-7.Ligaduras borradas: 6-5 y 7-3.Ligaduras agregadas: 6-7 y 5-3.Lista tabú: Ligaduras 5-7, 3-1, 6-7 y 5-3.Nueva solución de prueba: 1-2-4-6-7-5-3-1 Distancia=63.Esta nueva solución resulta ser la solución óptima. Si no seconoce este hecho, el algoritmo de búsqueda tabú intentaráejecutar más iteraciones. Sin embargo, no existen vecinosdisponibles sin violar las condiciones que impone la lista tabúcon lo que la regla de detención que hemos definido da porfinalizado el algoritmo en este punto. En general, no haygarantía de que la solución final del algoritmo de búsquedatabú básico sea una solución óptima, aunque en este casoocurre.

Usuario
Resaltado
Usuario
Resaltado