粒子群算法matlab代码

 

实验目的:

 

验证课本例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)<-10)

    x1=[-10,x1(2)];

end

if(x1(2)>10)

    x1=[x1(1),10];

end

if(x1(2)<-10)

    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)<-10)

    x2=[-10,x2(2)];

end

if(x2(2)>10)

    x2=[x2(1),10];

end

if(x2(2)<-10)

    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)<-10)

    x3=[-10,x3(2)];

end

if(x3(2)>10)

    x3=[x3(1),10];

end

if(x3(2)<-10)

    x3=[x3(1),-10];

end

%评估粒子的适应度函数值,更新粒子的历史最优位置和全局的最优位置

f1_temp=x1(1)^2+x1(2)^2;

if(f1_temp<f1)

    f1=f1_temp;

    pBest1=x1;

end

f2_temp=x2(1)^2+x2(2)^2;

if(f2_temp<f2)

    f2=f2_temp;

    pBest2=x2;

end

f3_temp=x3(1)^2+x3(2)^2;

if(f3_temp<f3)

    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次:        

预期函数值为0,此处仅贴出第10次,第100次和第1000次结果,其它仅需更改for循环次数N即可;

精度方面;

观察图像,可以看到10次迭代效果显著,100次迭代结果达到很好的精度,1000次几乎看不见前期迭代函数值,表明远不需要太大的迭代次数,结果均收敛。

时间方面:

经过多次试验,迭代时间都在一秒内完成,算法效率高。

 

实验总结:

 

个人认为该算法与前两次实验算法比较,有如下优点

  1. 在可接受的误差范围内非常快速的收敛;
  2. 运行速度也很快;
  3. 代码量小;
  4. 结构简单,容易实现;

本例为两输入,一输出,实验证明,粒子群算法简单易实现,达到了本例的预期效果,结果快速收敛到目标值。在解决该类问题上是一种优异的算法

 

完成日期:2017.6.1


当年的计算智能课作业

  • 6
    点赞
  • 48
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值