8 GYE-BOG 2 4 4
7.2 Resolución de un caso: implementación de Tabu Search para resolver el TSP:
7.2.1 Introducción:
El algoritmo propuesto basado en TS utiliza la memoria a corto y largo plazo y hace uso de la matriz de frecuencias que permite la exploración de nuevas regiones liberando de esta manera los movimientos señalados como tabú.
La matriz de frecuencias lleva la historia de los movimientos admisibles y es la responsable de definir el criterio de búsqueda en otras regiones. Para iniciar el método se requiere que se genere una solución inicial (por ejemplo con la heurística del vecino más cercano) y a partir de esta actúa la búsqueda tabú.
Cuando la función objetivo no mejora después de una cantidad determinada de iteraciones en la búsqueda tabú basada en memoria de corto plazo, es conveniente emplear diversificación a partir de la memoria de largo plazo basada en frecuencias. La estrategia de diversificación emplea memoria de largo plazo, usando un vector ordenado de forma ascendente según el número de cambios de un evento. De este vector ordenado se toman los primeros elementos (que corresponden a aquellos sucesos que menos han cambiado) donde el número de eventos y el número de iteraciones con los que se hace diversificación son parámetros adicionales de la búsqueda tabú. La programación de los eventos seleccionados es cambiada de manera forzada, para que se direccione la búsqueda a regiones no visitadas ( o poco frecuentadas ).
Parámetros:
LongitudTabu: número máximo de prohibiciones sobre la posición de determinado nodo. CiclosDiver: permite al algoritmo revisar el número de iteraciones en las que el óptimo local no se ha actualizado, permitiendo la diversificación para explorar nuevas regiones.
7.2.2 Algoritmo
1. Ingrese: MatrizDistancia, longitudTabu, Maxiter, ciclosdiver, listatabu 2. Generar solución inicial (vecino más cercano)
, y longitudtour
. 3. Mientras Iter < Maxiter3.2.
= Menor distancia.3.3. Generar las
1
permutaciones de dos nodos consecutivos. 3.4. Determinar la distancia de cada permutación.3.5. Clasifique los movimientos en prohibidos y no prohibidos.
3.6. Determinar la menor distancia de los movimientos no prohibidos y seleccione la permutación.
3.7. Si todos los movimientos son prohibidos, aplique el criterio de aspiración. Sino pare.
3.8. Actualice
.3.9. Si
<
, entonces actualice
. Regresar a 3.1.3.10. Si en k iteraciones no se actualiza
, entonces diversifique, regrese a 3.1.4. El óptimo encontrado es
El método funciona de manera iterativa. Una vez cumplido el criterio de parada, se evalúa la solución inicial y la resultante con el fin de observar la mejora, si el valor es inferior al inicial se ha encontrado un nuevo valor mínimo.
7.2.3 Resultados numéricos
Consideremos 10 nodos y la siguiente matriz de distancias:
TABLA 1: Matriz de distancias Supongamos que los parámetros son:
Solución inicial: {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 1}, longinicial = 89.18
Maxiter = 200
CiclosDiver = 20
Se deben construir 3 tablas: La matriz de las secuencias (tablas 2 y 3), la matriz tabú (tabla 4) y la matriz de frecuencias (tabla 5).
TABLA 2: Permutación inicial
En la iteración que se muestra en la Tabla 3, se observa que la permutación factible mejor para generar el siguiente vecindario es {2, 1, 3, 4, 5, 6, 7, 8, 9, 10, 2} con longitud 78.76. Quedando prohibido el nodo 1 en la posición 1 y el nodo 2 en la posición 2. Así las matrices de memoria (Tabú y frecuencia) quedan de la forma representada en la tabla 4 y la tabla 5, en las cuales las columnas representan nodos y las filas posiciones.
TABLA 3: Permutaciones de la iteración 1
TABLA 4: Matriz tabú
Por otro lado se construye la matriz de frecuencias (Tabla 5), en la que se ha marcado que lo mejor factible es ubicar el nodo 1 en la posición 2 y el nodo 2 en la posición 1.
TABLA 5. Matriz de frecuencias (memoria de largo plazo)
Una vez almacenada esta información, se obtiene la iteración 2, como se muestra en la Tabla 6. Se observa que la mejor es la secuencia con longitud 73.41, quedando tabú la permutación con suma 89.18.
TABLA 6. Iteración 2.
Continuando así llegamos a la iteración 33, cuyo resultado se muestra en la Tabla 7. Hasta ese momento, en las últimas 20 iteraciones el óptimo local no se actualiza, por lo que el algoritmo llama a un procedimiento para diversificar la búsqueda.
TABLA 8. Matriz de frecuencias.
Es importante señalar que la diversificación no se hace de manera aleatoria, sino mediante el análisis de la información recopilada por la matriz de frecuencias.
El criterio para ubicar el nodo en cierta posición, será la menor frecuencia registrada. Se observa en la Tabla 8 que el nodo 1 tiene la menor frecuencia (0= en las posiciones 1, 6, 7, 8, 9 y 10, así que es buen candidato para ocupar la posición 1. Análogamente, el nodo 2 es buen candidato para la posición 3, el nodo 3 es buen candidato para la posición 1, pero ésta ya está ocupada por lo que se situará en la posición 5, el nodo 4 es buen candidato para la posición 6, el nodo 5 para la posición 1, que ya está ocupada, por lo que se ubica en la posición 2, y así sucesivamente, así se genera la secuencia: {1, 5, 2, 8, 3, 4, 7, 6, 9, 10} con longitud 77.96, como se observa en la Tabla 9.
El óptimo se encuentra en la iteración 144, en el tour {5, 6, 9, 4, 10, 2, 8, 3, 7, 1, 5}, con una longitud de 36.79, como se puede observar en la Tabla 10.
TABLA 10. Iteración 144
Con el fin de visualizar el papel que desempeña la diversificación, se muestra en la siguiente figura, el gráfico para los 200 tours factibles generados en cada vecindario. Es claro que en el momento de encontrar un óptimo local y ubicarse en un valle profundo la diversificación permite explorar nuevas regiones para mejorar el óptimo local.
8.
Recocido Simulado
8.1
Origen:
La técnica heurística del recocido simulado (RS), en inglés Simulated Anneling, está basada en un algoritmo propuesto por Metropolis et al. (1953) en el marco de la termodinámica estadística, para simular el proceso de enfriamiento de un material (recocido). Kirkpatrick et al. (1983) e independientemente Cerni (1985) establecieron una analogía entre el proceso de recocido y el reto de resolver problemas de optimización combinatoria de gran escala. Desde entonces el recocido simulado ha sido utilizado para resolver en forma exitosa una amplia variedad de problemas de optimización combinatoria, convirtiéndose en una Metaheurística clásica. Debido a su sencillez de implementación así como a los buenos resultados que iban apareciendo, experimentó un gran auge en la década de los 80.
Kirpatrick y otros trabajando en el diseño de circuitos electrónicos consideraron aplicar el algoritmo de Metrópolis en alguno de los problemas de optimización combinatoria que aparecen en este tipo de diseños. El algoritmo de Metrópolis simula el cambio de energía en el proceso de enfriamiento de un sistema físico. Las leyes de la termodinámica establecen que, a una temperatura
, la probabilidad de un aumento de energía de magnitud
vienedada por la expresión siguiente:
p E e E kt ( )
, donde k es la constante de Boltzmann.
La simulación de Metrópolis genera una perturbación y calcula el cambio resultante en la energía. Si ésta decrece, el sistema se mueve al nuevo estado, en caso contrario, se acepta el nuevo estado de acuerdo con la probabilidad dada en la ecuación anterior.
Kirpatrick y otros, pensaron que era posible establecer una analogía entre los parámetros que intervienen en la simulación termodinámica de Metrópolis y los que aparecen en los métodos de optimización local, tal y como muestra la tabla adjunta.
Termodinámica Optimización
Configuración Solución Posible
Configuración Fundamental Solución óptima
Energía de la Configuración Costo de la Solución
Para ello, establecen un paralelismo entre el proceso de las moléculas de una sustancia que van colocándose en los diferentes niveles energéticos buscando un equilibrio, y las soluciones visitadas por un procedimiento de búsqueda local. Así pues, SA es un procedimiento basado en búsqueda local en donde:
En cada iteración se genera un número concreto de vecinos, que puede ser fijo para toda la ejecución o depender de la iteración concreta
Cada vez que se genera un vecino, se aplica el criterio de aceptación para ver si sustituye a la solución actual:
- Si la solución vecina es mejor que la actual, se acepta automáticamente, tal como se haría en la búsqueda local clásica.
- En cambio, si es peor, aún existe la probabilidad de que el vecino sustituya a la solución actual. Esto permite al algoritmo salir de óptimos locales, en los que la búsqueda local clásica quedaría atrapada.
Es decir, en SA todo movimiento de mejora es aceptado y además se permiten movimientos de no mejora de acuerdo con unas probabilidades. Dichas probabilidades están basadas en la analogía con el proceso físico de enfriamiento y se obtienen como función de la temperatura del sistema.
8.2
El algoritmo SA
La estrategia de SA es comenzar con una temperatura inicial “alta”, lo cual proporciona una
probabilidad también alta de aceptar un movimiento de no mejora. En cada iteración se va reduciendo la temperatura por medio de algún mecanismo de enfriamiento, y por lo tanto las probabilidades son cada vez más pequeñas conforme avanza el procedimiento y nos acercamos a la solución óptima. De este modo, inicialmente se realiza una diversificación de la búsqueda sin controlar demasiado el costo de las soluciones visitadas. En iteraciones posteriores resulta cada vez más difícil el aceptar malos movimientos, y por lo tanto se produce un descenso en el costo.
En resumen, cada vecino de una solución tiene una probabilidad de reemplazar a la solución actual, de forma tal que a medida que avanzan las iteraciones, aceptar soluciones con grandes empeoramientos es menos probable (pero sigue existiendo una probabilidad positiva de aceptarlos).
Existen varios mecanismos de enfriamiento:
Enfriamiento basado en sucesivas temperaturas descendentes T 0, T 1, T 2 ,…, T maxiter fijadas por el usuario
Enfriamiento con descenso constante (c) de temperatura T k+1= T k - c
1 2 3 4 5 6 7 d 0.2 0.4 0.6 0.8 1.0 x t T 20 T 10 T 5 T 1 T 0.5
Descenso geométrico: T k+1= r · T k (lo más usado), k = iteración actual, r constante cercana a 1 (usualmente, escogida en [0.8, 0.99])
Criterio de Boltzmann:
+
Esquema de Cauchy:
+
De esta forma, SA tiene la habilidad de salir de óptimos locales al aceptar movimientos de no mejora en los estados intermedios. Al final del proceso estos son tan poco probables que no se producen, con lo que, sin no hay movimientos de mejora, el algoritmo finaliza. El diagrama siguiente muestra un esquema general del algoritmo:
Algoritmo Recocido Simulado Tomar una solución inicial x Tomar una temperatura inicial T Mientras (no congelado) Realizar L veces Tomar x’ de N(x). d = f(x’) – f(x) Si (d <0) hacer x=x’ Si (d>0) hacer x=x’ con p=e- d/T
Hacer acción del mecanismo de enfriamiento (por ejemplo: T = rT)
Para diseñar un algoritmo a partir del esquema general anterior hay que determinar los parámetros del sistema:
La Temperatura Inicial
- Se determina realizando una serie de pruebas para alcanzar una determinada fracción de movimientos aceptados.
La Velocidad de Enfriamiento
La longitud
- Proporcional al tamaño esperado de
. El instante en que la Secuencia de Enfriamiento finaliza (está congelada)
- cont = cont+1 cada vez que se completa una temperatura y el porcentaje de movimientos aceptados es menor de MinPercent. cont=0 cuando se mejora la mejor solución almacenada.
La clave de una implementación de SA es el manejo de la cola o secuencia de enfriamiento: Cual es la temperatura inicial y cómo disminuye la temperatura en cada iteración son las dos preguntas a responder para diseñar un algoritmo. Podemos encontrar numerosos estudios en donde se comparan colas lentas (aquellas en las que la temperatura disminuye poco a poco) con colas rápidas que vienen a ser métodos de descenso simple con pequeñas perturbaciones.
Johnson y otros (1989) sugieren:
Utilizar soluciones posibles y no posibles. Penalizar en la función de evaluación las soluciones imposibles.
- El objetivo es diversificar y considerar más soluciones.
- Notar que con bajas temperaturas la solución tenderá a ser posible.
Las últimas implementaciones de SA apuntan a olvidarse de la analogía física y manejar la cola de enfriamiento como una estructura de memoria. Es decir, la probabilidad de aceptar o rechazar un movimiento de no mejora depende no de la iteración (tiempo transcurrido) sino de lo sucedido en la búsqueda. En este sentido, la probabilidad será función de algunas variables de estado del proceso. En la actualidad se están diseñando numerosos algoritmos híbridos en donde la búsqueda local se realiza con un procedimiento basado en SA, en ocasiones combinado con búsqueda Tabú.