Genetik programlama, evrimsel algoritma tabanlı programlama metodolojisidir. Genetik programlamada amaç evrim teorisinden esinlenerek oluşturulan genetik algoritmalar kullanılarak kullanıcı tarafından tanımlanmış görevlerin yerine getirilmesidir.

Genetik programlama ilk olarak 1954 yılında İtalya-Norveç asıllı matematikçi Nils Aall Baricelli tarafından evrim simülasyonları için evrimsel algoritmalar kullanılmasıyla başladı. 1960lı yıllarda ve 1970'lerin başında ise genetik algoritmalar optimizasyon problemlerinin çözümlerinde ciddi önem kazandılar. Alman bilgisayar bilimcisi Ingo Rechenberg çalışma grubuyla birlikte 1971 yılında evrimsel stratejiler kullanarak karmaşık mühendislik problemlerini çözmeyi başarmış ve bunu da doktora tezinde belgelemiştir. 1985 yılında ise Nichael L. Cramer tarafından ilk kez “ağaç tabanlı genetik programlama” ortaya atılmış, ve bu daha sonra John R. Koza tarafından geliştirilerek birçok karmaşık optimizasyon ve arama problemlerinde kullanılmıştır. 1990lı yıllarda ise bilgisayarlardaki artan işlemci gücüyle beraber genetik programlamanın kullanım alanı daha da genişlemiş; bu yeni metod kuantum hesaplamaları, elektronik dizayn, oyun programlama, sıralama, arama gibi birçok alanda yoğun bir şekilde kullanılmaya devam edilmiştir.

Genetik programlama metodolojisinin temelinde genetik algoritmalar yatmaktadır. Bu algoritmalar da Darwin'in evrim teorisinden ilham alınarak ortaya çıkmıştır. Bu algoritmalarda problem, evrimsel süreç kullanılarak çözülmeye çalışılmaktadır. Genetik algoritma toplum adı verilen ve kromozomlarla temsil edilen bir çözüm kümesi ile başlamaktadır. Bir toplumdaki çözümler yeni toplumların üretilmesinde kullanılmaktadır; yeni ortaya çıkan toplumların ise atalarından daha iyi olacağı umulmaktadır. Yeni ortaya çıkan toplumdaki çözümler uygunluklarına göre seçilir ve tekrar üretim için daha fazla şansa sahip olur. Bu süreç elde edilmek istenen sonuca ulaşıncaya kadar tekrar eder. Genetik algoritmanın daha iyi anlaşılması için aşağıdaki algoritma taslağını inceleyebiliriz:

  • Başlangıç : n kromozomdan oluşan rastgele bir toplum oluşturulur. (problemin olası çözümleri)
  • Uygunluk : Toplumdaki her “x” kromozomu için f(x) uygunluk değeri değerlendirilir.
  • Yeni toplum : Aşağıdaki adımlar izlenerek yeni toplum üretilir :
    • Seçim : Toplumdan uygunluklarına göre iki ata seçilir. (Problemin çözümüne daha uygun olanın seçilme şansı daha fazladır.)
    • Çaprazlama : Çaprazlama olasılığı ile ataları yeni yavru oluşturmak için birbiriyle eşleştirilir. Eğer çaprazlama olmazsa yeni yavrular atalarının aynısı olurlar.
    • Mutasyon : Yeni yavru, yeni topluma eklenir.
  • Değiştir : Yeni toplum algoritmanın tekrar işlenmesinde kullanılır.
  • Deney : Eğer bitiş durumu sağlandıysa, durup toplumdaki en iyi çözüm döndürülür.
  • Döngü : Adım 2'ye gidilir.

Genetik algoritmanın en önemli kısımları yukarıda da adı geçen çaprazlama ve mutasyon kısımlarıdır. Ayrıca yukarıda adı geçen kromozomlar da algoritmadaki çözümler hakkında bilgi içerir.

Evet arkadaşlar, bu ayki yazımda genetik programlama konusunu teknik detaylara inmeden anlatmaya çalıştım. Yazıdan da anlaşılacağı gibi genetik programlama çok karmaşık problemlerde mühendisler ve bilim adamlarının imdadına yetişmektedir ve bunu da Darwin'in evrim teorisinden ilham alarak yapmaktadır.

Bir dahaki yazıda görüşmek üzere!

Kaynaklar