粒子群算法matlab算法已经调试.docx
《粒子群算法matlab算法已经调试.docx》由会员分享,可在线阅读,更多相关《粒子群算法matlab算法已经调试.docx(37页珍藏版)》请在冰豆网上搜索。
粒子群算法matlab算法已经调试
程序1
当c11c212,c12
c221.5,w1.2。
a)%主函数源程序(main.m)
%基本粒子群算法(particleswarmoptimization)
%名称:
基本粒子群算法
%初始格式化
clearall;
%清除所有变量
clc;
%清屏
formatlong;
%将数据显示为长整形科学计数
%给定初始条条件
N=40;
%3初始化群体个数
D=10;
%初始化群体维数
T=100;
%初始化群体最迭代次数
c11=2;
%学习因子1
c21=2;
%学习因子2
c12=1.5;
c22=1.5;
w=1.2;
%惯性权重
eps=10A(-6);
%设置精度(在已知最小值的时候用)
%初始化种群个体
(限定位置和速度)
x=zeros(N,D);
v=zeros(N,D);
fori=1:
N
forj=1:
D
x(i,j)=randn;
%随机初始化位置
v(i,j)=randn;
%随机初始化速度
end
end
%显示群位置
figure
(1)
forj=1:
D
if(rem(D,2)>0)
subplot((D+1)/2,2,j)
else
subplot(D/2,2,j)
endplot(x(:
j),'b*');gridonxlabel(粒子')
ylabel('初始位置')
tInfo=strcat('第:
char(j+48),'维');if(j>9)
tInfo=strcat(第',char(floor(j/10)+48),char(rem(j,10)+48),'维');
endtitle(tInfo)end
%显示种群速度
figure
(2)
forj=1:
Dif(rem(D,2)>0)subplot((D+1)/2,2,j)
else
subplot(D/2,2,j)
endplot(x(:
j),'b*');gridonxlabel(粒子')ylabel('初始速度')tInfo=strcat(第,char(j+48),'维');if(j>9)
tinfo=strcat(第:
char(floor(j/10)+48),char(rem(j,10)+48),'维);
endtitle(tInfo)endfigure(3)
%第一个图
subplot(1,2,1)
%初始化种群个体(在此限定速度和位置)
x1=x;
v1=v;
%初始化个体最优位置和最优值---
p1=x1;
pbest1=ones(N,1);
fori=1:
N
pbest1(i)=fitness(x1(i,:
),D);
end
%初始化全局最优位置和最优值
g1=1000*ones(1,D);
gbest1=1000;
fori=1:
N
if(pbest1(i)g1=p1(i,:
);
gbest1=pbest1(i);
end
end
gb1=ones(1,T);
%浸入主循环,按照公式依次迭代直到满足精度或者迭代次数--
fori=1:
T
forj=1:
N
if(fitness(x1(j,:
),D))=x1(j,:
);pbest1(j)=fitness(x1(j,:
),D);
end
if(pbest1(j)g1=p1(j,:
);
gbest1=pbest1(j);
end
v1(j,:
)=w*v1(j,:
)+c11*rand*(p1(j,:
)-x1(j,:
))+c21*rand*(g1-x1(j,:
));x1(j,:
)=x1(j,:
)+v1(j,:
);
end
gb1(i)=gbest1;
endplot(gb1)
TempStr=sprintf('c1=%g,c2=%g',c11,c21);title(TempStr);
xlabel('迭代次数');
ylabel('适应度值');
%第二个图
subplot(1,2,2)
%初始化种群个体(在此限定速度和位置)
x2=x;
v2=v;
%初始化种群个体最有位置和最优解
p2=x2;
pbest2=ones(N,1);
fori=1:
N
pbest2(i)=fitness(x2(i,:
),D);
end
%初始化种全局最有位置和最优解
g2=1000*ones(1,D);
gbest2=1000;
fori=1:
N
if(pbest2(i)g2=p2(i,:
);
gbest2=pbest2(i);
end
end
gb2=ones(1,T);
%浸入主循环,按照公式依次迭代直到满足精度或者迭代次数
fori=1:
T
forj=1:
N
if(fitness(x2(j,:
),D)p2(j,:
)=x2(j,:
);pbest2(j)=fitness(x2(j,:
),D);
end
if(pbest2(j)g2=p2(j,:
);
gbest2=pbest2(j);
endv2(j,:
)=w*v2(j,:
)+c12*rand*(p2(j,:
)-x2(j,:
))+c22*rand*(g2-x2(j,:
));x2(j,:
)=x2(j,:
)+v2(j,:
);
end
gb2(i)=gbest2;
end
plot(gb2)
TempStr=sprintf('c1=%g,c2=%g',c12,c22);title(TempStr);
xlabel('迭代次数');
ylabel('适应度值');
b)适应度函数
%适应度函数(fitness.m)
functionresult=fitness(x,D)
sum=0;
fori=1:
D
sum=sum+x(i)A2;
end
result=sum;
程序2
当c11c212于c120,c222,w1.2对比
a)%主函数源程序(main.m)
%基本粒子群算法(particleswarmoptimization)
%名称:
基本粒子群算法
%初始格式化
clearall;%清除所有变量
clc;%清屏
formatlong;%将数据显示为长整形科学计数
%给定初始条条件
N=40;%3初始化群体个数
D=10;%初始化群体维数
T=100;%初始化群体最迭代次数
c11=2;%学习因子1
c21=2;%学习因子2
c12=0;
c22=2;
w=1.2;%惯性权重
eps=10(6);%设置精度(在已知最小值的时候用)
%初始化种群个体(限定位置和速度)
x=zeros(N,D);v=zeros(N,D);
fori=1:
N
forj=1:
D
x(i,j)=randn;%随机初始化位置
v(i,j)=randn;%随机初始化速度
end
end
%显示群位置
figure
(1)forj=1:
Dif(rem(D,2)>0)subplot((D+1)/2,2,j)
else
subplot(D/2,2,j)
endplot(x(:
j),'b*');gridon
xlabel(粒子')ylabel('初始位置')tInfo=strcat('第:
char(j+48),'维');if(j>9)
tInfo=strcat(第',char(floor(j/10)+48),char(rem(j,10)+48),'维');
endtitle(tInfo)end
%显示种群速度
figure
(2)
forj=1:
D
if(rem(D,2)>0)
subplot((D+1)/2,2,j)
elsesubplot(D/2,2,j)endplot(x(:
j),'b*');gridonxlabel(粒子')
ylabel('初始速度')
tInfo=strcat('第,char(j+48),'维');
if(j>9)
tinfo=strcat(第:
char(floor(j/10)+48),char(rem(j,10)+48),'维);
endtitle(tinfo)
end
figure(3)
%第一个图
subplot(1,2,1)
%初始化种群个体(在此限定速度和位置)
x1=x;
v1=v;
%初始化个体最优位置和最优值---
p1=x1;
pbest1=ones(N,1);
fori=1:
Npbest1(i)=fitness(x1(i,:
),D);
end
%初始化全局最优位置和最优值
g1=1000*ones(1,D);gbest1=1000;
fori=1:
N
if(pbest1(i));gbest1=pbest1(i);
endendgb1=ones(1,T);
%浸入主循环,按照公式依次迭代直到满足精度或者迭代次数
fori=1:
T
forj=1:
N
if(fitness(x1(j,:
),D))=x1(j,:
);pbest1(j)=fitness(x1(j,:
),D);
end
if(pbest1(j));gbest1=pbest1(j);
endv1(j,:
)=w*v1(j,:
)+c11*rand*(p1(j,:
)-x1(j,:
))+c21*rand*(g1-x1(j,:
));
x1(j,:
)=x1(j,:
)+v1(j,:
);
endgb1(i)=gbest1;
end
plot(gb1)
TempStr=sprintf('c1=%g,c2=%g',c11,c21);title(TempStr);
xlabel('迭代次数');
ylabel('适应度值');
%第二个图subplot(1,2,2)
%初始化种群个体(在此限定速度和位置)
x2=x;
v2=v;
%初始化种群个体最有位置和最优解
p2=x2;
pbest2=ones(N,1);
fori=1:
Npbest2(i)=fitness(x2(i,:
),D);
end
%初始化种全局最有位置和最优解
g2=1000*ones(1,D);
gbest2=1000;
fori=1:
N
if(pbest2(i)g2=p2(i,:
);gbest2=pbest2(i);
end
endgb2=ones(1,T);
%浸入主循环,按照公式依次迭代直到满足精度或者迭代次数
fori=1:
T
forj=1:
N
if(fitness(x2(j,:
),D))=x2(j,:
);pbest2(j)=fitness(x2(j,:
),D);
end
if(pbest2(j));gbest2=pbest2(j);
endv2(j,:
)=w*v2(j,:
)+c12*rand*(p2(j,:
)-x2(j,:
))+c22*rand*(g2-x2(j,:
));
x2(j,:
)=x2(j,:
)+v2(j,:
);
endgb2(i)=gbest2;
end
plot(gb2)
TempStr=sprintf('c1=%g,c2=%g',c12,c22);title(TempStr);
xlabel('迭代次数');
ylabel('适应度值');
b)适应度函数
%适应度函数(fitness.m)functionresult=fitness(x,D)sum=0;
fori=1:
D
sum=sum+x(i)A2;
endresult=sum;
程序3
当c11c212,w1.2于c122,c220,w1.2对比
a)%主函数源程序(main.m)
%基本粒子群算法(particleswarmoptimization)
%名称:
基本粒子群算法
%初始格式化
clearall;%清除所有变量
clc;%清屏
formatlong;%将数据显示为长整形科学计数
%给定初始条条件
N=40;%3初始化群体个数
D=10;%初始化群体维数
T=100;%初始化群体最迭代次数
c11=2;%学习因子1
c21=2;%学习因子2
c22=0;
w=1.2;
eps=10A(-6);
%惯性权重
%设置精度(在已知最小值的时候用)
%初始化种群个体(限定位置和速度)
x=zeros(N,D);v=zeros(N,D);fori=1:
N
forj=1:
D
x(i,j)=randn;v(i,j)=randn;
%随机初始化位置
%随机初始化速度
end
end
%显示群位置
figure
(1)
forj=1:
D
if(rem(D,2)>0)
c12=2;
subplot((D+1)/2,2,j)
else
subplot(D/2,2,j)
endplot(x(:
j),'b*');gridonxlabel(粒子')
ylabel('初始位置')
tInfo=strcat('第:
char(j+48),'维');if(j>9)
tInfo=strcat(第',char(floor(j/10)+48),char(rem(j,10)+48),'维');
endtitle(tInfo)end
%显示种群速度
figure
(2)
forj=1:
Dif(rem(D,2)>0)subplot((D+1)/2,2,j)
else
subplot(D/2,2,j)
endplot(x(:
j),'b*');gridonxlabel(粒子')ylabel('初始速度')tInfo=strcat(第,char(j+48),'维');if(j>9)
tinfo=strcat(第:
char(floor(j/10)+48),char(rem(j,10)+48),'维);
endtitle(tInfo)endfigure(3)
%第一个图
subplot(1,2,1)
%初始化种群个体(在此限定速度和位置)
x1=x;
v1=v;
%初始化个体最优位置和最优值---
p1=x1;
pbest1=ones(N,1);
fori=1:
N
pbest1(i)=fitness(x1(i,:
),D);
end
%初始化全局最优位置和最优值
g1=1000*ones(1,D);
gbest1=1000;
fori=1:
N
if(pbest1(i)g1=p1(i,:
);
gbest1=pbest1(i);
end
end
gb1=ones(1,T);
%浸入主循环,按照公式依次迭代直到满足精度或者迭代次数--
fori=1:
T
forj=1:
N
if(fitness(x1(j,:
),D))=x1(j,:
);pbest1(j)=fitness(x1(j,:
),D);
end
if(pbest1(j)g1=p1(j,:
);
gbest1=pbest1(j);
end
v1(j,:
)=w*v1(j,:
)+c11*rand*(p1(j,:
)-x1(j,:
))+c21*rand*(g1-x1(j,:
));x1(j,:
)=x1(j,:
)+v1(j,:
);
end
gb1(i)=gbest1;
endplot(gb1)
TempStr=sprintf('c1=%g,c2=%g',c11,c21);title(TempStr);
xlabel('迭代次数');
ylabel('适应度值');
%第二个图
subplot(1,2,2)
%初始化种群个体(在此限定速度和位置)
x2=x;
v2=v;
%初始化种群个体最有位置和最优解
p2=x2;
pbest2=ones(N,1);
fori=1:
N
pbest2(i)=fitness(x2(i,:
),D);
end
%初始化种全局最有位置和最优解
g2=1000*ones(1,D);
gbest2=1000;
fori=1:
N
if(pbest2(i)g2=p2(i,:
);
gbest2=pbest2(i);
end
end
gb2=ones(1,T);
%浸入主循环,按照公式依次迭代直到满足精度或者迭代次数
fori=1:
T
forj=1:
N
if(fitness(x2(j,:
),D)p2(j,:
)=x2(j,:
);pbest2(j)=fitness(x2(j,:
),D);
end
if(pbest2(j)g2=p2(j,:
);
gbest2=pbest2(j);
endv2(j,:
)=w*v2(j,:
)+c12*rand*(p2(j,:
)-x2(j,:
))+c22*rand*(g2-x2(j,:
));
x2(j,:
)=x2(j,:
)+v2(j,:
);
end
gb2(i)=gbest2;
end
plot(gb2)
TempStr=sprintf('c1=%g,c2=%g',c12,c22);title(TempStr);
xlabel('迭代次数');
ylabel('适应度值');
b)适应度函数
%适应度函数(fitness.m)
functionresult=fitness(x,D)sum=0;
fori=1:
D
sum=sum+x(i)A2;
end
result=sum;
程序4
1.5测试函
对CiC2,WiW2分别对其取值Ci1.1,C22,W11.2,W2
数。
a)%主函数源程序(main.m)
%基本粒子群算法(partiClesWarmoptimization)
%名称:
基本粒子群算法
%初始格式化
Clearall;%清除所有变量
ClC;%清屏
formatlong;%将数据显示为长整形科学计数
%给定初始条条件
N=40;%3初始化群体个数
D=10;%初始化群体维数
T=100;%初始化群体最迭代次数
c1=1.1;%学习因子1
c2=2;%学习因子2
w1=1.2;%惯性权重
w2=1.5;%惯性权重
eps=10(6);%设置精度(在已知最小值的时候用)--
%初始化种群个体(限定位置和速度)
x=zeros(N,D);
v=zeros(N,D);
fori=1:
N
forj=1:
D
x(i,j)=randn;%随机初始化位置
v(i,j)=randn;%随机初始化速度
end
end
%显示群位置
figure
(1)
forj=1:
Dif(rem(D,2)>0)subplot((D+1)/2,2,j)
else
subplot(D/2,2,j)plot(x(:
j),'b*');gridon
xlabel(粒子')
ylabel('初始位置')
tInfo=strcat('第:
char(j+48),'维');
if(j>9)
tInfo=strcat(第',char(floor(j/10)+48),char(rem(j,10)+48),'维');
endtitle(tInfo)
end
%显示种群速度
figure
(2)
forj=1:
Dif(rem(D,2)>0)
subplot((D+1)/2,2,j)
elsesubplot(D/2,2,j)endplot(x(:
j),'b*');gridon
xlabel(粒子')
ylabel('初始速度')
tInfo=strcat('第,char(j+48),'维');
if(j>9)
tinfo=strcat(第:
char(floor(j/10)+48),char(rem(j,10)+48),'维);
endtitle(tinfo)
end
figure(3)
subplot(1,2,1)
%初始化种群个体(在此限定速度和位置)
x1=x;
v1=v;
%初始化个体最优位置和最优值---
p1=x1;pbest1=ones(N,1);
fori=1:
Npbest1(i)=fitness(x1(i,:
),D);
end
%初始化全局最优位置和最优值
g1=1000*ones(1,D);gbest1=1000;
fori=1:
Nif(pbest1(i));gbest1=pbest1(i);
end
end
gb1=ones(1,T);
%浸入主循环,按照公式依次迭代直到满足精度或者迭代次数
fori=1:
T
forj=1:
N
if(fitness(x1(j,:
),D))=x1(j,:
);pbest1(j)=fitness(x1(j,:
),D);
end
if(pbest1(j));gbest1=pbest1(j);
endv1(j,:
)=w1*v1(j,:
)+c1*rand*(p1(j,:
)-x1(j,:
))+c2*rand*(g1-x1(j,:
));x1(j,:
)=x1(j,:
)+v1(j,:
);
endgb1(i)=gbest1;
endplot(gb1)TempStr=sprintf('w=%g',w1);title(TempStr);
xlabel('迭代次数');
ylabel('适应度值');
subplot(1,2,2)
%初始化种群个体(在此限定速度和位置)
x2=x;
v2=v;
%初始化种群个体最有位置和最优解
p2=x2;
pbest2=ones(N,1);
fori=1:
Npbest2(i)=fitness(x2(i,:
),D);
end
%初始化种全局最有位置和最优解
g2=1000*ones(1,D);
gbest2=1000;
fori=1:
N
if(pbest2(i)g2=p2(i,:
);gbest2=pbest2(i);
end
endgb2=ones(1,T);
%浸入主循环,按照公式依次迭代直到满足精度或者迭代次数-
fori=1