26 Ekim 2010 Salı

olacak gibi


sonunda yaklaşımım anlamlı gibi bir iş üretti. yukarıda ekranımın güncel hali var. soldaki karelerin olduğu imaj "renk-hedefi" imajı, en sağdaki dairelerin olduğu imaj da "düzenleme-hedefi" imajı (dikdörtgenin içindeki kısım). ortadaki ürünün kompozisyonu sağdaki düzenleme hedefine benzemeye "çalışıyor", renk dağılımı da soldaki imaja benzemeye çalışıyor.

soldaki çiçek kullandığım "damga". yukarıdaki örnekte 10 adet 50*50, 3 adet 100*100 ve 1 adet 200*200 ebadında olmak üzere 3 tip damga kullanıldı.

prosedür şöyle: 1. renk hedefinden, hsv modelinde H, S ve V değerleri için 100'er hanelik histogramlar üretiliyor ve bir kenara konuyor. 2. düzenleme hedefi analiz edilerek bir "olasılık-haritası" üretiliyor, bu harita her bir damga tipi için bir grid üzerinde olası başlangıç pozisyonlarını tespit ediyor. (haritanın etkisini zayıflatmak için gridin tüm pozisyonları da haritaya eklenebiliyor.) 3. yine düzenleme hedefinden ve yine bir grid kullanılarak kolonlar ve satırlar halinde sıralama bilgisi ve her bir hücrede hangi tip damgalar bulunduğu üzerinden hücreler çıkarsanıyor. bunlar da sıralama ve hücre verisi olarak kenara konuyor.

şimdi elimizde ne var? 3 tip damga, düzenlemeleri yönetmek üzere damga sıralamaları, hangi damgaların aynı hücrede birarada kalacağını düzenleyen hücre dağılımı verisi ve süreci başlatmak için olasılık haritası. olasılık haritasını kullanarak diyelim ki 20 birey üretiyorum. her bir birey yukarıda saydığım 14 damgadan ve bu damgaların oluşturduğu imajdan oluşuyor. imajlar üretildikten sonra bireyler 4 ayrı prosedür ile ayrı ayrı değerlendiriliyorlar. ilk prosedür üretilen bireyin hücre dağılımının düzenleme hedefindeki hücre dağılımına benzerliğini ölçüyor, bir diğeri bu benzerliği sıralamalar için ölçüyor, bir fitness da renk histogramlarını karşılaştırıyor. bunlara bir de out_overlap dediğim bir fitness prosedürü ekliyorum. ortadaki resimde dört küçük nokta var, bu dörtgen benim imaj alanım. kullandığım temsil yaklaşımında damgaların bunun sınırlarından taşması mümkün, yine damgaların birbiri üstüne çakışması da mümkün. bu çakışmaları ve taşmaları bu fitness prosedürü ile kontrol ediyorum. mesela bu örnekte dışa taşmaya yüksek ceza, çakışmaya ise düşük ceza verildi.

her fitness için ayrı ayrı fitness sıralamaları ortaya çıkıyor. buradan sonrası o anda hangi fitness tedavülde ise o fitness üzerinden gerçekleşiyor. bu fitness sıralamasına göre uygun seçim prosedürleri kullanıalrak bir kere çiftleşecek ve mutasyona uğrayacak bireyler seçiliyor. çiftleşme ve mutasyon işlemleriyle yeni aday bireyler üretiliyor. tüm adaylar yine her bir fitness için değerlendiriliyor. sonra da güncel fitness uyarınca eski nüfus (20 tane?)+ aday nüfus (20 tane?) karıştırılıp bunların bir kısmı yeni nüfusu oluşturmak üzere seçiliyor (20 tane). bu noktadan sonra tüm süreç istendiği kadar tekrar ediliyor (örnekte 200 kere).

benim bu projedeki hedefim çeşitli parametreleri farklı farklı imajlardan alarak daha sonra yeni bir tasarım üreten bir sistemi örneklemek. bir kompozisyonu üreten o kadar çok parametre var ki yaza yaza bunları sisteme vermek ya da "tarz-kümeleri" olarak önceden paket paket kodlamak imkansız gibiydi [ki bu sistemin ilk versiyonunda hedeflenen buydu]. ben de böyle imajlar üzerinden görsel bir arayüze yöneldim. (bunun geçmiş örnekleri de var tabi.) çok daha esnek, hızlı ve kolay kavranır olma avantajı var. uygulama çok basit ve hala tam olarak sorunlar bitmiş değil. (mesela swap mutasyonları çalışmıyor sanki?) ama ana fikir böyle.

Hiç yorum yok: