??本文将介绍一种新的受自然启发的元启发式优化算法——鲸鱼优化算法(WOA),该算法模拟了座头鲸的社会行为,并引入了气泡网狩猎策略。点击“这里”,可以下载MATLAB源码。
.灵感??鲸鱼被认为是世界上最大的哺乳动物。一头成年鲸可以长达30米,重80吨。这种巨型哺乳动物有7种不同的主要物种,如虎鲸,小须鲸,鳁鲸,座头鲸,露脊鲸,长须鲸和蓝鲸等。鲸通常被认为是食肉动物,它们从不睡觉,因为它们必须到海洋表面进行呼吸,但事实上,鲸鱼有一半的大脑都处于睡眠状态。??鲸鱼在大脑的某些区域有与人类相似的细胞,这些细胞被称为纺锤形细胞(spindlecells)。这些细胞负责人类的判断、情感和社会行为。换句话说,纺锤形细胞使我们人类有别于其他生物。鲸鱼的这些细胞数量是成年人的两倍,这是它们具有高度智慧和更富情感的主要原因。已经证明,鲸鱼可以像人类一样思考、学习、判断、交流,甚至变得情绪化,但显然,这都只是在一个很低的智能水平上。据观察,鲸鱼(主要是虎鲸)也能发展自己的方言。??另一个有趣的点是关于鲸鱼的社会行为,它们可独居也可群居,但我们观察到的大多数仍然是群居。它们中的一些物种(例如虎鲸)可以在整个生命周期中生活在一个家族中。最大的须鲸之一是座头鲸,一头成年座头鲸几乎和一辆校车一样大。它们最喜欢的猎物是磷虾和小鱼群。图显示的就是这种哺乳动物。
图座头鲸的气泡网进食行为
??关于座头鲸最有趣的事情是它们特殊的捕猎方法了。这种觅食行为被称为气泡网觅食法(bubble-netfeedingmethod)。座头鲸喜欢在接近海面的地方捕食磷虾或小鱼。据观察,这种觅食是通过在圆形或类似数字“9”形路径上制造独特的气泡来完成的,如图所示。在0年之前,这一行为仅仅是基于海面观测的。然而,有研究者利用标签传感器研究了这种行为。他们捕获了9头座头鲸身上个由标签得到的气泡网进食事件。他们发现了两种与气泡有关的策略,并将它们命名为上升螺旋(upward-spirals)和双螺旋(doubleloops)。在前一种策略中,座头鲸会潜到水下米左右,然后开始在猎物周围制造一个螺旋形的泡泡,并游向水面;后一种策略包括三个不同的阶段:珊瑚循环,用尾叶拍打水面以及捕获循环。这里不展开详细描述。??但是气泡网捕食是只有座头鲸独有的一种特殊行为,而鲸鱼优化算法就是模拟了螺旋气泡网进食策略达到优化的目的。
、LSTM模型长短期记忆模型(long-shorttermmemory)是一种特殊的RNN模型,是为了解决反向传播过程中存在梯度消失和梯度爆炸现象,通过引入门(gate)机制,解决了RNN模型不具备的长记忆性问题,LSTM模型的结构如图:
具体来说,LSTM模型的个神经元包含了个细胞状态(cell)和3个门(gate)机制。细胞状态(cell)是LSTM模型的关键所在,类似于存储器,是模型的记忆空间。细胞状态随着时间而变化,记录的信息由门机制决定和更新。门机制是让信息选择式通过的方法,通过sigmoid函数和点乘操作实现。sigmoid取值介于0~之间,乘即点乘则决定了传送的信息量(每个部分有多少量可以通过),当sigmoid取0时表示舍弃信息,取时表示完全传输(即完全记住)[]。LSTM拥有三个门,来保护和控制细胞状态:遗忘门(forgetgate)、更新门(updategate)和输出门(outputgate)。细胞状态类似于传送带。直接在整个链上运行,只有一些少量的线性交互。信息在上面流传保持不变会很容易。如图:
%%clcclearallcloseall%加载数据,重构为行向量num=00;x=:num;db=0.;data=abs(0.5.*sin(x)+0.5.*cos(x)+db*rand(,num));data=data;%把你的负荷数据赋值给data变量就可以了。%data是行向量。要是还不明白,就留言吧。%%%序列的前90%用于训练,后0%用于测试numTimeStepsTrain=floor(0.9*numel(data));dataTrain=data(:numTimeStepsTrain+);dataTest=data(numTimeStepsTrain+:end);%数据预处理,将训练数据标准化为具有零均值和单位方差。mu=mean(dataTrain);sig=std(dataTrain);dataTrainStandardized=dataTrain;%输入LSTM的时间序列交替一个时间步XTrain=dataTrainStandardized(:end-);YTrain=dataTrainStandardized(:end);%%%创建LSTM回归网络,指定LSTM层的隐含单元个数96*3%序列预测,因此,输入一维,输出一维numFeatures=;numResponses=;numHiddenUnits=0*3;layers=[...sequenceInputLayer(numFeatures)lstmLayer(numHiddenUnits)fullyConnectedLayer(numResponses)regressionLayer];%%WOAlb=0.00;%学习率下限ub=0.;%学习率上限%MainloopwhiletMax_itertend%将预测值与测试数据进行比较。figure()subplot(,,)plot(YTest,gs-,LineWidth,)holdonplot(YPred_best,ro-,LineWidth,)holdofflegend(观测值,预测值)xlabel(时间)ylabel(数据值)title(ForecastwithUpdates)subplot(,,)stem(YPred_best-YTest)xlabel(时间)ylabel(均方差值)title(均方差图)figure()plot(dataTrain(:end-))holdonidx=numTimeStepsTrain:(numTimeStepsTrain+numTimeStepsTest);plot(idx,[data(numTimeStepsTrain)YPred_best],.-)holdoffxlabel(时间)ylabel(数据值)title(预测图)legend(观测值,预测值)figure(3)plot(:Max_iter,Convergence_curve,bo-);holdon;title(鲸鱼优化后Error-Cost曲线图);xlabel(迭代次数)ylabel(误差适应度值)预览时标签不可点收录于话题#个上一篇下一篇