Implementación algoritmo estrategias evolutivas en lenguaje R

Embed Size (px)

Citation preview

  • 8/10/2019 Implementacin algoritmo estrategias evolutivas en lenguaje R

    1/16

    IMPLEMENTACIN DE ALGORITMO DE ESTRATEGIAS EVOLUTIVAS DE LA FORMA

    ( + )

    Juan Felipe Muoz Fernndez [email protected]

    14-Nov-2014

    En cualquier lenguaje de programacin programe un algoritmo de Estrategias Evolutivas o de

    Algoritmos Genticos para optimizar la siguiente funcin (Rosenbrock).

    =

    + +=

    1

    1

    22

    1

    2)1()(100)(

    n

    i

    iii xxxxf

    2=n , 12.512.5 ix

    Elija los parmetros que considere adecuados.

    Grafique la secuencia de bsqueda: iteracin vs mejor )(xf

    1. Cul es la mejor solucin 'x y )'(xf encontrada?

    En general:

    2. Qu ventajas le ve al algoritmo?

    3. Qu desventajas le ve al algoritmo?

    Debe entregar: diagrama de flujo (o seudocdigo), algoritmo (con comentarios) y resultados.

  • 8/10/2019 Implementacin algoritmo estrategias evolutivas en lenguaje R

    2/16

    PSEUDOCDIGO

    InicioInicializar numero de generaciones = KInicializar tamao poblacin = Inicializar poblacin de individuos hijos de = 7 *

    Inicializar tamao de paso de la desviacin = Inicializar lmite superior dominio variable Xi = 5.12Inicializar lmite inferior dominio variable Xi = -5.12Inicializar Arreglo poblacin X1 = AleatorioUniforme(,-5.12,5.12)Inicializar Arreglo poblacin X2 = AleatorioUniforme(,-5.12,5.12)

    Inicializar desviacin estndar = (.1 (.1)/Inicializar en blanco Arreglo desviacin estndar X1Inicializar en blanco Arreglo desviacin estndar X2Inicializar en blanco Arreglo hijos X1Inicializar en blanco Arreglo desviacin estndar hijos X1Inicializar en blanco Arreglo hijos X2Inicializar en blanco Arreglo desviacin estndar hijos X2Inicializar en blanco Arreglo fitness padresInicializar en blanco Arreglo fitness hijosInicializar en blanco Arreglo probabilidad acumulada

    Para i = 1 hasta

    ()f(poblacin X1[i],poblacin X2[i])

    Arreglo fitness padres [i] = AadirElemento(())Arreglo desviacin estndar X1[i] = Arreglo desviacin estndar X2[i] =

    Fin-Para

    Para k = 1 hasta K

    Para i = 1 hasta Ciclo para inicializar arreglo de desv. Std.Arreglo probabilidad acumulada[i] = i/

    Fin-ParaPara i = 1 hasta

    RuletaPadre1 = AleatorioUniforme(1,0,1)RuletaPadre2 = AleatorioUniforme(1,0,1)

    Seleccin

    Para j=2 hasta Ciclo de seleccin de padresSi (Arreglo probabilidad acumulada[j-1]

  • 8/10/2019 Implementacin algoritmo estrategias evolutivas en lenguaje R

    3/16

    Padre2X1 = Arreglo poblacin X1[j]DesviacionPadre2X1= Arreglo desviacin estndarX1[j]

    Padre2X2 = Arreglo poblacin X1[j]DesviacionPadre2X2= Arreglo desviacin estndarX1[j]

    Fin-SiFin-Para

    Cruzamiento intermedio

    HijoX1= (Padre1X1+ Padre2X1)/2DesviacionHijoX1= (DesviacionPadre1X1 + DesviacionPadre2X1)/2

    HijoX2= (Padre1X2+ Padre2X2)/2DesviacionHijoX2= (DesviacionPadre1X2 + DesviacionPadre2X2)/2

    Mutacin

    DesviacionPerturbadaHijoX1= DesviacionHijoX1* (,,)DesviacionPerturbadaHijoX2= DesviacionHijoX1*

    (,,)

    HijoX1= HijoX1+ (1,0,)

    HijoX2= HijoX2+ (1,0,)

    Calculo del fitness del hijo generado

    ()f(HijoX1, HijoX2)

    Arreglo fitness hijos = AadirElemento(())

    Arreglo hijos X1= AadirElemento(HijoX1)Arreglo desviacin estndar hijos X1=

    AadirElemento(DesviacionPerturbadaHijoX1)

    Arreglo hijos X2= AadirElemento(HijoX2)Arreglo desviacin estndar hijos X2=

    AadirElemento(DesviacionPerturbadaHijoX 2)Fin-Para

    Inicializar en blanco Arreglo (+ )X1Inicializar en blanco Arreglo (+ )X2Inicializar en blanco Arreglo (+ )X1Inicializar en blanco Arreglo (+ )X2Inicializar en blanco Arreglo (+ )()

    Juntar padres + hijos

    Arreglo (+ )X1= AadirElemento(Arreglo poblacin X1, Arreglohijos X1)

    Arreglo (+ )X2= AadirElemento(Arreglo poblacin X2, Arreglohijos X2)

  • 8/10/2019 Implementacin algoritmo estrategias evolutivas en lenguaje R

    4/16

    Arreglo (+ )X1= AadirElemento(Arreglo desviacin estndarX1, Arreglo desviacin estndar hijos X1)

    Arreglo (+ )X2= AadirElemento(Arreglo desviacin estndarX2, Arreglo desviacin estndar hijos X2)

    Arreglo (+ )()= AadirElemento(Arreglo fitness padres,Arreglo fitness hijos)

    Inicializar en blanco Arreglo poblacin X1Inicializar en blanco Arreglo poblacin X2Inicializar en blanco Arreglo desviacin estndar X1Inicializar en blanco Arreglo desviacin estndar X2

    Seleccin de padres para la siguiente generacin

    Para i = 1 hasta Mejor = 9999

    Para j = 1 hasta tamao de arreglo (+ )()

    Si ((Arreglo (+ )()[j]

  • 8/10/2019 Implementacin algoritmo estrategias evolutivas en lenguaje R

    5/16

    RESULTADOS

    El algoritmo se corri con los siguientes parmetros.

    - Nmero de generaciones (K)= 50

    - Tamao de la poblacin ()= 20 individuos.- Nmero de individuos hijos ()= 7 x

    - Tamao del paso de la desviacin estndar ()= 0.02

    Los resultados estn indicados en la siguiente tabla. El mejor valor de f(x) en la ltima

    generacin.

    Tabla 1:Resultados ejecucin algoritmo ( + )

  • 8/10/2019 Implementacin algoritmo estrategias evolutivas en lenguaje R

    6/16

    De acuerdo a los resultados ilustrador por la Tabla 1, la mejor solucin 'x y )'(xf es la

    siguiente:

    - Mejor x1= 1.024350

    - Mejor x2= 1.051137

    - Mejor f(x)= 0.00093259

  • 8/10/2019 Implementacin algoritmo estrategias evolutivas en lenguaje R

    7/16

    GRFICA DEL PROCESO DE BSQUEDA: GENERACIN vsf(x)

    La siguiente figura ilustra el proceso de bsqueda del algoritmo para hallar el ptimo de la

    funcin f(x) de acuerdo a los resultados de la Tabla 1.

    Figura 1: Grfica de generacin vs f(x)

  • 8/10/2019 Implementacin algoritmo estrategias evolutivas en lenguaje R

    8/16

    VENTAJAS DEL ALGORITMO

    - Para el caso particular, el algoritmo de Estrategias Evolutivas es el adecuado dado que las

    posibles soluciones que optimizan la funcin de Rosenbrock, son continuas y el algoritmo

    de ES se desempea mejor con este tipo de variables, a diferencia de los algoritmos

    genticos que son ms adecuados con variables continuas o binarias.

    - Los mejores individuos siempre permanecen vivos en las generaciones, eliminando las

    peores soluciones de la poblacin.

    - Es un algoritmo poblacional, lo que facilita la bsqueda de soluciones en un gran espacio

    factible de soluciones.

    - Combina unas buenas soluciones para obtener unas mejores.

    - No se queda en ptimos locales.

    - Los diferentes operadores probabilsticos lo dotan de robustez.

    DESVENTAJAS DEL ALGORITMO

    - Dificultad inicial para determinar los parmetros del algoritmo.

    - Debido a su capacidad de memoria a largo plazo, se hace necesario implementar varias

    estructuras de datos con las cuales hay que ser cuidadosos en el manejo de sus ndices.

    - Su convergencia y calidad de la solucin, depender en gran medida de los parmetros

    iniciales. Aunque existen versiones auto adaptativas, este trabajo no incluy este tipo de

    variacin del algoritmo.

    - Puede presentarse convergencia prematura.

    - Los individuos ms aptos predominan en la poblacin dejando por fuera a individuos

    menos aptos restando diversidad a la poblacin que podra enriquecer la calidad de la

    bsqueda y solucin.

  • 8/10/2019 Implementacin algoritmo estrategias evolutivas en lenguaje R

    9/16

    CDIGO FUENTE EN LENGUAJE R

    # Implementacion algoritmo Estrategias Evolutivas# de la forma [(mu + lambda) - ES] para optimizacin# de la funcin de Rosenbrock en lenguaje R.#

    # Autor: Juan Felipe Munoz Fernandez# email: [email protected]# Universidad Nacional de Colombia - Sede Medellin# Facultad de Minas# Fecha ultima actualizacion: 13-Nov-2014

    # Se define la funcin de Rosenbrock.# Para la implementacin pedida, la# la dimensin: n=2, por tal razn el# ciclo for que implementa la sumatoria# va hasta 1.rosenbrock=function(x){

    fr =0for(i in1:1){

    fr =fr+((100*(((x[i]^2)-x[i+1])^2))+((1-x[i])^2))}return(fr)

    }

    # Numero mximo de generacionesnumIteraciones =50

    # Tamao de la poblacionmu =20

    # Poblacion de individuos hijoslambda =7*(mu)

    # Tamao del paso de la desviaciondeltaSigma =0.02

    # Domino de la variable XilimInf =-5.12limSup =5.12

    # Se inicializa la poblacion de individuos# para X1 aleatoriamente con distribucion# uniforme.poblacionX1 =runif(mu,limInf,limSup)

    # Se inicializa la poblacion de individuos# para X2 aleatoriamente con distribucion# uniforme.poblacionX2 =runif(mu,limInf,limSup)

    # Se inicializa la desviacion estandar.# La misma para todos los individuos Xi# ya que X1 y X2 tienen el mismo dominio.desvStdInicial =(1/6)*((limSup)-(limInf))

  • 8/10/2019 Implementacin algoritmo estrategias evolutivas en lenguaje R

    10/16

    # Se definen dos arreglos para almacenar# la desviacion estandar de los individuos# de la poblacion para X1 y X2dsvSdX1

  • 8/10/2019 Implementacin algoritmo estrategias evolutivas en lenguaje R

    11/16

    cat(0,poblacionX1[1],poblacionX2[1],rosenbrock(c(poblacionX1[1],poblacionX2[1])),"\n",file="C:\\datos.csv",sep=",",fill=FALSE,append=TRUE)

    # Inicia ciclo de generacionesfor(k in1:numIteraciones){

    # Ciclo para almacenar la probabilidad acumulada# de cada padre. Todos los padres tienen igual# probabilidad de ser seleccionadosfor(i in1:mu){

    probAcum[i]=i/mu}

    # Inicia ciclo de generacion de hijosfor(i in1:lambda){

    # Los padres se seleccionan tirando un# numero aleatorio entre 0 y 1 con# distribucion uniforme. Se necesitan

    # dos padres para generar un hijo.ruletaPadre1 =runif(1,0,1)ruletaPadre2 =runif(1,0,1)

    # Seleccion de padres...# En este ciclo se seleccionan los padres de la# poblacion de padres para cada variable de acuerdo# al valor de la ruletaPadreXi y la probabilidad acumulada.# La seleccion de los padres debe incluir la desviacin# estndar de cada uno en cada caso, es decir:# Padre1X1,desvStdPadre1X1 + Padre2X1,desvStdPadre2X1 = HijoX1# Padre1X2,desvStdPadre1X2 + Padre2X2,desvStdPadre2X2 = HijoX2for(j in2:length(probAcum)){

    if((ruletaPadre1 >=probAcum[j-1])&&(ruletaPadre1 =probAcum[j-1])&&(ruletaPadre2

  • 8/10/2019 Implementacin algoritmo estrategias evolutivas en lenguaje R

    12/16

    # respectivas desviaciones estandar...

    # Se genera el HijoX1hijoX1 =(padre1X1 +padre2X1)/2sigmaHijoX1 =(sigmaPadre1X1 +sigmaPadre2X1)/2

    # Se genera el HijoX2

    hijoX2 =(padre1X2 +padre2X2)/2sigmaHijoX2 =(sigmaPadre1X2 +sigmaPadre2X2)/2

    # Mutacion.# Se perturba la desviacin estandar de cada HijoXi.# Mutacion Gaussiana.sigmaMutadoHijoX1 =sigmaHijoX1 *(exp(rnorm(1,0,deltaSigma)))sigmaMutadoHijoX2 =sigmaHijoX2 *(exp(rnorm(1,0,deltaSigma)))

    # Se perturba el HijoXi teniendo en cuenta la perturbacion# de la desviacion estandar de cada uno hecha anteriormente.# Propiamente, estos son los hijos generados.hijoX1 =hijoX1 +rnorm(1,0,sigmaMutadoHijoX1)

    hijoX2 =hijoX2 +rnorm(1,0,sigmaMutadoHijoX2)

    # Fitness de los hijos generados.# Se evala el fitness de los hijos generados.hijosXi =c(hijoX1,hijoX2)fx =rosenbrock(hijosXi)

    # Se guarda en el arreglo el Fitness# de los hijos generados.fitnessHijos

  • 8/10/2019 Implementacin algoritmo estrategias evolutivas en lenguaje R

    13/16

    # Se juntan (mu) padres + (lambda) hijos de X2# en un solo arreglo.muMasLambdaX2 =append(poblacionX2,hijosX2)

    # Se juntan la desviacin estndar de# (mu) padres + (lambda) hijos de X1# en un solo arreglo.

    muMasLambdaSdX1 =append(dsvSdX1,sigmaHijosX1)

    # Se juntan la desviacin estndar de# (mu) padres + (lambda) hijos de X2# en un solo arreglo.muMasLambdaSdX2 =append(dsvSdX2,sigmaHijosX2)

    # Se juntan los Fitness de los padres y de los hijos en un# solo arreglo.muMasLambdaFitness =append(fitnessPadres,fitnessHijos)

    # Se preparan los vectores para la siguiente generacionpoblacionX1 =c()

    poblacionX2 =c()dsvSdX1 =c()dsvSdX2 =c()

    # Seleccion de los mejores padres de esta generacion.# Este bloque de cdigo selecciona los mejores padres# de los arreglos (mu) + (lambda) anteriores.# El criterio de seleccion es el fitness.

    # Este primer ciclo repite (mu) veces para seleccionar# los (mu) mejores individuos de los arreglos (mu)+(lambda)for(i in1:mu){

    # Variable de control con un valor atpico# (fuera del dominio de Xi) para la lgica# de seleccin del mejor.mejor =9999

    # Este ciclo recorre el arreglo (mu)+(lambda) seleccionando# el mejor fitness de todo el arreglo. Cuando lo encuentra# en esa posicin define un valor atpico para que en la# proxima iteracin del primer ciclo, este elemento no# sea tenido en cuentafor(j in1:length(muMasLambdaFitness)){

    if((muMasLambdaFitness[j]

  • 8/10/2019 Implementacin algoritmo estrategias evolutivas en lenguaje R

    14/16

    # El mejor fitness encontrado se le asigna un valor atpico# para no tenerlo en cuenta en la siguiente iteracin.muMasLambdaFitness[indice]=9999

    }

    cat(k,poblacionX1[1],poblacionX2[1],rosenbrock(c(poblacionX1[1],poblacio

    nX2[1])),"\n",file="C:\\datos.csv",sep=",",fill=FALSE,append=TRUE)}

  • 8/10/2019 Implementacin algoritmo estrategias evolutivas en lenguaje R

    15/16

    REFERENCIAS

    [1] Jaramillo, G. P. (2014). Computacin Evolutiva II. Estrategia Evolutiva. Evolucin

    Diferencial. Sesin 10. Asignatura: Computacin Evolutiva y Optimizacin Heurstica.

    Universidad Nacional de Colombia, Medelln.

    [2] Coello Coello, C. A. (2014). Introduccin a la Computacin Evolutiva [en lnea].

    CINVESTAV-IPN, Mxico, D.F. http://delta.cs.cinvestav.mx/~ccoello/compevol/clase3-

    2014.pdf

    [3] Muoz, M. A. (2008). Estrategias Evolutivas aplicadas a los Algoritmos de Enjambres

    para el control de sistemas complejos. Escuela de Ingeniera Elctrica y Electrnica.

    Santiago de Cali.

    [4] Lara Lpez, A. (2003). Un estudio de las Estrategias Evolutivas para problemasMultiobjetivo. CENTRO DE INVESTIGACIN Y DE ESTUDIOS AVANZADOS DEL

    INSTITUTO POLITCNICO NACIONAL. Mxico D.F.

    [5] Yu, X., & Gen, M. (2010). Simple Evolutionary Algorithms. Introduction to Evolutionary

    Algorithms, 1139. Retrieved from http://link.springer.com/chapter/10.1007/978-1-84996-

    129-5_2

    [6] Dirk Hansen, N., Auger, A., & Auger, A. (2013). Fast evolution strategies. Evolution

    Strategies.

  • 8/10/2019 Implementacin algoritmo estrategias evolutivas en lenguaje R

    16/16

    ANEXOS

    El presente documento PDF incluye los siguientes archivos adjuntos.

    - estrategias-evolutivas.rCdigo fuente del algoritmo en lenguaje R.