Qué lenguaje usar para la programación genética


15

Como parte de una tarea, tendré que escribir un algoritmo de programación genética que haga predicciones de los niveles de contaminantes atmosféricos. Como no tengo experiencia, ¿alguien puede señalarme sugerencias sobre lenguajes de programación en los que se escribirán programas evolucionados ?

Aclaración: no estoy preguntando cuál será el lenguaje, escribiré el algoritmo genético en sí mismo (ya que podré tomar la decisión yo mismo), estoy preguntando en qué lenguaje de programación deberían crearse los programas desarrollados.

Mi instructor me sugirió Lisp, pero no me gusta esta idea, primero tendría que trabajar en algún tipo de Árbol de sintaxis abstracta, en segundo lugar, hacer cruces de manera confiable en la estructura de un árbol puede ser un desastre.

Yo prefiero usar algo que se dedica a la programación genética como la barra / A . SlashA no requiere trabajar en AST --- los programas en bytecode son solo una matriz de entradas que se pueden cambiar en cualquier momento necesario ya que cada matriz int representa algún programa de barra / A.

Observaciones adicionales:

  • ¡Me gustaría evitar manipular los AST!
  • Este problema es difícil (quizás no tan difícil como predecir los valores de las acciones). Esto se debe al hecho de que (muy probablemente) no tenemos suficiente información de entrada (hay algunos parámetros ocultos). Crear un modelo que tenga un mejor rendimiento que el modelo que devuelve la media es un desafío (los modelos promedio tienen un 35% de MAPE), la mayoría de los modelos tienen un MAPE de aproximadamente el 25%, mejor tienen un 20%.
  • Me gustaría tener un lenguaje que administre conjuntos de datos con muchas características suponiendo que no estoy seguro de cuáles son importantes. (Slash / A tiene una desventaja aquí --- en este idioma, las características de entrada se leen secuencialmente, por lo que algunas características se usarán con mayor probabilidad).
  • Me gustaría poder programar esto en Python, por lo que las bibliotecas de Python serían geniales, pero puedo hacer enlaces para C / C ++ (sin Java, sin Matlab, etc.).

Soy consciente de que esta es una pregunta de la encuesta, así que si es demasiado pronto para esa pregunta, ciérrela, pero creo que es lo suficientemente específica.

Respuestas:


14

Su problema de contaminantes probablemente no necesita mucho lenguaje. Parece una regresión simbólica en lugar de un problema de control, en cuyo caso podría usar el árbol de GP estándar, con características y algunas constantes útiles como el conjunto de terminales y los operadores relevantes en el conjunto de funciones. El sistema GP eliminará características irrelevantes y existen técnicas para manejar conjuntos de datos muy grandes. En general, especifique el conjunto de funciones más pequeño que estima que podría resolver el problema y amplíelo con cuidado si es necesario.

Tendrás que elegir entre árbol y GP lineal desde el principio. Lisp es árbol, Slash / A es lineal. Lea sobre ambos para comprender los pros y los contras, pero por lo que escribió sugeriría un simple sistema de árbol GP. No es demasiado difícil escribir uno propio, pero existen implementaciones de Python existentes. Estos a continuación son para algoritmos evolutivos en Python en general, pero no todos son GP y algunos están inactivos:

  1. PyGressionGP (GP para regresión simbólica en Python) - http://code.google.com/p/pygressiongp/
  2. PyGene - https://github.com/blaa/PyGene
  3. Una programación genética simple en Python - http://zhanggw.wordpress.com/2009/11/08/a-simple-genetic-programming-in-python-4/
  4. Pyevolve - https://github.com/perone/Pyevolve - también vea el blog - http://blog.christianperone.com - y esta publicación - http://blog.christianperone.com/?p= 549
  5. esec (Computación evolutiva en Python) - http://code.google.com/p/esec/
  6. Melocotón - http://code.google.com/p/peach/
  7. PyBrain (hace mucho, no solo NN) - http://pybrain.org/
  8. dione - http://dione.sourceforge.net/
  9. PyGEP (Programación de expresión genética): http://code.google.com/p/pygep/
  10. deap (Algoritmos evolutivos distribuidos): http://code.google.com/p/deap/

Además, vea el libro introductorio (gratuito) sobre GP de los conocidos autores de GP Poli, Langdon y McPhee:

Una guía de campo para la programación genética: http://www.gp-field-guide.org.uk/


¿Tiene alguna referencia a las ventajas y desventajas de linar y tree GP?
jb.

He visto algunas comparaciones pero no tengo referencias concretas. Podrías ver lo que Banzhaf y Brameier publicaron en la década de 2000: creo que hicieron bastante trabajo en GP lineal y publicaron un libro sobre LGP en 2007.
Graham Jones

Hm ... ¿por qué estas personas no se unen?
vonPetrushev

No estoy seguro de lo que quieres decir: ¿por qué no se unen las personas de GP de árbol y lineales? No hay división religiosa, son solo diferentes sabores de la misma idea (y también hay otros, como la Programación de Expresión Genética (GEP) - gene-expression-programming.com ).
Graham Jones

1
No estoy diciendo que el árbol GP sea malo o algo. Solo quería rodar mi propia implementación, y lineal es mucho más fácil. Trabajé en el prototipo de Python en aproximadamente 4 horas desde cero.
jb.

4

Si va a desarrollar un programa, es probable que manipule un árbol de sintaxis de todos modos; de esa manera, cualquier programa que desarrolle será automáticamente sintácticamente correcto.

Hay dos cosas que debe tener en cuenta al seleccionar un idioma.

  1. Evite construcciones de bajo nivel que puedan hacer que el programa evolucionado se bloquee en algunos datos. Por ejemplo, puntero aritmético. Si va a utilizar C o C ++ como lenguaje para sus programas evolucionados, puede restringirlo a una versión sin aritmética de puntero.
    Votaría en contra del lenguaje ensamblador por razones similares, aunque las máquinas virtuales como JVM y CLR deberían proporcionarle una especie de red de seguridad.
  2. Adecuado para grandes conjuntos de datos; Si entiendo su asignación correctamente, los programas de salida tendrán que manipular grandes conjuntos de datos.

Probablemente desee utilizar un idioma de destino con el que ya esté familiarizado. No estoy familiarizado con Python, pero AFAIK cumple con los criterios anteriores, por lo que debería ser una buena opción para su idioma de destino.


1
Vea github.com/arturadib/slash-a --- ¡en este idioma no tiene manipulación AST! El programa se representa como una matriz de bytecode y, dado que cada matriz es un programa correcto, puede utilizar las operaciones genéticas que desee.
jb.
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.