% ----------------------------------------------------------------- % Simplified Swarm Optimization (SSO) algorithm by Wei-Chang Yeh % % Programmed by Jing-Feng Deng at National Tsing Hua University (ROC) % % Programming dates: May 2013 % % Last revised: May 2013 (simplified version for demo only) % % ----------------------------------------------------------------- % Papers -- Citation Details: % 1) C. Bae, W. C. Yeh, N. Wahid, Y.Y. Chung and Y. Liu, % A New Simplified Swarm Optimization (SSO) Using Exchange Local Search Scheme, % Int. J. Innovative Computing, Information and Control, % Vol. 8, No. 6, 4391-4406 (2012) % http://www.ijicic.org/ijicic-11-06072.pdf function sso_simple() %initialize basic information clear all clc close all %nargin Nvar = 10; Nsol = 150; Ngen = 100; Nrun = 10; Cg = 0.55; Cp = 0.75; Cw = 0.95; genBest= 1; gBest = 1; %initialize stepint LB = -5.12; UB = 5.12; X = zeros(Nsol,Nvar); pX = zeros(Nsol,Nvar); F = zeros(Nsol,1); pF = zeros(Nsol,1); for run=1:Nrun start_time = cputime; %initialize solution for sol=1:Nsol %for var=1:Nvar % X(sol,var)=rand*(UB-LB)+LB; % pX(sol,var) = X(sol,var); %end X(sol,:)=rand(1,Nvar).*(UB-LB)+LB; pX(sol,:)=X(sol,:); F(sol)=myfitness(X, sol); pF(sol)=F(sol); if F(sol) < F(gBest) gBest = sol; end end for gen=1:Ngen %update solution for sol=1:Nsol for var=1:Nvar random_number=rand; if random_number < Cg X(sol,var)=pX(gBest,var); elseif random_number< Cp X(sol,var)=pX(sol,var); elseif random_number < Cw continue; else X(sol,var)=rand*(UB-LB)+LB; end end F(sol)=myfitness(X, sol); if F(sol) < pF(sol) pF(sol) = F(sol); %for var=1:Nvar % pX(sol,var)=X(sol,var); %end pX(sol,:)=X(sol,:); if F(sol) < pF(gBest) gBest=sol; genBest=gen; end end end subplot( Nrun/5 ,5, run) plot(gen, pF(gBest),'r-.'); title({['run=',num2str(run), ', gen=',num2str(gen)]... , ['pF(gBest)=',num2str(pF(gBest))] }) drawnow hold on end %end of gen end_time = cputime; fprintf('RunTime=%f ',end_time - start_time); fprintf('BestSol=%f ',pF(gBest) ); fprintf('genBest=%d ', genBest); fprintf('gBest=%d\n', gBest); end function top=fitness_funtion(X, sol) top=25; for var=1:size(X,2) top=top+round(X(sol,var)); end return