Sezgilerine Güven! – Parçacık Sürü Optimizasyonu

Felsefi bakış açısıyla sezgi, “bilinçli bir düşünme ve yargıya varma süreci olmaksızın doğrudan bilgiye ulaşma yöntemi” olarak tanımlanmaktadır [1]. Günlük hayatta ise sezgilerimizi “Sen benim sezgilerime güven, bu kız/oğlan sana uygun değil!” diyerek arkadaşımıza ilişki tavsiyesi verirken kullanırız. 🙂 Peki bu sezgilerimizi bilgisayar dünyasına taşıyarak çöpçatanlık problemleri yerine mühendislik problemlerine çözümler üretmek mümkün olabilir mi? Kısa cevap, evet! Bugünkü konumuz meta-sezgisel algoritmalar…

Sezgi dediğimiz kavramı taklit edebilecek bir program oluşturabilmemiz için öncelikle sezgilerin nasıl oluştuğu konusunda fikir sahibi olmamız gerekmektedir. Her ne kadar hislerin içimizde herhangi bir mantığa dayalı olmadan oluştuğunu düşünsek de, gerçekte bu hislerin kafa tasımızın içinde yer alan ve tüm geçmiş deneyimlerimizin şekillendirdiği büyük doğal sinir ağının (yani beynimizin) bir çıktısı olarak değerlendirebiliriz. Bir örnek üzerinden ilerleyerek söylemek istediklerimi daha iyi anlatabileceğimi düşünüyorum.

Örneğin yeni bir kişi ile tanıştığımızı düşünelim. Beynimiz ilk aşamada bu kişinin bizim için bir tehdit oluşturup oluşturmadığını anlamak için olabildiğince çok bilgi toplamaya çalışacaktır. Bu bilgiler şu şekilde olabilir;

  • Kişinin dış görünüşü
  • Konuşurken kullandığı kelimeler
  • Ses tonu ve seviyesi
  • Kullandığı jest ve mimikler
  • Sizi dinlerkenki davranışları (göz teması kurması, etrafa bakması, saçları ile oynaması vb.)

Tüm bu küçük bilgilerden ve geçmişte yaşadığımız deneyimlerden yararlanan beynimiz karşımızdaki kişi hakkında bir görüş üretir ve sonuç olarak tam olarak nedenini bilemesek de içimizde “iyi birine benziyor” veya “biraz sinsi gibi gözüküyor” şeklinde bir hisler oluşabilir. Daha sonra içimizde oluşan bu hise göre karşımızdaki kişi ile kuracağımız iletişime karar verebiliriz.

Şimdi bu örneği incelediğimizde hislerin bilgisayar ortamında taklit edilebilmesi için üç önemli adımın gerçekleştirilmesi gerektiğini söyleyebiliriz. Bunlar;

  1. Bilgi topla.
  2. Toplanan bilgilere ve geçmiş deneyimlere göre durum değerlendirmesi yap.
  3. Değerlendirme sonucuna göre bir sonraki adıma karar ver.

Literatürde meta-sezgisel algoritmalar olarak adlandırılan pek çok algoritma bu temel prensiplere göre oluşturulmuştur. Bugün bu algoritmalar arasında en çok sevdiğim ve oldukça sade bir mantığa sahip olduğunu düşündüğüm parçacık sürü optimizasyon (PSO) algoritması üzerinde durmak istiyorum. Ancak PSO algoritmasını anlatmaya başlamadan önce benim de bu algoritmayı öğrendiğim kaynağı sizinle paylaşacağım. Mostapha Kalami Heris tarafından hazırlanan bu yazı ve video serisinin meta-sezgisel algoritmaların hem mantığını hem de kodlamasını öğrenme açısından çok faydalı bir kaynak olduğunu düşünüyorum [2]. İlgilenenlerin incelemesini tavsiye ederim.

Şimdi genel olarak optimizasyon problemlerine ve PSO algoritmasının bu problemlerin çözümü için nasıl bir yaklaşım sergilediği üzerine konuşabiliriz. Mühendislik uygulamalarında oluşturduğumuz bir sistemin optimum şekilde çalışmasını, örneğin sistemin enerji verimliliğinin veya iletişim kapasitesinin olabilecek en yüksek seviyede olmasını isteriz. Ancak sistemin bu değerlerini etkileyen pek çok parametre bulunabilir ve hedefimize ulaşmak için bu parametreleri en uygun değerlerde seçmemiz gerekir. Bir veya iki parametre için uygun değerin bulunması görece kolay olmasına rağmen, parametre sayısı ve parametrelerin alabileceği değer sayısı arttıkça bu parametre seçiminin tüm değerlerin denenerek gerçekleştirilmesi oldukça zorlaşmaktadır. Örneğin 6 parametresi optimize edilmesi gereken bir sistemde her parametrenin 100 değer alabildiğini düşünürsek, bu 1 trilyon parametre kombinasyonu anlamına gelmektedir. Tam olarak bu noktada meta-sezgisel algoritmalar çok daha az sayıda deneme yaparak optimum parametre değerlerine ulaşabilmeyi vadeden bir yaklaşım olarak öne çıkmaktadır.

PSO algoritması bu optimizasyon probleminin çözümü için sürü ve sürüdeki bireylerin sezgilerini dikkate alan bir yaklaşım kullanmaktadır. Şimdi algoritmanın adımlarını aşağıda vererek ne demek istediğimi açıklayacağım.

  1. Sürünün popülasyon sayısı, maksimum iterasyon sayısı ve algoritmanın diğer parametreleri belirlenir.
  2. Sürünün her bir bireyi parametre uzayında rastgele noktalara yerleştirilir.
  3. Bu rastgele değerler parametre olarak belirlendiği durumda sistemin incelenen göstergesi (verimlilik vb.) kontrol edilir.
  4. Sürüdeki her bir parçacığın Kişisel En İyi (Personal Best, PB) noktası bu rastgele konumlar olarak belirlenir.
  5. Sürünün Küresel En İyi (Global Best, GB) noktası, sürüdeki tüm bireyler değerlendirildiğinde en iyi sonuca ulaşan parametre kombinasyonu olarak belirlenir.
  6. Sürüdeki her bir bireyin konumu aşağıdaki denkleme göre güncellenir;
x_i(t+1)=x_i(t)+v_i(t+1) \\ v_i(t+1)=wv_i(t)+c_1[PB_i(t)-x_i(t)]+c_2[GB_i(t)-x_i(t)]
  1. Konum güncellemesinden sonra sürüdeki bireyler önceki konumuna göre daha iyi bir konumda ise PB değerini bireyler için güncellenir.
  2. Sürünün geneli değerlendirildiğinde önceki GB değerinden daha iyi bir nokta bulunmuşsa GB değerini güncellenir.
  3. Maksimum iterasyon değerinde ulaşana kadar Adım 6, 7 ve 8’i tekrarlanır.

Şimdi v_i, PB, GB gibi terimler ve konum güncelleme denklemlerinin bir miktar kafanızı karıştırdığını tahmin ediyorum. Bu nedenle şimdi tüm bu adımları aşağıda paylaştığım üzerinden anlatacağım.

Şekil 1. PSO algoritması konum güncelleme süreci

Şekilde PSO algoritmasında sürüdeki bir parçacığın bir sonraki iterasyonda hangi konuma hareket edeceği gösterilmektedir. Buna göre parçacık “t-1” anında kırmızı renkli X noktasında yer almaktadır ve “t” anına gelindiğinde sarı renkli X noktasına hareket etmiştir. Şekilde görüldüğü gibi parçacık “t+1” anındaki konumunu belirlemek için sarı, yeşil ve mavi vektörler ile temsil edilen 3 farklı hareket gerçekleştirmektedir. Bunlarda ilki, yani \omega v_i(t) ile gösterilen vektör, parçacığın bir önceki hareket doğrultusunda bir miktar daha hareketine devam etmesini sağlamaktadır. Bu sayede parçacığın geçmişte yaptığı hareketlerin bilgisinin bir kısmının yeni hareketine de etki etmesi sağlanır. Yeşil kesikli çizgi ile temsil edilen vektör ise her bir parçacığın geçmişte ulaştığı en iyi konumu, yani PB, referans alarak bir miktar o noktaya doğru hareket etmesini sağlamaktadır. Yani yine kendi kişisel geçmişine göre hareket etmektedir. Son olarak ise mavi ile gösterilen vektör ile parçacığın sürüde elde edilen en iyi konum, yani GB, doğrultusunda bir miktar hareket etmesi sağlanır. Bu sayede parçacık sadece kendi kişisel deneyimlerine göre değil, ayrıca dahil olduğu sürüdeki yani çevresindeki parçacıkların da deneyimlerine göre hareket etmesi sağlanmaktadır. Böylelikle parçacıklar mevcut konumu, geçmiş deneyimleri ve çevresinden elde ettiği bilgilere göre, kısaca sezgilerine göre, yeni bir konuma hareket eder. Bu sayede sürüdeki her bir parçacık, arama yapılan parametre uzayında denemeler yaparak, en uygun parametre kombinasyonuna hızlı bir şekilde ulaşabilmektedir.

Böylelikle meta-sezgisel algoritmaların nasıl çalıştığı hakkında temel fikir oluşturabildiğimi düşünüyorum. Diğer yandan bu tür algoritmaların diğer güzel özelliği her türlü optimizasyon problemi için kullanılabilir olmasıdır. Ancak kullanılabilirlik her meta-sezgisel algoritmanın tüm problemler için optimum değere ulaşabileceği anlamına gelmemektedir. Bu durumda kendi sezgilerinize güvenerek bu problem için hangi algoritma daha uygundur şeklinde bir seçim yapmanız gerekebilir. 🙂 Sonuç olarak uzun bir yazı oldu ancak giriş yazısında vermek istediğim tüm bilgileri verdiğimi düşünüyorum. İlerleyen yazılarda PSO algoritmasını kullanarak örnek bir mühendislik problemine çözüm aramayı deneyebiliriz. O zamana kadar görüşmek üzere efendim…

Kaynaklar:
[1]. “Sezgi”, Erişim Tarihi: 15.04.2024, Erişim Bağlantısı: https://tr.wikipedia.org/wiki/Sezgi
[2]. Mostapha Kalami Heris, Particle Swarm Optimization (PSO) in MATLAB – Video Tutorial Erişim Bağlantısı: https://yarpiz.com/440/ytea101-particle-swarm-optimization-pso-in-matlab-video-tutorial, Yarpiz, 2016.

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir