matlab粒子群优化算法举例分析.docx
《matlab粒子群优化算法举例分析.docx》由会员分享,可在线阅读,更多相关《matlab粒子群优化算法举例分析.docx(40页珍藏版)》请在冰豆网上搜索。
matlab粒子群优化算法举例分析
例函数
对于适应度函数fitness对其参数
,
,
做出不同方式的比较以测试其对函数结果影响。
当
,
,
。
(适应函数
)
程序1
当
,
,
。
a)%主函数源程序(main.m)
%------基本粒子群算法(particleswarmoptimization)
%------名称:
基本粒子群算法
%------初始格式化
clearall;%清除所有变量
clc;%清屏
formatlong;%将数据显示为长整形科学计数
%------给定初始条条件------------------
N=40;%³初始化群体个数
D=10;%初始化群体维数
T=100;%初始化群体最迭代次数
c11=2;%学习因子1
c21=2;%学习因子2
c12=1.5;
c22=1.5;
w=1.2;%惯性权重
eps=10^(-6);%设置精度(在已知最小值的时候用)
%------初始化种群个体(限定位置和速度)------------
x=zeros(N,D);%x是位置,初始化位置空间(矩阵)
v=zeros(N,D);%v是速度,初始化速度空间(矩阵)
fori=1:
N
forj=1:
D
x(i,j)=randn;%随机初始化位置,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)
end
plot(x(:
j),'b*');gridon%’b*’表示颜色是绿的,用*显示在图上
xlabel('粒子')
ylabel('初始位置')
tInfo=strcat('第',char(j+48),'维');%strcat使括号里的东西连成字符串
if(j>9)
tInfo=strcat('第',char(floor(j/10)+48));%floor向负无穷方向取整
char(rem(j,10)+48,'维');%rem取余
end
title(tInfo)
end
%------显示种群速度
figure
(2)
forj=1:
D
if(rem(D,2)>0)
subplot((D+1)/2,2,j)
else
subplot(D/2,2,j)
end
plot(v(:
j),'b*');gridon%是不是应该是v(:
j)
xlabel('粒子')
ylabel('初始速度')
tInfo=strcat('第',char(j+48),'维');
if(j>9)
tInfo=strcat('第',char(floor(j/10)+48),'维');
char(rem(j,10)+48,'维);
end
title(tInfo)
end
figure(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)p1(j,:
)=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;
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:
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);%T为迭代次数T=100
%------进入主循环,按照公式依次迭代直到满足精度或者迭代次数---
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);
end
v2(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('适应度值');
程序2
当
于
对比
a)%主函数源程序(main.m)
%------基本粒子群算法(particleswarmoptimization)
%------名称:
基本粒子群算法
%------初始格式化
clearall;%清除所有变量
clc;%清屏
formatlong;%将数据显示为长整形科学计数
%------给定初始条条件------------------
N=40;%³初始化群体个数
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:
D
if(rem(D,2)>0)
subplot((D+1)/2,2,j)
else
subplot(D/2,2,j)
end
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),'维');
end
title(tInfo)
end
%------显示种群速度
figure
(2)
forj=1:
D
if(rem(D,2)>0)
subplot((D+1)/2,2,j)
else
subplot(D/2,2,j)
end
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),'维);
end
title(tInfo)
end
figure(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)p1(j,:
)=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;
end
plot(gb1)
TempStr=sprintf('c1=%g,c2=%g',c11,c21);
title(TempStr);
xlabel('迭代次数');
ylabel('适应度值');
%第二个图
subplot(1,2,2)