极光优化算法(Polar Lights Optimizer, PLO),于2024年8月28日发表在SCI、中科院顶级期刊《Neurocomputing》上。该算法刚提出没几天,近期绝对没有套用这个算法的文献,先到先得,抓住该创新点哦!
我们利用PLO对我们的CNN-BiGRU-SelfAttention时序和空间特征结合-融合多头自注意力机制的回归预测程序代码中的超参数进行优化。
基于物理定律的旋转运动模型:PLO算法引入了一个独特的旋转运动模型,模拟了高能粒子在地球磁场的作用下被偏转并与大气分子碰撞的情况。该模型模拟大气对带电粒子的速度衰减效应,通过物理定律来帮助粒子在局部利用阶段仔细搜索最优解,并在算法迭代过程中逐渐提高收敛精度。
极光椭圆行走策略:PLO算法引入了极光椭圆行走策略,通过模拟高能粒子在极地上空逐渐汇聚并形成发光椭圆环的现象,粒子在椭圆环内自由移动,并随地球磁场的变化而混乱地跟随。该策略允许高能粒子在动态步长内搜索整个空间,并以粒子群的质心为指导,确保整个粒子群的收敛方向,从而提高了全局搜索能力 。
粒子碰撞策略:PLO算法还引入了粒子碰撞策略,模拟高能粒子在整个飞行过程中发生的混乱无序的碰撞行为。该策略增强了算法跳出局部最优解的能力,使得算法在复杂的优化空间中具有更强的全局探索能力和局部开发能力 。
无参数优化:与许多需要预先定义额外参数的算法不同,PLO不需要额外的参数设定。这使得PLO在应用于复杂问题时具有显著的优势,简化了算法的应用,并减少了对问题特定的参数调整需求 。
全局探索与局部开发的平衡:PLO算法通过旋转运动和极光椭圆行走这两种策略的结合,实现了全局探索与局部开发的平衡。通过调整搜索步长和探索空间的策略,PLO能够在搜索过程的早期阶段逐步探索全局最优解,同时通过积累经验逐步提高对局部区域的开发精度 。
Levy飞行动态调整步长:在 PLO 算法中,Levy 飞行与极光椭圆步策略结合使用,通过模拟带电粒子在极光带中的复杂运动模式,使得算法能够在全局范围内快速跳跃和定位有潜力的解空间区域。这种结合使得 PLO 在探索新的解空间区域时更加高效,进一步提升了算法的全局探索能力。
CNN-BiGRU-SelfAttention模型的创新性:
①结合卷积神经网络 (CNN) 和双向门控循环单元 (BiGRU):CNN 用于处理多变量时间序列的多通道输入,能够有效地捕捉输入特征之间的空间关系。BiGRU 是一种能够捕捉序列中长距离依赖关系的递归神经网络。通过双向性,BiGRU 可以同时考虑过去和未来的信息,提高了模型对时间序列动态变化的感知能力。 ②引入多头自注意力机制 (Multihead Self-Attention): 多头自注意力机制使得模型能够更灵活地对不同时间步的输入信息进行加权。这有助于模型更加集中地关注对预测目标有更大影响的时间点。自注意力机制还有助于处理时间序列中长期依赖关系,提高了模型在预测时对输入序列的全局信息的感知。
优化套用:基于极光优化算法(LPO)、卷积神经网络(CNN)和双向门控循环单元 (BiGRU)融合多头自注意力机制的超前24步多变量时间序列回归预测算法。
功能:
多变量特征输入,单序列变量输出,输入前一天的特征,实现后一天的预测,超前24步预测。
通过PLO优化算法优化学习率、卷积核大小、神经元个数,这3个关键参数,以最小MAPE为目标函数。
提供损失、RMSE迭代变化极坐标图;网络的特征可视化图;测试对比图;适应度曲线(若首轮精度最高,则适应度曲线为水平直线)。
提供MAPE、RMSE、MAE等计算结果展示。
适用领域:风速预测、光伏功率预测、发电功率预测、碳价预测等多种应用。
%% 清除内存、清除屏幕
clc
clear
%% 导入特征数据、当天的风速数据
data = xlsread('特征序列及实际值.xlsx');
Features = data(1:18,:); %% 特征输入 :75天,每天24小时,每小时一个采样点,共计75*24=1800小时,18个特征数据
Wind_data = data(19,:); %% 实际值输出:75天,每天24小时,每小时一个采样点,共计75*24=1800小时的风速数据
%% 数据平铺为4-D
LP_Features = double(reshape(Features,18,24,1,75)); %% 特征数据格式为18*24*1*75,分别对应18特征24小时,75天
LP_WindData = double(reshape(Wind_data,24,1,1,75)); %% 实际数据格式为24*1*1*75 ,分别对应24小时,75天
%% 格式转换为cell
NumDays = 75; %% 数据总天数为 75天
for i=1:NumDays
FeaturesData{1,i} = LP_Features(:,:,1,i);
end
for i=1:NumDays
RealData{1,i} = LP_WindData(:,:,1,i);
end
%% 划分数据
XTrain = FeaturesData(:,1:73); %% 训练集输入为 1-73 天的特征
YTrain = RealData(:,2:74); %% 训练集输出为 2-74天 的实际值
XTest = cell2mat(FeaturesData(: , 74)); %% 测试集输入第 74 天的特征
Ytest = cell2mat(RealData(: , 75)); %% 测试集输出为第 75天 的实际值
N = size(Ytest,1);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% 优化算法信息
SearchAgents_no = 3; %% 搜索个体的数量
Max_iter = 10; %% 最大迭代次数
lb = [0.001, 1, 1]; %% 寻优参数下限 [学习率, 卷积核大小, 神经元数量];
ub = [0.01, 5, 120]; %% 寻优参数上限 [学习率, 卷积核大小, 神经元数量];
dim = 3; %% 有几个需要优化的参数就是几维
fobj = @objectiveFunction;%% 目标函数
%% 极光优化算法PLO优化超参数
[Leader_score, Leader_pos, Convergence_curve, bestPred, bestNet, bestInfo] = PLO(SearchAgents_no, Max_iter, lb, ub, dim, fobj);
%% 优化结果导出
Best_Cost = Leader_score; %% 最佳适应度
Best_Solution = Leader_pos; %% 最佳网络参数
bestPred = bestPred{1}; %% 最佳预测值
bestNet = bestNet{1}; %% 最佳网络
bestInfo = bestInfo{1}; %% 最佳训练曲线
% 显示优化结果
disp(['优化所得参数分别为' num2str(Leader_pos)]);
完整代码:https://mbd.pub/o/bread/ZpqXlpht
欢迎感兴趣的小伙伴点击“阅读原文”或上方链接获得完整版代码哦~
关注小编会不定期推送高创新型、高质量的学习资料、文章程序代码,为你的科研加油助力~