¿Qué está frenando la programación genética?


He hecho una buena cantidad de trabajo con algoritmos genéticos con bastante éxito y hasta ahora ignoré la programación genética. Por lo que sé, la mayoría de los programas siguen siendo escritos por programadores, y tengo curiosidad por saber qué está frenando la programación genética.

Algunas explicaciones posibles que pensé son:

  1. El espacio de búsqueda es demasiado grande para encontrar programas útiles entre el ruido
  2. La mayoría de las aplicaciones reales no pueden proporcionar datos suficientes para permitir la evaluación de la aptitud de qué espacio.
  3. Es difícil reducir la eficacia de muchas aplicaciones reales a una sola medida de aptitud. En otras palabras, escribir una función de aptitud adecuada probablemente implicaría la misma cantidad de trabajo que escribir el programa real.

¿Alguna idea?

Author: Dan Dyer, 2010-12-07

14 answers

Esto es algo que he estado considerando en mi propia investigación, y diría que hay muchas razones:

  1. La gran mayoría de la investigación en el campo de GP se ha centrado en la producción de fórmulas en lugar del tipo de software que se produce por la mayoría de los programadores. Hay muchos científicos informáticos en el campo, pero muy pocos están enfocados en producir el tipo de programas que uno esperaría, por lo que los avances han sido lentos en esa área.

  2. Hay un significativo sobre énfasis en el uso de LISP porque puede producir estructuras de árboles agradables que son fáciles de manipular y desafortunadamente los programas imperativos han sido descuidados porque implican resolver algunos problemas difíciles. Para que GP sea tomado en serio por los programadores tiene que producir programas imperativos.

  3. Los programas reales contienen construcciones de bucle, pero los bucles son difíciles de implementar en GP sin todo tipo de restricciones feas para evitar el bucle infinito.

  4. Genética La programación no escala bien. Está bien para problemas pequeños, con un pequeño idioma disponible, pero como dices en tu primer punto, el espacio de búsqueda se vuelve demasiado grande muy rápidamente.

  5. En comparación con un programador humano, GP puede ser muy lento. Sin embargo, es muy paralelizable, por lo que es probable que se beneficie sustancialmente a medida que un mayor número de núcleos de procesador se convierta en la norma.

Otra respuesta válida sería que es difícil confiar en que el código ha sido automáticamente generar. Esto es cierto, pero en la práctica dudo que esto tenga mucho impacto porque GP no es capaz de producir el tipo correcto de programas en primer lugar.

 38
Author: Tom Castle,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-12-07 21:17:39

La parte difícil de la programación genética es escribir una buena función de puntuación:

  • La función de puntuación debe juzgar correctamente si el algoritmo tiene las propiedades deseadas. Esto es más difícil de lo que parece much mucho más difícil que escribir una suite de prueba. El algoritmo puede adaptarse a cualquier peculiaridad de su función de puntuación y optimizarla. Tratando de evolucionar strcmp? En su lugar, su algoritmo puede descubrir un patrón matemático para las longitudes de su prueba de aprobado / reprobado caso.

  • La función de puntuación debe ser capaz de juzgar si el algoritmo bajo prueba está funcionando parcialmente. La programación genética se basa en la"escalada de colinas". Una pequeña mutación beneficiosa necesita causar una pequeña mejora incremental en la puntuación. Si su función de puntuación solo puede producir verdadero/falso, entonces está buscando aleatoriamente, no genéticamente.

Si lo intentas descubrirás que la programación genética es lo último en pensamiento lateral: Tu el programa tenderá a resolver el problema de todas las maneras que no se le ocurrió, la mayoría de ellos inesperados y (para aplicaciones serias) probablemente inútiles. Un caso famoso involucró un intento de desarrollar un oscilador utilizando componentes electrónicos básicos. Se juzgó en la simplicidad del circuito y si la salida oscilaba. Produjo algo tan simple que los investigadores estaban seguros de que no podía funcionar, pero lo hizo: estaba captando y amplificando las ondas de radio del entorno.

Editar para citar:

[1] Graham-Rowe, Duncan. "La radio emerge de la sopa electrónica."New Scientist, vol.175, no. 2358, p. 19 (31 de agosto de 2002). Disponible en línea en http://www.newscientist.com/news/news.jsp?id=ns99992732

Sin embargo, el enlace ahora parece estar roto.

El nuevo enlace es http://www.newscientist.com/article/dn2732-radio-emerges-from-the-electronic-soup.html

 25
Author: Ben Jackson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-02-09 02:36:19

Sé que llego tarde a esta fiesta, pero me gustaría hacer un par de puntos. Tuve la increíble suerte de trabajar con John Koza en su libro Genetic Programming 4.

El tipo de programación que la mayoría de nosotros hacemos día a día - conectar eventos GUI, empujar píxeles, bases de datos, etc etc son sin duda no el tipo de programas que GP pretende construir.

Lo que John Koza hace con su grupo de alrededor de un centenar de máquinas(si no recuerdo mal!) es buscar soluciones a problemas interesantes (piense NP-duro). Es triste, pero la mayoría de los problemas en los que los programadores trabajamos día a día no son problemas muy interesantes o difíciles, en su mayoría solo irritantes y consumen mucho tiempo.

Lo que Ben Jackson dijo sobre un oscilador electrónico genéticamente modificado es lo más parecido en este hilo a lo que el Dr. Koza y el equipo hacen en realidad. Había muchos ejemplos de circuitos en la serie de libros GP.

Lo que Tom Castle dijo aquí sobre los programas imperativos no es exactamente cierto. El ejemplo seminal de esto de John and company es la ejecución de diseño de antena. Es más o menos un programa de dibujo 3d con comandos como el lenguaje de dibujo del LOGOTIPO que diseña una antena. Tiene comandos de tipo moveto, lineto para empujar y hacer estallar matrices en una pila. El paquete GP que acabo de ver la semana pasada, jgap, tiene soporte directo: un contenedor tipo nterminal que puede contener sentencias void return y luego tiene una sentencia return al final. Creo que incluso tiene algo como variables locales aunque no miré muy de cerca.

El diseño original de LISP que se ejecuta en los primeros GP es una especie de dolor de vez en cuando, eso es ciertamente cierto. Es algo así como un rito de paso Creo que estar molesto por traducir la salida de una carrera de GP en código más utilizable.

TL;DR: GP no es realmente un sistema de programación automática. Es un sistema automatizadode invención .

 8
Author: fletch,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-01-29 08:51:46

Yo diría 1. y 3.

En particular, con respecto al punto 3, diría que en la mayoría de los casos es incluso más fácil escribir el programa real que llegar a una función de destino adecuada y verificar que esto conduce a la solución correcta o aceptable (¿cómo sabe que un algoritmo derivado de la programación genética funciona como se espera ?)

Respecto al punto 1, diría que el espacio de búsqueda tiene un número infinito de dimensiones.

 5
Author: Andre Holzner,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-12-07 19:45:30

Tres cosas:

  1. Como dice Andre, es muy difícil escribir una función de aptitud que sea suficiente. Esta es la versión definitiva del Desarrollo impulsado por Pruebas. Tendría que escribir pruebas unitarias que proporcionen una cobertura del 100% de un programa aún no escrito. Incluso entonces, es poco probable que la cobertura del 100% por sí sola sea suficiente. Cuando hemos resuelto el problema de especificar formalmente el comportamiento preciso de todos los aspectos de un sistema complejo, y luego verificar que un programa dado satisface esa especificación, entonces podríamos tener una oportunidad.
  2. La programación genética no es determinista y es más adecuada para generar soluciones aproximadas en lugar de soluciones exactas.
  3. La programación genética, cuando se aplica a cualquier problema de complejidad razonable, es fenomenalmente costosa computacionalmente. En 1999, Genetic Programming Inc estaba utilizando un clúster de 1.000 nodos para su trabajo en el campo.
 4
Author: Dan Dyer,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:17:08

GP no puede resolver rápidamente nuevos problemas que están más allá del conocimiento de la persona que crea la función de fitness. Por lo tanto, solo se puede utilizar actualmente para resolver problemas que ya sabemos resolver, pero no son ideales para resolver completamente, debido al espacio de búsqueda. Como el Vendedor Ambulante. Que se puede resolver más rápidamente con un GA.

La razón es en realidad bastante simple. Para resolver problemas novedosos, las herramientas que le dé al GP deben ser lo suficientemente simples, o lo suficientemente completas, para que el GP busque el espacio se convierte en un verdadero análogo a la genética real.

La programación genética, como la genética real, está sujeta al mismo patrón de crecimiento que todos los sistemas de crecimiento de plataformas. Lo que significa que un GP progresará hasta un punto en el que las utilidades principales incluidas golpean una plataforma, se nivela y luego tarda mucho tiempo antes de que tropiece con un nuevo paradigma para construir una nueva plataforma.

Este video pro-evolution ilustra el crecimiento de la plataforma patrón. http://www.youtube.com/watch?v=mcAq9bmCeR0 Se necesita mucho tiempo para desarrollar una nueva mano, y una vez que lo hace, una mano adicional se convierte en la cosa nueva y rápidamente avanza a un ejemplo óptimo de más manos. (Debo mencionar que este video es más probable que use una GA, no GP, pero la genética es genética)

Se trata de la misma lógica que entra en la Teoría de la Singularidad, por cierto.

Pero lo que esto significa para GP es que prácticamente solo es bueno para la investigación, no para la aplicación práctica dentro de un programa. Con algunas excepciones simples donde los requisitos son un poco más profundos de lo que una GA puede resolver. Como algunos programas scheduler. Donde el espacio de búsqueda de programación es bastante pequeño, y donde las herramientas necesarias para resolverlo se entienden bien, y donde puede haber una función de aptitud bien definida.

 4
Author: DampeS8N,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-12-08 12:36:26

Es simplemente porque se ha demostrado que es teóricamente imposible (al menos para los programas correctos).

Supongamos que tiene una potencia de cálculo infinita descartando el tamaño del espacio de búsqueda y los problemas de lentitud y otras cosas de 'velocidad'. Ahora sólo te enfrentas a dos problemas : - ¿Se detendrá el programa generado ? - ¿ Cómo estar seguro de que el programa generado se comporta de la manera que yo quiero ?

El primer problema es una cuestión central en la teoría de la computabilidad y se llama la detención problema . Turing demostró en 1936 que este problema es indecidible para todos los pares programa-entrada. Esto significa que es posible en algunos casos, pero no para todos. No hay un proceso automatizado que pueda determinar si un programa se detiene o no. Así que para esto, no se puede hacer mucho;)

El segundo problema se refería a la corrección del programa. En la programación genética, la validación se realiza generalmente a través de valores de ejemplo que no constituyen en absoluto ninguna prueba de corrección. Esto es comparable a la unidad pruebas, da ok para una serie de ejemplos, pero no ninguna prueba general. Por ejemplo, si escribo un comprobador de números primos, lo pruebo solo con 3 5 7 y 11, entonces un programa que devuelve true para cada número impar pasaría la prueba.

Ir un paso más allá sería utilizar pruebas automatizadas. La prueba automatizada de corrección para algoritmos está de hecho profundamente relacionada con la demostración automática de teoremas matemáticos. Describes tu programa usando un sistema axiomatizado e intentas probar automáticamente el corrección de su declaración. Aquí de nuevo se enfrentan a fuertes barreras teóricas, que son los teoremas de incompletitud de Gödel. Estos teoremas establecen entre otras cosas que incluso para sistemas axiomatizados muy simples, capaces de realizar aritmética sobre números naturales, no hay ningún algoritmo (llamado procedimiento efectivo) capaz de probar todos los teoremas con respecto a estos números naturales. Concretamente, esto significa que incluso para programas simples, no podrá probar su corrección.

Incluso sin una corrección probada, el uso de casos de prueba de muestra para validar el programa genético es muy propenso a la sobreespecialización, el fenómeno conocido como sobreajuste en el aprendizaje automático. Es decir, el programa aprendido hará bien en los casos de prueba proporcionados, pero puede ir totalmente balístico para algunas otras entradas.

 3
Author: Julien,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-11-17 12:51:00

Tal vez que la mayoría de los programadores son programadores, y no científicos de la computación?

La programación genética requiere una inteligencia seria. Usted necesita ser capaz de romper el problema de manera adecuada, y necesita un problema apropiado para empezar. Y necesitas saber lo suficiente para saber que los algoritmos genéticos son una opción. Y el problema necesita no tener ya una solución bien conocida.

No todo necesita un algoritmo sofisticado. De todo el código que está escrito en el mundo, aplicaciones web 'estándar', OSs, programación de dispositivos, ¿realmente necesitan algoritmos genéticos?

Y cuando se trata de ello, la mayor parte del esfuerzo de programación se dedica a resolver problemas simples donde no se necesita un enfoque complicado.

 2
Author: hvgotcodes,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-12-07 19:25:55

Creo que una gran parte de la razón es la gestión de riesgos. Tengan paciencia: cuando un programador se sienta a escribir un programa, tiene al menos alguna idea de cuánto tiempo tomará y de lo que puede hacer.

Cuando en cambio un programador se sienta a escribir un programa que generará un programa (usando programación genética), la incertidumbre se dispara por el techo: no está claro cuánto tiempo tomará el proceso, y no está claro qué tan bueno puede ser el programa final.

También Hay incertidumbre en otros lugares: ¿qué tan fácil será ajustar el programa más tarde, o corregir errores? El código generado puede ser casi imposible de depurar.

 2
Author: redtuna,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-12-07 19:29:52

La sopa primordial es sospechosa y poco apetecible. Para mi código de producción prefiero el Diseño Inteligente.

 1
Author: Josephine,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-12-08 19:47:52

Mi punto de vista personal después de un par de años en la investigación de GP en la universidad y siguiendo el campo después: GP falla a escala.

Los problemas simples representados por funciones simples de fitness GP pueden resolver todos los derechos. Pero como se mencionó antes, formular una función de acondicionamiento físico que describa la tarea de evolucionar strcmp o una calculadora o incluso un simple editor de texto es casi imposible utilizando enfoques clásicos.

Me gusta la noción de que la función GP fitness es TDD en perfección, sin embargo :-) Tal vez alguna mente brillante llegará con una mejor manera de dirigir la evolución simulada algún día, pero eso todavía tiene que suceder..

Tengo algunas esperanzas para GP en el área de funciones implícitas de fitness donde actualmente estoy haciendo algo de 'investigación privada'. ¡Veremos hasta dónde llega!

Saludos, Jay

 1
Author: Jay,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-12-11 12:23:11

Hay algunos proyectos que abordan los problemas mencionados anteriormente en GP. Un ejemplo sería el MOISÉS opencog

 1
Author: Misgevolution,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-08-07 12:36:39

Hoy en día la programación está definiendo la especificación fina de una manera legible por máquina. Le dices al programa qué es exactamente lo que quieres que haga y cómo debería ser el resultado. Ya no es mucho más. Eso significa que si desea generar el resultado, por ejemplo, mediante programación genética, todavía tiene que hacer esta especificación fina legible por máquina en forma de una función de aptitud. Esto conduciría a por lo menos la misma pero probablemente mayor cantidad de trabajo. Así que es el campo equivocado para la genética programación que está hecha para problemas con una especificación fácil de definir pero difícil de alcanzar.

Editar: ahora se podría decir que en la mayoría de los proyectos esta especificación fina se hace de todos modos en forma de pruebas. yo diría que para un enfoque de programación genética las pruebas son una forma de imprecisión para especificar sus necesidades. Se basan en ejemplos y no como la programación basada en un lenguaje de especificación formal. La programación genética probablemente produciría resultados que se adapten a los casos de prueba y se comporten mal en situaciones reales con nuevos inputs. Así que para obtener un nivel de especificación con pruebas que es tan exacto como una especificación con un lenguaje de programación que se necesita una gran cantidad de casos de prueba para cada eventualidad. Así que finalmente terminarías haciendo mucho más trabajo que programar esas cosas.

 0
Author: tObi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-03-11 11:05:20

GP y GA, o en general los Algoritmos Evolutivos son más como pasatiempos. No se utilizan para aplicaciones de la vida real, salvo excepciones. La razón es que estos algoritmos se basan en la aleatoriedad. No hay certeza de obtener una buena respuesta.

Además, esta área está inundada de trabajo de investigación por debajo del par, porque es fácil de entender e implementar en comparación con otras técnicas matemáticamente intensas. Así que los estudiantes sólo encuentran un objetivo para optimizar en alguna ingeniería o aplicación de la ciencia y usted tiene un nuevo trabajo-para ser publicado.

Simplemente compare los patrocinadores de sus conferencias con los de otras conferencias de AI/ML/Optimización. Quedará claro su importancia "actual" en la industria.

Pero es un área de investigación, y depende de nosotros hacer que funcione. En la actualidad es solo un hobby!

 0
Author: kosmos,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-11-17 11:33:05