stringtranslate.com

Programación genética

En inteligencia artificial, la programación genética ( PG ) es una técnica de desarrollo de programas, a partir de una población de programas no aptos (normalmente aleatorios), aptos para una tarea concreta mediante la aplicación de operaciones análogas a los procesos genéticos naturales a la población de programas.

Las operaciones son: selección de los programas más aptos para la reproducción (cruce), replicación y/o mutación de acuerdo con una medida de aptitud predefinida, generalmente la competencia en la tarea deseada. La operación de cruce implica intercambiar partes específicas de pares seleccionados (padres) para producir descendientes nuevos y diferentes que se convierten en parte de la nueva generación de programas. Algunos programas no seleccionados para la reproducción se copian de la generación actual a la nueva generación. La mutación implica la sustitución de alguna parte aleatoria de un programa con alguna otra parte aleatoria de un programa. Luego, la selección y otras operaciones se aplican recursivamente a la nueva generación de programas.

Por lo general, los miembros de cada nueva generación están, en promedio, más en forma que los miembros de la generación anterior, y el mejor programa de la generación suele ser mejor que los mejores programas de la generación anterior. La finalización de la evolución suele producirse cuando algún programa individual alcanza un nivel de aptitud o competencia predefinido.

Puede ocurrir, y a menudo ocurre, que una determinada ejecución del algoritmo dé como resultado una convergencia prematura hacia un máximo local que no sea una solución globalmente óptima o incluso buena. Por lo general, se necesitan múltiples ejecuciones (de docenas a cientos) para producir un muy buen resultado. También puede ser necesario tener un gran tamaño de población inicial y variabilidad de los individuos para evitar patologías.

Historia

El primer registro de la propuesta de desarrollar programas es probablemente el de Alan Turing en 1950. [1] Hubo un intervalo de 25 años antes de la publicación de Adaptación en sistemas naturales y artificiales de John Holland, que estableció las bases teóricas y empíricas de la ciencia. En 1981, Richard Forsyth demostró la evolución exitosa de pequeños programas, representados como árboles, para realizar la clasificación de evidencias de la escena del crimen para el Ministerio del Interior del Reino Unido. [2]

Aunque la idea de desarrollar programas, inicialmente en el lenguaje de programación Lisp , era común entre los estudiantes de John Holland, [3] no fue hasta que organizaron la primera conferencia sobre algoritmos genéticos (AG) en Pittsburgh que Nichael Cramer [4] publicó programas desarrollados en dos lenguajes especialmente diseñados, que incluían la primera declaración de la programación genética moderna "basada en árboles" (es decir, lenguajes procedimentales organizados en estructuras basadas en árboles y operados por operadores de AG adecuadamente definidos). En 1988, John Koza (también estudiante de doctorado de John Holland) patentó su invención de un AG para la evolución de programas. [5] Esto fue seguido por la publicación en la Conferencia Conjunta Internacional sobre Inteligencia Artificial IJCAI-89. [6]

Koza continuó con 205 publicaciones sobre “Programación Genética” (PG), nombre acuñado por David Goldberg, también estudiante de doctorado de John Holland. [7] Sin embargo, es la serie de 4 libros de Koza, que comenzó en 1992 [8] con videos que los acompañaban, [9] lo que realmente estableció la PG. Posteriormente, hubo una enorme expansión del número de publicaciones con la Bibliografía de Programación Genética, superando las 10.000 entradas. [10] En 2010, Koza [11] enumeró 77 resultados donde la Programación Genética era competitiva para los humanos.

En 1996, Koza inició la conferencia anual de programación genética [12] , a la que siguió en 1998 la conferencia anual EuroGP [13] y el primer libro [14] de una serie sobre programación genética editado por Koza. En 1998 también se publicó el primer libro de texto sobre programación genética [15] . La programación genética siguió floreciendo, lo que dio lugar a la primera revista especializada en programación genética [16] y tres años más tarde (2003) Rick Riolo estableció el taller anual sobre teoría y práctica de la programación genética (GPTP). [17] [18] Se siguen publicando artículos sobre programación genética en una diversidad de conferencias y revistas asociadas. Hoy en día hay diecinueve libros sobre programación genética, incluidos varios para estudiantes. [15]

Trabajo fundacional en medicina general

Los primeros trabajos que sentaron las bases para los temas y aplicaciones de investigación actuales en programación genética son diversos e incluyen síntesis y reparación de software, modelado predictivo, minería de datos, [19] modelado financiero, [20] sensores blandos, [21] diseño, [22] y procesamiento de imágenes. [23] Las aplicaciones en algunas áreas, como el diseño, a menudo hacen uso de representaciones intermedias, [24] como la codificación celular de Fred Gruau. [25] La adopción industrial ha sido significativa en varias áreas, incluidas las finanzas, la industria química, la bioinformática [26] [27] y la industria del acero. [28]

Métodos

Representación del programa

Una función representada como una estructura de árbol

GP evoluciona programas de computadora, tradicionalmente representados en memoria como estructuras de árbol . [29] Los árboles pueden evaluarse fácilmente de manera recursiva. Cada nodo interno tiene una función de operador y cada nodo terminal tiene un operando, lo que hace que las expresiones matemáticas sean fáciles de desarrollar y evaluar. Por lo tanto, tradicionalmente GP favorece el uso de lenguajes de programación que incorporan naturalmente estructuras de árbol (por ejemplo, Lisp ; otros lenguajes de programación funcional también son adecuados).

Se han sugerido e implementado con éxito representaciones no arbóreas, como la programación genética lineal que quizás se adapte a los lenguajes imperativos más tradicionales . [30] [31] El software GP comercial Discipulus utiliza la inducción automática de código binario de máquina ("AIM") [32] para lograr un mejor rendimiento. μGP [33] utiliza multigrafos dirigidos para generar programas que explotan completamente la sintaxis de un lenguaje ensamblador dado . La programación de múltiples expresiones utiliza un código de tres direcciones para codificar soluciones. Otras representaciones de programas en las que se han realizado investigaciones y desarrollos importantes incluyen programas para máquinas virtuales basadas en pilas, [34] [35] [36] y secuencias de números enteros que se asignan a lenguajes de programación arbitrarios a través de gramáticas. [37] [38] La programación genética cartesiana es otra forma de GP, que utiliza una representación gráfica en lugar de la representación habitual basada en árboles para codificar programas de computadora.

La mayoría de las representaciones tienen un código estructuralmente no efectivo ( intrones ). Estos genes no codificantes pueden parecer inútiles porque no tienen efecto sobre el rendimiento de ningún individuo. Sin embargo, alteran las probabilidades de generar diferentes descendientes bajo los operadores de variación y, por lo tanto, alteran las propiedades variacionales del individuo . Los experimentos parecen mostrar una convergencia más rápida cuando se utilizan representaciones de programas que permiten estos genes no codificantes, en comparación con las representaciones de programas que no tienen ningún gen no codificante. [39] [40] Las instancias pueden tener árboles con intrones y sin ellos; estos últimos se denominan árboles canónicos. Se introducen operadores de cruce canónico especiales que mantienen la estructura canónica de los padres en sus hijos.

Selección

La selección es un proceso mediante el cual se seleccionan ciertos individuos de la generación actual que servirán como padres para la próxima generación. Los individuos se seleccionan de manera probabilística, de modo que los individuos con mejor desempeño tienen una mayor probabilidad de ser seleccionados. [18] El método de selección más comúnmente utilizado en GP es la selección por torneo , aunque se ha demostrado que otros métodos como la selección proporcional a la aptitud , la selección de lexicase, [41] y otros funcionan mejor para muchos problemas de GP.

El elitismo, que implica sembrar la siguiente generación con el mejor individuo (o los mejores n individuos) de la generación actual, es una técnica que a veces se emplea para evitar la regresión.

Cruce

En la programación genética, se eligen dos individuos aptos de la población para que sean los padres de uno o dos hijos. En la programación genética de árboles, estos padres se representan como árboles de tipo lisp invertido, con sus nodos raíz en la parte superior. En el cruce de subárboles, en cada padre se elige un subárbol al azar. (Resaltado en amarillo en la animación). En el padre donante de raíces (en la animación de la izquierda), el subárbol elegido se elimina y se reemplaza con una copia del subárbol elegido al azar del otro padre, para dar un nuevo árbol hijo.

A veces se utiliza el cruce de dos árboles secundarios, en cuyo caso el subárbol eliminado (en la animación de la izquierda) no se elimina simplemente, sino que se copia en una copia del segundo árbol primario (aquí a la derecha) reemplazando (en la copia) su subárbol elegido aleatoriamente. Por lo tanto, este tipo de cruce de subárboles toma dos árboles adecuados y genera dos árboles secundarios.

Replicación

Algunos individuos seleccionados según criterios de aptitud no participan en el cruce, sino que se copian en la siguiente generación, de forma similar a la reproducción asexual en el mundo natural. Además, pueden estar sujetos a mutaciones.

Mutación

Existen muchos tipos de mutaciones en la programación genética. Comienzan con un padre sintácticamente correcto y tienen como objetivo crear aleatoriamente un hijo sintácticamente correcto. En la animación, se elige aleatoriamente un subárbol (resaltado en amarillo). Se lo elimina y se lo reemplaza por un subárbol generado aleatoriamente.

Otros operadores de mutación seleccionan una hoja (nodo externo) del árbol y la reemplazan por una hoja elegida al azar. Otra mutación consiste en seleccionar al azar una función (nodo interno) y reemplazarla por otra función con la misma aridad (número de entradas). La mutación de elevación elige al azar un subárbol y lo reemplaza por un subárbol dentro de sí mismo. Por lo tanto, se garantiza que la mutación de elevación hará que el hijo sea más pequeño. El reemplazo de la hoja y la función con la misma aridad garantiza que el hijo tenga el mismo tamaño que el padre. Mientras que la mutación de subárbol (en la animación) puede, dependiendo de la función y los conjuntos terminales, tener un sesgo para aumentar o disminuir el tamaño del árbol. Otras mutaciones basadas en subárboles intentan controlar cuidadosamente el tamaño del subárbol de reemplazo y, por lo tanto, el tamaño del árbol hijo.

Animación de la creación de un niño con programación genética mediante la mutación del padre, eliminando el subárbol y reemplazándolo con un código aleatorio

De manera similar, existen muchos tipos de mutación de programación genética lineal, cada uno de los cuales intenta garantizar que el niño mutado siga siendo sintácticamente correcto.

Aplicaciones

GP se ha utilizado con éxito como una herramienta de programación automática , una herramienta de aprendizaje automático y un motor automático de resolución de problemas. [18] GP es especialmente útil en los dominios donde la forma exacta de la solución no se conoce de antemano o una solución aproximada es aceptable (posiblemente porque encontrar la solución exacta es muy difícil). Algunas de las aplicaciones de GP son ajuste de curvas, modelado de datos, regresión simbólica , selección de características , clasificación, etc. John R. Koza menciona 76 casos en los que la programación genética ha podido producir resultados que son competitivos con los resultados producidos por humanos (llamados resultados humanos-competitivos). [42] Desde 2004, la Conferencia anual de Computación Genética y Evolutiva ( GECCO ) realiza la competencia de Premios Humanos Competitivos (llamados Humies), [43] donde se otorgan premios en efectivo a los resultados humanos competitivos producidos por cualquier forma de computación genética y evolutiva. GP ha ganado muchos premios en esta competencia a lo largo de los años.

Programación metagenética

La programación metagenética es la técnica de metaaprendizaje propuesta para desarrollar un sistema de programación genética utilizando la propia programación genética. Sugiere que los cromosomas, el cruce y la mutación fueron ellos mismos evolucionados, por lo tanto, al igual que sus contrapartes de la vida real, se les debería permitir cambiar por sí mismos en lugar de ser determinados por un programador humano. La meta-GP fue propuesta formalmente por Jürgen Schmidhuber en 1987. [44] Eurisko de Doug Lenat es un esfuerzo anterior que puede ser la misma técnica. Es un algoritmo recursivo pero de terminación, lo que le permite evitar la recursión infinita. En el enfoque de "evolución autoconstructiva" para la programación metagenética, los métodos para la producción y variación de la descendencia están codificados dentro de los propios programas en evolución, y los programas se ejecutan para producir nuevos programas que se agregarán a la población. [35] [45]

Los críticos de esta idea suelen decir que este enfoque tiene un alcance demasiado amplio. Sin embargo, podría ser posible restringir el criterio de aptitud a una clase general de resultados y así obtener un GP evolucionado que produciría resultados para subclases de manera más eficiente. Esto podría tomar la forma de un GP metaevolucionado para producir algoritmos de caminata humana que luego se utilizarían para desarrollar algoritmos de carrera, salto, etc. humanos. El criterio de aptitud aplicado al GP meta sería simplemente uno de eficiencia.

Véase también

Referencias

  1. ^ "Maquinaria informática e inteligencia". www.cs.bham.ac.uk . Consultado el 19 de mayo de 2018 .
  2. ^ "BEAGLE: un enfoque darwiniano para el reconocimiento de patrones". www.cs.bham.ac.uk . Consultado el 19 de mayo de 2018 .
  3. ^ Una comunicación personal con Tom Westerdale
  4. ^ "Una representación para la generación adaptativa de programas secuenciales simples". www.cs.bham.ac.uk . Consultado el 19 de mayo de 2018 .
  5. ^ "Algoritmos genéticos no lineales para la resolución de problemas". www.cs.bham.ac.uk . Consultado el 19 de mayo de 2018 .
  6. ^ "Algoritmos genéticos jerárquicos que operan sobre poblaciones de programas informáticos". www.cs.bham.ac.uk . Consultado el 19 de mayo de 2018 .
  7. ^ Goldberg. DE (1983), Operación de gasoductos asistida por computadora utilizando algoritmos genéticos y aprendizaje de reglas. Tesis presentada en la Universidad de Michigan en Ann Arbor, Michigan, en cumplimiento parcial de los requisitos para el doctorado.
  8. ^ "Programación genética: sobre la programación de computadoras por medio de la selección natural". www.cs.bham.ac.uk . Consultado el 19 de mayo de 2018 .
  9. ^ "Programación genética: la película". gpbib.cs.ucl.ac.uk . Archivado desde el original el 2021-12-11 . Consultado el 2021-05-20 .
  10. ^ "Los efectos de la recombinación en la exploración fenotípica y la robustez en la evolución". gpbib.cs.ucl.ac.uk . Consultado el 20 de mayo de 2021 .
  11. ^ "Resultados competitivos entre humanos producidos por programación genética". www.cs.bham.ac.uk . Consultado el 20 de mayo de 2018 .
  12. ^ "Programación genética 1996: Actas de la primera conferencia anual". www.cs.bham.ac.uk . Consultado el 19 de mayo de 2018 .
  13. ^ "Programación genética". www.cs.bham.ac.uk. Consultado el 19 de mayo de 2018 .
  14. ^ "Programación genética y estructuras de datos: programación genética + estructuras de datos = programación automática". www.cs.bham.ac.uk . Consultado el 20 de mayo de 2018 .
  15. ^ ab "Programación genética: una introducción; sobre la evolución automática de los programas informáticos y sus aplicaciones". www.cs.bham.ac.uk . Consultado el 20 de mayo de 2018 .
  16. ^ Banzhaf, Wolfgang (1 de abril de 2000). "Introducción editorial". Programación genética y máquinas evolutivas . 1 (1–2): 5–6. doi :10.1023/A:1010026829303. ISSN  1389-2576.
  17. ^ "Teoría y práctica de la programación genética". www.cs.bham.ac.uk . Consultado el 20 de mayo de 2018 .
  18. ^ abc "Guía de campo para la programación genética". www.gp-field-guide.org.uk . Consultado el 20 de mayo de 2018 .
  19. ^ "Minería de datos y descubrimiento de conocimiento con algoritmos evolutivos". www.cs.bham.ac.uk . Consultado el 20 de mayo de 2018 .
  20. ^ "EDDIE vence a las casas de apuestas". www.cs.bham.ac.uk . Consultado el 20 de mayo de 2018 .
  21. ^ "Aplicación de la inteligencia computacional: cómo crear valor". www.cs.bham.ac.uk . Consultado el 20 de mayo de 2018 .
  22. ^ "Invención de máquinas competitivas entre humanos mediante programación genética". www.cs.bham.ac.uk . Consultado el 20 de mayo de 2018 .
  23. ^ "Descubrimiento de programas de extracción de características de textura de imágenes competitivos con humanos mediante programación genética". www.cs.bham.ac.uk . Consultado el 20 de mayo de 2018 .
  24. ^ "Tres formas de desarrollar diseños: una comparación de embriogenias para un problema de diseño evolutivo". www.cs.bham.ac.uk . Consultado el 20 de mayo de 2018 .
  25. ^ "Codificación celular como gramática de grafos - Publicación de la conferencia IET". IEEE : 17/1–1710. Abril de 1993. Consultado el 20 de mayo de 2018 .
  26. ^ "Descodificación de algoritmos genéticos para la interpretación de espectros infrarrojos en biotecnología analítica". www.cs.bham.ac.uk . Consultado el 20 de mayo de 2018 .
  27. ^ "Programación genética para la extracción de datos de chips de ADN de pacientes con cáncer". www.cs.bham.ac.uk . Consultado el 20 de mayo de 2018 .
  28. ^ "Programación genética y modelado de pruebas Jominy". www.cs.bham.ac.uk . Consultado el 20 de mayo de 2018 .
  29. ^ Nichael L. Cramer "Una representación para la generación adaptativa de programas secuenciales simples" Archivado el 4 de diciembre de 2005 en Wayback Machine .
  30. ^ Programación genética: introducción, Wolfgang Banzhaf, Peter Nordin, Robert E. Keller, Frank D. Francone, Morgan Kaufmann, 1999. ISBN 978-1558605107
  31. ^ Garnett Wilson y Wolfgang Banzhaf. "Una comparación entre la programación genética cartesiana y la programación genética lineal"
  32. ^ ( Peter Nordin , 1997, Banzhaf et al., 1998, Sección 11.6.2-11.6.3)
  33. ^ Giovanni Squillero. "μGP (MicroGP)".
  34. ^ "Programación genética basada en pila". gpbib.cs.ucl.ac.uk . Consultado el 20 de mayo de 2021 .
  35. ^ ab Spector, Lee; Robinson, Alan (1 de marzo de 2002). "Programación genética y evolución autoconstructiva con el lenguaje de programación Push". Programación genética y máquinas evolutivas . 3 (1): 7–40. doi :10.1023/A:1014538503543. ISSN  1389-2576. S2CID  5584377.
  36. ^ Spector, Lee; Klein, Jon; Keijzer, Maarten (25 de junio de 2005). "La pila de ejecución Push3 y la evolución del control". Actas de la 7.ª conferencia anual sobre computación genética y evolutiva . ACM. págs. 1689–1696. CiteSeerX 10.1.1.153.384 . doi :10.1145/1068009.1068292. ISBN .  978-1595930101.S2CID 11954638  .
  37. ^ Ryan, Conor; Collins, JJ; Neill, Michael O (1998). Apuntes de clase sobre informática . Berlín, Heidelberg: Springer Berlin Heidelberg. pp. 83–96. CiteSeerX 10.1.1.38.7697 . doi :10.1007/bfb0055930. ISBN .  9783540643609.
  38. ^ O'Neill, M.; Ryan, C. (2001). "Evolución gramatical". IEEE Transactions on Evolutionary Computation . 5 (4): 349–358. doi :10.1109/4235.942529. ISSN  1089-778X. S2CID  10391383.
  39. ^ Julian F. Miller. "Programación genética cartesiana" Archivado el 24 de septiembre de 2015 en Wayback Machine . pág. 19.
  40. ^ Janet Clegg; James Alfred Walker; Julian Francis Miller. Una nueva técnica de cruce para la programación genética cartesiana". 2007.
  41. ^ Spector, Lee (2012). "Evaluación de la modalidad del problema mediante el desempeño diferencial de la selección de lexicasas en la programación genética". Actas de la 14.ª conferencia anual sobre computación genética y evolutiva. Gecco '12. ACM. págs. 401–408. doi :10.1145/2330784.2330846. ISBN . 9781450311786. Número de identificación del sujeto  3258264.
  42. ^ Koza, John R (2010). "Resultados competitivos entre humanos producidos por programación genética". Programación genética y máquinas evolutivas . 11 (3–4): 251–284. doi : 10.1007/s10710-010-9112-3 .
  43. ^ "Humies = Premios Humanos-Competitivos".
  44. ^ "TESIS DE 1987 SOBRE APRENDER A APRENDER, METALAPRENDIZAJE, PROGRAMACIÓN METAGENÉTICA, ECONOMÍA DEL APRENDIZAJE AUTOMÁTICO CONSERVADORA DE CRÉDITOS".
  45. ^ GECCO '16 Companion: actas de la Conferencia de Computación Genética y Evolutiva de 2016: 20-24 de julio de 2016, Denver, Colorado, EE. UU . Neumann, Frank (informático), Association for Computing Machinery. SIGEVO. Nueva York, Nueva York. 20 de julio de 2016. ISBN 9781450343237.OCLC 987011786  .{{cite book}}: CS1 maint: location missing publisher (link) CS1 maint: others (link)

Enlaces externos