算法没有和图像处理直接相关,
不过对于图像分类中的模式识别相关算法,
也许会用到这个优化算法。
不过不管有没有用,
还是得一步一步学起来
算法步骤:
1.首先确定粒子个数与迭代次数。
2.对每个粒子随机初始化位置与速度。
3.采用如下公式更新每个粒子的位置与速度。
Px=Px+Pv*t; %位置更新公式
Pv=Pv+(c1*rand*(Gx-Px))+(c2*rand*(PBx-Px)); %速度更新公式
main.m
[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
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