Quinta clase

Anuncio
METAHEURISTICAS (5ta clase)
Irene Loiseau
2do Cuatrimestre 2016
Hay otras metaheurísticas que mejoran el algoritmo de
búsqueda local: por ejemplo ILS y VNS
Iterative Local Search (ILS)
procedure Iterated Local Search
s0 = GenerarSolucionInicial
S* = BúsquedaLocal(s )
0
Repeat
s´ = Perturbación (s*)
s´* = BúsquedaLocal(s´)
s* = Criteriodeaceptacion ( s*, s´*)
until se cumpla la condición de terminación
end
Variable Neighborhood Search (VNS)
La idea es usar en el contexto de la búsqueda local
varias definiciones de vecindarios.
Se supone que los mínimos locales de los distintos
vecindarios no son iguales, pero si el mínimo global.
• Cómo elegir los vecindarios?.
• Algoritmos de búsqueda local.
Variable Neighborhood Search (VNS)
Se han propuesto varias extensiones del VNS básico.
Ejemplo VNDS
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 Π x) + 1
s.a.
–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
Como funciona un algoritmo genético básico para un
problema de maximización:
1.
Población inicial: al azar de tamaño predeterminado pop.
2.
Para seleccionar la nueva población:
•
eval(vi) es la función objetivo que se quiere maximizar.
•
se calcula eval (vi) para cada cromosoma vi de la población actual.
•
Se define el valor de la población:
F= Σi eval (vi)
•
se calcula la probabilidad de selección de vi
pi = eval(vi) / F
•
Se calcula la probabilidad acumulada de selección:
qi = Σ1j pj
Para seleccionar los individuos de la nueva población
entonces, hacer pop veces:
• Generar un número al azar r en el intervalo (0,1)
• Si r < q1 elegir v1 sino elegir vi tal que
qi-1 < r < qi
(algunos cromosomas pueden ser elegidos más de una vez,
los mejores son elegidos más veces, los peores
“mueren”)
3. 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 en la nueva población por
(b1,b2.....bpos,cpos+1,...........cm)
(c1,c2.....cpos,bpos+1,............bm)
4. 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.
Con esto queda formada la nueva población.
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 describir las jugadas previas al
inicio del juego (total 70 bits).
Esquema del algoritmo:
• Para determinar la población inicial a cada jugador se le
asigna al azar un string de 70 bits.
• Para determinar el score de cada jugador se lo hace
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 las definiciones básicas de 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))
• Acepte una disculpa: continúe cooperando después que
la cooperación se retomó (ponga C después de
(CD)(DC)(CC)).
• Olvide: coopera después que la cooperación se retomó
(ponga C después de (DC)(CC)(CC)).
• Traicione después de 3 traiciones mutuas (ponga D
después de (DD)(DD)(DD))
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 ciudad 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 5 4 6)
(7 5 1 6 9 2 8 4 3)
Hijo: (2 5 8 6 9 1 4 7 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 la siguiente lista de referencia:
C= (1 2 4 3 8 5 9 6 7)
Por ejemplo
(1 1 2 1 4 1 3 1 1)
representa un tour.
(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)
Los hijos 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?
Ver más detalles en el libro de Michalewicz
Teorema del esquema
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)
• Orden de un esquema
• Longitud de un esquema
• Evaluación de un esquema dentro de una población dada.
Se quiere tener una idea de porqué sobreviven los mejores esquemas a
través de las generaciones de un algoritmo genético.
Se puede demostrar el siguiente resultado:
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.
Hipótesis: Un algoritmo genético busca obtener soluciones casi
óptimas a través de juntar esquemas cortos, de bajo orden y alta
perfomance, llamados “bloques”.
Ver demostración de este teorema y detalles de las
definiciones en el capítulo 3 del libro de Michalewicz.
Descargar