Genetic Algorithm (Genetik Algoritma)

Doğal seçilim ve genetik kalıtımı taklit ederek aday çözümleri nesiller boyunca evrimleştiren, karmaşık optimizasyon problemleri için kullanılan sezgisel arama algoritması.

Genetik Algoritma (GA), biyolojik evrim ilkelerini — doğal seçilim, çaprazlama (crossover) ve mutasyon — bilgisayar optimizasyon problemlerine uygulayan, John Holland tarafından 1960'larda geliştirilen ve 1975 yılında "Adaptation in Natural and Artificial Systems" adlı kitabıyla sistematize edilen bir meta-sezgisel (metaheuristic) arama yöntemidir. Algoritma, her biri bir çözüm adayını temsil eden bireylerden oluşan bir popülasyonla başlar. Her birey, çözümün kodlanmış biçimi olan bir "kromozom" ile temsil edilir — geleneksel uygulamalarda bu ikili bit dizisidir, ancak modern uygulamalarda gerçel sayı vektörleri, permütasyonlar veya ağaç yapıları da kullanılır. Algoritmanın çekirdek döngüsü dört adımdan oluşur: (1) Uygunluk değerlendirmesi — her bireyin amaç fonksiyonuna göre puanlandırılması; (2) Seçim — yüksek uygunluklu bireylerin ebeveyn olarak tercih edilmesi (rulet tekerleği, turnuva veya sıralama seçimi gibi yöntemlerle); (3) Çaprazlama — iki ebeveynin kromozomlarının belirli bir noktadan birleştirilerek yavru üretilmesi; (4) Mutasyon — düşük olasılıkla rastgele gen değişikliği yapılarak yerel minimumdan kaçınma. Nesiller boyunca tekrar eden bu döngü, popülasyonu giderek daha iyi çözümlere doğru yönlendirir. Genetik Algoritmalar, gradyan tabanlı optimizasyon yöntemlerinin başarısız olduğu ayrık, çok modlu, çok boyutlu ve gürültülü problem uzaylarında güçlüdür. Geleneksel arama yöntemlerinin tıkandığı NP-zor problemlerde (gezgin satıcı problemi, çizelgeleme, ağ tasarımı) pratik çözümler üretir. Makine öğrenmesindeki uygulamaları arasında hiperparametre optimizasyonu, sinir ağı mimarisi arama (NAS — Neural Architecture Search) ve özellik seçimi öne çıkar. AutoML sistemleri, en iyi model konfigürasyonunu bulmak için evrimsel stratejileri kullanır. Bunun yanı sıra mühendislik tasarımı (aerodinamik optimizasyon, malzeme bilimi), lojistik (rota planlaması, kapasite optimizasyonu) ve biyoinformatik (protein katlama, gen ifadesi analizi) alanlarında yaygın kullanım bulur. Pratik uygulama için Python'da DEAP (Distributed Evolutionary Algorithms in Python) ve PyGAD kütüphaneleri kapsamlı API sunmaktadır. Genetik Programlama (GP), GA'nın bir uzantısı olup bireyleri sabit uzunluklu kodlar yerine program ağaçları olarak temsil eder ve sembolik regresyon gibi görevlerde kullanılır. Diferansiyel Evrim (Differential Evolution) ise sürekli uzaylar için optimize edilmiş yakın akraba bir yöntemdir.

Biyolojik Evrimden Hesaplamalı Optimizasyona

Genetik Algoritmalar, Charles Darwin'in doğal seçilim teorisini hesaplama ortamına taşır. Bir problemi çözmek için potansiyel çözümlerden oluşan bir popülasyon oluşturulur ve bu popülasyon nesiller boyunca evrimleştirilir. Her nesilde en iyi çözümler hayatta kalır ve bir sonraki nesle aktarılır. Bu yaklaşım, arama uzayı çok büyük olduğunda veya gradyan bilgisi mevcut olmadığında geleneksel yöntemlere kıyasla büyük avantaj sağlar.

Temel Operatörler: Seçim, Çaprazlama, Mutasyon

Seçim operatörü, uygunluk fonksiyonu değeri yüksek bireyleri ebeveyn olarak tercih eder — rulet tekerleği seçimi uygunlukla orantılı şans verir, turnuva seçimi ise rastgele alt kümelerden en iyiyi alır. Çaprazlama, iki ebeveynin genetik bilgisini birleştirir: tek noktalı çaprazlamada kromozom rastgele bir noktadan bölünüp birleştirilir, üniform çaprazlamada her gen bağımsız olarak ebeveynlerden biri seçilir. Mutasyon, düşük olasılıkla (genellikle 0.001–0.01) bir geni rastgele değiştirerek popülasyonun çeşitliliğini korur ve yerel minimumlara takılmayı önler.

Makine Öğrenmesinde Kullanım

AutoML alanında Genetik Algoritmalar, hiperparametre optimizasyonu için Bayesian optimizasyonla rekabet eden güçlü bir alternatiftir. TPOT (Tree-based Pipeline Optimization Tool), sinir ağı mimarisi ve ön-işlem adımlarını birlikte optimize etmek için Genetik Programlama kullanır. Google'ın AutoML-Zero projesi, sıfırdan makine öğrenimi algoritmalarını keşfetmek için evrimsel stratejiler kullandı. Özellik seçiminde GA, kaba kuvvet aramasının hesaplamalı olarak imkansız olduğu yüksek boyutlu veri setlerinde en bilgilendirici özellik alt kümesini bulur.

Parametre Ayarı ve Pratik Rehber

Genetik Algoritmaların performansı birkaç kritik hiperparametreye bağlıdır. Popülasyon boyutu küçük tutulursa çeşitlilik azalır ve erken yakınsama riski artar; çok büyük popülasyon hesaplama maliyetini artırır — tipik değer 50-500 bireydir. Çaprazlama olasılığı (0.6-0.9) yüksek tutulur; mutasyon olasılığı (0.001-0.05) ise düşük kalmalıdır. Elitizm stratejisi ile en iyi bireyler değiştirilmeden bir sonraki nesle aktarılır ve iyi çözümlerin kaybolması önlenir. Durma koşulu olarak maksimum nesil sayısı, uygunluk eşiği veya belirli nesil boyunca iyileşme olmaması kullanılır.

Sık Sorulan Sorular

  • check_circle Genetik Algoritma her zaman en iyi çözümü bulur mu?: Hayır. GA, global optimumu garanti etmez; sezgisel bir yöntemdir. Ancak çok büyük ve karmaşık arama uzaylarında makul sürede iyi bir çözüm bulur. Erken yakınsama sorunu, çeşitlilik mekanizmaları (mutasyon oranı artırma, göç operatörü) ile azaltılabilir.
  • check_circle GA ile gradyan tabanlı yöntemler arasında nasıl seçim yaparım?: Amaç fonksiyonu türevlenebilir ve tek modluysa SGD veya Adam gibi gradyan tabanlı yöntemler tercih edilmeli. Amaç fonksiyonu gürültülü, ayrık veya türevsizse ya da çok sayıda yerel minimum içeriyorsa GA daha uygundur. Hibrit yaklaşımlar da yaygındır: GA ile genel bölgeyi bul, gradyan ile yerel arama yap.
  • check_circle Python ile Genetik Algoritma nasıl uygulanır?: DEAP kütüphanesi esnek ve kapsamlıdır; özel operatörler tanımlanabilir. PyGAD ise daha basit API ile hızlı prototipleme için uygundur ve Keras/PyTorch ile entegrasyon sunar. Scikit-learn kullanıcıları için TPOT, ML pipeline optimizasyonunu otomatize eder.
  • check_circle Genetik Algoritma ile Diferansiyel Evrim farkı nedir?: Diferansiyel Evrim (DE), sürekli optimizasyon için özelleştirilmiş bir GA türüdür. Çaprazlama yerine popülasyon bireylerinin farkını kullanarak mutasyon üretir; bu onu sürekli uzaylarda genellikle daha verimli kılar. GA ise ayrık ve karma problem uzaylarında daha esnektir.
  • check_circle Ne kadar nesil çalıştırmalıyım?: Problem boyutuna ve karmaşıklığına göre değişir. Küçük problemler için 100-500 nesil yeterliyken büyük optimizasyonlarda binlerce nesil gerekebilir. Pratik yöntem: uygunluk değerinin platoya ulaştığı noktayı (iyileşme durdu) izleyerek durma koşulu belirlemek.