PSO CODE for more than one Equation
5 次查看(过去 30 天)
显示 更早的评论
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 个评论
Krishna Kumar
2011-6-28
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.
采纳的回答
Krishna Kumar
2011-6-28
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 个评论
Krishna Kumar
2011-6-30
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.
更多回答(0 个)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Particle Swarm 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!