适用平台:Matlab2023版及以上
凌日优化算法(Transit Search Optimization Algorithm,TSOA)是2022年8月提出的一种新颖的元启发式算法,当一颗行星经过其恒星前方时,会导致恒星的亮度微弱地下降,这被称为凌日现象。
该算法基于著名的系外行星探索方法,即凌日搜索(Transit Search,TS)。在凌日算法中,通过研究在一定间隔内从恒星接收到的光,检查亮度的变化,如果观察到接收到的光量减少,则表明行星从恒星锋面经过。创新性较高。
该算法提出时间很短,目前还没有套用这个算法的文献,先到先得,抓住该创新点哦!
完整代码:https://mbd.pub/o/bread/ZZecmp5x
TSOA算法的优化过程包括以下几个阶段:
-
星系阶段:选择搜索空间内的随机点作为星系中心,确定可居住区域,选择有最佳生存潜力的区域。
-
凌日阶段:重新测量从星体接收到的光线量,检测光线信号是否减少以确定是否有行星通过。
-
行星阶段:如果检测到凌日,确定行星的初始位置,并更新行星位置。
-
邻居阶段:如果未检测到凌日,分析当前星体附近可能存在的行星。
-
开发阶段:分析行星的特性和条件,以评估其作为生命宿主的潜力。
每个阶段的数学细节涉及复杂的方程和概率计算,模拟了在天文观测中发现和评估行星的过程。该算法的数学创新主要在于它将天文物理学中的凌日法原理和信噪比概念引入到优化问题的求解中,这一独特方法在多个基准问题上显示出了优越的性能。
优化套用:
我们利用TSOA对我们的CNN-LSTM-SelfAttention卷积神经网络(CNN)结合长短期记忆网络(LSTM)融合多头自注意力机制(Multihead Self-Attention)的回归预测程序代码中的超参数进行优化;构成TSOA-CNN-Attention预测模型。
TSOA-CNN-LSTM-Multihead SelfAttention预测模型的创新性:CNN-LSTM-SelfAttention是一种深度学习模型结构,通常用于处理序列数据,尤其适用于具有时空相关性的序列数据。这个结构结合了三种不同类型的神经网络层,以充分捕捉数据中的空间和时间特征,并具有以下结构:
卷积神经网络 (CNN):CNN用于捕捉序列数据中的空间相关性。它通过卷积核在输入数据上滑动,从局部区域提取特征,这有助于检测输入序列中的局部模式和特征。在CNN层之后通常会添加池化层来减小数据的空间维度,以降低计算复杂性。
长短时记忆网络 (LSTM):长短期记忆网络是一种循环神经网络(RNN)的变体,专门用于处理序列数据的建模。LSTM通过门控机制(输入门、遗忘门和输出门)来控制对过去信息的遗忘和记忆,从而有效地处理长序列依赖关系。在时序预测中,LSTM可以用于学习序列数据中的长期依赖关系,捕捉到序列中的时间演化模式。
自注意力层 (Self-Attention):Self-Attention自注意力机制是一种用于模型关注输入序列中不同位置相关性的机制。它通过计算每个位置与其他位置之间的注意力权重,进而对输入序列进行加权求和。自注意力能够帮助模型在处理序列数据时,对不同位置的信息进行适当的加权,从而更好地捕捉序列中的关键信息。在时序预测任务中,自注意力机制可以用于对序列中不同时间步之间的相关性进行建模。
TSOA超参数优化:凌日优化算法对模型中的难以确定的学习率、卷积核大小、神经元个数等参数进行寻优,使得模型的结构更加合理,提高了预测精度,对模型结构和训练参数进行优化,免除了人工选取参数环节,避免 了人为造成的不确定性因素,强化了模型的自适应 选择参数能力。
结合这四种层的结构,模型首先通过CNN层来捕捉输入序列的空间特征,然后通过LSTM层来捕捉时间相关性,最后通过Self-Attention层来更好地理解序列内部的关联。这种综合结构可以更全面地处理具有时空相关性的序列数据,引入TSOA优化算法,对CNN-LSTM-Attention模型参数进行寻优,使得模型的结构更加合理,提高了预测精度,构成TSOA-CNN-LSTM-Attention复合预测模型。适用于,风速预测,光伏功率预测,发电功率预测,海上风电预测,碳价预测等等。它的创新点在于综合了不同类型的神经网络层,使其适用于广泛的应用,从而提高了对序列数据的建模和分析能力。
功能:
①多变量特征输入,单序列变量输出,输入前一天的特征,实现后一天的预测,超前24步预测。
②通过TSOA优化算法优化学习率、卷积核大小、神经元个数,这3个关键参数,以最小MAPE为目标函数。
③提供损失、RMSE迭代变化极坐标图;测试对比图;适应度曲线(若首轮精度最高,则适应度曲线为水平直线)。
④提供MAPE、RMSE、MAE等计算结果展示。
适用领域:
风速预测、光伏功率预测、发电功率预测、碳价预测等多种应用。
数据集格式:
前一天18个气象特征,采样时间为24小时,输出为第二天的24小时的功率出力,也就是18×24输入,1×24输出,一共有75个这样的样本。
预测值与实际值对比结果:
训练误差曲线的极坐标形式(误差由内到外越来越接近0):
适应度曲线:
TSOA部分核心代码:
% 银河系中心的初始位置
Galaxy_Center.Location = unifrnd(Vmin,Vmax,1,nV);
Galaxy_Center.Cost = ObjectiveFunction(Galaxy_Center.Location);
% 银河系居住区
for l = 1:(ns*SN)
zone = randi(2);
if zone ==1
difference = rand().*(Galaxy_Center.Location)-(unifrnd(Vmin,Vmax,1,nV));
else
difference = rand().*(Galaxy_Center.Location)+(unifrnd(Vmin,Vmax,1,nV));
end
Noise = ((rand(1,nV)).^3).*(unifrnd(Vmin,Vmax,1,nV));
region(l).Location = Galaxy_Center.Location + difference - Noise;
region(l).Location = max(region(l).Location, Vmin);
region(l).Location = min(region(l).Location, Vmax);
[region(l).Cost,region(l).Value,region(l).net,region(l).info] = ObjectiveFunction(region(l).Location);
end
% 从银河系的银河栖息区挑选恒星的百分比
[Sort,index]=sort([region.Cost]);
for i = 1:ns
selected_regions(i) = region(index(1,i));
for k = 1:SN
zone = randi(2);
if zone ==1
difference = rand().*(selected_regions(i).Location)-rand().*(unifrnd(Vmin,Vmax,1,nV));
else
difference = rand().*(selected_regions(i).Location)+rand().*(unifrnd(Vmin,Vmax,1,nV));
end
Noise = ((rand(1,nV)).^3).*(unifrnd(Vmin,Vmax,1,nV));
new.Location = selected_regions(i).Location + difference - Noise;
new.Location = max(new.Location, Vmin);
new.Location = min(new.Location, Vmax);
[new.Cost,new.Value,new.net,new.info] = ObjectiveFunction(new.Location);
if new.Cost < Stars(i).Cost
Stars(i) = new;
end
end
end
% 最佳行星的初始位置(起点:其恒星)
Best_Planets = Stars;
完整代码:https://mbd.pub/o/bread/mbd-ZZecmp9x
部分图片来源于网络,侵权联系删除!
欢迎感兴趣的小伙伴关注下方公众号或代码末尾链接获得完整版代码,小编会继续推送更有质量的学习资料、文章和程序代码!