Bir problemi çözmek için genellikle aklımıza ilk gelen şey şudur: Kuralları yaz, mantığı kur, adım adım ilerle ve sonucu hesapla. Bu yaklaşım, bir köprü inşa ederken ya da vergi hesaplayan bir yazılım yazarken harikadır. Fakat bazı problemler vardır ki mantıkla üzerine yürüdüğünüzde size nazikçe gülümser, sonra da sonsuz olasılıklar ormanına kaçar. İşte evrimsel kodlama tam bu ormanda avlanır. Pusulası kesinlik değil, denemedir; kılıcı kanıt değil, seçilimdir.
Evrimsel algoritmaların fikri çarpıcı derecede basittir: Bir çözüm yazmak yerine, çözüm adaylarından oluşan bir nüfus yarat. Her adayı bir tür genetik tarif gibi düşün. Sonra bu adayları probleme göre test et. İyi sonuç verenleri yaşat, kötüleri ele. Yaşayanların bazı özelliklerini karıştır, araya rastgele mutasyonlar serpiştir ve yeni nesli üret. Bunu tekrar et. Tekrar. Tekrar. Binlerce, milyonlarca kez. Sonunda ortaya çıkan şey, çoğu zaman insanın doğrudan tasarlayamayacağı kadar tuhaf, kısa, kaba ama etkili bir çözümdür.
Mantığın değil, seçilimin zekası
Buradaki en kışkırtıcı nokta şudur: Algoritma çözümü anlamak zorunda değildir. Hatta çoğu durumda anlamaz. Sadece neyin daha iyi çalıştığını ölçer. Bir roket motoru nozulunun biçimini, bir robotun yürüme stratejisini, bir oyun karakterinin taktiğini ya da karmaşık bir çizelgeleme problemini düşünün. İnsan mühendis zihni düzenli, simetrik ve açıklanabilir çözümler ister. Evrimsel süreç ise saygısızdır. Çirkin ama işlevsel bir yapı bulursa onu baş tacı eder. Doğada da böyledir: Zürafanın boynu estetik bir mimarın planı değil, hayatta kalan varyasyonların birikmiş tutanağıdır.
Teknik olarak bu yaklaşımda üç ana kuvvet vardır: çeşitlilik, değerlendirme ve kalıtım. Çeşitlilik olmadan keşif yoktur; bütün adaylar birbirine benzerse algoritma aynı duvara defalarca çarpar. Değerlendirme olmadan yön yoktur; uygunluk fonksiyonu dediğimiz ölçüt, hangi adayın daha iyi olduğunu belirler. Kalıtım olmadan birikim yoktur; iyi özellikler sonraki nesillere aktarılmazsa öğrenme değil, sadece gürültü üretmiş oluruz. Mutasyon ise bu düzenin içindeki yaramaz çocuktur. Çoğu zaman saçmalık yapar, bazen de kapalı kapıyı açan anahtarı düşürür.
Bu yüzden evrimsel kodlama, klasik programlamadan farklı bir zihinsel duruş ister. Normalde programcı çözümün mimarıdır. Burada ise programcı daha çok bir ekosistem tasarımcısıdır. Hangi adayların doğacağını, nasıl çiftleşeceğini, neye göre eleneceğini ve ne kadar mutasyon geçireceğini belirler. Sonucu yazmaz; sonucu doğuracak şartları kurar. Bu, doğrudan emir veren bir kraldan çok, iklimi ve toprağı ayarlayan bir bahçıvan olmaya benzer.
Rastgelelik aptallık değil, arama stratejisidir
Rastgele mutasyon kelimesi insanı yanıltabilir. Sanki algoritma zar atıyor ve şans eseri mucize bekliyor gibi görünür. Oysa mesele saf rastlantı değildir; rastlantının seçilimle disipline edilmesidir. Sadece rastgelelik kaostur. Sadece mantık ise bazen kör bir koridorda düzgün adımlarla yürümektir. Evrimsel algoritma ikisini birleştirir: Rastgelelik yeni kapılar açar, seçilim işe yaramayan kapıları kapatır. Bu nedenle özellikle çözüm uzayı çok büyük, düzensiz veya türevlenemez olduğunda güçlüdür.
Elbette bedava mucize yoktur. Evrimsel algoritmalar çok hesaplama gücü isteyebilir. Uygunluk fonksiyonu kötü tanımlanırsa algoritma yanlış şeyi optimize eder. Mesela bir robotun hızlı gitmesini ödüllendirip dengeli yürümesini ihmal ederseniz, yerde sürünerek hedefe ulaşan bir yaratık elde edebilirsiniz. Bu komik görünür, ama derin bir ders taşır: Bilgisayar bizim istediğimizi değil, ölçtüğümüz şeyi optimize eder. Doğa da ahlaklı olanı değil, üreyebilen ve hayatta kalabileni seçer.
Evrimsel kodlamanın güzelliği, bize zekanın tek biçimli olmadığını hatırlatmasıdır. Zeka bazen bir teorem gibi parıldar, bazen de çamurun içinde bininci denemede ayağa kalkar. İnsan aklı plan yapar; evrim deneme yapar. İnsan açıklama ister; evrim sonuç ister. En iyi çözümler bazen masada çizilmez, popülasyonun içinde ayıklanır. Bu yüzden geleceğin bazı programları yazılmayacak, yetiştirilecek. Kod satırları kadar ekosistemler, fonksiyonlar kadar seçilim baskıları tasarlayacağız. Ve belki de en rahatsız edici hakikat şudur: Bazen bilgelik, her şeyi anlamaya çalışmak değil, doğru rastlantıların hayatta kalacağı bir dünya kurmaktır.
