目录
一、粒子群优化算法简介
粒子群优化算法是一种全局搜索算法,作为进化计算的一个分支,同时它也是一种模拟自然界的生物活动以及群体智能的随机搜索算法。因此粒子群优化算法一方面吸取了人工生命、鸟群觅食、鱼群学习和群理论的思想,另一方面又具有进化算法的特点,和遗传算法、进化策略、进化规划等算法有相似的搜索和优化能力。
PSO中,每个优化问题的解都是粒子,所有的粒子都有一个由被优化的函数决定的适应值,粒子会追随当前的最优粒子在解空间中搜索。PSO初始化为一群随机粒子,然后通过迭代找到最优解,在每一次叠代中,粒子通过跟踪两个“极值”来更新自己。第一个就是粒子本身所找到的最优解,这个解叫做个体极值pBest,另一个极值是整个种群找到的最优解,这个极值是全局极值gBest。另外也可以不用整个种群而只是用其中一部分最优粒子的邻居,那么在所有邻居中的极值就是局部极值。
二、算法流程
1.初始化粒子群体、随机位置和速度
2.根据fitness function评价每个粒子的适应度
3.对每个粒子,将其当前适应值与其个体历史最佳位置pbest对应的适应值做比较,如果当前的适应值更高,则将用当前位置更新历史最佳位置pbest
4.对每个粒子,将其当前适应值与全局最佳位置gbest对应的适应值做比较,如果当前的适应值更高,则将用当前粒子的位置更新全局最佳位置pbest
5.根据公式更新每个粒子的速度和位置
6.如果未满足结束条件,则返回步骤2,通常算法达到最大迭代次数Gmax或者最佳适应度值的增量小于某个给定的阈值时算法停止
三、参数设置比较
初始情况运行结果图如下:
函数使用如下:
fun.m
function y = fun(x,label)
%函数用于计算粒子适应度值
%x input 输入粒子
%y output 粒子适应度值
if label==1
y=Rastrigin(x);
elseif label==2
y=Schaffer(x);
else
y= Griewank(x);
end
Drawfunc.m
function Drawfunc(label)
x=-5:0.05:5;%41列的向量
if label==1
y = x;
[X,Y] = meshgrid(x,y);
[row,col] = size(X);
for l = 1 :col
for h = 1 :row
z(h,l) = Rastrigin([X(h,l),Y(h,l)]);
end
end
surf(X,Y,z);
shading interp
xlabel('x1-axis'),ylabel('x2-axis'),zlabel('f-axis');
title('mesh');
end
if label==2
y = x;
[X,Y] = meshgrid(x,y);
[row,col] = size(X);
for l = 1 :col
for h = 1 :row
z(h,l) = Schaffer([X(h,l),Y(h,l)]);
end
end
surf(X,Y,z);
shading interp
xlabel('x1-axis'),ylabel('x2-axis'),zlabel('f-axis');
title('mesh');
end
if label==3
y = x;
[X,Y