Genetik programlama için hangi dil kullanılacak?


15

Bir ödevin parçası olarak , atmosferik kirletici seviyelerini tahmin eden bir genetik programlama algoritması yazmam gerekecek . Deneyimim olmadığı için, biri bana programların yazılacağı programlama dillerinin önerilerine işaret edebilir mi ?

Açıklama: Genetik algoritmanın kendisini yazacağım dilin ne olacağını sormuyorum (kararı kendim verebileceğim gibi), gelişen programların hangi programlama dilinde oluşturulması gerektiğini soruyorum.

Eğitmenim Lisp'i önerdi, ama bu fikri sevmiyorum --- önce bir tür Soyut Sözdizimi Ağacı üzerinde çalışmak zorunda kalacağım, ikinci olarak ağaç yapısı üzerinde çapraz geçişler yapmak dağınıklık olabilir.

Slash / A gibi genetik programlamaya adanmış bir şey kullanmayı tercih ederim . SlashA, AST'ler üzerinde çalışmayı gerektirmez --- bayt koddaki programlar, her int dizisinin bazı eğik çizgi / A programını temsil ettiği için gerekli olan herhangi bir fasionda değiştirilebilen sadece bir dizi ints'tır.

Ek açıklamalar:

  • AST'leri manipüle etmekten kaçınmak istiyorum!
  • Bu problem zordur (stok değerlerini tahmin etmek kadar zor olmayabilir). Bunun nedeni (büyük olasılıkla) yeterli giriş bilgisine sahip olmamamızdır (bazı gizli parametreler vardır). Ortalamayı döndüren modelin daha iyi performansa sahip bir model oluşturmak biraz zorlayıcıdır (ortalama modeller% 35 MAPE'ye sahiptir), çoğu model yaklaşık% 25 MAPE'ye sahiptir, en iyisi% 20'dir.
  • Hangisinin önemli olduğundan emin olmadığım varsayımıyla birçok özelliği olan veri kümelerini yöneten bir dile sahip olmak istiyorum. (Slash / A'nın burada bir dezavantajı vardır - bu dilde giriş özellikleri sırayla okunur - bu nedenle bazı özellikler daha büyük olasılıkla kullanılacaktır).
  • Bunu Python programlamak istiyorum, bu yüzden python libs harika olurdu --- ama C / C ++ (Java, Matlab, vb) için bağlamalar yapabilirsiniz.

Bunun bir anket sorusu olduğunun bilincindeyim, eğer bu tür bir soru için erken olursa lütfen kapatın, ama yeterince spesifik olduğunu hissediyorum.

Yanıtlar:


14

Kirletici probleminiz muhtemelen çok fazla dile ihtiyaç duymaz. Bir kontrol probleminden ziyade sembolik bir regresyona benziyor, bu durumda sadece standart ağaç GP'yi, terminal seti ve fonksiyon setindeki ilgili operatörler olarak özellikleri ve birkaç kullanışlı sabitiyle kullanabilirsiniz. GP sistemi alakasız özellikleri ayıklayacaktır ve çok büyük veri kümelerini işlemek için teknikler vardır. Genellikle, sorunu çözebileceğini tahmin ettiğiniz en küçük işlev kümesini belirtin ve gerekirse dikkatle genişletin.

Daha önce ağaç ve doğrusal GP arasında seçim yapmanız gerekir. Lisp ağaç, eğik çizgi / A doğrusaldır. Artılarını ve eksilerini anlamak için her ikisini de okuyun, ancak yazdıklarınızdan basit bir ağaç GP sistemi öneriyorum. Kendinizinkini yazmak çok zor değil, ancak mevcut Python uygulamaları var. Aşağıdaki olanlar genel olarak Python'daki evrimsel algoritmalar içindir, ancak hepsi GP değildir ve bazıları aktif değildir:

  1. PyGressionGP (Python'da sembolik regresyon için GP) - http://code.google.com/p/pygressiongp/
  2. PyGene - https://github.com/blaa/PyGene
  3. Python'da Basit Bir Genetik Programlama - http://zhanggw.wordpress.com/2009/11/08/a-simple-genetic-programming-in-python-4/
  4. Pyevolve - https://github.com/perone/Pyevolve - ayrıca bkz. Blog - http://blog.christianperone.com - ve bu yazı - http://blog.christianperone.com/?p= 549
  5. esec (Python'da Evrimsel Hesaplama) - http://code.google.com/p/esec/
  6. Şeftali - http://code.google.com/p/peach/
  7. PyBrain (sadece NN değil, çok şey yapar) - http://pybrain.org/
  8. dione - http://dione.sourceforge.net/
  9. PyGEP (Genetik İfade Programlama) - http://code.google.com/p/pygep/
  10. deap (Dağıtılmış Evrim Algoritmaları) - http://code.google.com/p/deap/

Ayrıca tanınmış GP yazarları Poli, Langdon ve McPhee'nin GP hakkında (ücretsiz) tanıtım kitabına bakın:

Genetik Programlama Alan Kılavuzu - http://www.gp-field-guide.org.uk/


Linar ve GP ağacının artıları ve eksileri hakkında referanslarınız var mı?
jb.

Birkaç karşılaştırma gördüm ancak somut referansım yok. Banzhaf ve Brameier'in 2000'lerde neler yayınladıklarına bakabilirsiniz - 2007'de lineer GP üzerinde biraz çalışma yaptılar ve 2007'de LGP hakkında bir kitap yayınladılar.
Graham Jones

Hımm ... bu insanlar neden birleşmiyor?
vonPetrushev

Ne demek istediğinden emin değilim - neden ağaç ve lineer GP insanları birleşmiyor? Dini bir bölünme yok, sadece aynı fikrin farklı lezzetleri (ve Gen İfade Progamming (GEP) - gene-expression-programming.com gibi diğerleri de var ).
Graham Jones

1
Ben, GP ağacının şeytani veya sth olduğunu söylemiyorum. Sadece kendi uygulamamı yuvarlamak istedim ve doğrusal çok daha kolay. Sıfırdan 4 saat içinde Python prototipini çalıştım.
jb.

4

Bir programı geliştirecekseniz, bir sözdizimi ağacını yine de işleyeceksinizdir; bu şekilde geliştirdiğiniz program otomatik olarak sözdizimsel olarak doğru olur.

Bir dil seçerken aklınızda bulundurmanız gereken iki şey vardır.

  1. Evrimleşen programın bazı veriler üzerinde çökmesine neden olabilecek düşük düzeyli yapılardan kaçının. Örneğin, işaretçi aritmetiği. Eğer evrimleşmiş programlarınızın dili olarak C veya C ++ kullanacaksanız, onu işaretçi aritmetiği olmayan bir sürümle sınırlamak isteyebilirsiniz.
    Benzer nedenlerden dolayı montaj diline karşı oy kullanardım, ancak JVM ve CLR gibi sanal makineler size bir güvenlik ağı sağlamalıdır.
  2. Büyük veri kümeleri için uygundur; ödevinizi doğru bir şekilde anlarsam, çıktı programlarının kendileri büyük veri kümelerini değiştirmek zorundadır.

Muhtemelen zaten aşina olduğunuz bir hedef dil kullanmak isteyeceksiniz. Python'u kendim tanımıyorum, ancak AFAIK yukarıdaki kriterleri karşılıyor, bu yüzden hedef diliniz için iyi bir seçim olmalı.


1
Bkz. Github.com/arturadib/slash-a --- bu dilde AST manipülasyonunuz yok! Program bir bayt kodu dizisi olarak temsil edilir ve her dizi doğru bir program olduğundan istediğiniz genetik işlemleri kullanabilirsiniz.
jb.
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.