Particle Swarm Optimization (PSO) with Matlab

function [xopt,fmin,it]=simpelpso(funname,N,maxit)
%written by budi santosa to implement original PSO
% budi_s@ie.its.ac.id, faculty of industrial eng, ITS
%to find minimum of multi variable function
dim = 2; % Dimension of the problem
upbnd =[6 6]; % Upper bound for init. of the swarm
lwbnd =[-6 -6]; % Lower bound for init. of the swarm
% Initializing swarm and velocities
x = rand(N,dim).*repmat((upbnd-lwbnd),N,1) + repmat(lwbnd,N,1) ;
v = rand(N,dim); %kecepatan awal
[brs,kol]=size(x);
f=zeros(N,1);
%bobot inertia
for i=1:brs
f(i)=feval(funname,x(i,:));
end
it=1;
Pbest=x;
fbest=f;
[minf,idk]=min(f);
Gbest=x(idk,:);
lastbest=[0 0];
minftot=[];

rhomax=0.9;rhomin=0.4;
for it=1:maxit
rho(it)=rhomax-((rhomax-rhomin)/maxit)*it;
end
while it<maxit
r1=rand;r2=rand;
for j=1:brs
v(j,:)=rho(it)*v(j,:)+r1.*(Pbest(j,:)-x(j,:))+r2.*(Gbest-x(j,:));
x(j,:)=x(j,:)+v(j,:);
f(j)=feval(funname,x(j,:));
end
%update Pbest
changerow = f < fbest;
fbest=fbest.*(1-changerow)+f.*changerow;
Pbest(find(changerow),:)=x(find(changerow),:);
[minf,idk]=min(fbest);
minftot=[minftot;minf];
Gbest=Pbest(idk,:);
if sum(var(Pbest))<1e-8
break
end
it=it+1;
lastbest=Gbest;
end
xopt=Gbest;
fmin=minf;
plot(minftot)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

6 thoughts on “Particle Swarm Optimization (PSO) with Matlab

    • Salam kenal Arnita. darimana universitasnya? oo bisa transfer ke rek mandiri ana budi santosa no 1420004614086. Tolong kasih alamat kirim nanti buku dikirim dengan TIKI.
      Harga 65rb+ongkir. Bisa email langsung ke shima9107@yahoo.com
      Terima kasih

  1. Salam kenal pak Budi, saya Noru dari Universitas Diponegoro, saya sedang mendalami PSO untuk Tugas Akhir saya. Ada beberapa hal yang saya mau tanyakan pak..

    Bagaimana algoritma PSO bila dalam satu PSO terdapat 2 swarm yang optimasi dan menggunakan 1 fungsi objektif, apakah sama dengan Multi-Species PSO? karena saya rasa itu bukan Multi-Objective PSO karena hanya menggunakan 1 fungsi objektif.

    Seperti contohnya saya ingin mengoptimasi (minimasi fungsi) fungsi x = 100*(A + B). Disini A dan B merupakan 2 buah swarm yang memiliki batasan sendiri-sendiri (‘lwbnd’ dan ‘upbnd’).

    Dalam memperbarui posisi dan kecepatan tiap swarm apakah menggunakan rumus posisi dan kecepatan sendiri-sendiri untuk masing-masing swarm atau hanya perlu 1 kecepatan pak..?

    Saya mohon pencerahannya.Terima kasih.

    • walaupun saya kurang paham dengan pertanyaanya, saya menduga yang anda bicarakan adalah fungsi dengan multivariabel. Istilah swam juga sdh menunjukkan kumpulan individu. jadi swarm A dan B jadi membingungkan. Mestinya variabel A dan B. Baca buku saya mungkin akan membantu pemahaman.

  2. aslmkm pak, saya roza mhs universitas bengkulu ,, saya mengambil topik pso dalam tugas akhir saya, sebagai referensi ,, saya mencoba menjalankan sourcecode matlab bapak diatas,, tetapi ada pesan error ….. function [xopt,fmin,it]=simpelpso(funname,N,maxit)
    |
    Error: Function definitions are not permitted in this
    context. ,, mohon pencerahan y pak,, trims…

    • ada function yang ada dalam simpelpso yang belum didefnisikan, yaitu fungsi2. Perlu dibuat function dengan nama fungsi2 yang isinya problem optimasi yang dicari minimalnya.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s