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

Arkehas

Hectopat
Katılım
21 Aralık 2018
Mesajlar
2
Merhaba herkese,
Elektrik Elektronik Mühendisliği Bölümünde okuyorum. Parçacık sürüsü algoritmasında işlem yapmam gerekiyor ve bu benim bitirme tezim. Bir kısımda takıldım yardımlarınızı bekliyorum. Öncelikle parametreleri ve fonksiyonumu açıklayayım.

f=(x1^2)+(x2^2)+(x3^2)
x değerlerim [-10,10] arasında olmalı.(Ki genelde PSO dan standart aralık değerleri de bu şekilde.)
Bana lazım olan şey ise minf() değeri.

Analitik olarak f'in min değerine ulaşması için idealde (ki PSO algoritmasının amacı zaten optimum değerleri bulmaktır.) f=0 olmalıdır.
f=0 olması için de idealde x1=0,x2=0,x3=0 olmalıdır.

PSO algoritması yukarıdaki fonksiyonda x1,x2,x3 değerlerini sıfıra en yakın şekilde bulacak ve bu x değerlerini ve f fonksiyonunun değerini bana gösterecek. Bir kaç tane kod buldum ama Matlab'da çok iyi olmadığım için ne kadar araştırma yapsam da fonksiyonları düzenleyemedim. Bulduğum bir adet Matlab kodu (aşağıda linki olan) tek x değerini bulabiliyor. Dediğim gibi bana tek fonksiyon içinde 3 farklı x değeri lazım. O yüzden kodu tekrar ettirip 3 farklı x değerini elde ettiğim zaman hocaya kabul ettiremiyorum.
Şimdiden yardımlarınız için teşekkürler.
Sağlıcakla kalın.

-Link açıklaması:
Sitede aşağıya indiğinizde Downloads kısmı var. O kısımda Implementation of Particle Swarm Optimization (PSO) in MATLAB dosyasını indirirseniz dediğim kodlara ulaşmış olursunuz.
PSO
 
Son düzenleyen: Moderatör:
Bunu kendin de implemente edebilirsin, hazir kod bulmana gerek yok.

Sana f() fonksiyonunu minimum yapacak 3 deger gerek. Fonksiyon 3 degiskene bagli. Bu sebeple 3 farkli PSO uygulaman gerekiyor, her bir swarm bir variable icin optimizasyon yapacak.

Fonksiyon gorece kolay, partial derivative aldiginda x1,x2 ve x3 icin, diger degiskenlere bagli bir fonksiyon elde etmeyeceksin. O sebeple turev fonksiyonlarinda diger parcaciklarla iletisime gecmeden algoritman bir sonraki degeri ve yonu belirleyebilecek.

Ornek, x1 icin.
Random bir noktadan basladin [-10,10] araliginda, diyelim ki 8 olsun.
O noktadaki turevin kac? 16.
Senin optimize etmen icin, tersine dogru gitmen gerekiyor. Turevi negatif bir "eta" degeri ile carpacaksin. Diyelim ki o da 0.0065 olsun. Her iterasyonda, kucuk kucuk minimum noktasina dogru ilerleyeceksin. Bunu her variable icin, swarm miktari kadar tekrarlarsan global optimal x1,x2 ve x3'u bulursun.

Bir nevi gradient descent yapiyorsun aslinda, zaten PSO ile cok benzerler.
 
Bunu kendin de implemente edebilirsin, hazir kod bulmana gerek yok.

Sana f() fonksiyonunu minimum yapacak 3 deger gerek. Fonksiyon 3 degiskene bagli. Bu sebeple 3 farkli PSO uygulaman gerekiyor, her bir swarm bir variable icin optimizasyon yapacak.

Fonksiyon gorece kolay, partial derivative aldiginda x1,x2 ve x3 icin, diger degiskenlere bagli bir fonksiyon elde etmeyeceksin. O sebeple turev fonksiyonlarinda diger parcaciklarla iletisime gecmeden algoritman bir sonraki degeri ve yonu belirleyebilecek.

Ornek, x1 icin.
Random bir noktadan basladin [-10,10] araliginda, diyelim ki 8 olsun.
O noktadaki turevin kac? 16.
Senin optimize etmen icin, tersine dogru gitmen gerekiyor. Turevi negatif bir "eta" degeri ile carpacaksin. Diyelim ki o da 0.0065 olsun. Her iterasyonda, kucuk kucuk minimum noktasina dogru ilerleyeceksin. Bunu her variable icin, swarm miktari kadar tekrarlarsan global optimal x1,x2 ve x3'u bulursun.

Bir nevi gradient descent yapiyorsun aslinda, zaten PSO ile cok benzerler.

Dediğinizi yapabileceğimden emin değilim açıkcası. Biraz daha yardımcı olma şansınız var mı?
 
Uyarı! Bu konu 6 yıl önce açıldı.
Muhtemelen daha fazla tartışma gerekli değildir ki bu durumda yeni bir konu başlatmayı öneririz. Eğer yine de cevabınızın gerekli olduğunu düşünüyorsanız buna rağmen cevap verebilirsiniz.

Geri
Yukarı