METAHEURISTICAS
Ideas, Mitos, Soluciones
Irene Loiseau
1er Cuatrimestre 2009
OPTIMIZACION COMBINATORIA
Qué es un problema de optimización
combinatoria?
Ejemplos de problemas de optimización combinatoria:
•
•
•
•
•
•
Problema de la suma de subconjuntos
Determinación de caminos mínimos en grafos
Flujo en redes
Asignación de tareas
Problema de la mochila
Problemas de ruteo de vehículos. El problema del Viajante de
comercio
• Diseño de redes de comunicaciones
• Ruteo en redes de comunicaciones
• VLSI
•
•
•
•
•
•
•
Planificación de tareas
Asignación de recursos y horarios en instituciones educativas
Minimizaron de desperdicios en el corte de materiales
Localización de plantas
Planificación financiera
Problemas de energía
Biología Computacional (secuenciamiento de ADN, árboles
filogenéticos, doblamiento de proteínas)
• etc.
Cómo se modela matemáticamente un problema de
optimización combinatoria?
Minimizar (o maximizar) f(x)
sujeto a
g (xi)  bi
h (xi) = ci
xi  Z
-----------------------------------------
i=1.........m1
i= m1 +1,....... M
• función objetivo
• variables de decisión
• restricciones
(No siempre se puede modelar exactamente así un problema de optimización
combinatoria)
Cómo se modela como problema de programación lineal
entera un problema de optimización combinatoria?
•
•
•
•
Problema de la mochila
Problema de asignación
Problema de flujo máximo
Problema del viajante de comercio.
Cómo se resuelve un problema de optimización
combinatoria?
• Enumeración completa o “algoritmo de fuerza bruta”. Sirve?
COMPLEJIDAD COMPUTACIONAL
Qué hacer?
• SOLUCIONES EXACTAS
• HEURISTICAS
HEURISTICAS
• Heurísticas clásicas
• Metaheurísticas o heurísticas “modernas” o
sistemas inteligentes
Cuándo usarlas?
• Problemas para los cuales no se conocen
“buenos” algoritmos exactos
• Problemas difíciles de modelar
Porqué usarlas?
• Adaptabilidad a modificaciones de los datos o del
problema una vez que ya se obtuvo un resultado.
• Fáciles de implementar y programar
• Basadas en tener una gran capacidad de cálculo
• No sólo para problemas de optimización
combinatoria
Cómo se evalúan?
•
•
•
•
problemas test
problemas reales
problemas generados al azar
cotas inferiores
Problema del viajante de comercio (TSP)
Dado un grafo G con longitudes asignadas a los ejes
queremos determinar un circuito hamiltoniano de
longitud mínima.
No se conocen algoritmos polinomiales para resolver el
problema del viajante de comercio.
Tampoco se conocen algoritmos - aproximados
polinomiales para el TSP general (si se conocen
cuando las distancias sean euclideanas)
Es “el” problema de optimización combinatoria más
estudiado.
Algunas heurísticas y algoritmos aproximados para
el TSP
Heurística del vecino más próximo
-----------------------------------------------------------------------Empezar
Elegir un nodo v cualquiera de G
Poner l(v) = 0
Inicializar i = 0
Mientras haya nodos sin marcar hacer:
poner i = i +1
elegir el eje (v,w) “más barato” tal que w no esté
marcado.
poner l(w) = i
poner v = w
Fin
--------------------------------------------------------------------------------------Cuál es la complejidad de este algoritmo?.
Heurísticas de inserción
------------------------------------------------------------------------Empezar
• Construir un circuito de longitud 3.
• Marcar los nodos del circuito
• Mientras haya nodos sin marcar hacer
ELEGIR un nodo v sin marcar
INSERTAR v en el circuito
Fin
----------------------------------------------------------------------Cómo ELEGIR?. Cómo INSERTAR?.... variantes de la
heurística de inserción.
Para INSERTAR el nodo v elegido
si ci j es el costo o la longitud de un eje (i,j), elegimos
dos nodos i, i+1 que ya están en el circuito y son
consecutivos en el mismo y tal que
ci v + cv i+1 – c i i+1
sea mínimo. Insertamos v entre i e i+1.
Podemos ELEGIR el nuevo nodo v para agregar al
circuito tal que:
•
•
•
•
v sea el nodo más próximo a un nodo que ya está
en el circuito.
v sea el nodo más lejano a un nodo que ya está en
el circuito.
v sea el nodo “más barato”, o sea el que hace
crecer menos la longitud del circuito.
v se elige al azar.
En los dos primeros casos y en el cuarto la complejidad del
algoritmo es O(n2), en el tercero es O(n2 log n)
En el caso de grafos euclideanos (por ejemplo grafos en
el plano R2), se puede implementar un algoritmo de
inserción
• usando la cápsula convexa de los nodos como
circuito inicial
• insertando en cada paso un nodo v tal que el ángulo
formado por los ejes (w,v) y (v,z), con w y z en el
circuito ya construido, sea máximo.
Hay muchas variantes sobre estas ideas.
Heurística del árbol generador
--------------------------------------------------------------• Encontrar un árbol generador mínimo T de G
• Duplicar los ejes de T
• Armar un circuito euleriano E con los ejes de T y sus
“duplicados”
• Recorrer E usando DFS y armar un circuito
hamiltoniano G
--------------------------------------------------------------------------
Cuál es la complejidad de este algoritmo?
Teorema: Si las distancias del grafo cumplen la
desigualdad triangular la heurística del árbol
generador tiene una perfomance en el peor caso dada
por
xH (i)/ x* (i) ≤ 2
O sea si las distancias son euclideanas hay algoritmos
polinomiales para el problema del TSP aproximado.
Perfomance de las otras heurísticas en el peor caso:
Si las distancias en G son euclideanas se puede probar
que valen las siguientes cotas para la perfomance en
el peor caso:
• Vecino más próximo
xh (i)/ x* (i) ≤ ½ (log n +1)
• Inserción del más próximo xh (i)/ x* (i) ≤ 2
• Inserción del más lejano
xh (i)/ x* (i) ≤ 2 log n +
0.16
• Inserción del más barato
xh (i)/ x* (i) ≤ 2
Heurísticas de mejoramiento
Cómo podemos mejorar la solución obtenida por alguna heurística
constructiva como las anteriores?
Heurística 2-opt de Lin y Kernighan
-------------------------------------------------------------------------• Obtener una solución inicial H (o sea un circuito hamiltoniano H),
por ejemplo con alguna de las heurísticas anteriores.
• Mientras sea posible hacer:
. Elegir dos ejes de G tal que al sacarlos de H y
reemplazarlos por los dos necesarios para reconstruir un nuevo
circuito hamiltoniano H´ obtengamos un H´ de longitud menor a
la de H.
. H = H´
. Fin
---------------------------------------------------------------------------------------Cuándo para este algoritmo?. Se obtiene la solución óptima del
TSP de este modo?
• En vez de elegir para sacar de H un par de ejes que nos lleve a
obtener un circuito de menor longitud podemos elegir el par que
nos hace obtener el menor H´ entre todos los pares
posibles.(más trabajo computacional)
• Esta idea se extiende en las heurísticas k-opt donde se hacen
intercambios para cualquier k. O sea en vez de sacar dos ejes,
sacamos k ejes de H y vemos cual es la mejor forma de
reconstruir el circuito. En la práctica se usa sólo 2-opt o 3 –opt.
• Estas mismas ideas se pueden usar para construir un algoritmo
Tabu Search para el TSP definiendo los vecinos de una
solución usando 2- opt o 3 opt. …….
ESQUEMA GENERAL DE UN ALGORITMO DE
DESCENSO (O BUSQUEDA LOCAL)
S= conjunto de soluciones
N(s) =soluciones “vecinas” de la solución s
---------------------------------------------------------------Elegir una solución inicial s0 S
Repetir
Elegir s  N(s0) tal que f(s) < f(s0)
Reemplazar s0 por s
Hasta que f(s) > f(s0) para todos los s  N(s0)
----------------------------------------------------------------
Cómo determinar las soluciones vecinas de una solución
s dada?
Qué se obtiene con este procedimiento? Sirve?
Optimos locales y globales
Espacio de búsqueda
Problema de asignación de tareas:
Supongamos que tenemos el problema de asignar tareas a un sola
máquina de modo a minimizar el tiempo total de ejecución.
Cada trabajo j tiene un tiempo de procesamiento p j y una fecha de
entrega d j. El objetivo es entonces minimizar
T = j max {(C j – dj),0}
donde C j es el momento en que se completa el trabajo j.
Como elegir las soluciones iniciales?. A priori se puede
tomar cualquier permutación de las tareas.
Determinación de los vecinos de una solución dada: en
este caso podemos tomar los que se obtengan de la
solución actual cambiando la posición de un trabajo
con otro.
En un problema con 4 trabajos por ejemplo los vecinos
de (1,2,3,4) serán:
N(s) = {(1,3,2,4),(3,2,1,4),(1,2,4,3),
(1,4,3,2),(2,1,3,4),(4,2,3,1)}
TECNICAS METAHEURISTICAS
• Simulated annealing (primeros trabajos 1953, 1983)
• Algoritmos Tabú Search (primeras aplicaciones a optimización
combinatoria en 1986, basado en algunas ideas de los 70)
• Algoritmos genéticos y evolutivos (primeras ideas en los 60,
mayormente aplicaciones a problemas de IA).
• GRASP (1989)
• Colonia de hormigas (1992)
• Redes neuronales (primeras ideas en los 60, resurgieron en los
80)
• otras..
• Híbridos
• Origen, motivación, exceso de nomenclatura,
similitudes ¨forzadas¨ con problemas de la física y la
biología por ejemplo, etc.
• Se usan en otros problemas, que no son de
optimización combinatoria también.
BIBLIOGRAFIA
• De que tratan los libros de metaheuristicas?.
• De que tratan los papers?:
• “nuevas ideas” para las metaheuristicas
tradicionales.
• nuevas metaheurísticas
• aplicaciones a una enorme cantidad de problemas
REVISTAS:
• Journal of Heuristics, Kluwer
• Revistas de Operations Research, Sistemas
Inteligentes, Inteligencia artificial, etc.
LIBROS y ANALES
• Aarts,E.,Korst,J.,”Simulated Annealing and Boltzmann machines”, Wiley,
1989.
• Aarts,E. Lenstra,J.K., “ Local Search in Combinatorial Optimization”
• Bonabeau, E.,Dorigo, M.,Theraulaz,G.,”Swarm Intelligence”,Oxford
University Press, 1999.
• Corne,D., Dorigo,M.,Glover, F., “New ideas in Optimization”, McGrawHill,
1999.
• Davis,L.(ed),”Handbook of genetic algorithms”, Reinhold,1991.
• Dorigo,M.,Stutzle,T.,”Ant Colony Optimization”, MIT Press 2004.
• Glover,F., Laguna,M., “Tabu Search”, Kluwer Academic Pub., 1997.
• Glover, F., Laguna, M., Taillard, E., de Werra, D. (eds), “Tabu Search”,
Annals of Operations Research, Vol. 41, 1993.
• Goldberg, D.,” Genetic algorithms in Search, Optimization and Machine
learning”, Addison-Wesley,1989.
• Haupt,R.,Haupt,S.,”Practical genetic algorithms”,Wiley,1998.
• Hertz,J., Krog,A., Palmer,R., “Introduction to the theory of neural
computacion”, Addison_Wesley, 1991.
• Holland,J. “Adaptation in netural and artificial systems”,MIT Press, 1975.
• Laporte, G., Osman,I.H., “Metaheuristics in Combinatorial
Optimization”, Annals of Operations Research, Vol 63, 1996.
• Michalewicz, Z.,”Genetic algorithms + Data Structures = Evolutionary
programs”, 1996.
• Mitchell,M.,”An introduction to genetic algorithms (complex adaptive
systems)”, 1996.
• Osman,I.,Kelly,J.,(eds) “Metaheuristics: theory and applications”, Kluwer
Academic pub., 1996.
• Pham,D.,Karaboga,D.” Intelligent Optimization Techniques: Genetic
Algorithms, Tabu Search, Simulated Annealing, and Neural Networks”,
Springer Verlag, 1998.
• Rayward- Smith, Osman, Reeves, Smith,” Modern heuristics search
methods”, 1996.
• Reeves, C. (ed), “Modern heuristics techniques for combinatorial Problems”,
Blackwell,1993
• Van Laarhoven,P.,Aarts,E.”Simulated Annealing:theory and applications”,
Kluwer,1988
• Voss, Martello, Osman, Rocairol, “Metaheuristics”, Kluwer, 1999.
SIMULATING ANNEALING
Ideas básicas:
Metropolis, A., Rosenbluth,M., Rosenbluth,A., Teller, A., Teller,E., “ Equation
of state calculation by fast computing machines”, J. of Chemistry Physics,
1953
Algoritmo para simular el proceso de enfriamiento de un material en un baño
de calor (annealing).
Si un material sólido se calienta por encima de su punto de fundición y
después se enfría hasta quedar en estado sólido, las propiedades de este
sólido dependen de la velocidad de enfriamiento.
30 años más tarde:
Kirkpatrick,S., Gellat,C., Vecchi,M., “Optimization by simulating annealing”,
Science, 1983.
Proponen mejorar el algoritmo básico de (descenso o búsqueda local),
permitiendo movimientos donde el valor de la función empeora con una
frecuencia gobernada por una función de probabilidad que cambia a lo
largo del algoritmo, inspirada en el trabajo de Metropolis et all.
Las leyes de la termodinámica dicen que a temperatura t la probabilidad de un
crecimiento de la energía de magnitud E está dada por
p (E) = exp ( -E/ kt)
(1)
donde k es la constante de Boltzman.
Metropolis et all. generan una perturbación y calculan el cambio de energía. Si
la energía decrece el sistema se mueve al nuevo estado. Si crece el nuevo
estado es aceptado con probabilidad (1). El procedimiento se repite para un
número predeterminado de iteraciones para cada temperatura, después de lo
cual la temperatura se disminuye hasta que el sistema se congela en estado
sólido.
Kirkpatrick et all., y Cerny (1985) propusieron en forma independiente usar
este algoritmo en problemas de optimización combinatoria haciendo un
paralelo entre el proceso de enfriamiento y los elementos de este tipo de
problemas
Si hacemos la siguiente correspondencia:
estado del sistema
Solución factible
Energía
Costo
cambio de estado
Solución vecina
Temperatura
Parámetro de control
estado de congelamiento
Solución heurística
Con esto cualquier algoritmo de búsqueda local puede
convertirse en un algoritmo “annealing” tomando al
azar un cierto numero de vecinos y permitiendo que
elija una solución peor de acuerdo a la ecuación (1)
• Cómo es la función de energía para la mayor parte
de los materiales?.
• Cómo es la función objetivo en problemas de
optimización?.
ESQUEMA GENERAL DE UN ALGORITMO SIMULATING
ANNEALING
------------------------------------------------------------------------Elegir una solución inicial s0
Elegir una temperatura inicial t0 > 0
Elegir una función de reducción de temperatura  (t)
Repetir mientras no se verifique la condición de parada
Repetir hasta icount = nrep (t)
Elegir al azar s  N(s0 )
 = f(s) - f(s0 )
Si  < 0
entonces s := s0
Sino
Generar x al azar en (0,1)
Si x < exp (- / t) entonces s := s0
Fin
Poner t =  (t)
Fin
------------------------------------------------------------------
Qué hay que hacer para usar este esquema en la
práctica?
•
•
•
•
•
Definir conjunto de soluciones
Definir función de costo
Definir vecinos
“Elegir” parámetros: temperatura, nrep, 
“Elegir” criterio de parada
Más Detalles
La temperatura inicial debe ser suficientemente “alta” como para permitir un
intercambio casi libre de las soluciones vecinas.
La forma de reducir la temperatura es vital para el éxito de la heurística. Hay
que determinar:
•
•
número de repeticiones en cada temperatura.
forma de reducción de la temperatura
Muchas iteraciones por temperatura para pocos valores de temperatura o al
revés.
Por ejemplo:  (t) = a t con a < 1
Se acostumbra usar 0.8 < a < 0.99
• nrep puede crecer geométricamente o aritméticamente en cada temperatura.
• En algunos casos se usa la historia para determinar nrep
• Otra propuesta:  (t) = t/ (1 + b t ) con b chico
En la práctica...............
Criterios de parada:
• teóricos
• en la práctica.....nro. de iteraciones sucesivas sin
mejora
Elección del espacio de soluciones y definición de
vecinos: muy importante.
Factibilidad
Penalidades en la función objetivo
Evitar funciones “chatas”
Coloreo de grafos
Grafo G = (V, X)
Se puede plantear el problema como particionar el conjunto
de vértices en K conjuntos.
Una solución sería entonces
s = (V1,V2…………, Vk )
El objetivo es entonces minimizar k.
Qué pasa si se intentan usar intercambios para pasar de
una solución factible a otra?.
Componentes bicolores. Complicado
Ideas:
Cambiar la definición de solución factible. Poner como solución
factible una partición cualquiera de V, aunque no defina un
coloreo factible.
Entonces los vecinos son los que se obtienen a partir de s
cambiando un nodo de un conjunto Vi a otro.
Agregar a la función objetivo una función de penalidad que
cuente cuantos ejes hay dentro de cada subconjunto o sea
f (s) = k +  | Ei |
donde Ei es el conjunto de ejes entre nodos del conjunto Vi
No es una buena función objetivo…………..
Problemas de horarios en instituciones educativas
• Cada institución tiene sus propias reglas.
• Muchas restricciones y objetivos.
Consideremos acá el problema de programar un conjunto dado
de exámenes en un numero fijo de franjas horarias, de modo
que ningún estudiante tenga que dar dos exámenes a la vez, y
que haya aulas del tamaño necesario para los mismos.
Puede haber muchas otras restricciones.
Consideremos el ejemplo presentado por Dowsland,K., 1996
Restricciones:
• 3000 alumnos, 24 franjas horarias disponibles
• ningún alumno puede dar dos exámenes al mismo tiempo.
• algunos pares de exámenes pueden ser programados en el
mismo horario.
• algunos pares de exámenes NO pueden ser programados
en el mismo horario.
• algunos grupos de exámenes tienen que ser programados en un
cierto orden.
• algunos exámenes tienen que ser programados dentro de
determinadas ventanas de tiempo.
• no puede haber mas de 1200 alumnos dando examen al
mismo tiempo.
Objetivos secundarios:
•
•
Minimizar el numero de exámenes de mas de 100 alumnos después de el periodo 10.
minimizar la cantidad de alumnos que tienen que dar dos exámenes en periodos
consecutivos.
Difícil encontrar una solución factible.
Primer paso: decidir cuales serán las soluciones factibles y cuales restricciones se
incorporaran a la función objetivo como penalidades.
El problema básico de horarios se puede modelar como un problema de coloreo de
grafos. La solución propuesta se basa en algoritmos Simulating Annealing para ese
problema.
Espacio de soluciones: asignación de exámenes a las 24 franjas que verifiquen las
restricciones de orden.
Vecinos: cambiar una franja horaria para un examen.
Costo:
w1 c1 + w2 c2 + w3 c3 + w4 c4 + w5 c5 + w6 c6
donde
•
•
•
•
•
c1 es el número de conflictos de los estudiantes
c2 es el número de exámenes que colisionan por otras razones
c3 es el número de violaciones de ventanas de tiempo
c4 es el número de violaciones de la capacidad de las aulas
c5 es el número de exámenes que no verifican la segunda
restricción secundaria
• c6 es el número de exámenes de mas de 100 alumnos fuera del
periodo preferido.
• w1,w2,w3,w4,w5,w6 pesos
RESULTADOS:
Mucho experimentos con enfriamiento muy lento.
Pesos altos para las restricciones mas importantes, permitieron que cuando quedaban satisfechas no
volvieran a ser violadas.
Basada en las observaciones de estos primeros experimentos, se intento un procedimiento en 2
etapas.
La función objetivo para la primera fase fue:
f1= w1 c1 + w2 c2 + w3 (c3 + c6) + w4 c4
Este primer problema se resolvió con relativa facilidad poniendo todos los pesos en 1y usando una
tasa de enfriamiento de 0.99 cada 1000 iteraciones. Se obtuvieron entonces soluciones con
costo 0.
La fase 2 partió de esta solución final y trabajo en un espacio de soluciones en las cuales todas las
soluciones con f1 > 0 habían sido eliminadas.
La función objetivo fue
f2 = c5
Fue necesario usar un esquema de enfriamiento muy lento para obtener buenos resultados. Se uso
una temperatura inicial de 20, reduciéndola a 0.99 t cada 5000 iteraciones.
Problemas de Ruteo de Vehículos
Chiang, W,Russell, R.,“Simulating annealing metaheuritics for the vehicle
routing problem with time windows”, Annals of Operations Research 63
(1996)
Ruteo de vehículos con ventanas de tiempo
qi , carga o demanda del cliente i
si, tiempo de servicion del cliente i
ei, hora más temprana en que puede iniciarse el servicio en i
li, última hora en que puede iniciarse el servicio en i
tij, tiempo de viaje entre i y j
dij, distancia entre i y j
Qv, capacidad del vehículo v
bi, momento en que se empieza el servicio en i
bij, momento en que puede empezar a servirse al cliente j suponiendo que el cliente j va
después del i en una ruta.
bij= max { ej,bi+si+tij}
wj, tiempo de espera si el vehículo llega a j antes de ej.
wj = ej – (bi+si+tij)
• Estimación inicial de la cantidad de vehículos requeridos
• Rutas iniciales
• Reglas para tratar de mantener la factibilidad de las
ventanas de tiempo durante la construcción.
• La inserción de un cliente en una ruta se determina
usando el crecimiento de la longitud de la ruta y del
tiempo de recorrido.
Algoritmo Simulating annealing:
Soluciones factibles:
conjunto de rutas que verifican las ventanas de tiempo
{R1,…….Rv} donde Rp es el conjunto de clientes visitados por
el vehículo p
Vecinos: se obtienen cambiando un cliente de una ruta a otra o
intercambiando 2 clientes. (Se consideraron 2 opciones).
Función de Costo
C(S) = b1 R + b2 T + b3 D con b1 >> b2> b3
donde
R es el total de vehículos usados
D la distancia total recorrida
T el tiempo total de recorrer todas las rutas
Parámetros del algoritmo:
Temperatura inicial T0
Probabilidad inicial P0 = 0.05
Cambio de la temperatura (t)=0.95 t
Nrep proporcional a del tamaño del vecindario
(0.95%)
Criterio de parada
TABU SEARCH
CONCEPTOS BASICOS:
• Permitir elegir una solución vecina que no sea
estrictamente mejor que la actual para “salir” de un
mínimo local.
• Usar una lista Tabú de soluciones (o movimientos)
para evitar que el algoritmo cicle.
• Usar una función de aspiración que permita en algunos
casos elegir un elemento o movimiento Tabú.
ESQUEMA GENERAL DE TABU SEARCH
Inicialización
Elegir una solución inicial s en S
Niter:=0
bestiter:=0
bestsol:= s
T:=
Inicializar la función de aspiración A
Mientras ( f(s) > f(s*) y (niter- bestiter < nbmax) hacer
niter := niter + 1
generar un conjunto V* de soluciones sv en N(s) que no sean Tabu o tales que A(f(s)) f(sv)
elegir una solución s* que minimice f en V*
actualizar la función de aspiración A y la lista Tabú T
si f(s*) < f(bestsol) entonces
bestsol:= s*
bestiter := niter
s:=s*
-------------------------------------------------------------------------
Qué hay que hacer para usar este esquema?:
• Determinar el conjunto de soluciones factibles S.
• Determinar la función objetivo f.
• Dar un procedimiento para generar los elementos de N(s),
“vecinos de s”.
• Decidir el tamaño del conjunto V*  N(s) que será considerado
en cada iteración
• Definir el tamaño de la lista Tabú T.
• De ser posible definir una cota inferior para la función objetivo
f.
• Definir la función de Aspiración A(z) para todos los valores z
que puede tomar la función objetivo.
• Definir criterios de parada (nbmax y/o comparación con la cota
inferior si la hay)
Volviendo al ejemplo anterior:
Como construir el conjunto de soluciones posibles V* ?
En este caso, si, cuando la solución actual es (1,2,3,4) la
lista Tabu, proveniente de los pasos anteriores del
algoritmo es
T= {(1,3,2,4),(3,1,2,4)(3,2,1,4)}
Entonces V* tiene solo cuatro elementos
(1,2,4,3), (1,4,3,2),(2,1,3,4),(4,2,3,1)}
Posibles reglas Tabu a usar en este caso:
• impedir todos los movimientos donde i ocupa la posición p(i) y j
ocupa la posición p(j)
• impedir los movimientos donde alguna de las situaciones arriba
suceda
• impedir que el trabajo i vuelva a una posición k con k < p(i)
• impedir que el trabajo i cambie de posición
• impedir que i y j cambien de posición
Como elegir el tiempo de permanencia en la lista Tabu:
• valor fijo ( a ser ajustado en la experimentación)
• valor aleatorio entre un tmin y tmax dados a priori.
• valor variable de acuerdo al tamaño de la lista y las variaciones
del valor de la función objetivo.
Ejemplos de criterios de aspiración:
• cuando todos los movimientos o vecinos posibles son Tabu, se
elige alguno de ellos (“el menos tabu”)
• cuando con un movimiento tabu se obtiene una solución mejor
que la mejor hasta ese momento (global o en la región)
Ejercicio:
Pensar cómo implementaría un algoritmo tipo Tabu search
para el siguiente problema:
Encontrar el árbol de mínimo peso de con k ejes (MWKT)
en un grafo G = (V,X) con pesos en los ejes.
Problema del viajante de comercio
Espacio de soluciones:
• permutaciones de (1,2,……………..n)
• Solución inicial al azar
Movimientos:
• k intercambios, se usa k=2.
Tamaño del espacio: ( n-1)!/2
# de vecinos de una solución dada: n(n-1)/2
• Todas las soluciones son alcanzables entre si
• Es fácil generar vecinos al azar y actualizar el costo
Con estas definiciones se puede usar el esquema básico
MAS DETALLES de Tabu search......
Uso de la memoria “a largo plazo”, en contraposición con la que
se usa para manejar N(s), “a corto plazo”:
• Frecuencia : guardar información sobre atributos en una
misma posición, movimientos que se repiten, datos sobre el
valor de la solución cuando un atributo esta en una posición
dada, etc.
• Lista de soluciones “elite”
• Intensificación
• Diversificación
• Camino de soluciones entre dos soluciones prometedoras.
• Etc.
Coloreo de grafos
(“Using Tabu Search Techniques for graph coloring”, Hertz, de Werra, Computing 39, 345-351,
1987)
El problema de coloreo de grafos consiste en determinar cual es el mínimo número de colores con
los cuales se pueden colorear los nodos de un grafo sin que dos nodos adyacentes tengan el
mismo color.
Características del algoritmo Tabú Search implementado
•
•
G = (V,X) grafo
Soluciones factibles
s = (V1,V2,………….Vk)
(cada solución es una partición de V)
• Se arma una solución inicial al azar
•
Función objetivo
f(s) =  ( | E (Vi) |, i = 1….k)
•
•
Vecinos: cambiar un nodo de un conjunto Vi a otro.
Lista Tabú
(x,i), x  Vi por varias iteraciones
Función de aspiración
Inicial A(z) = z – 1
Se va actualizando.
•
Problemas de horarios en instituciones educativas
(“Tabú Search for large scale timetabling problems”,
Hertz,A.,European Journal of Operations Research, 54,
1991.)
Se tratan en este trabajo dos problemas relacionados con los horarios de los
cursos y con asignar alumnos a los mismos cumpliendo una serie de
restricciones.
Nos referiremos en particular al problema de establecer los horarios.
En este caso una de las mayores dificultades está en establecer que es lo que se
va considerar la región factible, o sea el conjunto de soluciones S.
El problema consiste en asignar un horario de comienzo a todas las clases x
que se deben dictar.
Dada la cantidad de restricciones planteadas se eligen algunas para definir un
horario factible y las demás se tratan con penalidades en la función
objetivo.
Un horario se dice factible si solo pueden ocurrir los siguientes
conflictos:
• cursos dictados en forma simultánea tienen el mismo profesor.
• idem algunos alumnos en común.
• Los alumnos o los profesores no tienen suficiente tiempo para
ir de un edificio a otro.
Para cada turno x de una materia se define como a(x) los posibles
horarios en los que puede ser dictado y como p(x) los
momentos t a los cuales puede ser movido el curso x
manteniendo la factibilidad.
La función objetivo queda
f(u,v) =  (p4 d(x,y) + o(x,y) e(x,y) )+
 b(x,y) (p5 d(x,y) + p6e(x,y))
donde para un par de turnos de clase x, y
• d(x,y) es el número de profesores en común
• e(x,y) es el número de alumnos en común
• o(x,y) depende del número de cursos opcionales entre x e y
• (puede ser 0,1 o 2)
• b(x,y) =1 si los cursos se dictan en lugares distantes y 0 sino.
• l(x) = duración del curso x
• Ut es el conjunto de cursos dictados en el periodo t
• Asignacion U = (U1……………….Uk)
Problema de localización de plantas
N talleres de una fabrica tiene que ser ubicados en N posibles ubicaciones. Se conocen
las distancias aij entre los lugares y el flujo de circulación de partes entre cada
taller.
Se desea minimizar el total de las distancias recorridas por las partes.
• Función objetivo:
F ( S ) =   aij bsisj
• Movimientos: cambiar de posición dos plantas.
• Facil de calcular el cambio de la función objetivo.
• Permite explorar todos los vecinos.
• Tamaño de N(S) O(n**2)
Lista Tabu
• Pares. Movimientos que mandan a p y q a lugares donde ya estuvieron en las
últimas t iteraciones.
• Se pueden considerar también en la lista Tabu las posiciones donde estuvieron esos
elementos.
• Tamaño variable. Puede ser al azar.
Criterios de aspiración:
El movimiento deja de ser Tabu si mejora la mejor solución hasta
el momento.
Penalidad de un movimiento:
se calcula la frecuencia fm con que un movimiento se realiza se
pone
pm = 0
si m cumple con el criterio de aspiración
w fm
sino
y se usa como valor del movimiento
f (x + m ) – f(x) + pm
Problema de ruteo de vehículos
(“A Tabu Search heuristic for the vehicle routing
problem”, Gendreau, Hertz, Laporte, Management
Science, Vol 40, nro 10, 1994)
El problema básico de ruteo de vehículos consiste
en determinar que recorrido tienen que hacer un
número de vehículos dado para visitar un cierto
número de lugares prefijados y volver al lugar de
origen con un costo o tiempo mínimo. El
conocido problema del Viajante de Comercio es
un caso particular del mismo.
• Importancia de este tipo de problemas.
En este caso particular, las características del problema
tratado fueron:
a) todas las rutas empiezan y terminan en el depósito v0
b) cada ciudad (salvo el depósito) es visitada exactamente
una vez por uno y solo un vehículo.
c) en cada ciudad hay una demanda qi (q0 = 0)
d) la demanda total de una ruta no puede superar la
capacidad de los vehículos Q.
e) en cada ciudad hay que considerar un tiempo de servicio
ti (t0 = 0 ).
f) la longitud total de una ruta (tiempo de recorrido mas
tiempo de servicio) no puede superar un valor máximo L
Algoritmo Tabu Search propuesto:
• Soluciones: Una solución S es un conjunto de m
rutas R1,.....Rm donde cada vértice vi, salvo el
deposito, pertenece a una única ruta.
(las soluciones entonces no consideran las
restricciones d y f).
• Función objetivo:
F1 (S) =   cij
donde cij es el tiempo para ir de la ciudad i a la
ciudad j
F2 (S) = F1 (S) + p1  max {0,[ (qi) – Q]}
+ p2  max {0, [ cij +  ti) – L]
Vecinos:
Una ciudad se inserta en otra ruta solo si en ella
está alguno de sus k vecinos mas próximos, o en
una ruta vacía si hace falta crear una nueva ruta.
Para obtener la nueva solución se reoptimiza
esa nueva ruta.
Lista Tabu
• Se prohibe a una ciudad “volver” a una cierta ruta
por un cierto número de iteraciones.
•
Tamaño variable, y dependiente de variables
aleatorias.
Función de aspiración:
Un movimiento de la lista Tabu se acepta si la
solución que produce es factible y mejora el valor
de F1 o es no factible y mejora el valor de F2.
Ajuste de los parámetros de penalidad
Los parámetros p1 y p2 se revisan cada h
iteraciones. Si las pasadas h iteraciones
produjeron soluciones que cumplen la restricción
d p1 se divide por 2, sino se multiplica por 2. Lo
mismo para p2.
Criterio de parada:
Si los valores de la función no cambiaron después
de Nmax iteraciones.
Soluciones iniciales:
Si las ciudades se representan en coordenadas
en el plano, se ordenan según el ángulo que
forman con el deposito. Se arma una solución
para el TSP para estas ciudades, y después se
“parte” en m rutas, donde m es el número
máximo de vehículos disponibles.
Estrategias de intensificación y diversificación:
RESULTADOS
Se testearon con 14 problemas de literatura, de
entre 50 y 199 ciudades y se compararon los
resultados con otras 12 heuristicas clasicas o
implementaciones de simulating annealing y
Tabu Search.
Problema de supervivencia de redes de
comunicaciones
“Solución para problemas de supervivencia de redes de
comunicaciones. Una estrategia con búsqueda Tabú”, Gustavo
Vulcano, Tesis de Licenciatura, Depto. de Computación, Facultad de
Ciencias Exactas y Naturales, UBA, 1997)
El problema consiste en diseñar una red de comunicaciones de costo
mínimo que cumpla ciertas condiciones de seguridad en el caso en
que haya una falla en alguno de sus componentes. Los
requerimientos de seguridad pueden ser muchos. En el caso
considerado aquí la red esta formada por dos tipos de centrales:
• Tipo 2, son los nodos troncales de la misma y por lo tanto la salida
de servicio de una de ellas no debe impedir la comunicación entre
cualquier otro par de centrales de tipo 2.
• Tipo 1, Su rotura podría impedir la comunicación entre otros dos
nodos.
Heurística Tabu implementada:
• Soluciones, espacio no-conexo.
• Construcción de la solución inicial: usando una
heurística constructiva llamada “greedy-earssparse”
• Para construir los vecinos se usan heurísticas
de intercambio. Después de analizar varias se
propone la 1-opt.
• Lista Tabú
• Función de Aspiración
• Problemas en que fue testeado el algoritmo
• Resultados
A tabu search algorithm for frecuency assignment:
Castelino, Hurley, Sephens, Annals of Operations
research,63,1996.
• En que consiste el problema de asignación de
frecuencias.
• Modelado como problema de coloreo de grafos con
restricciones.
• En este caso se consideró el problema de asigna
frecuencias de radio para comunicarse entre varios
lugares, donde hay transmisores y receptores. Las
frecuencias disponibles están separadas por 50 KHZ.
No todos los canales se pueden asignar.
• Se ponen restricciones para minimizar la interferencia.
Restricciones en el mismo sitio:
• Separación: cada par de frecuencias en un
mismo lugar tiene que estar separadas por una
cantidad fija (500 kHZ o 10 canales). esto se
escribe como
| fi – fj |  m
donde m es el número de canales de separación.
• “itermodulacion “
2 fi – fj  fk
3fi – 2fj  fk
fi + fj – fk  fl
2fi + fj – 2 fk  fl
Restricciones entre sitios lejanos:
Restricción de distancia: dos radios en sitios
diferenctes no deben tener asignados la
misma frecuencia, al menos que esten
suficientemente lejos
| fi – fj | 0
• restricciones de canal
| fi – fj |  m
donde m es el número de canales de
separación.
• Este problema es NP-Hard
Tabu Search
• Una asignación de frecuencias se representa por
un vector
(fi .............fn )
• Los vecinos difieren de la actual asignación en
una sola frecuencia. Se representan por el
movimiento que indica la posición y el valor.
• Las soluciones se evaluan en función del número
de interferencias.
• detalles de implementación
• Comparación con método de búsqueda local y
con algoritmo genético.
Code design, Honkala, Ostergard, 1997
• construcción de códigos para transmisión
de la información.
• Como hacer para corregir el ruido y
reconstruir
El código
• palabras (vectores) sobre un alfabeto de q
símbolos
• distancia de Hamming
• longitud de una palabra
• peso de una palabra
• C q-ary code de longitud n.
• distancia d(C)
• esfera de Hamming
• distancia mínima de código 2 e +1
• e-error-correcting code
PROBLEMA:
determinar
Aq (n,d) = el cardinal máximo de un código de
q símbolos con palabras de longitud n y
distancia mínima al menos d.
• Porqué se busca esto?
• Varias metaheurísticas.
GRASP
(Feo, T.,Resende, M.,”Greedy randomized adaptive search
procedures”, Journal of Global Optimization, 1995, pp 1,27)
Esquema de un algoritmo GRASP
-----------------------------------------------------------------------Mientras no se verifique el criterio de parada
ConstruirGreedyRandomizedSolución ( Solución)
Búsqueda Local (Solución)
ActualizarSolución (Solución, MejorSolución)
End
-------------------------------------------------------------------------
• Algoritmo ConstruirGreedyRandomizedSolución
(Solución)
En vez de usar un algoritmo goloso que elija el elemento más
prometedor para agregar a la solución, en cada iteración se
elige al azar entre los que cumplen que no pasan de un
porcentaje ß del valor del mejor elemento.
Se puede limitar el tamaño de la lista de estos elementos.
• Algoritmo Búsqueda Local (Solución)
Definición de intercambios
Qué tenemos que hacer para usar esta metodología para
un problema particular?
• Determinar el conjunto de soluciones factibles S.
• Determinar la función objetivo f.
• Dar un procedimiento para generar los elementos de N(s),
“vecinos de s” o sea los intercambios de la búsqueda local.
• Decidir el tamaño del conjunto V*  N(s) que será considerado
en cada iteración.
• Determinar el parámetro ß
• Definir criterios de parada.
EJEMPLOS
1. Cubrimiento de conjuntos
Dados n conjuntos P1, P2,………..Pn
sea
I = i Pi
y J ={1,2,….n}
Un subconjunto J* de J es un cubrimiento si
iJ* Pi = I
El problema de recubrimiento mínimo (set covering
problem) consiste en determinar un cubrimiento
de I de cardinal mínimo ( o sea con la mínima
cantidad de conjuntos Pi)
Ejemplo:
P1 = { 1,2 }, P2 = { 1,3 }, P3 = { 2 }, P4 = { 3 }
Los cubrimientos mínimos tienen cardinal 2 y son:
{P1 P2,} ó
{P1 P4,} ó
{P2 P3,}
Primer paso:
ConstruirGreedyRandomizedSolución ( Solución)
• Un algoritmo goloso podría ser agregar al cubrimiento el
conjunto que cubre la mayor cantidad de elementos de I sin
cubrir.
• En este caso para el algoritmo GreedyRandomized
consideramos como conjuntos candidatos a los que cubren al
menos un porcentaje  del número cubierto por el conjunto
determinado por el algoritmo goloso.
• También se puede limitar el tamaño de la lista de candidatos a
tener a lo sumo  elementos.
Dentro de esta lista de conjuntos se elige uno al azar.
Segundo paso:
Búsqueda Local (Solución)
Para el algoritmo de descenso se definen los vecinos
usando el siguiente procedimiento de intercambios:
Un k,p-intercambio, con p < q, consiste en cambiar si
es posible k-uplas del cubrimiento por p-uplas que no
pertenezcan al mismo.
Ejemplo: cambiar la 2-upla P2 = { 1,3 } con la 1-upla P4
={ 3 }
Ejemplo:
P1 = { 3,4 } , P2 = { 3 } , P3 = { 2 },
P4 = { 2,3,4 } , P5 = { 3,4,5 }, P6 = { 1,4,5 }, P7 = { 2,3 },
P8 = { 4 }
Tomamos  = 40%
En la primer iteración la lista es {P1, P4, P5 ,P6 , P7}. Supongamos
que sale elegido al azar P5..
Para el segundo paso la lista es {P3, P4,P6 , P7}. Si resultara elegido
P3 tendríamos el cubrimiento {P3, P5 ,P6 } que no es óptimo y
podriamos pasar al algoritmo de búsqueda local.
Si en primer lugar hubiera resultado elegido P6. y después hubiera
salido P4.hubieramos obtenido la solución óptima {P4,P6 }.
Resultados presentados en el trabajo de Feo y
Resende:
Testearon el algoritmo en problemas no muy grandes
pero difíciles que aparecían en la literatura.
• Lograron resolver problemas pequeños pero que aún
no habían sido resueltos. Se hicieron 10 corridas para
cada ejemplo con ß = 0.5,0.6,0.7,0.8,0.9.
• Usaron solo 1,0 intercambios o sea sólo se eliminaron
columnas superfluas.
2. Máximo conjunto independiente
En este caso la medida para decidir que nodo agregar al conjunto
independiente puede ser el grado. Se puede hacer un algoritmo
goloso que en cada iteración agregue el nodo de menor grado.
El intercambio se hizo de la siguiente forma:
Si tenemos un conjunto independiente S de tamaño p, para cada kupla de nodos en ese conjunto hacemos una búsqueda
exhaustiva para encontrar el máximo conjunto independiente
en el grafo inducido por los nodos de G que no son
adyacentes a los nodos de S” = S \ {v1.....vk}. Si el conjunto N
resultante es de cardinal mayor que S entonces S” U N es un
conjunto independiente mayor que S.
RESULTADOS
• Se testeó el algoritmo en grafos generados al azar de
1000 nodos (con ciertas condiciones). Se usó un
máximo de 100 iteraciones y ß = 0.1.
• Se hizo un preprocesamiento para facilitar el trabajo
de GRASP, que se corre en grafos más chicos que los
originales.
3. Job Scheduling
Problema: Un conjunto de tareas debe ser ejecutada en
un único procesador. Hay tiempos no simétricos de
transición entre tareas.
Base del algoritmo: se construye un camino
hamiltoniano en forma golosa. Se usa un
procedimiento de intercambio de nodos para la
búsqueda local.
4. A GRASP for graph planarization, (Resende,
Ribeiro, 1995).
Problema: Encontrar un subconjunto F de los ejes de G
tal que el grafo G\F sea planar.
Base: un algoritmo GRASP como primer paso de una
heurística conocida que antes usaba un algoritmo
goloso + heuristica de conjunto independiente +
extension del subgrafo planar.
ALGORITMOS GENETICOS
Primeras ideas Holland ( 1975) (hay algún trabajo
anterior)
Basados en los principios de evolución y herencia.
Modelar o simular fenómenos naturales, evolución de
las especies, procesos de selección natural,
mutación, etc.
Vocabulario de la genética: individuos, cromosomas,
etc.
Programas o algoritmos evolutivos
Estructura general de un algoritmo evolutivo
-----------------------------------------------------------------Empezar
t := 0
inicializar P(t)
evaluar P(t)
Mientras no se cumpla la condición de parada hacer
Empezar
t:= t + 1
construir P (t) a partir de P( t-1)
modificar P(t)
evaluar P (t)
Fin
Fin
-----------------------------------------------------------------------
P(t) = {x1, x2, x3........xn} población de la generación t
Los xk son los individuos de esa población. Cada uno representa
una solución del problema que se está tratando.
Se evalúa cada individuo usando una función apropiada para
medirlo.
Para formar la población de la siguiente generación se eligen los
mejores, se realiza el cruzamiento y eventualmente se realiza
una mutación.
Después de un numero de generaciones se espera que el mejor
individuo represente una buena solución (casi óptima).
Qué hace falta para construir un algoritmo genético
para un problema particular?
• representación “genética” de las soluciones
•
forma de generar la población inicial
•
función de evaluación
• operadores genéticos que alteren la
composición de los hijos.
•
determinación de parámetros (tamaño de la población,
probabilidad de aplicar operadores genéticos, etc.)
Minimización de una función
max f(x) = x sen (10
s.a.
x) + 1
–1 < x < 2
Se puede resolver analíticamente
Representación:
Cromosoma: vector binario de longitud relacionada con la precisión
requerida (en este caso queremos 6 decimales)
[-1,2] tiene que dividirse en 3000000 intervalos
(22 bits)
2097152 = 2**21 < 3000000 < 2**22 = 4194304
Para convertir un string binario en un número real:
pasar (b21...............b0) de base 2 a base 10 y obtener x’
x = -1 + x’ * (3/ 2**22 –1)
Población inicial
Se construye una población de vectores de binarios de 22 bits.
Evaluación
La función de evaluación es la función f
Operadores genéticos
Mutación
Se altera uno o mas genes con una probabilidad igual a
la tasa de mutación predeterminada
Por ejemplo si el 5to gen de
v3 = (1110100000111111000101)
es elegido para mutación el nuevo cromosoma queda
v3”= (1110000000111111000101)
En cambio si se eligiera el 10mo gen quedaría
v3” = (1110000001111111000101)
Cruzamiento
Supongamos que tienen que cruzarse v2 y v3 y que el punto de
cruzamiento queda en el 5to gen.
Entonces si
v2 = (0000001110000000010000)
v3 =(1110000000111111000101)
los nuevos cromosomas son
v2”= (0000000000111111000101)
v3” = (1110001110000000010000)
Parámetros
• Tamaño de la población
• Probabilidad de cruzamiento
• Probabilidad de mutación
50
0.25
0.01
Resultados
Después de 150 generaciones:
vmax = (111........................) = 1.850773
f(vmax) = 2.85
# de Generación
Función de evaluación
1
1.441942
6
2.250003
8
2.250283
9
2.250284
10
2.250363
12
2.328077
39
2.344251
40
2.345087
51
2.738930
99
2.849346
137
2.850217
145
2.850227
Más detalles:
• Población inicial al azar de tamaño al azar
• Se calcula eval (vi) para cada cromosoma vi de la
población.
• Valor de la población:
F= i eval (vi)
•
Probabilidad de selección de vi
pi = eval(vi) / F
• Probabilidad de selección:
qi = 1j pj
Proceso de selección de la nueva población:
Hacer pop veces:
• Generar un número al azar r en el intervalo (0,1)
• Si r < q1 elegir v1 sino elegir i tal que
qi-1 < r < qi
(algunos cromosomas pueden ser elegidos más de
una vez)
Crossover (entre los individuos de la nueva población):
Dada la probabilidad dada de crossover pc
(parámetro) se toman pc * pop cromosomas
para participar del cruzamiento.
• Para cada cromosoma de la nueva población:
generar r al azar en (0,1)
• si r < pc elegir el cromosoma para cruzamiento
Aparear los cromosomas elegidos. Para cada par
determinar al azar pos
(b1,b2.....bpos,bpos+1,...........bm)
(c1,c2.....cpos,cpos+1,............cm)
se reemplazan por
(b1,b2.....bpos,cpos+1,...........cm)
(c1,c2.....cpos,bpos+1,............bm)
Mutación:
Dada la probabilidad de mutación pm se cambian
pm * m * pop bits.
• Para cada cromosoma y para cada bit generar r al
azar entre 0 y 1.
• Si r < pm cambiar el bit.
El dilema del prisionero
Cuento : “dos prisioneros están en
celdas separadas, imposibilitados
de comunicarse y se les pide que
traicionen al otro en forma
independiente............”
• El dilema del prisionero puede
jugarse como un juego de 2
jugadores, donde cada uno a su
turno traiciona o coopera con el otro.
El puntaje que cada uno saca esta
dado por la siguiente tabla:
Jugador 1
Traiciona
Traiciona
Coopera
Coopera
Jugador 2
Traiciona
Coopera
Traiciona
Coopera
P1 P2
1 1
5 0
0 5
3 3
Queremos diseñar un algoritmo que aprenda una
estrategia para jugar al dilema del prisionero:
Representación de la estrategia
• Consideraremos estrategias determinísticas, que usen los
resultados de las tres últimas jugadas para decidir la
jugada actual.
• Una estrategia se representa por un string de 64 bits
indicando que hacer después de cada una de las posibles
historias, más 6 bits para iniciar el juego (total 70 bits).
Esquema del algoritmo:
•
Elegir una población inicial: a cada jugador se le asigna
al azar un string.
•
Para determinar el score de cada jugador haciéndolo
jugar con los otros. El score es el promedio de todos los
juegos.
• Un jugador con score promedio se le asigna un par, a
uno por debajo del promedio ninguna, y a los que están
por encima 2 parejas.
•
Los jugadores exitosos se aparean al azar para producir
dos descendientes por pareja. La estrategia de cada
descendiente se arma a partir de la estrategia de sus
padres usando crossover y mutación.
Resultados experimentales:
• Partiendo de una población al azar se obtuvieron
poblaciones donde el jugador medio era tan exitoso como
el de las mejores heurísticas conocidas hasta el
momento.
• Se sacaron conclusiones acerca del “comportamiento” de
los mejores jugadores:
i) Continúe cooperando después de tres cooperaciones
mutuas .... (ponga C después de recibir (CC)(CC)(CC))
ii)Provoque: traicione después que el otro traiciona
después de varias cooperaciones (ponga D después de
recibir (CC)(CC)(CD))
El problema del viajante de comercio
Representación:
Conviene usar vector binario en este caso?. Haría falta un vector
binario de [log2 n] bits para cada ciudad, n [log2 n] en total.
Que pasaría con el crossover y la mutación?.
Algoritmos de reparación
Es mejor usar una representación entera. Usamos un vector
(i1,i2,......in) para representar un tour.
Inicialización:
Se pueden usar heurísticas constructivas empezando de distintas
ciudades o generar los tours al azar.
Crossover:
Hay muchas posibilidades, por ejemplo:
Padres :
(1,2,3,4,5,6,7,8,9,10,11,12)
(7,3,1,11,4,12,5,2,10,9,6,8)
Se toma por ejemplo el segmento (4,5,6,7) y queda el
descendiente:
(1,11,12,4,5,6,7,2,10,9,8,3)
De la misma forma se construye el otro hijo.
Se puede hacer mutación acá?.Cámo?
Otra representación: La ciudad i está en la posición j si el
tour va de la ciudd I a la ciudad j.
Posible cruzamiento:
Elegir al azar un eje del primer padre, después elegir el eje que sigue
del segundo y así siguiendo. (Si elige un eje que genera subtour, se
elige al azar uno que no genere subtour).
Ej: padres
(2 3 8 7 9 1 4 5 6)
(7 5 1 6 9 2 8 4 3)
Hijo: (2 5 8 7 9 1 6 4 3)
Otra posibilidad de cruzamiento.
Elegir una ciudad al azar y después el menor eje
de ambos padres saliendo de esa ciudad. Si ese
produce ciclo elegir el otro. Si ese también
produce ciclo elegir otro dentro de un pool de q
ejes elegidos al azar.
Otra representación:
Si tenemos el tour
C= (1 2 4 3 8 5 9 6 7)
se representa por (1 1 2 1 4 1 3 1 1)
(i representa la posición en la que está la ciudad
que sigue en el orden en el tour que queda
después que se fueron sacando las anteriores).
Acá se puede usar el cruzamiento “clásico”.
Padres:
(1 1 2 1 4 1 3 1 1)
( 5 1 5 5 5 3 3 2 1)
Hijos
(1 1 2 1 5 3 3 2 1)
(5 1 5 5 4 1 3 1 1)
corresponden a tours válidos
Ver que significa esto respecto de los circuitos
representados por los padres y los hijos.
Representaciones matriciales;
M matriz binaria donde mij = 1 si la ciudad i está
antes que la ciudad j en el circuito.
Características de estas matrices?.
Ideas de cruzamiento?
A family of genetic algorithms for the pallet loading
problem. Herbert, Dowsland, ANOR, 1996.
• “Pallet loading” o “Two dimensional packing
problem”.
• Suponemos que el container y las piezas son
rectangulares.
• Las piezas se acomodan paralelas a los bordes
• Qué consideran una solución?.
• Cómo representarla?
• Cómo hacer crossover y mutación?
• Función objetivo
• Cómo generar la primera población?
• Reparación de soluciones
Porqué funcionan los algoritmos genéticos (con
representación binaria)?.
Esquemas
( x x 1 1 x x 0 0 1 1 x 1)
( 1 1 0 1 1 x x 1 1 1 1 0)
Idea de porqué sobreviven los mejores esquemas.
• Orden de un esquema
• Longitud de un esquema
Teorema del esquema. (“Schema Theorem”):
Los esquemas cortos, de bajo orden de valor
(“fitness”) por encima de la media van a ser
revisados un número exponencialmente
creciente de veces en las generaciones de un
algoritmo genético.
Ventajas y desventajas de los Algoritmos Genéticos
Inicialmente GA se usaba para problemas típicos de Inteligencia
Artificial (reconocimiento de patrones, machine learning, etc.)
Aplicaciones exitosas a problemas de Optimización
Problema: como hacer la representación.
Ventajas...............
COLONIA DE HORMIGAS
(primeras ideas Dorigo , Colorni, Maniezzo, 1991)
Inspiración en modelo biológico:
comportamiento de una colonia de hormigas (Argentine
ants) en un experimento de laboratorio donde tenían
que llegar a la comida por uno de dos puentes de
distinta longitud. Después de unos minutos la mayoría
de las hormigas eligen siempre el más corto. Las
hormigas dejan una huella de pheromona cada vez
que recorren un camino. Cada vez que una hormiga
llega a una intersección elige para seguir la rama
por donde hay más pheromona.
A partir de allí surgen las ideas básicas que permiten
construir soluciones a problemas de optimización:
• buscar en forma paralela a lo largo de  huellas o
caminos
• guardar traza de los caminos prometedores
Cada hormiga funciona como un agente
computacional que en cada iteración t produce una
solución completa del problema que va
construyendo paso a paso.
Características principales de un algoritmo de colonia de
hormigas para problemas de optimización combinatoria:
Para cada problema particular tenemos que definir:
• Un conjunto finito de componentes C = {c1, c2 ... cn}
• Un conjunto finito L de posibles conexiones o transiciones
entre los elementos de C
• Para cada lij  L un costo de conexión Jij
• Un conjunto de restricciones sobre los elementos de C y L
El problema se representa por un grafo G = ( C, L). las
soluciones se pueden pensar como caminos factibles en G.
• Los estados del problema se definen como
sucesiones de elementos de C, s =( ci1, ci2...... cik).
Estados factibles o soluciones.
• Una estructura de vecinos
• Un costo asociado a cada solución
• ij valor heurístico asociado a un eje conteniendo
información a priori sobre el problema.
Objetivos y más detalles:
• Obtener una solución intercambiando información entre las
hormigas, mejor que la que cada una construye
individualmente.
• Cada hormiga usa información propia o del nodo que esta
visitando o de la conexión que que está recorriendo.
• Las hormigas se comunican entre ellas en forma
indirecta a través de la información que proveen las
huellas de pheromona.
• Las hormigas no tienen un comportamiento adaptativo
individual.
• Cada hormiga busca una solución de mínimo costo.
• Cada hormiga tiene una memoria que puede usar para
almacenar información del camino que esta
recorriendo. la memoria se puede usar para construir
una solución factible, para evaluar la solución actual y
para reconstruir el camino hacia atrás.
• Una hormiga en estado sr puede moverse a cualquier
nodo de su vecindario N. Se mueve en función de una
regla probabilística de decisión.
• Cuando la hormiga se mueve del nodo i al nodo j se
puede actualizar el valor de la huella de pheromona
ij. O sino cuando termina de construir la solución
recorre el camino hacia atrás y actualiza entonces ij .
• Cuando terminan su trabajo de construir la solución y
actualizar la pheromona, la hormiga “muere”.
Evaporación de la pheromona:
Se disminuye la intensidad de la pheromona a lo largo
de las iteraciones para evitar una convergencia muy
rápida a un óptimo local.
Esquema general de un algoritmo de colonia de hormigas:
• ij valor que indica la atracción a priori del
movimiento (i,j)
• pk ij= (ij + (1 - ) ij )/ ((ij + (1 - ) ij ))
donde la sumatoria del denominador es sobre los movimientos posibles para la
hormiga k.
• 0   < 1,  parámetros definidos por el usuario.
Esquema:
1. Inicialización
2. Construcción
Para k=1,m hacer hasta que k termine:
Repetir
- Calcular ij para todo (i,j)
- Elegir el próximo movimiento con probabilidad pk ij
- Agregar el movimiento a la lista Tabú de la hormiga k.
3. Actualización de la huella
Para cada movimiento (i,j) calcular ij y actualizar
la matriz de trazas.
ij =  ij + ij
4. Si se verifica condición de parada parar, sino repetir.
Otra forma de la regla de transición de estados
 (i,j)   . (i,j)   si (i,j) Tabuk
  (i,z)  . (i,z) 
Pk(i,j) =
(i,z)  TabuK
0
si (i,j)  Tabuk
Pseudo Código de Colonia de Hormigas
Inicialización de niveles de pheromona, seteo de parámetros.
Loop /*Para cada iteración t */
Inicializar hormigas
Loop /* Para cada paso  */
For cada hormiga k
Armar un conjunto Ak de estados de expansión posibles a
partir del estado actual de la hormiga k.
Aplicar la regla de transición de estados sobre el conjunto
Ak y elegir un nuevo estado j.
End
Until todas las hormigas hayan generado una solución completa
del problema.
Actualizar niveles de pheromona.
Until condicion_de_finalización
Aplicación al problema del viajante de comercio
Cada hormiga es un agente con las siguientes
características:
 En cada paso elegir una ciudad a visitar en base a
Pk(i,j).
 No repetir ciudades hasta completar un tour.
 Al completar un tour, depositar pheromona sobre
los arcos del mismo.
Regla de transición o sea probabilidad con la cual una
hormiga k posicionada en la ciudad i elige moverse hacia
la ciudad j:
Pk(i,j) =
 (i,j) 
 .
  (i,z)
.
(i,j) 

(i,z)

si j Vecinosk(i)
z  Vecinosk(i)
0
sino
Actualización de la feromona al terminar cada ciclo:
m
(i,j) =  . (i,j) +   k (i,j)
k =1
•  es el coeficiente de persistencia de pheromona o
sea ( 0<  <1), (1 - ) representa la evaporación.
•  k (i,j) representa la cantidad de pheromona
depositada en los arcos por la hormiga k.
Q / Lk si (i,j) pertenece al tour generado
por la hormiga k
 k (i,j) =
0
sino
• Q es una constante,
• Lk la longitud del tour generado por la hormiga k.
Otra forma de actualizar la feromona:
Después que todas las hormigas completaron su tour, cada una
de ellas deposita una cantidad de pheromona igual a
k (t) = 1 / Lk (t)
en cada eje lij usado donde Lk (t) es la longitud del tour hecho
por la hormiga k en la interación t. o sea
ij (t) ----------- ij (t) + k (t)
para todo eje (i,j) que haya sido usado por alguna hormiga.
Evaporación de pheromona:
ij (t) ------- (1- ) ij (t)
Sobre este equema básico se han propuestos muchas
variantes de colonia de hormigas para el TSP (y para
otros problemas también)
• Sistemas elitistas: usar la información del mejor tour
hallado hasta el momento.
• La pheromona depositada depende del “rango” de las
hormigas.
• Sistemas de colonia de hormigas Max-Min: se limita
el rango de variación de la pheronoma.
• Regla pseudoramdom para elegir el próximo elemento.
Otras aplicaciones de colonia de hormigas:
• Ruteo de vehículos con restricciones de
capacidad.
• Ruteo de vehículos con ventanas de tiempo y
dependencia temporal.
• Coloreo de grafos (Costa, Hertz): Solución
constructiva basada en algoritmos conocidos
(DSATUR). Usan la feromona para indicar si es
conveniente que dos nodos tengan el mismo color.
Resultados razonablemente buenos.
• Horarios en universidades: Pocas aplicaciones.
Socha et al).La feromona representa la conveniencia
de que una clase se asigne a un horario. Se agrega
algoritmo de mejora a la mejor solución encontrada.
• Scheduling: varias aplicaciones
• Set covering: (Leguizamon, Michalewicz, 2000 y
Hadji et al., 2000).Dada una matriz binaria A, donde
cada columna tiene un costo, encontrar el conjunto de
columnas que cubre las filas a costo mínimo. La
heurística usada para elegir columnas está basada en
cuántas filas quedan cubiertas al elegir una columna.
Búsqueda local. Los resultados fueron buenos pero
no mejoraron los mejores resultados hasta el
momento.
• Partición de un grafo en árboles: (Cordone, Maffioli, 2003).
Problema que se presenta en el área diseño de redes de
comunicaciones. Se tiene un grafo con costos en los ejes y
pesos en los nodos. Se quiere encontrar un bosque de p árboles
generador del grafo, de costo mínimo y tal que el peso de cada
árbol esté entre dos valores dados W- y W+. En este caso cada
nodo j tiene p valores ij de feromona, indicando si es
conveniente que forme parte del árbol Ti. La función heurística
es el costo mínimo de agregar el nodo cj al árbol Ti,
multiplicada por una penalidad.
Cada hormiga construye una solución completa. Se aplica un
procedimiento de búsqueda local al final.
Elección de los nodos iniciales: se eligen p nodos al azar.
Después se generan árboles con el algoritmo goloso, y se
eligen como nodos iniciales los centroides de estos árboles.
K-árbol mínimo: Hamacher,Jornsten, Foulds, Hamacher,
Wilson, 1998) Bordorfer, Ferreira,Martin, 1998). Aplicaciones
a leasing de reservas de petróleo, a ubicación de plantas, etc.
La heurística es la longitud de los arcos. Las hormigas
empiezan desde un eje elegido al azar y usan la regla pesudorandom proportional con q0 = 0.8.
Al final de cada iteración se aplica Tabú Search a la mejor
solución obtenida.
Mínima supersecuencia común entre L strings.
(aplicaciones a análisis de ADN y a procesos de
producción).(Michel, Middendorf, 1999). No usa
función heurística.
L = {bbbaaa,bbaab,cbaab,cbaaa}
Una supersecuencia mínima en este caso es
(cbbbaaab)
Notación sij denota el carácter de Li en la posición j
Cada hormiga construye una supersecuencia empezando
por el primer carácter de uno de los strings. Este
carácter se saca del string.
Después en cada paso:
i) Elige un carácter que sea el primero de al menos un
string (con ciertos criterios).
ii) Saca ese carácter de esos primeros lugares.
iii) Se repite sobre el nuevo conjunto de strings L´,
hasta que L´esté constituido sólo por strings vacíos.
Más detalles:
• vk = (v1k….vlk) con l = | L| , vik apunta a la primera
posición si vik de Li (la posición que tiene un candidato
para incluir)
Ej; con el L del ejemplo, vk = (2,2,3,3) y
s1v1k = s12 = b
s2v2k = s22 = b
s3v3k = s33 = a
s4v4k = s43 = a
Inicialmente vk = (1,1,1,1), al final vk = (|L1| + 1,… (|Ll| + 1}
En cada paso, dentro de los posibles caracteres a agregar
la hormiga k elige usando la fórmula pseudorandom
entre los elementos de Nvkk = {x/ existe i tq x = si vik }
usando como feromona la suma de la feromona de todas
las apariciones de x en los l strings:
 ivik
(la suma es sobre los i tq si vik = x).
O sea la feromona toma en cuenta la cantidad de veces
que aparece x como primer elemento y es mayor
cuanto mayor es la feromona en las componentes sij
para las cuales si vik = x.
Describen otra variante que toma en cuenta cuántos
caracteres de Li faltan cubrir.
Se actualiza después el vector vk
vik = vik + 1
vik
si si vik = x
sino
Actualización de la feromona:
Se toma en cuenta el rango de las hormigas para
actualizar la feromona o sea se usa una fórmula del
tipo:
 k = g(rk) / |sk|
donde g es una función que depende del rango de k.
Se define un vector zk = (z1k….zlk) donde zik apunta a un
carater de Li candidato a recibir feromona.
zk se inicializa como (1,…1)
sk es la secuencia construida por la hormiga k.
xh carácter en la posición h en sk
Se pone:
Mhk = {sizik / sizik = xh}
Se actualiza:
zik = zik + 1
vik
si si zik = x
sino
Entonces la feromona que deposita la hormiga en cada
componente que visita queda:
ij k = ( k / | Mhk| )(2 (|sk| -h+1)/ (|sk|2 + |sk|))
La suma total de la feromona depositada por la hormiga
k es  k.
Cada carácter de un string recibe una cantidad de
feromona que depende de cuán adelante fue elegido
por la hormiga k, cuán buena es la solución sk y el
número de strings de los cuales fue elegido en el
mismo paso de la construcción.
Otras características:
• Usa un paso de “mirar hacia delante antes de decidir”
y usa los resultados de ese mirar hacia delante como
la heurística usual en colonia de hormigas.
• Varias colonias de hormigas trabajan en paralelo.
• Colonias que trabajan hacia delante y hacia atrás
• Muy buenos resultados.
Otras aplicaciones:
•
•
•
•
Protein Folding
Bin Packing
Conjunto independiente máximo
Problema de la mochila
Más ejemplos de aplicaciones de técnicas
metaheurísticas…………..
OTRAS METAHEURISTICAS
•
•
•
•
•
Scatter Search and Path Relinking
Noisy methods
Algoritmos Meméticos
VNS
Swarm optimization
Comentarios y Conclusiones
Cuándo usar metaheuristicas?.
•
•
•
Problemas difíciles (NP-hard)
Problemas difíciles de modelar
Problemas reales donde se quiere tener una “buena”
solución urgentemente.
Ventajas
•
•
•
Relativamente fáciles de programar, transportables.
Modificación del problema de los datos,flexibilidad,
interacción con el usuario.
Paralelización
• Qué metaheurística elegir?.
• Cuál es mejor?. Cómo comparar?.
• Cómo saber si los resultados son buenos?.
• Cómo se hace para implementar una
metaheurística exitosa?.
• Paralelización.
•
•
•
•
Falta “teoría”
Nomenclatura
PROGRAMACION
Híbridos
Relación con:
• Heurísticas tradicionales
• Métodos exactos (cotas, branch and cut,generación de
columnas, etc.)
Estadísticas del MIC”99
•
•
•
•
•
•
•
•
•
•
•
Tabú Search : 23
Local Search: 10
GRASP: 12
Simulating annealing: 6
Algoritmos genéticos y evolutivos: 17
Scatter Search: 2
Redes neuronales: 2
Colonia de hormigas: 2
Exactos + metaheuristicas : 2
Generalidades: 6
Varios: 11
CONCLUSIONES
• Cuándo usar técnicas metaheurísticas?
• Cuál elegir?
• Cómo hacer para decidir si es buena?
Heurísticas vrs Métodos Exactos?
Algoritmo genético para diseño de redes de
comunicaciones usando Self Healing Rings,
Harmony,Klincewicz,Luss, Rosenwin, Journal of Heuristics, nro
6, 85-105 (2000)
• Redes de telecomunicaciones
• Qué es un self healing ring (SHR)?. En este caso se usan
anillos unidemiensionales.
• Add-drop-multiplexers
• Stacked rings (paralelos, concéntricos)
• Hub que pertenece a todos los anillos.
• Con esta tecnología se arman diferentes topologías.
En este caso se asume que:
• Cada nodo puede ser servido por muchos SHR´s con un ADM
para cada uno. Hay un costo por colocar cada ADM.
• Una demanda dada entre un par de nodos i y h debe seguir una
única ruta en los anillos (la demanda no se parte).
• El hub puede ser usado para cambiar tráfico entre los anillos.
Hay un costo por cada unidad de tráfico que cambia de anillo.
• Hay un límite a la cantidad de ADM que pueden estar
conectados a un SHR.
• La capacidad de cada SHR está acotada.
El problema es entonces:
Determinar a que anillos tiene que ser conectado cada
nodo y como rutear las demandas a costo mínimo.
• El problema se puede formular matemáticamente como un
problema de programación lineal entera.
Algoritmo Genético
N número de nodos, R número de anillos
• Representación: Cromosomas binarios de longitud (N-1)R,
indicando si para el nodo i hay un ADM en el anillo k. (variable
binaria xik asociada).
• A partir de cada cromosoma se usa una heurística para
determinar como se rutean las demandas.
• Función objetivo: costos + penalidad por no poder rutear todas
las demandas.
• Población inicial: se genera parte al azar y parte usando una
heurística.
• Nueva generación: se elige un conjunto de soluciones elite
para pasar a la nueva generación. El resto se obtiene por
cruzamiento. Se elige un padre “bueno” de acuerdo al valor de
la función de evaluación y el otro al azar con distribución
uniforme.
• Cruzamiento clásico, puede requerir un procedimiento de
“reparación” si la solución no es factible.
• Mutación clásica al azar.
• Criterio de parada.
Heurística para el ruteo de demandas dado un
cromosoma.
1.
Basada en los valores de los xik determinar para cada dij todas
las posibles rutas.
2.
Si una demanda tiene una sola ruta posible asignarla a ella.
3.
Actualizar para cada demanda no asignada el conjunto de
rutas factibles. Si alguna queda con una sola posibilidad
volver a 2.
4.
Asignar en primer lugar a un sólo anillo, de entra las
demandas con menor cantidad de rutas posibles, la que tiene
mayor dij.
5. Actualizar los dij. Si corresponde volver a 2, sino a 4.
6
Asignar demandas a rutas en dos anillos con el mismo
criterio de 4.
7.
Actualizar los dij. Ir a 6.
8.
Si no hay demandas no asignadas parar. Sino tendremos
una solución no factible: asignar las demandas no
asignadas lo mejor posible (en orden decreciente de los dij y
tomando en cuenta las que poducen “menor infactibilidad” )
Cómo se genera la población inicial
Una parte es al azar: para cada nodo i se determina al azar un nro
q entre 1 y R Se asigna i a q anillos elegidos al azar entre los
que no tienen su cantidada de ADM colmada. Sino hay
suficientes anillos disponibles se lo asigna a algunos que ya
están completos.
Al final se usa un algoritmo de reparación si las soluciones
quedan infactibles respecto de la cantidad de ADM.
Para la otra parte de la población inicial se usan dos
heurísticas basadas en ideas de GRASP:
Heurística para generar soluciones iniciales donde cada nodo está
en un sólo anillo. Trata de crear R subconjuntos de nodos
combinando paso a paso varios grupos de nodos.
1.
Ordenar las demandas dij en orden decreciente.
2.
La lista de candidatos es una lista que contiene las demandas
no procesadas de mayor valor, si s es un paramétro del
algoritmo, el tamaño de la lista de candidatos es min{s,q},
donde q es la cantidad de demandas no procesadas.
Elegir al azar dij de la lista de candidatos:
i) si ni I ni j están en ningún grupo abrir un grupo nuevo
ii) si uno de los nodos está en un grupo, agregar el otro
nodo al grupo si no se violan las restricciones. Sino ponerlo
en un grupo nuevo.
iii) Si cada no pertenece a un grupo diferente, combinar los
dos grupos en uno si no se viola ninguna restricción. Sino
dejar los grupos como están.
Repetir hasta que no queden demandas sin procesar.
3. Si quedan más de R grupos, recorrer todos los pares en orden
arbitrario. Si es posible combinar los dos grupos en uno sólo.
Repetir hasta que haya R grupos o menos o haste que no se
encuentren soluciones factibles. Si quedan más de R grupos se
hacen combinaciones no factibles, empezando por combinar
los dos grupos más pequeños. Si la solución viola la cantidad
de nodos se repara de la misma forma que en el caso de la
población elegida al azar.
Para las violación de cantidad de tráfico se usa la función de
penalidad.
Se usó otra heurística similar para generar otra parte de la
población inicial, compuesta por soluciones sin intercambio de
tráfico entre anillos.
RESULTADOS
- Se compararon resultados para casos chicos (10 o 15 nodos)
con los resultados de CPLEX.
- Problemas de simetría en las soluciones y como arreglarlos.
- Después se generaron problemas al azar más grandes.
- El algoritmo no optimiza los valores de R.
- No necesariamente un valor menor de R hace que los costos
sean menores.
Descargar

METAHEURISTICAS Ideas, Mitos, Soluciones