Evrimin İşleyişini Kullanarak En İyiyi Bulmayı Amaçlayan Yöntem: Genetik Algoritma
Evrim, nasıl çeşitli kombinasyonların sonunda en iyi olanın hayatta kalması esasına dayanıyorsa genetik algoritma da o şekilde çalışıyor.
Evrimin İşleyişini Kullanarak En İyiyi Bulmayı Amaçlayan Yöntem: Genetik Algoritma
iStock

genetik algoritma; 1970’li yıllarda john holland tarafından ortaya atılmış, 1989 yılında david e. goldberg’in yayınladığı, uygulanabilirliğin çeşitli alanlarda gösterildiği bir kitap ile popülerlik kazananan bir meta-heuristic algoritmadır. evrimsel hesaplama tekniğinin bir kolu olan genetik algoritma darwin'in evrim teorisinden esinlenerek oluşturulmuştur.

evrimsel hesaplama tekniklerinin ortak özelliği olarak genetik algoritmada da ele alınan problem çözümünü bir veri yapısı ile betimlenmekte ve bu veri yapısı içindeki değerler doğal evrimdekine benzer yöntemlerle belirlenmektedir. biyoloji biliminden esinlenilerek problemin çözümünü kodlayan veri yapısına kromozom veya fenotip denmektedir. bir problem birden fazla parametrenin değerinin belirlenmesi ile çözüm bulmaktadır. bu parametrelerin her biri kromozomda yer alacaktır. kromozomun öğesi olan ve herbiri problemin bir parametresini kodlayan birimlere gen denmektedir. herbiri probleme farklı bir çözüm adayı olan kromozomlardan bir havuz tutulmakta ve bu havuz evrimsel yöntemlerle değişikliğe uğratılmaktadır.

genel prosedürü şu şekildedir

* birey havuzunu rastgelelikten de yararlanarak oluşturulması.

* bir durma koşulu sağlanıncaya kadar aşağıdaki eylem dizisini yinelenmesi:

* havuzda oluşan bireylerin (kromozomların) herbirisinin kodladığı problem çözümünün kalitesini değerlendirilmesi.

* bu değerlendirmenin ışığında evrimsel işlem yapıcılar (operatörler) uygulayarak havuzu değişikliğe uğratılması.


güzel bir örneği şurada bulunabilir. ben kodlamadan anlayan biri değilim ancak biyolojiyle ilgilenen herkesin yolunun çağımızda mutlaka bir şekilde bu konuyla kesişeceğini düşünüyorum. çünkü bu sistem evrim mekanizmasının anlaşılması için de çok faydalı bana göre.

genetik algoritmaların nasıl işlediğini anlamak için de evrimin mekanizmasını biliyor olmak lazım. yani genetik algoritmayı çözmek için biyolojiye ihtiyacımız var. evrimi doğru düzgün öğretebilmek için de genetik algoritmayı bir şekilde çocuklara derslerde sunmamız gerekiyor diye düşünüyorum.

günümüzde öyle bir noktaya geldik ki her disiplinden insanın bir şekilde temel bilimleri ve kodlamayı beraber algılaması gerekiyor. bu benim ne işime yarayacak kafası çoktan tarihin tozlu raflarına kaldırılmış durumda. ben şahsen kodlama bilmediğim için gerçekten utanıyorum bu günlerde. keşke çok daha erkenden dil öğrenir gibi zorlasaydım kendimi.

neyse konuya dönersek genetik algoritma ne yapıyor ona değinelim biraz

aslında temel olarak bu programlama mantığı bir sorunun çözümü için rastgele denemeler üretip en iyi olanları ufak değişikliklerle türetmek üzerine kurulu. bunu daha iyi anlatabilmek için verdiğim örnekteki durumu açmaya çalışacağım.

yukardaki linkte çözülmesi beklenen sorun belirli bir miktar yakıt ile roketin hedefe kendi kendine ulaşabileceği ateşleme sırasını ve süresini belirlemek. bunu net olarak anlayabilmemiz için de roketin özelliklerinden bahsetmeliyiz.

örnekteki roketler iki boyutlu dünyada yaşıyorlar. her birinin üzerinde gelişigüzel yerleşmiş beş adet itici var. bu iticilerin roketin üzerindeki konumu ve ateşlenme sıraları doğdukları an belirleniyor ve sonrasında olanlar tamamen dünyanın fizik kurallarına göre şekilleniyor.

algoritmanın yaptığı şey ise bu roketleri yaşam süreleri boyunca hedefe yaklaşma derecelerine göre sıralamak. en yakından geçenler ve daha iyisi hedefe ulaşanlar o neslin üreyebilenleri olarak seçiliyorlar. bu noktada biraz da algoritmanın genetik kısmından bahsetmek gerekli.

genom bildiğiniz gibi kalıtım bilgisinin tamamı için kullandığımız terim. gen ise belirli bir karakter için kullanılıyor. verdiğim örnekteki her bir roketin de kendine ait bir dna dizilimi var. iticilerinin roketin üzerindeki konumu, ateşlenme sırası ve süresi de bu genom üzerindeki genlerde yazılı. tıpkı virüslerde ve gelişmiş omurgalı canlılarda olduğu gibi bu yapay roket canlısı da bu veriyi bir sonraki nesle iletmek için kendi evreninin uygunluk (fitness) kriterini yerine getirmek zorunda.

genetik algoritmalar genelde kimlerin ürüyebileceğini bir sayı ile belirlemeyi seçiyorlar. mesela hedefe ulaşan yahut en çok yaklaşan %10lik popülasyon gibi. daha da basitçe anlatırsak yüz roketten yaşam süresince hedefe en çok yaklaşan yahut ulaşan 10 tanesi üreyebiliyor.


üremeye geçmeden ölümü de tanımlamak lazım

burada roket canlısının ölümü üç şekilde mümkün. birincisi ortadaki yazıya çarpmaları. ikincisi ekranın altından aşağı düşmeleri. üçüncüsü hedefe varmaları. üçünden biri gerçekleşmediği sürece roket canlı kabul ediliyor ve hedefe yakınlıkları gerçek zamanlı olarak takip ediliyor.

en başarılı olanlar ise sonraki neslin genetik kodunu aynen doğada olduğu gibi crossing over ve mutasyon ile oluşturuyorlar. roketlerin cinsiyetleri yok ancak roket evreninde üremek için cinsiyete ihtiyacınız da yok. basitçe başarılı olanların genleri yeni nesildeki bireylere çaprazlanarak ekleniyor. bu süreç içinde sizin belirlediğiniz oranda mutasyon da ekleniyor ki çeşitlilik zeval görmesin. insan türünde kromozom sentezi sırasında yazım hatasına bağlı mutasyon oranı yaklaşık bir milyon nükleotidde bir oranında.

genetikte ilk öğretilen konulardan biri de bildiğiniz gibi mutasyonların olumlu yahut olumsuz sonuçları olabileceği. yani genel kanının aksine mutasyon her zaman kötü sonuçlar doğurmak zorunda değil. roket evreninde bunu çok seri biçimde gözlemleyebilirsiniz. bazen tüm roketler hızla ölürken doğuştan sıradışı itici konumuna sahip bir tanesi hiç beklenmedik rotayı izleyerek hedefe kolaylıkla ulaşabiliyor. sonraki nesilde bu mutant roketin çocukları onun genetik mirasının avantajlarını yaşamaya devam ediyorlar. birkaç nesil sonra popülasyonun %90i mutantın torunlarından oluşuyor. biz buna popülasyon genetiğinde genetic drift diyoruz. belirli bir türün alel frekansındaki ani sabitlenmeye neden olan bu tarz durumlar toplam canlı sayısının azlığından kaynaklanıyor. daha önce pandaların yok olması üzerine yazdığım yazıda buna değinmiştim sanırım. özetle gerçek dünyada olduğu gibi roket sayısı az ise ve bu roketlerden üremesine izin verdiğimiz roket sayısı daha da az ise popülasyon çok kısa süre içinde belirli bir genetik kodda sabitlenecektir.

bu durum gerçek hayatta türün sonunu getirebilecek kadar büyük bir felaket ancak genetik algoritma ile sorun çözmeye çalışan bir insansanız bu çok da olumsuz bir durum değil. kısa sürede o hedefe en verimli yolculuğu yapacak roketi bulmak zaten amaç. ancak yine de çok karmaşık sorunların çözümü için düşük mutasyon oranı belirlemek, her nesildeki birey sayısını olabildiğince yüksek tutmak ve üremesine izin verilen bireylerin de oranını olabildiğince fazla belirlemek faydalı olacaktır. doğada karmaşık sorunları çözmemizi sağlayan şey bu genetik derinlik olmuştur.

genetik algoritma ile ilgilenecek insanların evrimin mekanizmalarını çok derinlikli araştırmalarını tavsiye ederek burada noktalayacağım bu yazıyı

verdiğim örnekteki gibi basit sorunlar için belki çok şey ifade etmeyen değişkenler istanbulun trafiğinin çözümü gibi milyar dolarlık soruların çözümünde hayati önem taşıyabilir. beni okuyan genç arkadaşlara basitçe önerebileceğim şey yeni dünyada ayaklarımızın temel bilimlere basarken ellerimizin dijital dünyayı kavramak zorunda olduğu. beslenebileceğimiz bu kadar ihtişamlı şey varken bir tek şeyi seçerek kendimizi körleştirme lüksümüz yok.

göreceksiniz gelecekte farkı yaratan şey sadece okul diplomaları,kurs belgeleri, süslü cvler falan olmayacak. gelecekte başarılı olanlar farklı disiplinleri beraber kullanma becerisi yüksek bireyler olacak.

size güveniyorum.

bonus

olaya programcı olarak yaklaşanlar için sıfırdan benzer bir projenin üretimi de burada.