Bahasa apa yang digunakan untuk pemrograman genetika


15

Sebagai bagian dari tugas saya harus menulis algoritma pemrograman genetika yang melakukan prediksi tingkat polusi atmosfer. Karena saya tidak punya pengalaman, siapa pun bisa mengarahkan saya ke proposisi bahasa pemrograman di mana program yang dikembangkan akan ditulis .

Klarifikasi: Saya tidak bertanya bahasa apa yang akan saya gunakan untuk menulis algoritma genetika itu sendiri (karena saya akan dapat mengambil keputusan sendiri), saya bertanya dalam bahasa pemrograman apa program yang dikembangkan harus dibuat.

Instruktur saya menyarankan Lisp, tapi saya tidak suka ide ini --- pertama saya harus bekerja pada semacam Pohon Sintaks Abstrak, yang kedua melakukan crossover pada struktur pohon dapat menjadi berantakan.

Saya lebih suka menggunakan sesuatu yang didedikasikan untuk pemrograman genetik seperti garis miring / A . SlashA tidak perlu bekerja pada ASTs --- program dalam bytecode hanyalah sebuah array int yang dapat diubah dalam setiap fasi yang diperlukan karena setiap array int mewakili beberapa program slash / A.

Tanda tambahan:

  • Saya ingin menghindari memanipulasi AST!
  • Masalah ini sulit (mungkin tidak sesulit memprediksi nilai saham). Ini disebabkan oleh fakta bahwa (kemungkinan besar) kami tidak memiliki informasi input yang cukup (ada beberapa parameter tersembunyi). Membuat model yang memiliki kinerja yang lebih baik daripada model yang mengembalikan rata-rata adalah sedikit tantangan (model rata-rata memiliki 35% MAPE), sebagian besar model memiliki MAPE sekitar 25%, terbaik memiliki 20%.
  • Saya ingin memiliki bahasa yang mengelola kumpulan data dengan banyak fitur dengan asumsi bahwa saya tidak yakin mana yang penting. (Slash / A memiliki kelemahan di sini --- dalam bahasa ini fitur input dibaca berurutan --- sehingga beberapa fitur akan digunakan dengan probabilitas lebih besar).
  • Saya ingin dapat memprogram ini dengan Python, jadi python lib akan lebih bagus --- tapi saya bisa melakukan binding untuk C / C ++ (tidak ada Java, tidak ada Matlab, dll).

Saya sadar ini adalah pertanyaan survei, jadi jika terlalu dini untuk pertanyaan seperti itu silakan tutup, tapi saya rasa itu cukup spesifik.

Jawaban:


14

Masalah polusi Anda mungkin tidak membutuhkan banyak bahasa sama sekali. Ini terlihat seperti regresi simbolis daripada masalah kontrol, dalam hal ini Anda hanya dapat menggunakan standar pohon GP, ​​dengan fitur dan beberapa konstanta yang berguna sebagai set terminal dan operator yang relevan dalam set fungsi. Sistem GP akan menghilangkan fitur yang tidak relevan dan ada teknik untuk menangani dataset yang sangat besar. Secara umum, tentukan kumpulan fungsi terkecil yang Anda perkirakan dapat menyelesaikan masalah, dan perluas dengan hati-hati jika perlu.

Anda harus memilih antara tree dan GP linier sejak dini. Lisp adalah tree, Slash / A linear. Baca keduanya untuk memahami pro & kontra, tetapi dari apa yang Anda tulis, saya akan menyarankan sistem GP pohon sederhana. Tidak terlalu sulit untuk menulis sendiri, tetapi ada implementasi Python yang ada. Yang di bawah ini adalah untuk algoritma evolusioner dalam Python secara umum tetapi tidak semua melakukan GP dan beberapa tidak aktif:

  1. PyGressionGP (GP untuk regresi simbolis dengan Python) - http://code.google.com/p/pygressgp/
  2. PyGene - https://github.com/blaa/PyGene
  3. Pemrograman Genetik Sederhana dengan Python - http://zhanggw.wordpress.com/2009/11/08/a-simple-genetic-programming-in-python-4/
  4. Pyevolve - https://github.com/perone/Pyevolve - juga melihat blog - http://blog.christianperone.com - dan posting ini - http://blog.christianperone.com/?p= 549
  5. esec (Perhitungan Evolusi dengan Python) - http://code.google.com/p/esec/
  6. Peach - http://code.google.com/p/peach/
  7. PyBrain (melakukan banyak hal, bukan hanya NN) - http://pybrain.org/
  8. dione - http://dione.sourceforge.net/
  9. PyGEP (Pemrograman Ekspresi Genetik) - http://code.google.com/p/pygep/
  10. deap (Algoritma Evolusi Terdistribusi) - http://code.google.com/p/deap/

Juga, lihat buku pengantar (gratis) tentang GP oleh penulis GP terkenal Poli, Langdon dan McPhee:

Panduan Lapangan untuk Pemrograman Genetik - http://www.gp-field-guide.org.uk/


Apakah Anda memiliki referensi untuk pro dan kontra dari Linar dan GP pohon?
jb.

Saya telah melihat beberapa perbandingan tetapi tidak punya referensi konkret. Anda dapat melihat apa yang diterbitkan Banzhaf dan Brameier pada tahun 2000-an - mereka cukup banyak bekerja pada GP linier dan menerbitkan buku tentang LGP pada tahun 2007, saya pikir.
Graham Jones

Hm ... mengapa orang-orang ini tidak bersatu?
vonPetrushev

Saya tidak yakin apa yang Anda maksud - mengapa orang pohon dan linear GP tidak bersatu? Tidak ada perbedaan agama, mereka hanya rasa yang berbeda dari ide yang sama (dan ada juga yang lain, seperti Gene Expression Progamming (GEP) - gen-expression-programming.com ).
Graham Jones

1
Saya tidak mengatakan bahwa GP pohon itu jahat atau sth. Saya hanya ingin memutar implementatiom saya sendiri, dan linear jauh lebih mudah. Saya telah mengerjakan prototipe Python dalam waktu 4 jam dari awal.
jb.

4

Jika Anda ingin mengembangkan program, Anda kemungkinan besar akan memanipulasi pohon sintaksis; dengan cara itu program apa pun yang Anda evolusi akan secara otomatis benar secara sintaksis.

Ada dua hal yang perlu Anda ingat ketika memilih bahasa.

  1. Hindari konstruksi tingkat rendah yang dapat menyebabkan program berkembang pada beberapa data. Misalnya, pointer aritmatika. Jika Anda akan menggunakan C atau C ++ sebagai bahasa untuk program yang dikembangkan, Anda mungkin ingin membatasinya ke versi tanpa aritmatika pointer.
    Saya akan memilih menentang bahasa assembly untuk alasan yang sama, meskipun mesin virtual seperti JVM dan CLR harus memberi Anda sesuatu dari jaring pengaman.
  2. Cocok untuk set data besar; jika saya memahami tugas Anda dengan benar, program output sendiri harus memanipulasi set data besar.

Anda mungkin ingin menggunakan bahasa target yang sudah Anda kenal. Saya sendiri tidak terbiasa dengan Python, tetapi AFAIK memenuhi kriteria di atas, jadi itu harus menjadi pilihan yang baik untuk bahasa target Anda.


1
Lihat github.com/arturadib/slash-a --- dalam bahasa ini Anda tidak memiliki manipulasi AST! Program direpresentasikan sebagai array bytecode dan karena setiap array adalah program yang benar, Anda dapat menggunakan operasi genetik apa pun yang Anda inginkan.
jb.
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.