文章目录
- 一、粒子群优化算法
- 二、相关概念和流程图
- 三、例题
- 实现
- 结果
一、粒子群优化算法
粒子群优化算法起源于鸟类觅食的经验,也就是一群鸟在一个大空间内随机寻找食物,目标是找到食物最多的地方。以下是几个条件:
(1) 所有的鸟都会共享自己的位置以及发现的食物量。
(2) 鸟群经过信息传递后知道哪个地方食物最多。
(3) 每一个鸟都会根据自己的信息和整个鸟群的信息来进行下一步应该去哪里。
二、相关概念和流程图
1.鸟群中的每一只鸟都记录自己经过位置中食物量最多的位置----个体最优解
2.每只鸟都知道整个鸟群中记录的食物量最多的位置—全局最优解
3.鸟具有惯性,有保持自身原来方向的趋势。
4.鸟学习个体经验,有向个体最优解飞行的趋势。
5.鸟学习社会经验,有向全局最优解飞行的趋势。
鸟最终飞行的大小和方向由上述几个参数决定。
其中速度更新公式:
位置更新公式:
三、例题
实现
%粒子群优化算法实现
%定义维度
dim=2;
%惯性系数
w=2;
%两个学习因子
c1=1.5;
c2=1.5;
%x最大和最小值
xMax=10;
xMin=0;
%速度的最大和最小值
Vmax=1;
Vmin=0;
%种群数目
N=500;
%迭代次数
maxg=100;
%进行初始化
for i=1:N
%第i个种群的位置初始化:x1,x2
location(i,:)=xMax*rand(1,2);
%速度初始化
V(i,:)=Vmax*rand(1,2);
%适应度初始化,也就是函数值
fitness(i)=PSO_Schaffer(location(i,1),location(i,2));
end
%全局还有个体最优初始化
[fitnessgbest,gbest_index]=min(fitness);
%全局最优x1,x2
gbest=location(gbest_index);
%局部最优
pbest=location;
%适应度最优
fitnesspbest=fitness;
%迭代进化
for i=1:maxg
for j=1:N
%速度更新
V(j,:)=w*V(j,:)+c1*(pbest(j,:)-location(j,:))+c2*(gbest-location(j,:));
for k=1:dim
if V(j,k)>Vmax
V(j,k)=Vmax;
elseif V(j,k)<Vmin
V(j,k)=Vmin;
end
end
%位置更新
location(j,:)=location(j,:)+V(j,:)*1;
for k=1:dim
if location(j,k)>xMax
location(j,k)=xMax;
elseif location(j,k)<xMin
location(j,k)=xMin;
end
end
%适应度更新
fitness(j)=PSO_Schaffer(location(j,1),location(j,2));
%全局和个体最优的更新
if fitnesspbest(j)>fitness(j)
%更新个体最优和适应度最优
pbest(j,:)=location(j,:);
fitnesspbest(j)=fitness(j);
end
if fitnessgbest>fitness(j)
gbest=location(j,:);
fitnessgbest=fitness(j);
end
w=w*0.99;
end
yy(i)=fitnessgbest;
end
%画图
figure
plot(yy);
xlabel("迭代次数")
ylabel("适应度");
function Y=PSO_Schaffer(x1,x2)
temp1=x1^2+x2^2;
temp2=sin(sqrt(temp1));
Y=0.5+((temp2^2-0.5)/((1+0.001*temp1))^2);
end
结果