Qual idioma usar para programação genética


15

Como parte de uma tarefa, terei que escrever um algoritmo de programação genética que preveja os níveis de poluentes atmosféricos. Como não tenho experiência, alguém pode me indicar sugestões de linguagens de programação nas quais os programas desenvolvidos serão escritos .

Esclarecimento: não estou perguntando qual será a linguagem. Escreverei o próprio algoritmo genético (como poderei tomar a decisão pessoalmente); estou perguntando em qual linguagem de programação os programas desenvolvidos devem ser criados.

Meu instrutor sugeriu o Lisp, mas eu não gosto dessa idéia - primeiro eu teria que trabalhar em algum tipo de Árvore Sintaxe Abstrata; em segundo lugar, fazer cruzamentos confiáveis ​​na estrutura da árvore pode ser uma bagunça.

Eu prefiro usar algo que é dedicado para programação genética como barra / A . O SlashA não requer trabalho em ASTs - os programas no bytecode são apenas uma matriz de entradas que podem ser alteradas em qualquer faseamento necessário, pois cada matriz int representa algum programa slash / A.

Observações adicionais:

  • Eu gostaria de evitar manipular ASTs!
  • Esse problema é difícil (talvez não tão difícil quanto prever valores de estoque). Isso se deve ao fato de que (provavelmente) não temos informações de entrada suficientes (existem alguns parâmetros ocultos). Criar um modelo com melhor desempenho que o modelo que retorna média é um desafio (os modelos médios têm 35% de MAPE), a maioria dos modelos tem MAPE de cerca de 25% e os melhores têm 20%.
  • Eu gostaria de ter uma linguagem que gerencia conjuntos de dados com muitos recursos, supondo que eu não tenho certeza do que é importante. (O Slash / A tem uma desvantagem aqui --- nesse idioma, os recursos de entrada são lidos sequencialmente - portanto, alguns recursos serão usados ​​com maior probabilidade).
  • Eu gostaria de poder programar isso em Python, portanto, as bibliotecas python seriam ótimas - mas eu posso fazer ligações para C / C ++ (sem Java, sem Matlab, etc.).

Estou ciente de que se trata de uma pergunta de pesquisa, portanto, se for cedo demais para essa pergunta, feche-a, mas acho que é específica o suficiente.

Respostas:


14

Seu problema de poluente provavelmente não precisa de muito idioma. Parece uma regressão simbólica em vez de um problema de controle; nesse caso, você pode simplesmente usar o GP em árvore padrão, com recursos e algumas constantes úteis como o conjunto de terminais e operadores relevantes no conjunto de funções. O sistema GP eliminará recursos irrelevantes e existem técnicas para lidar com conjuntos de dados muito grandes. Geralmente, especifique o menor conjunto de funções estimado para resolver o problema e expanda-o com cuidado, se necessário.

Você precisará escolher entre o GP em árvore e o linear desde o início. Lisp é uma árvore, Slash / A é linear. Leia os dois para entender os prós e os contras, mas pelo que você escreveu, eu sugeriria um sistema simples de árvore em GP. Não é muito difícil escrever o seu próprio, mas existem implementações Python existentes. Estes abaixo são para algoritmos evolutivos em Python em geral, mas nem todos o GP e alguns são inativos:

  1. PyGressionGP (GP para regressão simbólica em Python) - http://code.google.com/p/pygressiongp/
  2. PyGene - https://github.com/blaa/PyGene
  3. Uma programação genética simples em Python - http://zhanggw.wordpress.com/2009/11/08/a-simple-genetic-programming-in-python-4/
  4. Pyevolve - https://github.com/perone/Pyevolve - também consulte o blog - http://blog.christianperone.com - e esta publicação - http://blog.christianperone.com/?p= 549
  5. esec (computação evolutiva em Python) - http://code.google.com/p/esec/
  6. Peach - http://code.google.com/p/peach/
  7. PyBrain (faz muito, não apenas NN) - http://pybrain.org/
  8. dione - http://dione.sourceforge.net/
  9. PyGEP (Programação de expressão genética) - http://code.google.com/p/pygep/
  10. deap (algoritmos evolutivos distribuídos) - http://code.google.com/p/deap/

Além disso, veja o livro introdutório (gratuito) sobre GP dos conhecidos autores de GP Poli, Langdon e McPhee:

Um Guia de Campo para Programação Genética - http://www.gp-field-guide.org.uk/


Você tem alguma referência a prós e contras do GP do linar e da árvore?
jb.

Vi algumas comparações, mas não tenho nenhuma referência concreta. Você poderia ver o que Banzhaf e Brameier publicaram nos anos 2000 - eles fizeram bastante trabalho sobre GP linear e publicaram um livro sobre LGP em 2007, eu acho.
Graham Jones

Hum ... por que essas pessoas não se unem?
vonPetrushev 19/02/12

Não sei bem o que você quer dizer - por que as pessoas de árvore e GP lineares não se unem? Não há divisão religiosa, são apenas sabores diferentes da mesma idéia (e existem outros também, como Gene Expression Progamming (GEP) - gene-expression-programming.com ).
Graham Jones

11
Eu não estou dizendo que o GP da árvore é mau ou sth. Eu só queria rolar minha própria implementação, e linear é muito mais fácil. Eu tive o protótipo do Python trabalhando em 4 horas a partir do zero.
jb.

4

Se você pretende desenvolver um programa, provavelmente manipulará uma árvore de sintaxe de qualquer maneira; dessa forma, qualquer programa que você desenvolver será automaticamente sintaticamente correto.

Há duas coisas que você deve ter em mente ao selecionar um idioma.

  1. Evite construções de baixo nível que possam causar falha no programa evoluído em alguns dados. Por exemplo, ponteiro aritmético. Se você usar C ou C ++ como idioma para seus programas evoluídos, poderá restringi-lo a uma versão sem aritmética de ponteiro.
    Eu votaria contra a linguagem assembly por razões semelhantes, embora máquinas virtuais como a JVM e o CLR devam fornecer uma espécie de rede de segurança.
  2. Adequado para grandes conjuntos de dados; se eu entender sua atribuição corretamente, os próprios programas de saída terão que manipular grandes conjuntos de dados.

Você provavelmente desejará usar um idioma de destino com o qual você já esteja familiarizado. Eu não estou familiarizado com o Python, mas o AFAIK atende aos critérios acima, portanto deve ser uma boa opção para o seu idioma de destino.


11
Veja github.com/arturadib/slash-a --- neste idioma você não tem manipulação do AST! O programa é representado como uma matriz de bytecode e, como toda matriz é um programa correto, você pode usar as operações genéticas que desejar.
jb.
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.