Şu adreste karşılaştığım Bir İşlem yarışmasının genetik programlama ile çözümü yazısı sayesinde şimdiye kadar yazdığım genetik algoritma yazılarına örnek bir java projesi yapabileceğimi farkettim. Bir kaç haftadır üzerinde az az uğraştığım projeyi tamamladım. Bu yazıyı yaptığım projeyi anlatmak için yazmaya karar verdim. Sonunda eksikliğini farkettiğim Java Genetik Programlama örneğini yapmış olacağım.
Gelelim projeye,
Bir İşlem yarışması TRT'de bir ara yayınlanan Bir Kelime Bir İşlem yarışmasındaki işlem sorularını çözmeye yönelik bir proje. Yarışmadan hatırlayacağınız gibi 1-10 arasında 5 sayı ve 10,25,50,75 veya 100 sayılarından biri (toplam 6 sayı) verilerek bir hedef sayıya sadece 4 işlem kullanarak ulaşmaya çalışıyoruz.
Örnek: Hedef sayı 200, Hesaplamada kullanılacak sayılar : 1 3 4 8 10 100
Çözüm: 8/4 = 2, 2*100 = 200
(evet çok kolay bir örnek oldu ama amacı anladınız :D )
Projede kullanıcılar bu sayıları rastgele üreterek genetik hesaplamayı başlatıp en yakın çözümü bulmaya çalışabilirler, bunu resimlerle gösterelim:
Başlangıç Ekranı:
Hesaplama yapılmış bir örnek (Aşağıdaki java çıktıları incelenerek hangi nesilde sonuca ulaşıldığı görülebilir):
Programın kullanımı oldukça kolay. Rastgele sayı üretebilirsiniz veya elinizdeki girdileri uygun olarak girebilirsiniz. Biçimli metin alanı kullandığım için basamak sayısını uygun şekilde girmeniz gerekiyor. Yazdıklarınız silinebiliyor.
Proje ile ilgili önemli ayrıntılar:
Genetik algoritmanın başarımını (performans) arttırmak için aşağıdaki sezgi diyebileceğim özellikler gerçekleştirildi, kaynak kodlarda gözünüze çarpabilir:
- Hesaplama sayılarının çarpımları eğer hedef sayıdan küçük ise hedef sayıya asla ulaşamayız. Bu durumda hesaplama yapmaya gerek yok.
- Eğer hesaplama yapılırken hedef sayıya tüm operatörleri uygulamadan ulaşırsak hesaplamayı erken bitiriyoruz
- Bölmelerde tam sayı sonuç olmuyorsa o bireyi kötü birey olarak değerlendiriyoruz.
Projedeki yorumların yapılan işi anlatmaya yeteceğini düşünüyorum. Burada ayrıca anlatmaya gerek yok. Bu sitedeki genetik algoritma yazılarını okuduysanız kodu incelediğiniz zaman yapılan işi de anlayacaksınız. Aşağıdaki bağlantılardan ilgili dosyaları indirerek inceleyebilirsiniz. Ayrıca yazdığım birim testleri de (junit) inceleyebilirsiniz. Testlerde neyi test etmeye çalıştığım sizin kendi testleriniz için de bir örnek oluşturacaktır.
Kaynak Kodlar
Güncelleme: Java kaynak kodları ve çalıştırılabilir JAR dosyası JDK 1.5 ile uyumlu hale getirildi.