实验目的:
验证课本例6.1,理解粒子群算法
实验平台:
硬件:笔记本电脑。
软件:MATLAB2010
实验内容:
M文件:
%粒子群算法
%日期:
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%种群大小:3
%循环次数:N
N=1000;
w=0.5;
c1=2;
c2=2;
%初始化:
v1=[3 2];
x1=[8,-5];
v2=[-3 -2];
x2=[-5,9];
v3=[5 3];
x3=[-7,-8];
f1=x1(1)^2+x1(2)^2;
pBest1=x1;
f2=x2(1)^2+x2(2)^2;
pBest2=x2;
f3=x3(1)^2+x3(2)^2;
pBest3=x3;
[fmin x]=min([f1 f2 f3]);
if(x==1)
gBest=pBest1;
end
if(x==2)
gBest=pBest2;
end
if(x==3)
gBest=pBest3;
end
j=1;
fj=zeros(1,N);
for i=1:N
%粒子的速度和位置更新:
v1=w*v1+c1*rand*(pBest1-x1)+c2*rand*(gBest-x1);
x1=x1+v1;
%合法性调整
if(x1(1)>10)
x1=[10,x1(2)];
end
if(x1(1)
x1=[-10,x1(2)];
end
if(x1(2)>10)
x1=[x1(1),10];
end
if(x1(2)
x1=[x1(1),-10];
end
v2=w*v2+c1*rand*(pBest2-x2)+c2*rand*(gBest-x2);
x2=x2+v2;
%合法性调整
if(x2(1)>10)
x2=[10,x2(2)];
end
if(x2(1)
x2=[-10,x2(2)];
end
if(x2(2)>10)
x2=[x2(1),10];
end
if(x2(2)
x2=[x2(1),-10];
end
v3=w*v3+c1*rand*(pBest3-x3)+c2*rand*(gBest-x3);
x3=x3+v3;
%合法性调整
if(x3(1)>10)
x3=[10,x3(2)];
end
if(x3(1)
x3=[-10,x3(2)];
end
if(x3(2)>10)
x3=[x3(1),10];
end
if(x3(2)
x3=[x3(1),-10];
end
%评估粒子的适应度函数值,更新粒子的历史最优位置和全局的最优位置
f1_temp=x1(1)^2+x1(2)^2;
if(f1_temp
f1=f1_temp;
pBest1=x1;
end
f2_temp=x2(1)^2+x2(2)^2;
if(f2_temp
f2=f2_temp;
pBest2=x2;
end
f3_temp=x3(1)^2+x3(2)^2;
if(f3_temp
f3=f3_temp;
pBest3=x3;
end
[fmin x]=min([f1 f2 f3]);
if(x==1)
gBest=pBest1;
end
if(x==2)
gBest=pBest2;
end
if(x==3)
gBest=pBest3;
end
fj(j)=fmin;
j=j+1;
end
gBest
y=fmin
x=1:N;
y1=fj(x);
plot(x,y1);
实验分析:
迭代次数为10次:
迭代次数为100次:
迭代次数为1000次:
精度方面;
观察图像,可以看到10次迭代效果显著,100次迭代结果达到很好的精度,1000次几乎看不见前期迭代函数值,表明远不需要太大的迭代次数,结果均收敛。
时间方面:
经过多次试验,迭代时间都在一秒内完成,算法效率高。
实验总结:
个人认为该算法与前两次实验算法比较,有如下优点
- 在可接受的误差范围内非常快速的收敛;
- 运行速度也很快;
- 代码量小;
- 结构简单,容易实现;
本例为两输入,一输出,实验证明,粒子群算法简单易实现,达到了本例的预期效果,结果快速收敛到目标值。在解决该类问题上是一种优异的算法
完成日期:2017.6.1
当年的计算智能课作业
文章知识点与官方知识档案匹配,可进一步学习相关知识算法技能树首页概览34471 人正在系统学习中
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!