function out=pso(lb,ub,d,f,symb,m)
w=;%w_end=;w_varyfor=;
c1=2;c2=2;
k=;
t=(ub-lb)/m;
Vmax=abs(t/4);
X=zeros(m,d);
X=abs((ub-lb)*rand(m,d)+lb);
p1=zeros(1,m);
x=zeros(1:d);
for j=1:m
x(1:d)=X(j,1:d);
% disp(x);
p1(j)=eval(f);% history
end
if symb=='<'
p2=min(p1);
p2=min(p1);
end
if symb=='>'
p2=max(p1);
p2=max(p1);
end
v=zeros(m,d);
v(:)=t/m;
for s=1:100
for i=1:m
v(i,:)=k*((w-1/k)*v(i,:)+c1*rand(1).*(p1(i)-X(i,:))+c2*rand(1).*(p2-X(i,:)));
X(i,:)=X(i,:)+v(i,:);
for j=1:d
x(1:d)=X(i,j);
p=eval(f);
if symb=='<'
if p<=p1(j)
p1(j)=p;
end
end
if symb=='>'
if p>=p1(j)
p1(j)=p;
end
end
if abs(v(i,j))>Vmax
if v(i,j)>0
v(i,j)=Vmax;
else
v(i,j)=-1*Vmax;
end
end
end
if symb=='<'
if p2>min(p1)
p2=min(p1);
end
end
if symb=='>'
if p2<max(p1)
p2=max(p1);
end
end
end
end
out=p2;
% 微粒群算法的主要代码,这是小弟的努力结果:L有点次,输入时:
pso(下限,上限,未知数个数,函数表达式,最值,微粒数)
最值 > 最大,< 最小
微粒数:表示精度,可能函数有多个峰值或峰谷,所以要从函数的不同个点一起开始计算!
微粒群算法 java代码
package Arithmetic;
import .*;
public class Swarm_Itelligent {
int POPSIZE =20;
int DIMENSION = 2;
float W =;
float C1 = ;
float C2 = ;
float VMAX = 2f;
float XMIN = -;
float XMAX = ;
float P[];
float PBEST;
Indi[] individual;
Random r;
public static void main(String []args){
Swarm_Itelligent si = new Swarm_Itelligent();
//();
}
public Swarm_Itelligent(){
P = new float[DIMENSION];
individual = new Indi[POPSIZE];
for (int i = 0; i<POPSIZE;i++)
individual[i] = new Indi();
r = new Random();
();
微粒群算法matlab实现代码 来自淘豆网m.daumloan.com转载请标明出处.