algoritmanın istenen işi yapması için 1. uygun fitness fonksiyonu/fonksiyonları üretilmeli. sistem fitness fonksiyonlarının beğendiği yöne doğru bireyleri dönüştürüyor. sistemin istediğimiz işi üretmesi için fonksiyonların istediğimiz ürünü tanımlamasını sağlamak zorundayız. 2. doğru parametreler bulunmalı. bu parametreler çeşitli şekillerde bireylerin dönüşüm hızını tayin ediyor. sistem doğru parametrelerle çalıştırılmazsa istenen sonuçlara ulaşılamıyor. bir makina gibi hakikaten. doğru düzgün çalışmıyor ya.. süreç erken ya da geç "yakınsayabiliyor", yerel optimaya takılıp kalabiliyor, ilerlemiyor vd... zaman harcayan, moral bozucu süreçler bunlar... o zaman belirli fitness fonksiyonları, operatörler ve temsil tarzları üzerinden ulaşılabilecek en iyi sonuçlar da bilinemiyor. belki de fonksiyonlar doğru tanımlandı ama parametreler yanlıştı... 3. temsil ve operatörler: sürecin kısaltılması ama kısalırken de erken yakınsama sorununun ortadan kaldırılabilmesi için mutasyon operatörlerinin eldeki probleme özel, tercihan bilgi-içeren bir tarzda üretilmesi gerekiyor. bunlara ait parametrelerin ayarlanması da ayrı sorun.
şu anda 4 (+1) fitness için çalışan parametreler bulmuş durumdayım! oh ba. yaklaşık 5000 kuşakta bu 5 fitness için birden kabul edilebilir değerlere ulaşabiliyorum. bir 5000 kuşak daha devam edilirse de fitnessların bazıları için oldukça iyi değerlere varılıyor. ancak bir de kompaktlık fitnessi eklemem gerektiği görülüyor. çünkü verdiğim plan sınırları içinde boşluklar kalıyor. tabi kompaktlık fitness'ı diğer fitnessların ilerlemelerini bozabilir. belki de belli eşiklerde dışa-genişleme türünden bir operatör de eklemem gerekecek. yay metaforu kullanan bir örnek görmüştüm. plan birimleri sanki bir yayla birbirine bağlıymış gibi davranıyolar, bir genişleyip bir tekrar aynı noktaya toparlanarak aşama aşama uygun düzenlemeyi oluşturmaya çalışıyolar. periyodik dışa genişleme ve kompaktlık fitness'ı birlikte sürece eklenirse benzer bir etkisi olabilir diye umuyorum. bunlar zor işler değil. ölçek mutasyonu ve kompaktlık fitness'ı için birer örnek hazırlamıştım zaten.
tabii parametre meselesinde nihai çözüm adaptif, hatta kendinden-adaptif süreçler kurgulamak. şimdilik bazı parametreleri adaptif hale getirdim. bu parametreler süreç boyunca dönüşüyorlar. bu parametrelerin bazıları tüm sürece ait, bazıları belirli bir fitness türüne özel... sürecin kendinden-adaptif olması için bu parametrelerin bireylere, hatta daha iyisi genlere (burda plan birimlerine) ait olmaları gerekiyor. aslında uygulaması o kadar zor değil. ancak nüfusu artırmak gerekeceğini tahmin ediyorum. teoriye göre (el kitabımın yazdığına göre) süreci kendinden-adaptif hale getirmek için harcanan ek mesaiye değiyor, süreç hem kısalacak hem de daha iyi ürünler verecekmiş. ki 8-10 fitness türü ve diyelim ki 15 türden 50 plan birimi ile yürütülecek bir süreçte verimlilik çok daha önemli hale gelecek. hadi biriki kere çalıştırmak sorun değil isterse 24 saat sürsün, ama bir de doğrulama aşaması olacak. süreci aynı parametrelerle diyelim ki 100 kere çalıştırıp ortalama başarımını tespit etmem gerekiyor ki sonucun tesadüf olmadığını gösterebileyim.
5000 kuşak yaklaşık 45-50 dakika sürüyor. yeni fitnessları eklediğimde (zannediyorum şimdilik 7 tane olacak) daha çok kuşak gerekecek. şimdilik bilgisayarın sadece tek çekirdeğini kullanabiliyorum. python'da diğer çekirdeklerin kullanılmasını engelleyen bir kilit varmış. global değişkenlerin durumu belirsiz kalacağı için. neyseki bu sorunu aşmayı sağlayan paralel hesaplama modulleri var. ilk işim değerlendirme ve mutasyon işlemlerini diğer çekirdeklere paylaştırmak olacak. bir de böcek var programda. 8-10 bin kuşakta bir program hata verip çöküyor. oysaki günlerce sorunsuz çalışabilmesi lazım (şu anda ben burdayken o evde çalışıyor mesela, ama eminim çoktan hata verdi, sonraki süreçten devam etmek için benim tamam dememi bekliyor :[ )
o zaman, işbaşı.
21 Eylül 2010 Salı
Kaydol:
Kayıt Yorumları (Atom)
Hiç yorum yok:
Yorum Gönder