I have developed an algorithm for optimizing a function using pso but it doesnt' seem to work properly.can somebody help me finding the errors in the code

1 view (last 30 days)
%The code is for optimizing a function made using regression analysis having 10 variables.
clc; clear all;
Emin= 0; %Minimium value for function Emax= 100; %Maximum value for function
itermax=500;
c1=1.4;c2=2.6; dimension=10; %Dimensionality of function pop=20; %population size E = zeros(pop,dimension,1); pbest=zeros(pop,dimension,1); gbest=zeros(1,dimension); fit = zeros(pop,dimension,1);
% setting limits of Variables
f1min =0.8276; f1max = 1.6553;
f2min =0.0524; f2max = 0.1049;
f3min =0.2333; f3max = 0.2333;
f4min =705.8823; f4max = 2000;
f5min =1.5; f5max =1.5;
f6min =2.07e-05; f6max =10.3528e-05;
f7min =1.3416; f7max =9.6183;
f8min =16.66; f8max =25;
f9min =3; f9max =3;
f10min =3; f10max =3;
% Initiating particle velocities
L1=(f1min+(f1max-f1min)*(0.1*rand(pop,dimension,1))); L2=(f2min+(f2max-f2min)*(0.1*rand(pop,dimension,1))); L3=(f3min+(f3max-f3min)*(0.1*rand(pop,dimension,1))); L4=(f4min+(f4max-f4min)*(0.1*rand(pop,dimension,1))); L5=(f5min+(f5max-f5min)*(0.1*rand(pop,dimension,1))); L6=(f6min+(f6max-f6min)*(0.1*rand(pop,dimension,1))); L7=(f7min+(f7max-f7min)*(0.1*rand(pop,dimension,1))); L8=(f8min+(f8max-f8min)*(0.1*rand(pop,dimension,1))); L9=(f9min+(f9max-f9min)*(0.1*rand(pop,dimension,1))); L10=(f10min+(f10max-f10min)*(0.1*rand(pop,dimension,1)));
%Initiating particle velocities
v1=zeros(pop,dimension,1); v2=zeros(pop,dimension,1); v3=zeros(pop,dimension,1); v4=zeros(pop,dimension,1); v5=zeros(pop,dimension,1); v6=zeros(pop,dimension,1); v7=zeros(pop,dimension,1); v8=zeros(pop,dimension,1); v9=zeros(pop,dimension,1); v10=zeros(pop,dimension,1);
wmax=1.0; wmin=0.4; %Limits for Inertia factor
%Initiating matrices for Personal best values for each variable
Lp1=zeros(pop,dimension,1); Lp2=zeros(pop,dimension,1); Lp3=zeros(pop,dimension,1); Lp4=zeros(pop,dimension,1); Lp5=zeros(pop,dimension,1); Lp6=zeros(pop,dimension,1); Lp7=zeros(pop,dimension,1); Lp8=zeros(pop,dimension,1); Lp9=zeros(pop,dimension,1); Lp10=zeros(pop,dimension,1);
%Initiating matrices for Global best values for each variable
Lg1=zeros(1,dimension);Lg2=zeros(1,dimension);Lg3=zeros(1,dimension);Lg4=zeros(1,dimension);Lg5=zeros(1,dimension); Lg6=zeros(1,dimension);Lg7=zeros(1,dimension);Lg8=zeros(1,dimension);Lg9=zeros(1,dimension);Lg10=zeros(1,dimension);
%Setting maximum values for each variable
v1max=(f1max-f1min)/300; v2max=(f2max-f2min)/300; v3max=(f3max-f3min)/100; v4max=(f4max-f4min)/100; v5max=(f5max-f5min)/100; v6max=(f6max-f6min)/300; v7max=(f7max-f7min)/300; v8max=(f8max-f8min)/300; v9max=(f9max-f9min)/100; v10max=(f10max-f10min)/100;
E = zeros(pop,dimension,1); for i=1:pop
%Checking if values of variables is within set limits
if L1(i,1)<f1min
L1(i,1) = f1min;
end
if L1(i,1)>f1max
L1(i,1) = f1max;
end
if L2(i,2)<f2min
L2(i,2) = f2min;
end
if L2(i,2)>f2max
L2(i,2) = f2max;
end
if L3(i,3)<f3min
L3(i,3) = f3min;
end
if L3(i,3)>f3max
L3(i,3) = f3max;
end
if L4(i,4)<f4min
L4(i,4) = f4min;
end
if L4(i,4)>f4max
L4(i,4) = f4max;
end
if L5(i,5)<f5min
L5(i,5) = f5min;
end
if L5(i,5)>f5max
L5(i,5) = f5max;
end
if L6(i,6)<f6min
L6(i,6) = f6min;
end
if L6(i,6)>f6max
L6(i,6) = f6max;
end
if L7(i,7)<f7min
L7(i,7) = f7min;
end
if L7(i,7)>f7max
L7(i,7) = f7max;
end
if L8(i,8)<f8min
L8(i,8) = f8min;
end
if L8(i,8)>f8max
L8(i,8) = f8max;
end
if L9(i,9)<f9min
L9(i,9) = f9min;
end
if L9(i,9)>f9max
L9(i,9) = f9max;
end
if L10(i,10)<f10min
L10(i,10) = f10min;
end
if L10(i,10)>f10max
L10(i,10) = f10max;
end
%Calculating Fitness Value
f1 =L1(i,1);
f2 =L2(i,2);
f3 =L3(i,3);
f4 =L4(i,4);
f5 =L5(i,5);
f6 =L6(i,6);
f7 =L7(i,7);
f8 =L8(i,8);
f9 =L9(i,9);
f10 =L10(i,10);
fit(i) = 0.0001*(f1.^(2.497)*f2.^(-1.040)*f3.^(0.775)*f4.^(0.926)*f5.^(-4.126)*f6.^(-0.435)*f7.^(-1.305)*f8.^(0.232)*f9.^(0.607)*f10.^(1.525));
if fit(i)>=Emax
fit(i)=Emax;
end
if fit(i)<=Emin
fit(i)=Emin;
end
if fit(i)>=pbest(i)
pbest(i)=fit(i);
end
Lp1(i)=L1(i);
Lp2(i)=L2(i);
Lp3(i)=L3(i);
Lp4(i)=L4(i);
Lp5(i)=L5(i);
Lp6(i)=L6(i);
Lp7(i)=L7(i);
Lp8(i)=L8(i);
Lp9(i)=L9(i);
Lp10(i)=L10(i);
gbt=max(pbest);
if gbt>=gbest;
gbest=gbt;
end
end
for i=1:pop
if fit(i,:)==gbest
M=i;
Lg1(1,1)=L1(i);
Lg2(1,2)=L2(i);
Lg3(1,3)=L3(i);
Lg4(1,4)=L4(i);
Lg5(1,5)=L5(i);
Lg6(1,6)=L6(i);
Lg7(1,7)=L7(i);
Lg8(1,8)=L8(i);
Lg9(1,9)=L9(i);
Lg10(1,10)=L10(i);
end
end
% Loop for PSO search process
for iter=1:itermax
w =(wmax-wmin)*(itermax-iter)/(itermax+wmin);
for i=1:pop
v1(i,:)=(w*v1(i,:)+c1*rand(1,dimension).*(Lp1(i,:)-L1(i,:))+c2*rand(1,dimension).*(Lg1-L1(i,:)));
v2(i,:)=(w*v2(i,:)+c1*rand(1,dimension).*(Lp2(i,:)-L2(i,:))+c2*rand(1,dimension).*(Lg2-L2(i,:)));
v3(i,:)=(w*v3(i,:)+c1*rand(1,dimension).*(Lp3(i,:)-L3(i,:))+c2*rand(1,dimension).*(Lg3-L3(i,:)));
v4(i,:)=(w*v4(i,:)+c1*rand(1,dimension).*(Lp4(i,:)-L4(i,:))+c2*rand(1,dimension).*(Lg4-L4(i,:)));
v5(i,:)=(w*v5(i,:)+c1*rand(1,dimension).*(Lp5(i,:)-L5(i,:))+c2*rand(1,dimension).*(Lg5-L5(i,:)));
v6(i,:)=(w*v6(i,:)+c1*rand(1,dimension).*(Lp6(i,:)-L6(i,:))+c2*rand(1,dimension).*(Lg6-L6(i,:)));
v7(i,:)=(w*v7(i,:)+c1*rand(1,dimension).*(Lp7(i,:)-L7(i,:))+c2*rand(1,dimension).*(Lg7-L7(i,:)));
v8(i,:)=(w*v8(i,:)+c1*rand(1,dimension).*(Lp8(i,:)-L8(i,:))+c2*rand(1,dimension).*(Lg8-L8(i,:)));
v9(i,:)=(w*v9(i,:)+c1*rand(1,dimension).*(Lp9(i,:)-L9(i,:))+c2*rand(1,dimension).*(Lg9-L9(i,:)));
v10(i,:)=(w*v10(i,:)+c1*rand(1,dimension).*(Lp10(i,:)-L10(i,:))+c2*rand(1,dimension).*(Lg10-L10(i,:)));
if v1(i,1)<-v1max
v1(i,1)=-v1max;
if v1(i,1)>v1max
v1(i,1)=v1max;
end
L1(i,1)=L1(i,1)+v1(i,1);
end
if v2(i,2)<-v2max
v2(i,2)=-v2max;
if v2(i,2)>v2max
v2(i,2)=v2max;
end
L2(i,2)=L2(i,2)+v2(i,2);
end
if v3(i,3)<-v3max
v3(i,3)=-v3max;
if v3(i,3)>v3max
v3(i,3)=v3max;
end
L3(i,3)=L3(i,3)+v3(i,3);
end
if v4(i,4)<-v4max
v4(i,4)=-v4max;
if v4(i,4)>v4max
v4(i,4)=v4max;
end
L4(i,4)=L4(i,4)+v4(i,4);
end
if v5(i,5)<-v5max
v5(i,5)=-v5max;
if v5(i,5)>v5max
v5(i,5)=v5max;
end
L5(i,5)=L5(i,5)+v5(i,5);
end
if v6(i,6)<-v6max
v6(i,6)=-v6max;
if v6(i,6)>v6max
v6(i,6)=v6max;
end
L6(i,6)=L6(i,6)+v6(i,6);
end
if v7(i,7)<-v7max
v7(i,7)=-v7max;
if v7(i,7)>v7max
v7(i,7)=v7max;
end
L7(i,7)=L7(i,7)+v7(i,7);
end
if v8(i,8)<-v8max
v8(i,8)=-v8max;
if v8(i,8)>v8max
v8(i,8)=v8max;
end
L8(i,8)=L8(i,8)+v8(i,8);
end
if v9(i,9)<-v9max
v9(i,9)=-v9max;
if v9(i,9)>v9max
v9(i,9)=v9max;
end
L9(i,9)=L9(i,9)+v9(i,9);
end
if v10(i,10)<-v10max
v10(i,10)=-v10max;
if v10(i,10)>v10max
v10(i,10)=v10max;
end
L10(i,10)=L10(i,10)+v10(i,10);
end
end
end
x1 = Lg1(1,1) x2 = Lg2(1,2) x3 = Lg3(1,3) x4 = Lg4(1,4) x5 = Lg5(1,5) x6 = Lg6(1,6) x7 = Lg7(1,7) x8 = Lg8(1,8) x9 = Lg9(1,9) x10 = Lg10(1,10)
E(i) = 0.0001*(x1.^(2.497)*x2.^(-1.040)*x3.^(0.775)*x4.^(0.926)*x5.^(-4.126)*x6.^(-0.435)*x7.^(-1.305)*x8.^(0.232)*x9.^(0.607)*x10.^(1.525))
fprintf('the max efficiency is = %f \n', gbest);%(gbest);

Answers (0)

Categories

Find more on Get Started with Optimization Toolbox in Help Center and File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!