目录
0 引言
差分进化算法(Differential Evolution,DE)是由Storn等人在19950年提出一种进化智能算法,它是通过模拟群体内个体间的合作与竞争而产生的全局搜索策略,采用实数编码、基于差分的简单变异操作和“一对一”的竞争生存策略,降低了进化计算操作的复杂性。
1数学模型
DE的工作原理在两个阶段:初始化和演化。在第一阶段,种群是随机产生的,在第二阶段,即进化,产生的种群经过突变、交叉和选择过程,这些过程不断重复,直到满足最大迭代要求。
第一阶段:初始化
(1)种群初始化:在初始化过程中,生成一组均匀分布种群:
式中Xlow、Xupp为种群编码的上下界。
第二阶段:演化
(2)变异:在突变过程中,为每个目标载体X𝑗(G)在第𝐺代生成一个突变载体𝑉𝑗(G):
式中F为突变因子,Xr1、Xr2、Xr3为随机编码个体
图1 变异方案
(3)交叉:个体突变后,进行交叉生成一个新的向量,称为试验向量,具体操作如下数学模型:
式中Cr为交叉概率
图2 交叉方案
(3)选择:根据目标向量和试验向量的适应度值进行比较,选拔出拥有更好生存能力赋予到下一代。此操作的执行方式如下
式中f(X)代表编码个体对应适应度值
图3 选择方案
2 优化长短期记忆神经网络
2.1 优化的方式
前篇对长短期记忆神经网络(长短期记忆神经网络LSTM原理及matlab代码-CSDN博客)原理讲解,从长短期记忆神经网络matlab代码运算过程中,可以看到LSTM受多个超参数影响(隐藏层节点、学习率、分批量、正则化等等)。因此结合上述DE原理介绍,可以将这些超参数作为DE编码个体,赋予问题维度作为个体长度,每一个个体赋予适应度作为LSTM的预测值,进行上述DE算法演化活动。
2.2 伪代码
3 matlab代码
3.1 DE主函数代码
%%参数
% de_Maxiter 最大迭代次数
% de_pop 编码总数
% CR 交叉概率
% dim 问题维度
% F 变异因子
% fun 适应度函数
%% 开始循环
for time = 1 :de_Maxiter
for i = 1: de_pop
%变异
r = randperm(de_pop, 5);
mutantpos = Sol(r(1),:)+ F* (Sol(r(2),:)-Sol(r(3),:))...
+ F* (Sol(r(4),:)-Sol(r(5),:));
% 交叉
jj = randi(dim);
for d = 1:dim
if rand()< CR || d ==jj
crossoverpos(d) = mutantpos(d);
else
crossoverpos(d) = Sol(i,d);
end
end
% 检查是否越界
crossoverpos(crossoverpos>ub) = ub(crossoverpos>ub);
crossoverpos(crossoverpos<lb) = lb(crossoverpos<lb);
% 选择
new_fitness = fun(crossoverpos);
if new_fitness < Fitness(i)
Sol(i,:) = crossoverpos;
Fitness(i) = new_fitness;
end
end
[de_best, bestindex] = min(Fitness);
de_Sol = Sol(bestindex,:);
de_Fitness = de_best;
% 适应度
Fitnesstime(time) = de_best;
disp(['第' num2str(time), '代:' num2str(de_best)]);
end
3.2 DE-LSTM代码
1)时间序列:时间序列:差分进化算法优化长短期记忆神经网络(DE-LSTM)
4 视频讲解
B站搜索:‘ 不想学习的陈成 ’