1
Programación Genética:
Introducción y Aspectos Generales
John Sprockel
Maestría de Ingeniería de Sistemas y Computación, Universidad Javeriana
Resumen. La programación genética es una herramienta de la computación evolutiva que ha tenido un desarrollo
relativamente reciente, principalmente con base en los trabajos de Koza a finales de los años 80’s e inicios de los
90’s. A diferencia de las otras técnicas se fundamenta en la evolución de programas, un concepto llamado
inducción de programación o programación automática. Su implementación consta de cinco pasos: 1) selección
de terminales, 2) selección de las funciones, 3) identificación de la función de evaluación, 4) selección de los
parámetros del sistema y 5) selección de la condición de terminación. La estructura subyacente a la evolución es
estructurada jerárquicamente. La población inicial está compuesta de árboles de programas construidos
aleatoriamente que son llevados al proceso de evolución: evaluación, selección, reproducción, entrecruzamiento y
mutación hasta llegar a la condición de terminación.
Palabras Clave: inteligencia artificial, computación evolutiva, programación automática, inducción de
programación, árboles de decisiones.
1 Introducción
La Programación Genética es un método automático independiente del dominio para resolver problemas.
Comenzando con miles de programas de ordenador creados al azar, se aplica el principio darwiniano de la selección
natural, la recombinación (crossover), la mutación, la duplicación de genes, la supresión de genes, y ciertos
mecanismos de la biología del desarrollo. Por lo tanto, genera una población mejorada a lo largo de muchas
generaciones [1]. Tiene que ver principalmente con la programación automática. Las estructuras susceptibles de
evolución son como tal los mismos programas de computación. Puede considerarse una forma de descubrimiento de
programas o inducción de programas [2]. Comienza a partir de una declaración de alto nivel de los requisitos de un
problema y trata de producir un programa de computadora que resuelve el problema. El usuario se comunica el
problema humano de alto nivel de los estados en el sistema de programación genética mediante la realización de
ciertas medidas preparatorias.
2 Historia
Aunque se le atribuye a Koza [3] el desarrollo de la técnica, podemos observar que esta no hubiera sido posible sin
contar con los desarrollos conceptuales que lo antecedieron y son visibles en la figura 1.
2
Figura 1. Evolución histórica de los conceptos de la programación genética
3 Componentes y Pasos
Los cinco principales pasos preparatorios para la versión básica de la programación genética requiere que el usuario
humano especifique [1]:
i. El conjunto de terminales (por ejemplo, las variables independientes del problema, las funciones de
argumento cero y constantes al azar) para cada rama del programa a ser evolucionado.
ii. El conjunto de funciones primitivas para cada rama del programa a ser evolucionar.
iii. La medida de la aptitud o Fitness (explícita o implícitamente para medir la aptitud de los individuos en la
población). En otras palabras, determinar la función de evaluación.
iv. Selección de los parámetros para el control de la ejecución.
v. El criterio de terminación y el criterio para designar el resultado.
Propiedad de Clausura (Cierre)
Es un requerimiento importante. Consiste en que cada función en el conjunto de funciones debe ser capaz de aceptar
como argumento cualquier otra salida de una función y algún terminal en el conjunto terminal. Todo el conjunto de
estructuras posibles debe ser formado recursivamente de los conjuntos de función y de terminales [2].
Turing (1950-1953) “búsqueda genética o evolucionaria”
Smith (1980) sistema de clasificación para encontrar estrategias en poker
Cramer (1985) representación de programas con arboles en un genotipo
Hicklin (1986) y Fujiki y Dickinson (1987) consideraron métodos para evolucionar programas en LIPS. Y Dickmanns, Schmidhuber y Winkklohofer (1987) en PROLOG.
Koza (1989, 1992) importancia de la programación genética para inducción de programas en un amplio rango de campos.
3
Figura 2. Procedimientos en la programación genética.
La medida de la aptitud o fitness es el mecanismo primario para la comunicación de la declaración de alto nivel de
los requisitos del problema para el sistema de programación genética. En él se especifica lo que se debe hacer.
Cuando se utiliza la programación genética para sintetizar automáticamente los programas de ordenador, los
programas suelen estar representados como raíces, los árboles de punto marcados con sucursales ordenados. El
conjunto de funciones puede consistir simplemente las funciones aritméticas ordinarias de suma, resta,
multiplicación y división, así como un operador de bifurcación condicional. Por otro lado, cuando se utiliza para
sintetizar automáticamente una estructura especializada tal como un controlador, el conjunto de funciones consta de
las funciones especializadas que forman los integradores de controladores, diferenciadores, ganancias, sumadores,
restadores, clientes potenciales, retrasos, etc. En el caso de utilizarse para sintetizar automáticamente circuitos
eléctricos, debe superar un obstáculo adicional representacional porque en los circuitos están etiquetados gráficos
cíclicos. Puede hacerlo mediante el establecimiento de una correspondencia entre los árboles del programa que
utiliza habitualmente la programación genética y los grafos etiquetados cíclicos afín a los circuitos. Se utiliza un
proceso de desarrollo para mapear los árboles en los circuitos. Este proceso de desarrollo comienza con un embrión
simple (a menudo compuesto por un único cable modificable). A continuación, desarrollar un circuito eléctrico
análogo de la aplicación progresiva de las funciones de construcción de circuitos en un árbol de alambre programa
inicial del embrión modificable (y para tener éxito modificable cables y componentes modificables).
Una revisión de Koza [1] expone que después de que el usuario ha realizado los pasos de preparación, la
programación genética ejecuta una serie de bien definidas e independientes de pasos. Específicamente, la ejecución
se inicia mediante la generación de una población inicial de composiciones (típicamente al azar) de funciones del
problema y terminales; existen varias técnicas para la inicialización de los árboles (ver figura 3). Entonces, la
programación genética iterativamente realiza los siguientes pasos secundarios (referido aquí como una generación)
en la población de los programas hasta satisfacer el criterio de terminación. En primer lugar, ejecutar cada programa
en la población y asignarle un valor de fitness.
4
Figura 3. Métodos para la inicialización de los árboles de decisión.
En segundo lugar, se crea una nueva población mediante la aplicación de los programas de las siguientes
operaciones para los individuos seleccionados en la evolución de la población. Las operaciones se aplican a los
programas seleccionados de la población con una probabilidad basada en la aptitud (con reselección permitida):
Reproducción: Copia el programa seleccionado para la nueva población.
Crossover: Crea un programa nuevo descendiente de la nueva población mediante la recombinación de las
piezas elegidas al azar de dos programas seleccionados. En el caso de los árboles de decisiones se describen
dos técnicas para su realización: la tradicional (ver figura 3) y la recombinación de crías.
Figura 4. Operadores de recombinación en árboles de decisión.
Mutación: Crea un programa nuevo descendiente de la nueva población mutando aleatoriamente una parte
elegida al azar del programa seleccionado. En los árboles de decisiones se cuentan con técnicas de macro-
mutación (se selecciona un punto y se muta todo el sub-árbol a partir de esa instancia) y micro-mutación
Método de Crecimiento
(“Grow”)
•Formas Irregulares
•Se especifica la profundidad máxima (Dmáx )
Método Completo
(“full”)
• Árboles Regulares
• Se especifíca la misma Dmáx
Rampa Mitad y Mitad
•Introduce diversidad en la pobl inicial
•Usando ambas tecnicas
Escoger los padres
Seleccionar un sub-árbol
Intercambiar los sub-árboles
5
(solo se altera un simple nodo). En la representación lineal se selecciona una instrucción la cual se muta
puntualmente, o bien, se cambia en bloque (ver figura 4).
Operaciones que Alteran la Arquitectura: Crea un programa nuevo descendiente de la nueva población
mediante la alteración de la arquitectura del programa, mediante la creación, duplicación o eliminación de
una subrutina, iteración del bucle, recursividad, o elemento.
A.
B.
C.
Figura 4. Representación de mutación en una representación lineal. A. Secuencia original. B. Mutación puntual en
una instrucción. C. Cambio en bloque de una secuencia de instrucciones a partir de un punto.
Finalmente, el individuo con la carrera de mejor aptitud es designado como el resultado de la ejecución. Este
resultado podría resolver (o aproximadamente solucionar) el problema.
Hay que tener en cuenta que la estructura con la cual se lleva a cabo la evolución es un programa de computador
jerárquicamente estructurado. El espacio de búsqueda son los programas válidos, los cuales pueden ser vistos como
espacios de árboles arraigados [4].
4 Presentación de un artículo de ejemplo
El trabajo de Podgorelec y Kokol [4], si bien es antiguo (publicado en 1999), se convierte en un excelente ejemplo
de la aplicación de la programación genética en la selección de la mejor herramienta, en este caso árbol de
decisiones, aplicada al diagnóstico de una enfermedad congénita cardiaca de alta prevalencia, el prolapso de la
válvula mitral.
Se tomó una población de 900 personas menores de 18 años representativas de la población de Maribor (Slovenia),
de los cuales 631 accedieron a la realización de un ecocardiograma. Se usó una población de 500 personas para el
conjunto de entrenamiento y los restantes 131 para el conjunto de pruebas. Previamente habían escogido 103
parámetros compuestos a partir de datos generales, características clínicas, de laboratorio, electrocardiograma,
imágenes y finalmente el ecocardiograma para generar con ellos el mejor árbol de decisiones de la forma tradicional
(figura 5), el cual fue comparado con un programa de decisiones automáticamente evolucionado.
X1 X2 X4 X5 X6
X1 X2 X4 X5* X6
X1 X2 X4 X8 X9
6
Figura 5. Parte del árbol de decisiones para la clasificación del prolapso mitral.
Figura 6. Parte del programa de decisiones para la clasificación del prolapso mitral.
Figura 7. Partición del espacio de descripción i) ejes paralelos en el árbol de decisiones ii) líneas oblicuas en el
programa de decisiones.
Los resultados demostraron que el programa contaba con una mayor certeza, sensibilidad y especificidad que el
árbol tradicional (ver tabla 1).
7
Tabla 1. Comparación de la complejidad entre el árbol y el programa
Si bien es insuficiente la información acerca del cómo se seleccionó la población y de cómo se diseñaron los árboles
de decisiones y los detalles de la metodología de la programación genética (terminales, funciones, fitness,
parámetros y criterios de terminación), demuestra que puede construirse y evolucionarse una estrategia para la toma
de decisiones en medicina que conlleva una mayor certeza en su ejecución.
Referencias
[1] Koza J, Keane M, Streeter M (2003). What's AI done for me lately? Genetic programming's human-competitive results.
IEEE Intelligent Systems. Vol: 18, nro 3, pp 25-31.
[2] Dumitrescu D. Evolutionary Computation, CRC Press, 2000.
[3] J.R. Koza, Genetic Programming: On the Programming of Computers by Means of Natural Selection, MIT Press, 1992
[4] Podgorelec, V., Kokol, P., & Zavrsnik, J. (1999). Medical diagnosis prediction using genetic programming (pp. 202–
207). Presented at the 12th IEEE Symposium on Computer-Based Medical Systems, 1999. Proceedings., IEEE
Comput. Soc. doi:10.1109/CBMS.1999.781271.
[5] Rusell N. Inteligencia Artificial: Un Enfoque Moderno, Prentice Hall, 2004.
[6] Jones MT. Artificial Intelligence: A Systems Approach, INFINITY SCIENCE PRESS LLC, 2008
Top Related