基本粒子群算法matlab 程序

转载自:http://www.cnblogs.com/MnsterLu/p/5562451.html

算法没有和图像处理直接相关,

不过对于图像分类中的模式识别相关算法,

也许会用到这个优化算法。

不过不管有没有用,

还是得一步一步学起来

算法步骤:

1.首先确定粒子个数与迭代次数。

2.对每个粒子随机初始化位置与速度。

3.采用如下公式更新每个粒子的位置与速度。

Px=Px+Pv*t; %位置更新公式 

Pv=Pv+(c1*rand*(Gx-Px))+(c2*rand*(PBx-Px)); %速度更新公式

 

main.m

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
[xm,fv]=PSO(@fitness,40,2,2,0.5,100,30)
for i =1:30
     s( i )=0.;
end
for i =1:30
     
     F=0;
     for j =1:30
         F=F+xm( i )^2+xm( i );
     end
     s( i )=F;
end
plot (xm,s, '*' )
    

 

PSO.m

复制代码
function [ xm,fv ] = PSO( fitness,N,c1,c2,w,M,D )
%PSO Summary of this function goes here
%   Detailed explanation goes here
format long;
for i=1:N
    for j=1:D
        x(i,j)=randn;
        v(i,j)=rand;
    end
end
for i=1:N
    p(i)=fitness(x(i,:));
    y(i,:)=x(i,:);
end
pg= x(N,:);
for i=1:(N-1)
    if fitness(x(i,:))<fitness(pg)
        pg=x(i,:);
    end
end
for t=1:M
    for i=1:N
        v(i,:)=w*v(i,:)+c1*rand*(y(i,:)-x(i,:))+c2*rand*(pg-x(i,:));
        x(i,:)=x(i,:)+v(i,:);
        if fitness(x(i,:))<p(i)
            p(i)=fitness(x(i,:));
            y(i,:)=x(i,:);
        end
        if p(i)<fitness(pg)
            pg=y(i,:);
        end
    end
    Pbest(t)=fitness(pg);
end
xm = pg';
fv =fitness(pg);



end
复制代码

这个就是优化的函数,

就是求它的最小值,

也可能是局部最小值,

反正大家自己感悟

fitness.m

?
1
2
3
4
5
6
7
8
function F = fitness( x )
%F Summary of this function goes here
%   Detailed explanation goes here
F=0;
for i =1:30
     F=F+x( i )^2+x( i );
 
end

  

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值