algoritmos combinatorios notas del dr. luis b. …lbm/notasa.pdf2 los algoritmos combinatorios se...

88
1 Algoritmos Combinatorios Notas del Dr. Luis B. Morales IIMAS, UNAM

Upload: docong

Post on 04-Jul-2018

229 views

Category:

Documents


0 download

TRANSCRIPT

1

Algoritmos Combinatorios

Notas del Dr. Luis B. Morales

IIMAS, UNAM

2

Los algoritmos combinatorios se clasifican acuerdo a su propósito:

• Generación. Construcción de todas las estructuras de un particular tipo.

• Enumeración. Computar el número de diferentes estructuras

de un particular tipo • Búsqueda. Encontrar al menos un ejemplo de una estructura

de particular tipo, o probar que no existe

3

Ejemplos de estructuras combinatorias:

• Conjuntos y Listas

X={1,2,4,5}, Y={1,4},

Z = [5,2,7] lista (importa orden) ordenaciones

Producto Cartesiano

XxY = {[1,1],[1,4],[2,1],[2,4],[4,1],[4,4],[5,1],[5,4]}

Conjunto potencia

2X ={ Y⊆ X}

• Gráficas

(V,E), V vértices, E⊆{{x,y} | x,y ∈ V} aristas

4

• Sistemas de conjuntos

(X,B), X conjunto, B ⊆ 2X

Ejemplo. X = {1,2,3,4,5,6,7}

B ={{1,2,4},{2,3,5},{3,4,6},{4,5,7},

{5,6,1},{6,7,2},{7,1,3}} (diseños combinatorios)

Propiedad. Cada pareja de X aparece en el mismo número de bloques, a saber 1

5

• Permutaciones. Llamamos permutación de un conjunto a cada una de las posibles ordenaciones de todos los elementos de dicho conjunto. Ejemplo. El conjunto = {1,2,3} tiene 6 permutaciones “1,2,3", "1,3,2", "2,1,3", "2,3,1", "3,1,2" y "3,2,1" Un conjunto finito de n elementos tiene

n!   n* n‐1 *…*2*1permutaciones (factorial de n)

Una permutación sobre un conjunto X es una funciónbiyectivade dicho conjunto en sí mismo.

Por ejemplo la función biyectiva dada por π  1   3,  π 2    1,  π 3    2, corresponde a la permutación "3,1,2".

Notación π 1 2 33 1 2

Generación de permutaciones aleatoria ( Knuth in The Art of Computer Programming) Para mezclarun arregloa of nelementos (indices 0,…,n-1) forifromn − 1 downto 1 do j ← random integer with 0 ≤ j ≤ i exchange a[j] and a[i]

6

Partición de un Conjunto

Una partición de un conjunto no vacíoX es una colección de subconjuntos Si de X tal que

X = SiSi Si = .  Ejemplo. X = {0,1,2,3,4,5,6,7,8,9,10,11} {0,1,2,3}, {4,5,6,7},{8,9,10,11} es una partición de X.

7

Programa que calcula las particiones de un conjunto function ( npart, jarray, iarray, more ) /***********************************************************************/ /* EQUIV_NEXT computes the partitions of a set one at a time. Discussion: A partition of a set assigns each element to exactly one subset. The number of partitions of a set of size N is the Bell number B(N). Licensing: This code is distributed under the GNU LGPL license. Modified: 30 July 2004 Author: MATLAB version by John Burkardt. Reference: A Nijenhuis and H Wilf, Combinatorial Algorithms, Academic Press, 1978, second edition, ISBN 0-12-519260-6. Parameters: Input, integer N, the number of elements in the set to be partitioned. Input, integer NPART, the number of subsets in the previous partition. Input, integer JARRAY(N), the number of elements in each subset of the previous partition. Input, integer IARRAY(N), the subset to which each element belongs in the previous partition. Input, logical MORE, is set to FALSE on the first call, and the input values of NPART, JARRAY and IARRAY are not needed. On subsequent calls, MORE should be TRUE, and NPART, JARRAY, and IARRAY should have the values of the output quantities NPART, JARRAY and IARRAY from the previous call. Output, integer NPART, the number of subsets in the new partition. Output, integer JARRAY(N), the number of elements in each subset of the new partition. Output, integer IARRAY(N), the subset to which each element belongs in the new partition. Output, logical MORE, is TRUE as long as the new partition returned is not the last one. When MORE is returned FALSE, all the partitionshave been computed and returned. */

8

void equiv_next(int n, int *npart,int jarray[],int iarray[], int *more) { int i; int l; int m; if ( !( *more ) ){ *npart = 1; for ( i = 0; i < n; i++ ) { iarray[i] = 1; } jarray[0] = n; } else{ m = n; while ( jarray[iarray[m-1]-1] == 1 ){ iarray[m-1] = 1; m = m - 1; } l = iarray[m-1]; *npart = *npart + m - n; jarray[0] = jarray[0] + n - m; if ( l == *npart ) { *npart = *npart + 1; jarray[*npart-1] = 0; } iarray[m-1] = l + 1; jarray[l-1] = jarray[l-1] - 1; jarray[l] = jarray[l] + 1; } *more = ( *npart != n ); return; }

9

Problemas Combinatorios

Los Problemas de búsqueda que estudiaremos son de varios tipos, dentro de los más famosos está el de la Mochila (knapsack problem)

Mochila (problema de decisión)

Instancia: Valores: p1,..., pn

Pesos: w1,..., wn

Capacidad: M

Objetivo P

Pregunta: ¿Existe (x1,..., xn) en {0,1}n tal que

Σ pi xi≥ P

Σ wi xi≤ M ?

(Respuesta sí o no, para toda instancia del problema)

10

Mochila (problema de búsqueda)

Instancia: Valores: p1,..., pn

Pesos: w1,..., wn

Capacidad: M

Objetivo P

Encontrar: (x1,..., xn) en {0,1}n tal que

Σ pi xi≥ P

Σ wi xi≤ M

(si existe tal n-tupla)

(igual que el problema de decisión, solo que encontramos la n-tupla (x1,..., xn) en caso que la respuesta de la búsqueda es sí)

11

Mochila (valor óptimo)

Instancia: Valores: p1,..., pn

Pesos: w1,..., wn

Capacidad: M

Encontrar: El valor máximo de

P=Σ pi xi

sujeto a

Σ wi xi≤ M

(x1,..., xn) en {0,1}n

(encontrar el valor más grande, las respuesta seria sí)

12

Mochila (problema de optimización)

Instancia Valores: p1,..., pn

Pesos: w1,..., wn

Capacidad: M

Encontrar un (x1,..., xn) en {0,1}n tal que

P=Σ pi xi

es maximizado, sujeto a

Σ wi xi≤ M

(cuando (x1,..., xn) satisface las restricciones, el vector es llamado solución factible)

(igual al valor óptimo, sólo que nos da una solución optima (x1,..., xn) con el valor óptimo)

13

Optimizar f (x)

Sujeto a x∈ X

f : X →R

Decimos que un problema es de optimización combinatoria, si en

ellos las variables de decisión sólo admiten valores enteros y su

espacio de soluciones está formado por permutaciones o

subconjuntos de números naturales.

El conjunto X es llamado el espacio de búsqueda.

14

Ejemplos de Problemas de Optimización Combinatoria Problema de Asignación. Un conjunto de n personas está disponible para realizar n tareas. Sí la i-ésima persona realiza la j-ésima tarea, esto representa un costo Cij unidades, entonces el problema consiste en encontrar una asignación la cual minimiza el costo total

Minimizar Σ Ciπ (i)

π∈ Sn = permutaciones del conjunto {1, 2,..., n}. Una empresa tiene 4 personas P1, P2, P3, P4 que debe de asignar a cuatro tareas t1, t2, t3, t4, los costos estimados de asignación de cada trabajador son

t1 t2 t3 t4 P1 15 19 20 18P2 14 15 17 14P3 11 15 15 14P4 21 24 26 24

La solución óptima es la permutación [1, 4, 3, 2] Costo = C11 + C24 + C33 + C42 = 68

15

Quizás los dos problemas combinatorios más famosos sean: Mochila (knapsack problem) Agente viajero (traveling salesman problem, TSP) Problema de la Mochila. Consiste en seleccionar de entre n productos, cada uno con valor Ci y volumen Vi, aquellos que quepan en un recipiente con volumen V y tengan el mayor valor posible, es decir se trata de determinar un subconjunto S0⊂ {1, 2,..., n} para lo cual

Σ Ci= máximo Σ Ci

i∈ S0

ΣVi≤ V

i∈ S0

16

Problema del Agente viajero (TSP)

Un vendedor tiene que buscar una ruta que visite cada una de n ciudades una y sólo una vez, que minimiza el total de distancias recorridas, iniciando en cualquier de ella y volviendo a la misma ciudad sean n ciudades y D = (dij) la matriz de distancias de la ciudad i a la ciudad j Entonces el problema es Minimizar

1

1

11

π∈ Sn = permutaciones del conjunto {1, 2,..., n}.

Ejemplo para 6 ciudades

0 16 16 33 12 1516 0 16 10 9 2916 16 0 8 7 7 33 10 8 0 21 2012 9 7 21 0 2015 29 7 20 20 0

Una ruta óptima es <1, 6, 3, 4, 2, 5> con un longitud de

61 = d1,6+ d6,3 + d3,4+ d4,2 + d2,5+ d5,1

17

Problema de la Papelera deembalaje (Bin Packing) Dado un conjunto N = {1,2,…,n} de objetos con pesos wi i = 1,2, …,n. El problema de la papelera de embalaje consiste en encontrar el mínimo número de papeleras de capacidad C necesarias para empacar los artículos sin violar las restricciones de capacidad de cada papelera. Ejemplo. Las papeleras tiene 150cm de largo, y los objetos tiene los siguientes largos Bloque  A  B  C  D  E  F  G  H  I  J  K 

Largo(cm)  80  70  40  90  60  90  50  50  60  70  80 

Solución óptima

18

Explosión Combinatoria

La mayoría de los problemas de optimización combinatoria son aquellos (de explosión combinatoria) donde el número de soluciones crece explosivamente cuando el tamaño del problema crece linealmente.

⎯ Problema del agente viajero

N

tamaño del problema

(n-1) ! 2

número de posibles rutas

20! = (2432902023163674620)

⎯ Problema de la mochila

n

tamaño del problema 2n

el número de subconjunto de {1,..., n}

220 = 1,048,580

19

Óptimos locales y globales. Problemas de optimización combinatoria pueden tener muchos óptimos globales, aunque tienen mucho más que son óptimos locales

f : X →R

x0 es un mínimo global si para todo x∈ X f (x0)≤ f (x) x0 es un mínimo local si existe un subconjunto S propio de X

tal que para todo x∈S f (x0)≤ f (x).

20

O-notación Análisis matemático de algoritmos

Definición 1. Supongamos que f: Z+→R, g: Z+→R.

Decimos que f (n) es O(g (n)) si existe una constante C > 0 y n0≥ 0 tal que

0 ≤f (n) ≤ C ⋅g (n) para todo n≥n0

Definición 2. Decimos que f (n) es Ω(g(n)) si existen constantes C y n0≥ 0 tal que

0 ≤ C ⋅g (n) ≤f (n) para todon≥n0

Definición 3. Decimos que f (n) es Θ(g(n)) si existen constantes

C, C′ y n0≥ O tal que

O ≤ C ⋅g (n) ≤f (n) ≤ C′⋅g (n)para todo n≥n0

Si f (n) es Θ(g(n)), entonces decimos que f(n) y g(n) tienen el mismo radio de crecimiento

21

Propiedades de O-notación, Ω-notación, Θ-notación

Si f1(n) y f2(n) son ambas O(g(n)), entonces f1(n) + f2(n) es también O(g(n))

Si f1(n)es O(g1(n)) y f2(n) es O(g2(n)), entonces f1(n) f2(n) es O(g1(n)g2(n)) Los mismo para Ω-notación, Θ-notación

El tiempo de ejecución de un algoritmo para una instancia de tamaño n es T (n) Un algoritmo es polinomial si T (n) es Θ (nk) Un algoritmo es exponencial si T (n) es Θ (an)

Clases de Complejidad

Complejidad polinomial Θ(nd) para algún entero d>0

Complejidad exponencial Θ(cn) para algún c>1

22

Discusión informal sobre algunos conceptos básicos y

terminología (referente a problemas de decisión)

Problemas de decisión Requieren respuesta un SI o NO

• La clase P (polinomial)es el conjunto de todos los problemas para los cuales existe un algoritmo polinomial sobre el tiempo

• Clase NP (polinomial no determinístico), problemas con la

propiedad que, para cualquier instancia del problema para la cual la repuesta es SI, existe una prueba que la respuesta es SI la cual puede verificarse por un algoritmo polinomial.

• No se pide que exista un método eficiente para encontrar la prueba dada Solo se requiere que una prueba hipotética que pueda verificar la validez por medio de un algoritmo polinomial. De esto

P ⊆ NP

• Clase NP-difícil, problemas que son al menos tan difíciles

como los problemas NP. Más precisamente, un problema NP, H, es díficil cuando cada problema L en NP se puede reducir en tiempo polinómico a H. Así, Un problema es NP-difícil si su solución en tiempo polinomial haría posible resolver todos los problemas de la clase NP en tiempo polinomial.

No se pide que los problemas NP-difíciles tengan por necesidad soluciones verificables en tiempo polinomial. Problemas NP-difíciles no son necesariamente NP.

23

Ejemplo. Coloración de Vértices (k-coloración) Instancia: Una gráfica G =(V,E) Pregunta: ¿Existe una función de color:V → {1,..., k} tal que color(u)≠color(v) para todo {u,v} en E?

Un algoritmo que resuelve, solo tiene que dar un SI o NO

El problema de coloración de vértices está en la clase NP

Si G tiene una k-coloración, entonces la función color puede ella misma servir como prueba Sin embargo, no es fácil dar la función color. No se conoce un algoritmo polinomial para este problema Se cree, que el problema de Coloración de Vértices está en NP\P En otras palabras Clase NP: Algunos de estos problemas intratables pueden caracterizarse por el curioso hecho de que puede aplicarse un algoritmo polinómico para comprobar si una posible solución es válida o no. Esta característica lleva a un método de resolución no determinista consistente en aplicar heurísticos para obtener soluciones hipotéticas que se van desestimando (o aceptando) a ritmo polinómico. Los problemas de esta clase se denominan NP (la N de no-deterministas y la P de polinómicos)

24

Clase NP-completa

Un problema de decisión D está en la clase NP-completa, si es NP y para cualquier problema de decisión H en NP, entonces existe un algoritmo polinomial que trasforma D en H

La mejor solución que se conoce, para los problemas NP-completos

es de complejidad superior a la polinómica, se dice que son problemas intratables.

http://en.wikipedia.org/wiki/P_versus_NP_problem

25

Búsqueda Binaria

Una búsqueda binaria, responde si un valor de entrada, x, está dentro de una lista ordenada. En cada paso, el algoritmo compara x, con el elemento de centro de la lista. Si ellos coinciden, entonces se ha encontrado el elemento buscado. En caso contrario,

• Si x es menor que la clave del elemento medio, entonces el algoritmo repite su acción en la sub-lista a la izquierda del elemento medio o,

• Si x es mayor, en la sub-lista a la derecha.

Si el arreglo restante es vacío, entonces x no está en la lista.  

En cada iteración, una búsqueda binaria consulta la mitad del número de elementos de la lista. Así, la búsqueda binaria lleva un tiempo logarítmico. Es decir, si longitud de las lista es n, el algoritmo es complejidad O(log(n)). Ejemplo. L = 3, 4, 6, 7, 9 11, 12. Encontrar x = 9. Compara x con 7. Es mayor, repetir con = 9, 11, 12 Compara x con 11. Es menor, repetir con L = 9 Compara x con 9. Es igual, encontramos x

26

Problemas de Decisión y de Optimización

1. Todo problema de optimización, se puede formular como un problema de decisión

2. Cualquier resultado de complejidad para el problema de

decisión, también es válido para el problema original, es decir el problema original no es mucho más difícil que el problema de decisión

(La teoría de la complejidad computacional se restringe a problemas de decisión)

27

Problema del agente viajero (problema de decisión)

Instancia: Una matriz de distancias no negativas D=(di j) de orden n y un número no negativo L: Pregunta: ¿existe un tour cerrado pasando por cada ciudad

exactamente una sola vez, con una longitud ≤L?

La solución al Problema de Optimización, implica solución al problema de decisión. El tour de solución para problema original tiene una longitud especificada la cual puede compararse con L, y así resolver el problema de decisión.

28

Procedimiento que demuestra queel problema de decisión y el problema de optimización son equivalentes polinomialmente, para el problema del agente viajero (TSP). Es decir,

El problema de decisión es polinomial si y sólo si el Problema de Optimización también lo es.

begin

/* Usar búsqueda binaria para encontrar la longitud de la solución óptima, a decir Lmin */ (el mismo tour óptimo es aún desconocido) for i=1,...,n-1 for j=i+1,...,n /*Este doble loop examina todas las enlace(i,j) entre ciudades */ store=dij dij=(número suficientemente grande) call A(con la nueva matriz, encontrar si existe un óptimo tour de costo ≤ Lmin)

if respuesta="no" then dij=store

/*Si después de quitar un enlace (i,j) perdemos la solución óptima, este enlace está en un óptimo tour */ next j next i end

Al final, el conjunto de enlaces que han cambiado sus longitudes forman un tour óptimo

29

Complejidad

Si el algoritmo A es polinomial, el procedimiento es también polinomial. En efecto:

• La búsqueda binaria es hecha en el intervalo [0, ndmax], donde dmax=max{dij}. Por tanto a lo más log(ndmax) pasos son requeridos

• El ciclo es de orden n2 veces el orden de la matriz

Por consiguiente, Si el problema de decisión es Θ(nd), entonces el problema de optimización para TSP es también Θ(nd)

Este algoritmo resuelve el problema de optimización del agente viajero, al resolver O(log(ndmax)+ O(n2)) instancias del problema de decisión.

30

Reducciones polimomiales Un problema A se reduce polinomialmente a un problema B si cualquier instancia de A puede ser transformada a una instancia de B, por un proceso que toma un tiempo polinomial. Esto implica que si tenemos un algoritmo polinomial para el problema B, entonces esta trasformación también da un algoritmo polinomial para A.

31

Ejemplo de una trasformación polinomial

G = (V,E) una grafica Un clique en G es un subconjunto S ⊆ V, tal que {x,y}∈ E, para todo x, y ∈ S (x≠y) Un conjunto independiente en G es un subconjunto S ⊆ V, tal que {x,y}∉ E, para todo x, y ∈ S (x≠y)

Problema 1. Máximo conjunto independiente (decisión) Instancia: Una Grafica G, un entero K Pregunta: ¿G tiene un conjunto independiente de tamaño al menos K?

Problema 2. Máximo Clique (decisión) Instancia: Una Grafica G, un entero K Pregunta: G tiene un clique de tamaño al menos K?

Algoritmo polinomial que trasforma Problema 1 a 2 y viceversa De la gráfica G = (V,E) construimos la gráfica Gc = (V,F) , donde

{x,y}∈ F ⇔{x,y}∉E

Claramente Gc puede construirse en tiempo O(n2 )donde n =|G| Así

S es un independiente conjunto en G de tamaño K, si y sólo si S es un clique en Gc de tamaño K

32

Un ciclo Hamiltoniano es un ciclo en una gráfica pasando a través de todos los vértices una solo vez.

a

b c

d

ef {a,b,c,d,e,f,a} es ciclo Hamiltoniano. Problema. Ciclo Hamiltoniano (decisión) Instancia: Una Grafica G, Pregunta: ¿G tiene un ciclo Hamiltoniano?

33

Los problemas del ciclo Hamiltoniano y del agente viajero son NP-completos.

Dada una gráfica G con alistas de peso 1, en la cual decidimos si hay un ciclo Hamiltoniano. De la gráfica G = (V,E) construimos la gráfica completa G* = (V,E*), donde

E* = {(x,y) | x,y  V con x≠y }

La matriz de distancia está definida por

dij = 0    ,1    , ∉

Supongamos que existe un ciclo Hamiltoniano h en G. Así el ciclo (tour) h tiene un costo de 0 en G*. Por tanto, si la gráfica G tiene un ciclo Hamiltoniano, entonces la gráfica G* tiene un tour de costo 0. Recíprocamente. Supongamos que G* tiene un tour h* de costo a lo más 0 en G*. Entonces, cada arista tiene distancia 0 como el costo de h*. Entonces, el tour h* contiene únicamente alistas de E. Así, G tiene un ciclo Hamiltoniano si y sólo si G* tiene un tour de costo a lo más 0. TSP es NP-completo

34

Ejemplo de un Problema indecible

Problema de la Parada No existe ningún algoritmo que diga si un programa de una computadora va a parar en un tiempo finito con una entrada dada

F(n) → PP→ ¿Ciclado?

35

Métodos para resolver problemas de Optimización Combinatoria

Búsquedas Exhaustivas ⎯ Listar todas las soluciones

⎯ Backtrack ⎯ Branch and Bound

⎯ Programación Dinámica ⎯ Programación Lineal (binaria, entera) ⎯ Dual Ascendente ⎯ Relajación Lagrangeana La solución de un problema de optimización combinatoria no únicamente se limita a buscar de manera exhaustiva el valor que minimiza o maximiza la función objetivo dentro de un conjunto finito de posibilidades y que utilizando una computadora muy rápida, el problema carecería de interés matemático sin detenernos a pensar en el tamaño de este conjunto finito de posibilidades

36

Algoritmo Backtrack (Retroceso)

El algoritmo backtrack (retroceso) puede ser visto como encontrar la salida en un laberinto: empezamos en algún cuadrado con el propósito de llegar a algún otro cuadrado especificado, por una secuencia de movimientos de un cuadrado al siguiente. La dificultad es que estamos restringidos por la existencia de barreras que prohíben ciertos movimientos. Un camino de encontrar la salida en un laberinto es viajar del inicio de acuerdo a las reglas: 1. Del cuadrado actual, tomar cualquier camino no explorado

previamente. 2. Si el cuadrado actual no tiene caminos inexplorados,

regresar a un cuadrado sobre el último camino que permitió ir a este cuadrado.

37

FIN

INICIO 1. Como extender la solución actual , si existe 2. Cómo regresar cuando nos atoramos Algoritmo Solución es un vector (a1,a2, ...) de longitud finita,

ai∈Ai ,donde Aj es unconjunto linealmente ordenado. La búsqueda exhaustiva debe considerar los elementos A1 ×A2 × ... ×Ai,, i= 1, 2, ..., como soluciones potenciales

38

Inicio: ( ) vector nulo, como solución parcial, las

restricciones dicen cuales de los miembros de A1son

candidatos para a1, llamemos este subconjunto S1 de A1

Elegimos el menor elemento de S1 como a1, y ahora

tenemos la solución parcial (a1)

Las varias restricciones que describe y las soluciones

dicen cuales subconjuntos Sk de Ak constituyen

candidatos para la extensión de la solución parcial

(a1,a2, ... ak-1) a (a1,a2, ... ak-1, ak). Si la solución parcial

no admite posibilidades para ak, entonces Sk = φ, y así

regresamos y hacemos una nueva elección para ak-1 en

Sk-1 si no hay nueva elección para ak-1 retrocedemos

hasta poder hacer una nueva elección para ak-2 y así

sucesivamente.

39

El algoritmo backtrack se puede ver como un árbol de

búsqueda

INICIO

Elección para a1

Elección para a2, dado a1 Elección para a3, dado a1, a2 Elección para a4, dado a1, a2, a3

40

Seudocódigo de Backtrack

S1 = A1, contar = 0, k = 1

While (k > 0) {

While (Sk ≠φ) {

elegir ak ∈ Sk

Sk = Sk - {ak}

contar = contar + 1

If (a1,a2,...,ak) es una solución parcial

then procesarla

k = k + 1

calcular Sk

}

k = k - 1

}

41

Problema de la n-reinas en un tablero de ajedrez

Determinar sin reinas pueden colocarse en un tablero de ajedrez tal que ninguna ataque a otra. Si es así de cuantas formas es posible. Cada reina está en una columna. Así la solución es un vector (a1,a2, ..., an), donde ai representa la fila de la reina en la i-ésima columna. Además, exactamente una reina debe de estar en toda fila, así ai≠aj if i≠j. Dado que las reinas no pueden atacar cada otra en la diagonal debemos de tener ⎜ai -aj⎟≠⎜i - j⎟ si i≠j. Así para determinar cuando ak

puede aumentarse a (a1,a2,…,ak-1) simplemente probamos ak

con cada ai i< k. 1 2 3 4

a3 = 2

(4, *, 2, *) a1 = 4

42

Seudocódigo de un backtrack para el problema de n-reinas /*una reina no puede ponerse en la fila Sk de la columna k ak no puede aumentarse a (a1,a2,..., ak-1) sí bandera = true */ noReina_FilaX_ColY(k) begin bandera = true, i = 1 While (i < k and bandera ) { Ifai≠ak and⎜ai -ak⎟≠ ⎜ i - k⎟ then bandera = false elsei = i + 1 } return(bandera) end /*principal */ begin k=1(columna), Sk = 1 (fila) While (k > 0) { While (Sk ≤n) { ak = Sk, Sk = Sk + 1 While (Sk≤ n andnoReina_Fila_Col(k)) do Sk = Sk + 1

If k = nthen (a1,a2,..., an) es una solución k = k + 1, Sk = 1 While ( Sk ≤ n andnoReinaFila_Col(k))

do Sk = Sk + 1 } k = k - 1 } end

43

Código en C para el problema de la n-reinas

void BackTrack(int n)

{

int k;

k = 1; S[k] = 1;

while(k>0){

while(S[k]<=n){

A[k] = S[k]; S[k] = S[k] + 1;

while(S[k]<=n &&noReina_Fila_Col(k))

S[k] = S[k] + 1;

if(k==n) printSol(k);

k = k + 1; S[k] = 1;

while(S[k]<=n && noReina_Fila_Col(k))

S[k] = S[k] + 1;

}

k = k-1;

}

}

44

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#define max_n 50

int A[max_n],S[max_n];

/*********************************************/

void printSol(int m){

int k;

for(k=1;k<=m;k++) printf("%4d",A[k]);

printf("\n");

}

/*********************************************/

int noReina_Fila_Col(int k)

{ int i;

for(i=1;i<k;i++)

if(A[i]==S[k] || abs(k-i)==abs(S[k]-A[i]))

return(1);

return(0);

}

/*********************************************/

int main()

{ int n = 6;

BackTrack(n);

}

45

Observaciones para podar el árbol de búsqueda en el problema de las reinas

Sin podar n2 = número de posibles lugares

n = número de lugares escogidos

total ⎟⎟

⎞⎜⎜⎝

nn2

(247,865,260,608 para n = 8)

Con poda a) Dos reinas no pueden estar en la misma fila, así para que

( naaa ,,, 21 K ) sea una solución, este vector debe de ser una permutación de {1, 2,..., n}

total n! (40320 , para n = 8)

b) Dos reinas no pueden estar en la misma diagonal. Esto

acorta el número de posibilidades mucho más

Total ( 2056, para n = 8)

46

Los análisis para podar el árbol de búsqueda del algoritmo backtrack son llamados poda de ramas Otras observaciones: Dos soluciones pueden ser consideradas equivalentes, si una puede ser transformada en la otra por medio de rotaciones y/o reflexiones

Sólo hay soluciones que tengan una sola reina en una esquina, ya que en esa posición ataca a las demás esquinas. Entonces podemos suponer que 1<a1<n (aplicando rotaciones y/o reflexiones) 1 2 3 4

a1=1 * No

1<a3<n

No * No

47

Generando todos los cliques

Problema Todos los cliques Instancia una gráfica G = (V, E) Encontrar todos los cliques de G sin repeticiones Una secuencia X = [x0, x1, …, xk] de vértices es una solución parcial si y sólo si { x0, x1, …, xk} es un clique. Sean Sk-1 = { x0, x1, …, xk-1} C0 = V Entonces el conjunto de selección para xk es definido por

Ck = { v ∈V-Sk-1| {v, x}∈E para cada x ∈Sk-1}

= { v ∈Ck-1- { xk-1} | {v, xk-1}∈E} Con esto, si un clique tiene tamaño k, entonces con la función de elección se generara es clique k!, una para cada una de las posible ordenaciones Para evitar esto, usamos un orden total “<” sobre los vértices. Así

V = { v0, v1, …, vn-1} con v0 < v1< … < vn-1

48

Tomando en cuenta el orden, redefinimos

Ck= { v ∈Ck-1| {v, xk-1}∈E v >xk-1} Entonces las funciones de elección pueden ser más eficientes si para cada vértice definimos

Av = { u ∈V| {u, v}∈E }

Bk = = { u ∈V| u > v} Entonces

Ck = Axk-1 Bxk-1 Cxk-1

También definimos

Nk = Nk-1 Axk-1 donde N0 = V

Entonces

X = [x0, x1, …, xk] es un clique maximal si y sólo si Nk =

49

Seudocódigo de un backtrack para generar todos los cliques allCliques(k) /* todos los X generados son cliques */ begin if k= 0 { output ([]) else output([x0, x1, …, xk-1]) } if k = 0 N0 = V else Nk = Nk-1 Axk-1 If { {x0, x1, …, xk-1} es un clique maximal } if k = 0 Ck = V else Ck = Axk-1 Bxk-1 Cxk-1 for each x∈Ck { xk = x allCliques(k+1) } end

50

Funciones de acotamiento para podar el árbol de búsqueda para cualquier algoritmo bactracktrack para un problema de

maximización

Sea profit(X) denota el beneficio para cualquier solución factible. Para cualquier solución factible parcial, X = [x0, x1, …, xk-1] definimos P(X) como el máximo valor del conjunto {profit(Y) | Y = [y0, y1, …, yn-1] solución yi = xij=0,…k-1} Una función de acotamiento B es una función de valores reales que satisface para toda solución parcial X,

B(X) ≥ P(X)

51

Construcción de Horarios para un Club de Bridge formulado como un problema de optimización

Un club de bridge consiste de 12 jugadores. En cada reunión, el club es dividido en 3 grupos de 4 jugadores. Cada uno de los 4 jugadores juega contra los restantes 3 jugadores en su grupo, lo cual requiere 6 juegos por grupo. Así 18 juegos son jugados en cada reunión, de los cuales 8 ocurren por año, resultando en un total de 144 juegos. El club necesita preparar un horario para el año tal que el número de veces que cualquier jugador juega contra cualquier otro debe ser el mismo para todos los jugadores. Si tal horario no existe, el club necesita preparar un horario para el año tal que el número de veces que cualquier jugador juegue contra cualquier otro sea lo más cercano al mismo para todos los jugadores.

52

Solución Óptima Durante las 8 reuniones por año cada jugador compite contra 24 jugadores (no necesariamente diferentes jugadores). Dado que cada jugador tiene únicamente 11 diferentes oponentes posibles, un horario "óptimo" debería de tener que cada jugador juega contra 9 jugadores dos veces y contra otros 2 tres veces.

24 = 9⋅2 + 2⋅3

2 ∼3 Matriz de competición (Cij)

Cij= número de veces que el jugador i juega contra el jugador j

(Cij) es una matriz simétrica Función objetivo.

f (x) = ∑i<j(Cij - 2)2

f (x) ≥ 12 (Brown, Discrete Math. 1988) El valor de la función objetivo en una solución óptima es 12, así el mínimo global de la función f (x) es 12.

53

Espacio de búsqueda X

Número de formas de elegir tres grupos con orden

⎟⎟⎠

⎞⎜⎜⎝

412

* ⎟⎟⎠

⎞⎜⎜⎝

48

* ⎟⎟⎠

⎞⎜⎜⎝

44

= 34,650

En nuestro problema el orden de los grupos no importa

34,650/3! = 5,775 También en la primera reunión podemos escoger los grupos

{1,2,3,4}, {5,6,7,8}, {9,10,11,12} Si suponemos que todas las reuniones son diferentes, el tamaño del espacio de búsqueda es

|X| = ⎟⎟⎠

⎞⎜⎜⎝

75774

= 42298678679453066166504 ~ 4.2 * 1021

54

Ejemplo 1) 1 2 3 4 5 6 7 8 9 10 11 12 2) 1 2 3 4 5 6 7 8 9 10 11 12 3) 1 2 3 4 5 6 7 8 9 10 11 12 4) 1 2 3 4 5 6 7 8 9 10 11 12 5) 1 2 3 4 5 6 7 8 9 10 11 12 6) 1 2 3 4 5 6 7 8 9 10 11 12 7) 1 2 3 4 5 6 7 8 9 10 11 12 8) 1 2 3 4 5 6 7 8 9 10 11 12 Su matriz de competición es      0  8  8  8  0  0  0  0  0  0  0  0      8  0  8  8  0  0  0  0  0  0  0  0      8  8  0  8  0  0  0  0  0  0  0  0      8  8  8  0  0  0  0  0  0  0  0  0      0  0  0  0  0  8  8  8  0  0  0  0       0  0  0  0  8  0  8  8  0  0  0  0      0  0  0  0  8  8  0  8  0  0  0  0      0  0  0  0  8  8  8  0  0  0  0  0       0  0  0  0  0  0  0  0  0  8  8  8        0  0  0  0  0  0  0  0  8  0  8  8        0  0  0  0  0  0  0  0  8  8  0  8       0  0  0   0  0 0  0  0  8  8  8  0 

Su costo f x      3* 8‐2 2   8 0‐2 2 *12/2     108   32 *6   840, (el peor horario)

55

Otro horario 2 3 9 11 1 4 6 10 0 5 7 8 3 4 6 8 0 2 7 11 1 5 9 10 4 7 8 9 0 1 3 10 2 5 6 11 3 5 6 7 0 4 10 11 1 2 8 9 4 6 9 11 1 3 5 7 0 2 8 10 0 1 6 8 7 9 10 11 2 3 4 5 0 3 6 9 1 2 4 7 5 8 10 11 2 6 7 10 0 4 5 9 1 3 8 11 Su matriz de competición (concurrencia) C: 0 2 2 2 2 2 2 2 3 2 3 2 2 0 2 3 2 2 2 2 3 2 3 1 2 2 0 2 2 2 2 3 2 2 2 3 2 3 2 0 2 3 3 2 2 2 1 2 2 2 2 2 0 2 3 2 2 3 2 2 2 2 2 3 2 0 2 3 2 2 2 2 2 2 2 3 3 2 0 2 2 2 2 2 2 2 3 2 2 3 2 0 2 2 2 2 3 3 2 2 2 2 2 2 0 2 2 2 2 2 2 2 3 2 2 2 2 0 2 3 3 3 2 1 2 2 2 2 2 2 0 3 2 1 3 2 2 2 2 2 2 3 3 0

Su matriz de incidencia B: (de orden12x24) 0 0 1 0 1 0 0 1 0 0 1 0 0 0 1 1 0 0 1 0 0 0 1 0 0 1 0 0 0 1 0 1 0 0 0 1 0 1 0 1 0 0 0 1 0 0 0 1 1 0 0 0 1 0 0 0 1 0 0 1 0 0 1 0 0 1 0 1 0 1 0 0 1 0 0 1 0 0 0 1 0 1 0 0 0 1 0 0 0 1 1 0 0 0 0 1 0 1 0 1 0 0 1 0 0 0 1 0 1 0 0 0 0 1 0 1 0 0 1 0 0 0 1 0 0 1 0 0 1 1 0 0 0 1 0 0 0 1 0 0 1 0 1 0 0 1 0 1 0 0 0 0 1 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 0 0 1 0 1 0 1 0 0 1 0 0 0 1 0 0 1 0 0 1 0 1 0 0 0 0 1 1 0 0 1 0 0 0 0 1 0 0 1 1 0 0 0 0 1 0 0 1 1 0 0 0 0 1 1 0 0 0 0 1 1 0 0 0 1 0 1 0 0 0 1 0 0 1 0 0 0 1 0 1 0 0 1 0 0 0 1 0 1 0 0 0 1 1 0 0 1 0 0 0 1 0 0 0 1 0 1 0 1 0 0 0 1 0 0 0 1 0 0 1   

56

Claramente, C = BBT, considerando que los elementos en la diagonal de C son r (=8). En el problema del horario del club de bridge, para que el número de veces que juegan dos jugadores sea el mismo para cualquier pareja de jugadores, es necesario que haya 11 reuniones. En efecto Durante las 11 reuniones por año cada jugador compite contra 33 jugadores (no necesariamente diferentes jugadores). Dado que cada jugador tiene únicamente 11 diferentes oponentes posibles, un horario óptimo debería de tener que cada jugador juega contra 11 jugadores tres veces

33 = 11⋅3 Este tipo de estructura es llamada un diseño de bloques incompletos balanceados (BIBD, por sus siglas en inglés) resolubles con parámetros v = 12, número de puntos b = 33, número de bloques r = 11, número de réplicas de cada punto (cada punto está en r bloques) k = 4, el tamaño de cada bloque λ = 3, número de bloques que contienen a cualquier pareja de puntos. Claramente, para estos diseños, una cota inferior dela función objetivo

f  x    ∑i j Cij ‐λ  2 es cero.

57

Diseños de bloques incompletos balanceados

Un diseño es una pareja (V, D), donde V es un conjunto de v puntos y D es una colección de subconjuntos de V llamados bloques. Un (v, k, λ) diseño de bloques incompleto balanceado (BIBD, por sus siglas en inglés) es un diseño(V, D) tal que cada bloque es de tamaño k (k<v) y cada pareja de puntos de V está contenida en exactamente λ bloques. Los números B bloques del diseño R réplicas de cada punto Satisfacen

rv   bk ambos lados de la igualdad cuentan los puntos (con repetición) del diseño

r k‐1     λ  v‐1  lado derecho cuenta el número de parejas de un punto con cualquier otro punto que está en los r bloques de tamaño k donde el punto dado ocurre. lado izquierdo cuenta el número de parejas de un punto con los demás v‐1puntos, dado que cada pareja ocurre λ veces. Un BIBD con b   v  equivalentemente,  r    k  es  llamado simétrico.

58

La matriz de incidencia de un BIBD (V, D) con parámetros v, b, r, k,λ es una v x b matriz A = (aij) donde

1    −é           −é    0                                                          

La matriz de incidencia A de un diseño satisface

AAT    r‐λ I    λJJA   kJ’  donde  I   v x v matriz identidad J   v x v matriz de unos J’  v x b matriz de unos  La matriz de incidencia de un diseño satisface estas condiciones, entonces

• Satisface rv = bk r(k-1) = λ( v-1) con k<v • Es la matriz de incidencia de un (v, k, λ) BIBD

Si Aes la matriz de incidencia de un (v, b, r, k,λ) BIBD, entonces la matriz AAT (de orden v x v) tiene la forma

λ λ λλ λ λ

λ λ λλ λ λ

59

Un BIBD es llamado resoluble (RBIBD) si existe una partición R del conjunto de bloques sobre clases paralelas, cada una de las cuales particiona el conjunto de puntos. R es llamada una resolución. Claramente, un (v, k, λ) BIBD es resoluble, entonces

k divide a v

60

Isomorfismos entre diseños Dos BIBDs (V1, D1), (V2, D2) son isomorfos si existe una bijección π: V1 V2 tal que π D1) = D2 Si (V, D) diseño, claramente cualquier permutación π de V  es un isomorfismo  entre (V, D) y (π V), π D)). Ejemplo. Sean V    0,1,2,3,4,5,6  

D   1,2,4 ,  2,3,5 ,  3,4,6 ,  0,4,5 ,  1,5,6 ,  0,2,6 , 0,1,3  

 

π   0 1 2 3 4 5 6  4 1 2 3 0 5 6   una permutación de V

Entonces π D   0,1,2 , 2,3,5 , 0,3,6 , 0,4,5 , 1,5,6 , 2,4,6 1,3,4  

61

Un automorfismo es un isomorfismo entre un diseño y él mismo.

El conjunto de automorfismos de un diseño forma un grupo, llamado el grupo de automorfismos del diseño.

Si (V, D) es un (v, b, r, k,λ)-BIBD con grupo de automorfismos G, la acción de G sobre D definida por

 π B      π p  |  p   , (donde π  ,     

particiona D sobre clases (órbitas). GB = {π B  | π     orbita del bloque B bajo la acción del grupo G El conjunto de representantes de las orbitas es llamado conjunto de bloques de arranque o bloques base.

62

Ejemplo. Sean

V    0,1,2,3,4,5,6  

B0   1,2,4 ,  B1   2,3,5 ,  B2 3,4,6 , B3   0,4,5 ,  

B4   1,5,6 , B5   0,2,6 ,  B6   0,1,3  

D   B0, B1, B2, B3, B4,  B5,B6  

La pareja V,D es un (7,7,3,3,1)-BIBD simétrico. Cada elemento x del grupo aditivo Z7    0,1,2,3,4,5,6 define una permutación  πx : V   V πx p    x p(mod 7) (por ejemplo,π3 5    1, π5 1    6) Por un simple cálculo sobre los bloques podemos ver que Z7 es grupo de automorfismos del (7,7,3,3,1)-BIBD, además, 1,2,4 (es más cualquier bloque) es un bloque base del

diseño.

63

Ejemplo para el Club de Brigde Las 4 clases paralelas (reuniones) B11 0,1,2,3  B12    4,5,6,7  B13    8,9,T,E  B21 0,1,7,T  B22    2,4,5,E  B23    3,6,8,9  B31 0,3,5,9  B32   1,4,8,T  B33    2,6,7,E  B41 0,6,7,8  B42    1,3,4,E  B43    2,5,9,T   son las clases paralelas base (bloques base) para un horario óptimo respecto al grupo cíclico <π , donde la permutación

π   0 1 2 3 4 5 6 7 8 9   4 5 6 7 8 9     0 1 2 3   Por un simple cálculo podemos ver que para i =1, 2 π Bi1  B12π Bi2  Bi3π Bi3  Bi1  π B31     4,7,9,1 π B32   5,8,0,2 π B33     6,T,E,3   π2 B31     8,E,1,5 π2 B32     9,0,4,6  π2 B33   T,2,3,7     

π B41     4,T,E,0    π B42     5,7,8,3   π B43     6,9,1,2   π2  B41   8,2,3,4   π2  B42     9,E,0,7   π2 B43   T,1,5,6  

64

Las 8 clases paralelas (reuniones) forman un horario óptimo.

0,1,2,3   4,5,6,7   8,9,T,E  0,1,7,T   2,4,5,E   3,6,8,9  0,3,5,9   1,4,8,T   2,6,7,E  

                                4,7,9,1 5,8,0,2 6,T,E,3  8,E,1,5 9,0,4,6   T,2,3,7  0,6,7,8   1,3,4,E 2,5,9,T  

    4,T,E,0     5,7,8,3    6,9,1,2     8,2,3,4    9,E,0,7    T,1,5,6  

                   

65

Conjuntos de Diferencia Sea G un grupo aditivo abeliano de orden v, con elemento identidad denotado por “0”. Un (v, k, λ) conjunto de diferencia en G es un subconjunto D de G de tamaño k tal que la colección de valores x-y ( ,   ,   contienen todo elemento de G‐ 0  exactamente λ.

Ejemplo. D = 1,2,4 es un (7,3,1) conjunto de diferencia en el grupo G=Z7. (En muchas aplicaciones G=Zv).

1-2 = -1 = 6 2-1 = 1 = 1 1-4 = -3 = 4

4-1 = 3 = 3 2-4 = -2 = 5

4-2 = 2 = 2 Cada elemento diferente de 0 en Z7 aparece como exactamente λ veces como diferencia de dos elementos de D.

Los conjuntos de diferencia son usados para construir BIBDs simétricos. Un conjunto de diferencia es un bloque base del (7,3,1)- BIBD.

66

Algoritmos MetaHeurísticos

En ciencias de la computación y la optimización matemática, una metaheurística es un procedimiento de alto nivel o de heurística diseñado para encontrar, generar o seleccionar un procedimiento de nivel inferior o heurística (método de búsqueda parcial) que pueden proporcionar una solución suficientemente buena a un problema de optimización, especialmente con información incompleta o imperfecta o capacidad de cómputo limitada. Metaheurísticas pueden hacer pocas suposiciones sobre el problema de optimización que trata de resolver, por lo que puede ser útil para una gran variedad de problemas. En comparación con los algoritmos de optimización y métodos iterativos exactos, las metaheurísticas no garantizan que una solución óptima global se pueda encontrada en algunas clases de problemas. Muchas metaheurísticas implementan algún tipo de optimización estocástica, por lo que la solución encontrada es dependiente del conjunto de variables aleatorias generadas. Mediante la búsqueda en un conjunto muy grande de soluciones factibles, las metaheurísticas a menudo pueden encontrar buenas soluciones con menor esfuerzo computacional que los algoritmos iterativos exactos, o las heurísticas simples.

67

Los algoritmos Metaheurísticos operan en una representación o codificación de una solución, un objeto que se puede almacenar en la memoria de una computadora y puede ser convenientemente manipulada por los diferentes operadores que emplea el metaheurístico. Tres clases fundamentales de metaheurísticas se pueden distinguir, sobre la base de la forma en que se manipulan las soluciones.

• Metaheurísticas de búsqueda local. Iterativamente

hacen pequeños cambios en una sola solución.

• Metaheurísticas basadas en una población. De manera iterativa combinan las soluciones de un conjunto (llamado población) para obtener nuevas soluciones.

• Metaheurísticas constructivas. Construyen soluciones a

partir de sus partes constituyentes.

68

Métodos de Búsqueda Local El concepto de vecindad es esencial en algunos métodos de búsqueda local, como es el concepto de distancia en el espacio de los números reales R (valor absoluto, norma, etc.) Búsqueda de Vecinos, es uno de los más simples y es un proceso iterativo; empieza de una solución inicial y trata de alcanzar un mínimo global por moverse paso por paso. Esto implica el concepto de vecindad de una solución. Definición. Una vecindad N(x) de una solución x es un conjunto de soluciones que pueden ser alcanzadas desde x aplicando una simple operación, llamada movimiento. Tal operación podrá quitar o agregar un objeto a la solución o hacer el intercambio de dos objetos en la solución x (x no es vecino del mismo x).

69

x 1 x 2

N(x ) 1

N(x )2

X x 1 x 2m

es un movimiento de a

m x 1 x 2

70

La estructura y el tamaño de la vecindad son parámetros importantes para los métodos de búsqueda

Ejemplos Intercambios de parejas son frecuentemente usados para definir vecindades en problemas de permutaciones.

Problema de la n-reinas Dos soluciones (a1,,...,ai ,…,aj ,…,an), (b1,,...,bi ,…,bj ,…,bn) son vecinas si

bi = ajbj = ai bh = ah para h≠i h≠j

El movimiento que transforma la solución (ak) a la solución (bk) está determinado por el vector (i, j).

71

Problema del horario del club de brigde Una horario y es un vecino de x, si los horarios x, y son idénticos para toda reunión excepto en una, y en esta reunión, exactamente dos jugadores son intercambiados de grupos. El movimiento que transforma el horario x al horario y está determinado por el vector (h, i, j), donde h es la reunión donde los jugadores i y j son intercambiados de grupos.

72

Problema del agente viajero

Para este problema de permutaciones el intercambio de parejas no produce buenos resultados. Estructura de vecindad k-intercambio. Para k=2 por el operador inverso(p,i,j), donde p en una permutación que define el tour i and j son dos ciudades El operador genera un nuevo tour q definido por

q(i) = p(j), q(i+1)=p(j-1), . . . ,q(j)=p(i) i<j

q(h)=p(h) para ciudades h=1,…,i-1, h=j+1,…,n Ejemplo. Para n = 8 ciudades

[0 2 4 6 7 5 3 1] Si i = 2, p[2] = 4, j = 6, p[6] = 3, el vecino es

[0 2 3 5 7 6 4 1]

73

Pasos Básicos de un Algoritmo

Paso 1. (Inicialización)

(A) Seleccionar una solución inicial xactual∈X (B) xmejor = xactual , mejor_costo = f (xmejor)

Paso 2. (Selección y terminación)

Paso 3. (Actualización) xactual = xsig . Si f (xactual) < mejor_costo entonces ejecutar Paso 1 (B)

74

Búsqueda de Vecinos Paso Selección:

Escoger una solución mínima xsig ∈ N(xactual). Si el criterio de selección empleado no puede ser satisfecho, o el criterio de terminación es satisfecho entonces el proceso es parado. En cada paso de la selección, el algoritmo acepta un movimiento de xactual a xsig cuando o no f(xsig) es peor que f(xactual). Esto permite evitar ser atrapado en un óptimo local.

75

Seudocódigo de la Búsqueda de Vecinos Paso 1. (Inicialización)

(C) Seleccionar una solución inicial xactual∈X (D) xmejor = xactual , mejor_costo = f (xmejor)

Paso 2. (Selección y terminación)

Escoger una solución mínima xsig∈N (xactual). Si el criterio de selección empleado no puede ser satisfecho, o el criterio de terminación es satisfecho entonces el proceso es parado.

Paso 3. (Actualización) xactual = xsig . Si f (xactual) < mejor_costo entonces ejecutar Paso 1 (B)

76

Método Descendente

Paso Selección: Escoger xsig∈N (xactual) tal que f (xsig) <f (xactual) y terminar si tal xsig no existe Un problema inherente con este métodoes que en general conduce a ser atrapado en un óptimo local de la función objetivo f.

77

Seudocódigo del Método Descendente Paso 1. (Inicialización)

(A) Seleccionar una solución inicial xactual∈X (B) xmejor = xactual , mejor_costo = f (xmejor)

Paso 2. (Selección y terminación)

Escoger xsig∈N (xactual) tal que f (xsig) <f (xactual) y terminar si tal xsig no existe.

Paso 3. (Actualización) xactual = xsig . Si f (xactual) < mejor_costo entonces ejecutar Paso 1 (B)

78

Búsqueda Tabú (Fue desarrollado por Glover, 1986)

El principal inconveniente del algoritmo búsqueda de vecinos se encuentra en el ciclado del algoritmo. La Búsqueda Tabú ofrece una interesante posibilidad de superar el obstáculo de la búsqueda de vecinos.

Para evitar tal ciclado, una cola T llamada tabú (memoria corta) de longitud t es dada. Su objetivo es prohibir movimientos entre las soluciones que reinstalen algunos de atributos seleccionados de soluciones previas. No se guardan soluciones, sino algunos atributos seleccionados de movimientos. Después de t iteraciones, se eliminan los movimientos de la lista y son libres de ser restituidos. Paso Selección: Encontrar el mínimo xsig∈N (xactual) tal que el movimiento m: xactual→xsig no sea tabú (m∉ T)

79

Seudocódigo (Búsqueda Tabú)

Paso 1. (Inicialización) (A) Seleccionar una solución inicial xactual∈X (B) xmejor = xactual , mejor_costo = f (xmejor) (C) Empezar con una lista (tabú) T vacía, A = ∞

Paso 2. (Selección y terminación)

Encontrar el mínimo xsig∈N (xactual) tal que el movimiento mde xactual→xsig no sea tabú (m∉ T) o, f (xsig) <A

Paso 3. (Actualización) Actualizar la lista tabú de longitud t, cíclicamente

T = T∪{m-1} - {el movimiento más viejo} A = mejor_costo

xactual = xsig . Si f (xactual) < mejor_costo entonces ejecutar Paso 1 (B)

80

Tiempo Tabú

La lista tabú se puede implementar como un tiempo tabú, el cual registra la primera iteración en la que se prohíbe (se hace tabú) el movimiento.

• Al inicio de la búsqueda el tiempo tabú, denotado por tiempo_tabu, se inicializa a cero.

• Cuando elmovimiento m de xactual

→xsig es ejecutado el tiempo tabú es actualizado como

tiempo_tabu(m-1) = iter + t,

donde iter es el número de la iteración actual y t es la longitud de las lista tabú.

• Entonces, en cualquier iteración subsecuente iter el movimiento m es tabú si

tiempo_tabu(m-1) <iter

81

Criterio de terminación del algoritmo

El proceso se detiene cuando la función objetivo alcanza el óptimo global (si se conoce de antemano). Sin embargo, debido a que la búsqueda tabúes una técnica heurística, el algoritmo no garantiza alcanzar el óptimo teórico. Por lo tanto, el proceso de búsqueda también se detiene si el número de iteraciones sin mejora alguna de la función objetivo alcanza un valor especificado previamente.

Criterio de desempate

En algunos problemas de optimización mientras se explora la vecindad de la solución actual encontramos que hay varias mejores soluciones. Entonces, una característica importante en la solución de estos problemas es hacer una elección al azar de una mejor solución.

82

Función de Aspiración

La condición tabú basada sobre algunos atributos de movimientos (no sobre soluciones), puede ser muy restringida en el sentido que puede también prohibir movimientos a soluciones no antes visitadas de posible mejor cualidad. Para evitar esto, un criterio de aspiración es introducido para cancelar el estatus tabú de un movimiento de x a y si el valor f(y) es estrictamente mejor que el mejor valor de la función objetivo f obtenido hasta el momento.

83

Atributos/Características de movimientos para ser tabú Para el problema de las n-reinas. Cuando el movimiento (i,j) se ejecutó:

1. Prohibir que la reina i se intercambien por la reina j

2. Prohibir que se cambien las reinas i y j

3. Prohibir que se cambien las reinas i o j

84

Para el problema del club de brigde. Cuando el movimiento (r,i,j) se ejecutó:

1. Prohibir en la reunión r, que los jugadores i y j sean intercambiados de grupo.

2. Prohibir en la reunión r, que los jugadores i y j sean

cambiados de grupo por otros jugadores.

3. Prohibir en la reunión r, que los jugadores i o j sean cambiados de grupo por otros jugadores.

85

Para el problema del agente viajero. Seapuna permutación que define un tour. Cuando el movimiento i, p i ,j, p j se ejecutó:

1. Prohibir cualquier cambio que resulte en un tour con las ciudades i y j ocupando las posiciones p(i) y p(j), respectivamente.

2. Prohibir cualquier cambio que resulte en un tour en que la ciudad i ocupe la posición p(i) o la ciudad j ocupe la posición p(j).

3. Prohibir que la ciudad i retorne a la posición p(i). 4. Prohibir que la ciudad j retorne a la posición p(j). 5. Prohibir que la ciudad i se mueva a otra posición. 6. Prohibir que la ciudad j se mueva a otra posición. 7. Prohibir que las ciudades i y j se muevan a otras

posiciones.

86

Simulated Annealing (Recocido Simulado)

Recocido Simulado es procedimiento iterativo que permite movimientos de no descenso. Kirkpatrick y otros autores, 1983, fueron los primeros en resolver problemas de optimización combinatoria con este enfoque. Este enfoque ya se utilizaba para simular la evolución de un sistema físico inestable hacia un punto de equilibrio termodinámico estable a una temperatura fija. En cada iteración del recocido simulado, una solución xactual

se selecciona al azar en N(xactual). Entonces, xactual= xsig, si f (xsig)<f (xactual) Pero también, xactual= xsigincluso si

Δ = f (xsig) - f (xactual)>0 de acuerdo con una probabilidad decreciente con Δ y el número de iteraciones ya realizadas. Más específicamente, xactual= xsig con probabilidad exp (-Δ/TP) donde el parámetro de TP (referido como el factor de temperatura) disminuye con el número de iteraciones realizadas.

87

Seudocódigo del Recocido Simulado

Paso 1. (Inicialización) (A) Seleccionar una solución inicial xactual∈X (B) xmejor = xactual , mejor_costo = f (xmejor) (C) Seleccionar un valor (alto) T y 0 <u< 1

Paso 2. (Selección y terminación) (A) Seleccionar aleatoriamente xsig∈N (xactual)

calcular Δ = f (xsig) - f (xactual) (B) ifΔ≤ 0 aceptar xsig (y proceder Paso 3) (C) elseΔ> 0 generar una variable aleatoria

p uniforme en (0,1)

ifp< exp (-Δ / T) aceptar xsig (y proceder Paso 3) elsexsig no es aceptado retornar Paso 2 (A)

Paso 3. (Actualización)

T = u*T (cuando un estado de equilibrio o un número de iteraciones se hayan alcanzado)

xactual = xsig . Si f (xactual) < mejor_costo entonces ejecutar Paso 1 (B)

88

Parámetros para el recosido simulado Temperatura inicial. T0 es la solución de

. 90 exp ∆0

030

log . 90

Esto significa que esta temperatura acepta quela función objetivo empeore 30 unidades con una probabilidad .90 Razón de decaimiento de la temperatura. u = .95, pero puede ser otra cantidad Dos posibles criterios para actualizar la temperatura:

1. Si un número fijo de iteraciones ha sido alcanzado con una misma temperatura T, entonces actualizamos T = u* T

2. Hacemos una prueba de equilibrio en cada intervalo de 3*N configuraciones aceptadas. Si el número de costos que son mayores a la media móvil de los costos es aproximadamente igual al número de los costos menores, entonces actualizamos la temperatura T = u* T.