Programaci n gen tica pg
Sponsored Links
This presentation is the property of its rightful owner.
1 / 72

Programación Genética (PG) PowerPoint PPT Presentation


  • 63 Views
  • Uploaded on
  • Presentation posted in: General

Programación Genética (PG). Mario Hernández. ¿PG?. La PG suministra una metodología para crear automáticamente programas a partir de una definición de los mismos a alto nivel.

Download Presentation

Programación Genética (PG)

An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -

Presentation Transcript


Programación Genética(PG)

Mario Hernández


¿PG?

  • La PG suministra una metodología para crear automáticamente programas a partir de una definición de los mismos a alto nivel.

  • PG consigue el objetivo de Programación Automática (también denominada Síntesis de Programas o Inducción de Programas) reproduciendo genéticamente una población de programas utilizando los principios darwinianos de la selección natural y de las operaciones inspiradas biológicamente.


PG

  • Rama de la Computación Evolutiva (CE)

  • Diferencia PG - AG:

    ¿qué solución se busca?

    O, de otra manera: cuál es la representación que se utiliza para la solución


  • Los AG crean cadenas de cromosomas que codifican (representan) la solución buscada

  • La PG crea Programas (código) 

  • Es decir: en PG se transforman Programas que buscan la Solución, en vez de la Representación de la solución


Algunos Campos de Aplicación

  • Síntesis automática de circuitos eléctricos analógicos

  • Síntesis automática de controladores

  • Problemas en biología molecular computacional, incluyendo rutas metabólicas y redes genéticas.

  • Autómatas Celulares

  • Sistemas Multiagente

  • Investigación Operativa

  • Areas de Diseño

  • Uso de PG como una “Máquina Automática de Invenciones” para crear nuevas invenciones útiles patentables


Algoritmo Evolutivo General

  • Crear aleatoriamente una población de soluciones

  • Hacer iterativamente, hasta alcanzar una solución suficientemente buena:

    • Evaluar cada solución, dándole una puntuación

    • Escoger las mejores y reproducirlas; mutarlas o cruzarlas, con otras nuevas soluciones para la próxima generación


Algoritmo General de PG

  • Generarar una población inicial de programas

  • Ejecutar cada programa de la población y asignarle un valor de aptitud (fitness) de acuerdo a lo bien que resuelve el problema.

  • Crear una nueva población de programas aplicando las siguientes operaciones:

    i) Copiar los mejores programas existentes ii) Crear nuevos programas por mutacióniii) Crear nuevos programas por cruce (crossover)

    El mejor programa aparecido en cualquier generación, es decir el que genera la mejor de las soluciones con las restricciones que le son impuestas (pe complejidad, etc…), resulta designado como el resultado del procedimiento de Selección Genética por PG.


La Idea ¿Lunática? de Evolucionar Programas

  • Ejemplo del primer paso: Programa generado aleatoriamente:


Argumentos contra la evolución de programas

  • Los programas creados aleatoriamente tienen una posibilidad infinitesimal de compilar, y menos que hagan lo que se pretende

  • La ejecución de un programa creado aleatoriamente darán lugar, si compila, y muy probablemente a errores de salida de espacios reservados para matrices, data-casting, core-dumps, divisiones por cero, etc... lo que conllevará a suspensión de ejecución

  • Mutar y mezclar segmentos de programas creados aleatoriamente resulta en un sinsentido equivalente a crearlos aleatoriamente

    ¿Cómo se resuelve esto en la PG?


La Representación en PG

El truco consiste en escoger una representación subyacente para los programas tal que resulte factible la creación aleatoria, la mutación y el cruce de programas


La Representación en PG

+

*

4

5

-2

  • Representación basada en árboles

(+ (* 5 –2) 4)

La representación empleada en PG se basa en árboles, que presentan una correspondencia directa con la notación prefija o polaca


La Representación en PG (II)

  • Una familia de lenguajes de programación que se adapta a esta representación son la familia Lisp (Lisp-like), como p.e. Lisp o Scheme


La Representación en PG (III)

Notación SufijaNotación Prefija

f(x,y)(f x y)

3*4(* 3 4)

Los programas complejos se expresan utilizando funciones compuestas, pe:

(+ 2 (IF (> X 3) 4 7))


(+ 2 (IF (> X 3) 4 7))

La estructura consta de funciones y terminales

+

2

IF

>

4

7

X

3


Utilidad de la representación en árbol

  • La estructura en árbol resulta útil para definir los efectos de los operadores sobre los programas

  • Los operadores presentan una estructura muy “elegante” en este formato

  • También resulta útil a efectos prácticos en dominios de aplicación como:

    • Determinar las capas (layouts) en un circuito integrado analógico

    • Crear redes neuronales

    • Paralelizar programas

    • Y muchos otros ...


Ventajas de las estructuras “Lispy”

  • Cada programa es una lista uniforme

  • Las listas representan, sin distinción alguna, datos y código. Ello permite que se puedan definir las operaciones genéticas de forma sencilla

  • El formato de las instrucciones es el de una función aplicada a argumentos. Ello representa la información de control en una sintaxis común, que resulta (otra vez) cómoda para su modificación genética

  • La estructura de longitud variable de las lista supera la limitación de longitud fija de las cadenas (strings) en los AG


Operadores Genéticos para Programas

  • Creación: generación aleatoria de árboles utilizando funciones y terminales

  • Cruce: fijar puntos de cruce en ambos padres y solapar ambos subárboles

  • Mutación: fijar un punto de mutación en un padre y reemplazar subárbol con un árbol generado aleatoriamente


Para aplicar operadores genéticos

El Primer Paso:

Identificación de los “Puntos de Fractura” : análogos a los “puntos de cruce en las representaciones genéticas en cadenas utilizadas por los AG.

Pueden ser:

  • El Inicio de una sublista

  • Un Terminal


Implementación de Operadores

  • Cruce

  • Inversión

  • Mutación


I. Operador de Cruce (crossover)

Pasos:

  • Escoger dos programas criadores individuales

  • Seleccionar dos sublistas, una por criador

  • Intercambiar las sublistas en la descendencia


Paso 1

(* x (+ x y ))

(+ (* z y) (/ y x ))

*

+

*

/

x

+

x

y

z

y

y

x


Paso 2

*

+

*

/

x

+

x

y

z

y

y

x


Paso 2

*

+

*

/

x

+

x

y

z

y

y

x


Paso 2

*

+

*

x

+

x

z

y


Paso 3

*

+

*

x

+

y

/

x

z

y

y

x


II. Operador de Inversión

Pasos:

  • Escoger un individuo de la población

  • Seleccionar dos puntos de fractura en el individuo

  • Generar un nuevo individuo conmutando los símbolos delimitados y solapando las sublistas con la lista principal


Paso 1

+

*

/

z

y

y

x


Paso 2

+

*

/

z

y

y

x


Paso 2

+

*

/

z

y

y

x


Paso 2

+

*

/

z

y

y

x


Paso 3

+

*

/

z

y

y

x


Paso 3

+

*

z

/

y

y

x


Paso 3

+

*

z

/

y

y

x


III. Operador de Mutación

Pasos:

  • Seleccionar un programa padre

  • Reemplazar aleatoriamente cualquier símbolo de función por cualquier otro o cualquier símbolo terminal por cualquier otro


Paso 1

+

*

/

z

y

y

x


Paso 2

+

*

/

z

y

y

x


Paso 2

+

+

/

z

y

y

x


Paso 2

+

+

/

z

y

y

x


Problema

  • Todos los ejemplos anteriores son aritméticos

  • En casos más generales puede darse SOLAPAMIENTO DE ARGUMENTOS

    Pe: si una función devuelve una lista y se intercambia con otra que devuelve un entero, la estructura resultará sintacticamente inválida


Soluciones

  • Todas las funciones deben devolver el mismo tipo de argumentos (pe entero)

  • Usar programación genética fuertemente tipada para asegurar que todas las expresiones son type-safe

  • Implementar algún tipo de chequeo


Algoritmo de PG

  • La principal diferencia del algoritmo básico de PG con el AG básico surge de la sustitución de las cadenas por programas

  • Esta diferencia se muestra en la evaluación de la aptitud, por lo que el programa se prueba con un conjunto de entradas para evaluarlo.


Algoritmo de PG

  • Escoger una población de tamaño NP

  • Escoger el número de generaciones NG

  • Inicializar la población

  • Repetir durante NG generaciones

    • Seleccionar probabilísticamente un cierto número de pares de individuos de la población después de asignar a cada estructura una probabilidad proporcional a su aptitud (fitness) o desempeño (performance)

    • Copiar las estructuras seleccionadas y aplicarle los operadores para producir nuevas estructuras

    • Seleccionar aleatoriamente otros elementos y reemplazarlos con las nuevas estructuras

    • Observar y registrar la aptitud de las nuevas estructuras

    • Suministrar como salida a los individuos más adecuados


Creación de la Población Inicial

  • Cuando se crea una población, resulta interesante empezar con muchos árboles de diferentes tamaños/formas

  • Se generan árboles utilizando los siguientes métodos:

    • Full: cada ruta en el árbol es de la longitud máxima

    • Grow: las longitudes de rutas varían hasta la longitud máximaRamp half-and-half: (típico) se crean árboles de profundidades variadas desde un mínimo hasta un máximo, y para cada profundidad, la mitad se crean usando el método full y la otra mitad usando el método grow


Pasos preparatorios para PG

Una vez decidido que quieres resolver un problema usando GP, para efectuar la ejecución se necesita:

  • Determinar el conjunto de terminales: variables, valores de entrada o comandos de acción

  • Determinar el conjunto de funciones (no terminales)

  • Determinar la medida de aptitud (fitness)

  • Los parámetros para controlar la ejecución:

    • Tamaño de población

    • Número máximo de generaciones

    • Tasas de Mutación, cruce y reproducción (típicos 1, 90 y 9%)

  • El método de terminación de una ejecución y de designación de un resultado


Suficiencia y Cierre

El conjunto de funciones y el de terminales deben satisfacer los principios:

  • Cierre: cada función f debe ser capaz de aceptar los valores de todos los terminales t del conjunto de terminales y cada función f del conjunto de funciones

  • Suficiencia: en el Espacio de Programas creado a partir de los conjuntos de funciones y terminales

  • debe existir una solución al problema que se plantea


Algunos Ejemplos


Ejemplo: Paridad

Objetivo: obtener la función paridad n-par, pe n=3


Elementos del Problema

  • Conjunto de Terminales: los tres símbolos que representan las tres posibles entradas a ser comprobadas para paridad:

    T = {D0, D1, D2}

  • Conjunto de Funciones: primitivas booleanas de dos argumentos

    F = [AND, OR, NAND, NOR}


Solución

  • Utilizando una población inicial de 4000 programas, se descubrió una solución en la generación 5

  • La solución contiene 45 elementos (terminales + no terminales)


Solución (II)

(AND (OR (OR D0 (NOR D1 D2)) D2)

(AND (NAND (NOR (NOR (NOR D0 D2)

(AND (AND D1 D1) D1))

(NAND (OR (AND D0 D1) D2) D0))

(OR (NAND (AND (D0 D2)

(OR (NOR D0 (OR D2 D0) D1))

(NAND (NAND D1 (NAND (D0 D1)) D2)))


Comentarios sobre la Solución

  • La solución no es la función mínima que puede escribirse a mano, sino que contiene muchos usos del conjunto de funciones primitivas

  • Ello se debe a que NO EXISTE PRESIÓN SOBRE EL MECANISMO DE SELECCIÓN para escoger la función mínima


Parsimonia

  • Como se explica en (Koza-92):

    “Como ocurre con el genoma de los seres vivos, los resultados de la PG raramente son las estructuras mínimas que se definirían a mano para realizar la tarea”

  • Los humanos tendemos a seleccionar las explicaciones simples y potentes, incluso a costa de alguna validez empírica

  • Principio de Parsimonia: obtener la estructura más pequeña posible que permita resolver el problema

(Koza-92) J. Koza, Genetic Programming, MIT Press , 1992


  • La naturaleza no tiene porqué favorecer tales estructuras parsimónicas, aunque nosotros las prefiramos como explicaciones de un cierto fenómeno.

  • (Koza-92) sugiere un conjunto de factores secundarios que penalizan una solución particular que posea excesivo tamaño o tiempo.

  • De esta manera se pueden evolucionar soluciones correctas que sean eficientes y parsimónicas.


Ejemplo: Regresión Simbólica

Generar con GP el ajuste de una función a la siguiente tabla de datos


Regresión Simbólica (II)

  • Conjunto de Funciones: +, -, *, /

  • Conjunto de Terminales: X

  • Medida de Aptitud (Fitness): diferencia absoluta del error. Más apta error 0

  • Parámetros:

    • Tamaño de población: 500

    • Nº máx. de generaciones: 10

    • Cruce: 90%

    • Mutación: 1%

    • Reproducción: 9%

    • Selección por Torneo (tamaño 5)

    • Creación utilizando el método RAMP-HALF-AND-HALF

    • Condición de terminación: Cuando se encuentra un programa con aptitud 0.


Regresión Simbólica. Resultados

  • Individuo Solución con Aptitud 0:

    (ADD (ADD (MUL X X) (MUL X X))

    (MUL (MUL X X) (- X)))

    (SUB X (SUB (SUB (SUB X X)

    (MUL X X)) (MUL (ADD X X)

    (MUL X X)))))

  • Que captura correctamente la función:

    f(x) = x4 + x3 + x2 + x


Ejemplo: Camino de Santa Fe

Problema: una hormiga artificial debe “comerse” todas las piezas de alimento (89) en un camino. La hormiga solo puede moverse a la izda., a la dcha. o adelante, y sólo puede percibir lo que se encuentra directamente enfrente.


Camino de Santa Fe (II)

  • Conjunto de Funciones: Prog2, Prog3, IfFoodAhead

  • Conjunto de Terminales: TurnLeft, TurnRight, MoveForward

  • Medida de Aptitud: recuento del número de items comidos despues de un número fijo de movimientos, y restarlos de 89. Mala aptitud = 89, Buena Aptitud = 0.

  • Parámetros:

    • Tamaño de población: 500

    • Nº máx. de generaciones: 50

    • Cruce: 90%

    • Mutación: 1%

    • Reproducción: 9%

    • Selección por Torneo (tamaño 5)

    • Creación utilizando el método RAMP-HALF-AND-HALF

    • Condición de terminación: Cuando se encuentra un programa con aptitud 0.


Camino de Santa Fe. Resultados

  • Resultados del agente obtenido


Camino de Santa Fe. Resultados

(Prog3 (IfFoodAhead (IfFoodAhead (IfFoodAhead (IfFoodAhead (Prog2 MoveForward MoveForward) TurnLeft) TurnLeft) TurnLeft) (IfFoodAhead MoveForward (IfFoodAhead MoveForward (IfFoodAhead (IfFoodAhead (Prog2 MoveForward MoveForward) TurnLeft) TurnLeft)))) TurnLeft (Prog3 (IfFoodAhead (IfFoodAhead MoveForward TurnLeft) TurnRight) MoveForward TurnRight))

Es posible encontrar agentes más simples


Aplicabilidad

  • John Koza ha comprobado que la PG resulta efectiva en un rango amplio de problemas, no solamente en regresión simbólica, como se ve en el ejemplo anterior.

  • Utilizando conjuntos de funciones que incluyen comandos típicos de programación (como IF o DO-UNTIL), Koza ha evolucionado algoritmos en muchos dominios como:

    • Control Óptimo

    • Inducción de Secuencias

    • Estrategias en Juegos

    • Inducción de árboles de decisión

    • Predicción Económica

    • Etc ....


1000-Pentium Beowulf-Style Cluster Computer (29 Julio 1999)

Computador paralelo con un servidor y 1,000 P-II 350-MHz 64 MB (94 GB total) en 500 placas madre dual-CPU Tyan Tiger 100 con 128 MB en una minitorre c/u con una tarjeta de interface de red de 100 Mb/s. Intel PRO/100+ y una fuente de alimentación de 300 w.


  • Cada grupo de 40 procesadores (20 carcasas)se conecta a uno de los 25 hubs de 24 puertos y 100 Mb/s

  • Cada hub se encuentra conectado a uno de los dos switches de 100 Mb/s y 16 puertos conectados entre si y al servidor.

  • El servidor es un Dual Pentium II 350-MHz con 256 MB de RAM, 14 GB de disco, display, teclado, CDROM y unidad de floppy. Corre Red Hat Linux 6.0

  • Los 1000 proceadores estan organizados en un grid toroidal de 25x40.

  • Cada grupo de 40 procesadores que comparten un hub se organizan en un rectángulo de 8x5.

  • El sistema de 1,000-nodos puede acomodar una población de 10.000.000 de programas individuales de 3.000 puntos (funciones o terminales) 30.000.000 de 1.000 puntos.

  • Una generación se computa en 0,25 h., y en un día se pueden computar 96 generaciones


Eficacia de PG vs. Búsqueda Aleatoria

  • Depende del problema

  • Pero para la mayor parte de los problemas computacionalmente duros, la evidencia experimental es que el comportamiento de de la PG es mucho mejor.


Análisis

  • El análisis teórico del desempeño (performance) de la PG es muy difícil

  • Se suele caracterizar experimentalmente, observando el comportamiento del algoritmo en ejecuciones sucesivas variando NG y NP, y extrayendo a continuación algunas conclusiones generales


  • Pk(NP) : probabilidad de generar una solución en una generación particular k utilizando un tamaño de población NP

  • P(NG,i) : probabilidad acumulativa de encontrar una solución hasta (incluyéndola) la generación i:


  • A priori se cree que Pk se incrementaría monótonamente con k, por lo que con más generaciones se alcanzaría inevitablemente la solución.

  • La evidencia experimental muestra otra cosa

  • La aptitud de los individuos tiende a la alcanzar una “llanura” (plateau), significando que la búsqueda de la solución ha alcanzado un mínimo local

  • Por tanto, para la mayoría de los casos, Pk disminuye con k


  • La solución es asumir que sucesivos experimentos son independientes entre si, y alcanzar el óptimo repitiendo ejecuciones que partan de diferentes condiciones iniciales

  • Una fórmula sencilla determina el número de ejecuciones necesarias basadas en medidas de éxito empírico


Determinación del número de ejecuciones necesarias

  • Establece un compromiso entre tamaño de población y múltiples ejecuciones

  • Asumiendo ejecuciones independientes, el número necesario se puede obtener conocido P(NP, i) de la siguiente manera


  • PA : prob. De alcanzar la solución después de G generaciones

  • Si r es el número de experimentos, se puede obtener PA como:

    PA = 1 – [1 – P(NP, G) ]r

  • Como la variable de interés es r, tomando logaritmos:

    ln (1 –PA) = r ln [1- P(NP, G) ]

  • Ó: r = ln  / ln [1- P(NP, G) ]

  • Siendo :  = (1 –PA)


  • Esta fórmula permite realizar una estima grosera del algoritmo GP para un problema particular

  • Se obtiene un compromiso entre tamaño de población y número de ejecuciones


FIN


  • Login