PSO CODE for more than one Equation

1 visualización (últimos 30 días)
Talat
Talat el 28 de Jun. de 2011
Hello! I have done the given problem 198x + 199y + 187z +201w = 200(aproximately equal or equal) Subject to, (x,y,z,w=[0 1].) through PSO(Particle Swarm Optimization)... the whole code for solving one such equation is given below.... next my problem is to solve multiple equation through PSO... Now I have to optimize it for obj_fun having multiple values to calculate. suppose
{
162x + 163y + 161z +164w = 163;
155x + 157y + 157z +154w = 155;
158x + 159y + 157z +156w = 157;
201x + 200y + 203z +201w = 200;
108x + 107y + 107z +109w = 107;....... }
and so on .....suppose hunderds of such equations that i have to solve.. Code given below, is only for one equation... plz help me how to optimize the given code for multiple equations.... so the i could get the best particles for each equation....
Thanks in anticipatiion..........
{%Initialization of PSO parameters
wmax=0.9;
wmin=0.4;
itmax=200; %Maximum iteration number
c1=1.4;
c2=1.4;
for iter=1:itmax
W(iter)=wmax-((wmax-wmin)/itmax)*iter;
end
%**********************************************************
%Initialization of positions of agents
%Initialize Swarm Particles
a=0;
b=5;
N=20;
D=4;
abc(1:4,1)=0;
abc(1:4,2)=1;
lbound=abc(:,1);
ubound=abc(:,2);
for i=1:N
for j=1:D
x(i,j)=rand*(ubound(j)-lbound(j))+lbound(j);
end
end
%Initialization of velocities of agents
%Between -5 , +5, (which can also be started from zero)
m=0;
n=1;
V=m+(n-m)*rand(N,D,1);
%**********************************************************
%Function to be minimized.
for i=1:N;
F(i,1,1)=abs(200-((x(i,1,1)*198) + (x(i,2,1)*199) +(x(i,3,1)*187)+ (x(i,4,1)*201)));
end
%**********************************************************
[C,I]=min(abs(F(:,1,1)));
B(1,1,1)=C;
XX(1,1,1)=I;
gbest(1,1,1)=x(I,1,1);
gbest(1,2,1)=x(I,2,1);
gbest(1,3,1)=x(I,3,1);
gbest(1,4,1)=x(I,4,1);
%********************************************************
%Matrix composed of gbest vector
for p=1:N
for r=1:D
G(p,r,1)=gbest(1,r,1);
end
end
Fbest(1,1,1)=abs(200-((G(1,1,1)*198) + (G(1,2,1)*199) +(G(1,3,1)*187)+ (G(1,4,1)*201)));
for i=1:N;
pbest(i,:,1)=x(i,:,1);
end
V(:,:,2)=W(1)*V(:,:,1)+c1*rand*(pbest(:,:,1)-x(:,:,1))+c2*rand*(G(:,:,1)-x(:,:,1));
x(:,:,2)=x(:,:,1)+V(:,:,2);
Fb(1,1,1)=abs(200-((gbest(1,1,1)*198) + (gbest(1,2,1)*199) +(gbest(1,3,1)*187)+ (gbest(1,4,1)*201)));
%******************************************************
for j=2:itmax-1
% Calculation of new positions
for i=1:N;
F(i,1,j)=abs(200-((x(i,1,j)*198) + (x(i,2,j)*199) +(x(i,3,j)*187)+ (x(i,4,j)*201)));
end
[C,I]=min(abs(F(:,:,j)));
B(1,1,j)=C;
gbest(1,1,j)=x(I,1,j);
gbest(1,2,j)=x(I,2,j);
gbest(1,3,j)=x(I,3,j);
gbest(1,4,j)=x(I,4,j);
Fb(1,1,j)=abs(200-((gbest(1,1,j)*198) + (gbest(1,2,j)*199) +(gbest(1,3,j)*187)+ (gbest(1,4,j)*201)));
[C,I]=min(Fb(1,1,:));
if Fb(1,1,j)<=C
gbest(1,1,j)=gbest(1,1,j);
gbest(1,2,j)=gbest(1,2,j);
gbest(1,3,j)=gbest(1,3,j);
gbest(1,4,j)=gbest(1,4,j);
else
gbest(1,1,j)=gbest(1,1,I);
gbest(1,2,j)=gbest(1,2,I);
gbest(1,3,j)=gbest(1,3,I);
gbest(1,4,j)=gbest(1,4,I);
end
%Matrix composed of gbest vector
for p=1:N
for r=1:D
G(p,r,j)=gbest(1,r,j);
end
end
Fbest(1,1,j)=abs(200-((G(1,1,j)*198) + (G(1,2,j)*199) +(G(1,3,j)*187)+ (G(1,4,j)*201)));
for i=1:N;
[C,I]=min(F(i,1,:));
if F(i,1,j)<=C
pbest(i,:,j)=x(i,:,j);
else
pbest(i,:,j)=x(i,:,I);
end
end
V(:,:,j+1)=W(j)*V(:,:,j)+c1*rand*(pbest(:,:,j)-x(:,:,j))+c2*rand*(G(:,:,j)-x(:,:,j));
x(:,:,j+1)=x(:,:,j)+V(:,:,j+1);
end
  4 comentarios
Krishna Kumar
Krishna Kumar el 28 de Jun. de 2011
Get code in FEX, or if you know PSO make a code yourselves and post your difficulties here. You can get some PSO codes over Internet easily.
Talat
Talat el 28 de Jun. de 2011
okay Thanks

Iniciar sesión para comentar.

Respuesta aceptada

Krishna Kumar
Krishna Kumar el 28 de Jun. de 2011
Well if you need help in framing the problem, try this: [x y z w] is the parameter vector. Your objective function could be Obj_fn= abs(200-(198x + 199y + 187z +201w)); Use a PSO to minimize it.
  5 comentarios
Talat
Talat el 30 de Jun. de 2011
Hello Krishna!
I did for single equation, now i have to optimize it for multiple equation... i am not getting how to generalize this code for multiple equations.... plz help me in solving this
thanks
Krishna Kumar
Krishna Kumar el 30 de Jun. de 2011
I dont get you clearly. If you need separate solutions for each equation, you have to run it so many times.
Or if you need a single solution for all the eqns (which i think is not your case), you can do like this-
obj_fn=abs(200-(198x + 199y + 187z +201w));
this way you find the error for each equation.Since the values in all equations are in the same range, you can simply add the errors and keep that as objective function.
There are many other methods too, I think this would suffice.

Iniciar sesión para comentar.

Más respuestas (0)

Categorías

Más información sobre Particle Swarm en Help Center y File Exchange.

Community Treasure Hunt

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

Start Hunting!

Translated by