标签:osi for pre 实现 速度 rand 自身 ros position
粒子群算法是基于鸟群觅食的行为提出来的,每一个单一个体鸟视为搜索空间的一个粒子,都被视为问题的可能解,每个粒子都有一个由待优化函数决定的适应度函数,通过适应度值迭代更新粒子的位置和速度
粒子速度和位置的维度由问题的未知量决定,例如,求sin(∑i=1 to kxi-4)的最小值,如果k=2,那么速度V和位置X就是二维的,如果k=20,那么V和X都是20维的
设粒子i的历史最优位置为p,种群粒子的历史最优位置为pg,粒子按照下式来更新位置和速度:
v=w*v+c1r1(p-x)+c2r2(pg-x) c1和c2是加速常数,r1和r2是[0,1]之间的随机数
x=x+v
w*x表示粒子有维持自身速度的趋势,c1r1(p-x)表示粒子有向粒子历史最优位置移动的趋势,c2r2(pg-x)表示粒子有想群体最优位置逼近的趋势
算法流程:
1,初始化粒子群体,包括粒子种群数,每个粒子的速度和位置
2,计算各个粒子的适应度值
3,对于每个粒子,用它的适应度值与个体极值比较,如果fit>p,就p=fit
4,比较p和pg如果,p>pg,那么pg=p
5,根据上面的两式更新x和v
6,直到满足条件,否则返回2
下面的例子是由matlab实现的
function pso()
c1=2;
N=50;
D=30;
M=500;
c2=2;
w=0.7;
xx=zeros(1,D);
F=fitnessfunction(xx);
[x,y]=tso(@fitnessfunction,c1,c2,w,N,D,M);
end
%适应度函数
function F=fitnessfunction(x)
F=0;
for i=1:30
F=F+x(i)^2+x(i)-6;
end
end
function [x,y]=tso(fitness,c1,c2,w,N,D,M)
%初始化位置和速度
for i=1:N
for j=1:D
x(i,j)=randn;
v(i,j)=randn;
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 i=1:M
for j=1:N
v(j,:)=w*v(j,:)+c1*rand*(y(j,:)-x(j,:))+c2*rand*(pg-x(j,:));
x(j,:)=x(j,:)+v(j,:);
if fitness(x(j,:))<p(j)
p(j)=fitness(x(j,:));
y(j,:)=x(j,:);
end
if p(j)<fitness(pg)
pg=y(j,:)
end
end
end
disp(‘the position is:‘)
x=pg‘
disp(‘the value is‘)
y=fitness(pg)
end
标签:osi for pre 实现 速度 rand 自身 ros position
原文地址:http://www.cnblogs.com/semen/p/6886283.html