Quale linguaggio usare per la programmazione genetica


15

Come parte di un incarico dovrò scrivere un algoritmo di programmazione genetica che prevede la previsione dei livelli di inquinanti atmosferici. Dal momento che non ho esperienza, qualcuno può indicarmi suggerimenti su linguaggi di programmazione in cui verranno scritti programmi evoluti .

Chiarimento: non sto chiedendo quale sarà il linguaggio che scriverò l'algoritmo genetico stesso (dato che sarò in grado di prendere la decisione da solo), sto chiedendo in quale linguaggio di programmazione dovrebbero essere creati i programmi evoluti.

Il mio istruttore ha suggerito Lisp, ma questa idea non mi piace --- prima dovrei lavorare su una specie di albero di sintassi astratto, in secondo luogo fare crossover sulla struttura ad albero può essere un casino.

Preferisco utilizzare qualcosa che è dedicato per la programmazione genetica come slash / A . SlashA non richiede di lavorare su AST --- i programmi in bytecode sono solo una matrice di ints che possono essere cambiati in qualsiasi fasion necessaria poiché ogni matrice int rappresenta un programma slash / A.

Note aggiuntive:

  • Vorrei evitare di manipolare le AST!
  • Questo problema è difficile (forse non tanto quanto la previsione dei valori di borsa). Ciò è dovuto al fatto che (molto probabilmente) non abbiamo abbastanza informazioni di input (ci sono alcuni parametri nascosti). La creazione di un modello con prestazioni migliori rispetto a quella che restituisce media rappresenta una sfida (i modelli medi hanno MAPE del 35%), la maggior parte dei modelli ha MAPE di circa il 25%, la maggior parte di essi ha il 20%.
  • Mi piacerebbe avere un linguaggio che gestisca i set di dati con molte funzionalità supponendo che non sono sicuro di quali siano importanti. (La barra / A ha uno svantaggio qui --- in questa lingua le funzioni di input vengono lette in sequenza --- quindi alcune funzionalità verranno utilizzate con maggiore probabilità).
  • Mi piacerebbe essere in grado di programmare questo in Python, quindi le librerie python sarebbero fantastiche --- ma posso fare i collegamenti per C / C ++ (no Java, no Matlab, ecc.).

Sono consapevole che questa è una domanda del sondaggio, quindi se è troppo presto per tale domanda, per favore chiudila, ma ritengo che sia abbastanza specifica.

Risposte:


14

Il tuo problema di inquinanti probabilmente non ha bisogno di molte lingue. Sembra una regressione simbolica piuttosto che un problema di controllo, nel qual caso potresti semplicemente usare GP ad albero standard, con caratteristiche e alcune costanti utili come set di terminali e operatori rilevanti nel set di funzioni. Il sistema GP eliminerà le funzionalità irrilevanti e ci sono tecniche per gestire set di dati molto grandi. In genere, specificare il set di funzioni più piccolo che si stima possa risolvere il problema ed espanderlo con cura se necessario.

Dovrai scegliere tra albero e GP lineare all'inizio. Lisp è albero, Slash / A è lineare. Leggi su entrambi per capire i pro ei contro, ma da quello che hai scritto suggerirei un semplice sistema GP ad albero. Non è troppo difficile scrivere il tuo, ma ci sono implementazioni Python esistenti. Questi qui sotto sono per algoritmi evolutivi in ​​Python in generale, ma non tutti fanno GP e alcuni sono inattivi:

  1. PyGressionGP (GP per regressione simbolica in Python) - http://code.google.com/p/pygressiongp/
  2. PyGene - https://github.com/blaa/PyGene
  3. Una semplice programmazione genetica in Python - http://zhanggw.wordpress.com/2009/11/08/a-simple-genetic-programming-in-python-4/
  4. Pyevolve - https://github.com/perone/Pyevolve - vedi anche blog - http://blog.christianperone.com - e questo post - http://blog.christianperone.com/?p= 549
  5. esec (Evolutionary Computation in Python) - http://code.google.com/p/esec/
  6. Pesca: http://code.google.com/p/peach/
  7. PyBrain (fa molto, non solo NN) - http://pybrain.org/
  8. dione - http://dione.sourceforge.net/
  9. PyGEP (programmazione di espressioni genetiche) - http://code.google.com/p/pygep/
  10. deap (algoritmi evolutivi distribuiti) - http://code.google.com/p/deap/

Inoltre, vedi il libro introduttivo (gratuito) su GP dei noti autori GP, Poli, Langdon e McPhee:

Una guida sul campo alla programmazione genetica - http://www.gp-field-guide.org.uk/


Hai riferimenti a pro e contro di Linar e Tree GP?
jb.

Ho visto alcuni confronti ma non ho riferimenti concreti. Potresti guardare a ciò che Banzhaf e Brameier hanno pubblicato negli anni 2000: hanno fatto un bel po 'di lavoro sul GP lineare e hanno pubblicato un libro su LGP nel 2007, penso.
Graham Jones,

Hm ... perché queste persone non si uniscono?
vonPetrushev,

Non sono sicuro di cosa intendi: perché le persone tree e GP lineari non si uniscono? Non c'è divisione religiosa, sono solo diversi gusti della stessa idea (e ce ne sono anche altri, come Gene Expression Progamming (GEP) - gene-expression-programming.com ).
Graham Jones,

1
Non sto dicendo che il GP dell'albero sia cattivo o sth. Volevo solo implementare la mia implementazione e linear è molto più semplice. Ho avuto il prototipo di Python funzionante in circa 4 ore da zero.
jb.

4

Se hai intenzione di evolvere un programma, è probabile che tu manipoli comunque un albero di sintassi; in questo modo qualunque programma tu sviluppi sarà automaticamente sintatticamente corretto.

Ci sono due cose che dovresti tenere a mente quando selezioni una lingua.

  1. Evita costrutti di basso livello che potrebbero causare l'arresto anomalo del programma su alcuni dati. Ad esempio, l'aritmetica del puntatore. Se utilizzerai C o C ++ come linguaggio per i tuoi programmi evoluti, potresti voler limitarlo a una versione senza aritmetica del puntatore.
    Vorrei votare contro il linguaggio assembly per ragioni simili, anche se le macchine virtuali come JVM e CLR dovrebbero fornire una sorta di rete di sicurezza.
  2. Adatto a grandi set di dati; se capisco correttamente il tuo compito, i programmi di output dovranno manipolare set di dati di grandi dimensioni.

Probabilmente vorrai utilizzare una lingua di destinazione che conosci già. Non ho familiarità con Python, ma AFAIK soddisfa i criteri sopra indicati, quindi dovrebbe essere una buona scelta per la tua lingua di destinazione.


1
Vedi github.com/arturadib/slash-a --- in questa lingua non hai manipolazione AST! Il programma è rappresentato come una matrice di bytecode e poiché ogni matrice è un programma corretto, è possibile utilizzare qualsiasi operazione genetica desiderata.
jb.
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.