Jump to content
  • entries
    55
  • comments
    2
  • views
    57,774

Parçacık Sürüsü Optimizasyonu (Particle Swarm Optimization - PSO)


Doğuhan ELMA

225 views

Parçacık Sürüsü Optimizasyonu (Particle Swarm Optimization - PSO), bir sürü tabanlı, hesaplamalı yöntemdir ve küresel optimizasyon problemlarının çözümünde sıklıkla kullanılır. PSO, ilk olarak 1995 yılında James Kennedy (sosyal psikolog) ve Russel Eberhart (elektrik mühendisi) tarafından kuş sürülerinin ve balık sürülerinin davranışlarını taklit ederek geliştirilmiştir.

PSO, bir çözüm arama alanını keşfeden bir "sürü" veya bir grup "parçacık" ile çalışır. Her parçacık bir çözümü temsil eder ve parçacığın konumu çözümün kalitesini belirler.

Her bir parçacık, çözüm alanında hareket ederken iki ana kavramı dikkate alır:

1. Kişisel En İyi Pozisyon (pbest): Bu, parçacığın bugüne kadar bulduğu en iyi çözümdür.
2. Global En İyi Pozisyon (gbest): Bu, tüm sürü tarafından bugüne kadar bulunan en iyi çözümdür.

Her iterasyonda, parçacıklar kişisel en iyi pozisyonlarına ve global en iyi pozisyonlara doğru hızlarını güncellerler. Bu, parçacıkların kişisel deneyimlerinden ve diğer parçacıklardan öğrenmelerini sağlar, böylece çözüm alanındaki en iyi alanlara doğru hareket ederler.

Matematiksel olarak, PSO'nun güncelleme kuralları genellikle şu şekildedir:

1. `v = w * v + c1 * rand() * (pbest - pos) + c2 * rand() * (gbest - pos)`
2. `pos = pos + v`

Burada `v` parçacığın hızı, `pos` parçacığın pozisyonu, `w` atalet faktörü, `c1` ve `c2` hızlandırma sabitleri (bireysel ve sosyal öğrenme için) ve `rand()` rastgele bir sayıdır.

PSO'nun en büyük avantajlarından biri, algoritmanın karmaşıklığı ve anlaşılırlığı arasındaki dengedir. PSO, çok az parametre gerektirir ve genellikle genetik algoritmalardan daha hızlıdır. Ayrıca, PSO'nun yüksek boyutlu ve karmaşık arama alanlarını keşfetme yeteneği, çok çeşitli optimizasyon problemlarında etkili olmasını sağlar. Bununla birlikte, PSO yerel optimumlara hapsolma eğiliminde olabilir ve bu, bazı durumlarda algoritmanın genel performansını etkileyebilir.

PSO algoritmasının basit bir sürümünü aşağıda görebilirsiniz. Bu örnekte, parçacıkların konumlarını ve hızlarını güncellemek için kullanılan formülleri kullanacağız.

import numpy as np

# Parametreler
n_particles = 100
n_iterations = 1000
dim = 2
bounds = np.array([[-10, 10], [-10, 10]])
w = 0.7
c1 = 1.49
c2 = 1.49

# Başlangıç pozisyonları ve hızları
positions = np.random.uniform(bounds[:, 0], bounds[:, 1], (n_particles, dim))
velocities = np.random.uniform(-1, 1, (n_particles, dim))

# Başlangıç pbest ve gbest
pbest_positions = positions.copy()
pbest_scores = np.full(n_particles, np.inf)
gbest_position = None
gbest_score = np.inf

# Optimizasyon fonksiyonu (örneğin, sphere function)
def function(x):
    return np.sum(x**2)

# Optimizasyon döngüsü
for i in range(n_iterations):
    # Her parçacık için...
    for j in range(n_particles):
        # ...fitness değerlendirme
        score = function(positions[j])
        
        # ...pbest güncelleme
        if score < pbest_scores[j]:
            pbest_scores[j] = score
            pbest_positions[j] = positions[j]
            
        # ...gbest güncelleme
        if score < gbest_score:
            gbest_score = score
            gbest_position = positions[j]

    # Hız ve pozisyon güncellemeleri
    r1, r2 = np.random.rand(dim), np.random.rand(dim)
    cognitive = c1 * r1 * (pbest_positions - positions)
    social = c2 * r2 * (gbest_position - positions)
    velocities = w * velocities + cognitive + social
    positions = positions + velocities

print(f"En iyi pozisyon: {gbest_position}, En iyi skor: {gbest_score}")

Bu kod, bir "sphere" fonksiyonu (fonksiyon(x) = x[0]**2 + x[1]**2 + ... + x[d]**2) üzerinde çalışır ve bu fonksiyonun minimumunu arar, bu da (0, 0, ..., 0) 'da bulunur. Bu bir basit örnektir ve gerçek hayatta karşılaşılan problemlar genellikle daha karmaşık olacaktır.

PSO'nun genellikle pratikte daha iyi sonuçlar vermek için bir dizi parametresinin ayarlanması gerektiğini unutmayın: parçacık sayısı, iterasyon sayısı, atalet faktörü w ve hızlandırma sabitleri c1 ve c2. Bu parametrelerin seçimi, çalışılan probleme bağlıdır.

Bu, algoritmanın çözümünün neredeyse tam olarak (0,0) olduğunu ve bu çözümdeki fonksiyon değerinin çok düşük (neredeyse 0) olduğunu gösterir.

Unutmayın, bu örnekte optimize etmeye çalıştığımız işlev bir "sphere" işlevidir ve en düşük değeri 0'dır. Bu yüzden, algoritmanın neredeyse 0 değeri bulmuş olması, onun doğru bir şekilde çalıştığını ve optimal çözümü bulduğunu gösterir.

Elbette, bu basit bir örnektir ve PSO'yu daha karmaşık fonksiyonlara veya problemlara uyguladığınızda, en iyi pozisyon ve skor farklı olacaktır ve çıktıyı yorumlamak problem bağlamına dayalı olacaktır. Ayrıca, PSO'nun stokastik bir algoritma olduğunu, yani her çalıştırmada farklı sonuçlar verebileceğini unutmayın. Bu yüzden genellikle algoritmayı birkaç kez çalıştırmak ve sonuçların ortalamasını almak iyi bir uygulamadır.

0 Comments


Recommended Comments

There are no comments to display.

Guest
Add a comment...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...