目录
0 引言
粒子群优化算法(Particle swarm optimization,PSO)是1995 年由Eberhart 博士和kennedy 博士提出进化群智能算法,源于对信息循环和鸟群捕食的行为研究 。该算法是对鸟类群体中的个体对信息的共享,使整个群体的运动在问题求解空间中产生从无序到有序的演化过程,从而获得最优解。
1 数学模型
PSO数学模型主要将鸟群抽象看成粒子形式,并赋予其位置和速度这俩个属性进行鸟群捕食时位置的产生,见其与猎物的差距赋予适应度表示,从而不断更新其自身位置。主要进行下式模型:
1)初始化:初始化粒子的速度、位置、个体最优适应度、全体最优适应度。
式(2)为种群位置初始值,其中i为种群数,D为数学维度,式(1)位置最优适应度值和目标适应度对比,选出个体和全局最有个体,速度初始值假设为一致数值=。
2)粒子位置更新:粒子的运动方程轨迹。
3)粒子速度更新:速度向量控制着粒子在搜索空间中移动的方式,其中该方程主要由记忆项、自身认知项和群体认知项组成。
式C1为个体学习因子,C2为群体的学习因子,P为个体最优位置,g为群体最优位置,R1R2为随机因子。
3)PSO速度标准形式:基于上述研究,可以法上速度更新容易出现速度爆炸形式,通过引入惯性因子调整速度动态形式,其式子如下:
4)边界处理:粒子移动到超过搜索空间的极限时需引入了一个速度阈值,其数学模型见下式:
2 优化方式
前篇对长短期记忆神经网络(长短期记忆神经网络LSTM原理及matlab代码-CSDN博客)原理讲解,从长短期记忆神经网络matlab代码运算过程中,可以看到LSTM受多个超参数影响(隐藏层节点、学习率、分批量、正则化等等)。因此结合上述PSO原理介绍,可以将这些超参数作为鸟类种群,每一个种群对应LSTM的预测值,将这个预测值作为适应度进行上述鸟类粒子的活动更新自身位置。
3 Matlab代码
3.1 伪代码
3.2 PSO主函数代码
%%
%SYD 适应度函数
%dim 问题维度
%nPop 种群
%MaxIt 最大迭代次数
% PSO参数
CostFunction=@(x) SYD(x);
nVar=dim;
VarSize=[1 nVar];
VarMin=[0.001,5,0.0001];
VarMax= [0.01,20,0.01];
w=1; % 惯性权重
wdamp=0.99; % 惯性权重阻尼比
c1=1.5; % 个体学习因子
c2=2.0; % 全体学习因子
VelMax=0.1*(VarMax-VarMin);
VelMin=-VelMax;
%% 初始化
empty_particle.Position=[];
empty_particle.Cost=[];
empty_particle.Velocity=[];
empty_particle.Best.Position=[];
empty_particle.Best.Cost=[];
particle=repmat(empty_particle,nPop,1);
GlobalBest.Cost=inf;
for i=1:nPop
% 初始化种群位置
particle(i).Position=unifrnd(VarMin,VarMax,VarSize);
% 初始化速度
particle(i).Velocity=zeros(VarSize);
% 初始化适应度
particle(i).Cost=CostFunction(particle(i).Position);
% 更新个体最优位置
particle(i).Best.Position=particle(i).Position;
particle(i).Best.Cost=particle(i).Cost;
% 更新全局最优位置
if particle(i).Best.Cost<GlobalBest.Cost
GlobalBest=particle(i).Best;
end
end
BestCost=zeros(MaxIt,1);
%% PSO主函数
for it=1:MaxIt
for i=1:nPop
% 更新速度
particle(i).Velocity = w*particle(i).Velocity ...
+c1*rand(VarSize).*(particle(i).Best.Position-particle(i).Position) ...
+c2*rand(VarSize).*(GlobalBest.Position-particle(i).Position);
% 速度边界
particle(i).Velocity = max(particle(i).Velocity,VelMin);
particle(i).Velocity = min(particle(i).Velocity,VelMax);
% 更新位置
particle(i).Position = particle(i).Position + particle(i).Velocity;
% 超边界处理
IsOutside=(particle(i).Position<VarMin | particle(i).Position>VarMax);
particle(i).Velocity(IsOutside)=-particle(i).Velocity(IsOutside);
% 位置限制
particle(i).Position = max(particle(i).Position,VarMin);
particle(i).Position = min(particle(i).Position,VarMax);
% 适应度
particle(i).Cost = CostFunction(particle(i).Position);
% 更新个体最优位置
if particle(i).Cost<particle(i).Best.Cost
particle(i).Best.Position=particle(i).Position;
particle(i).Best.Cost=particle(i).Cost;
% 更新全局最优位置
if particle(i).Best.Cost<GlobalBest.Cost
GlobalBest=particle(i).Best;
end
end
end
BestCost(it)=GlobalBest.Cost;
w=w*wdamp;
end
3.3 PSO-LSTM
1)时间序列:时间序列:粒子群算法优化长短期记忆神经网络模型(PSO-LSTM)
4 视频讲解
B站搜索:‘不想学习的陈成’