目录
0 引言
蝙蝠算法(Bat Algorithm,BA)是Xin-She Yang于2010基于蝙蝠回声定位提出的智能算法。该算法模拟蝙蝠利用回声定位来感应和猎物距离,并进行捕食的行为,从而不断更新自身位置和速度。
1 数学模型
BA数学模型主要对蝙蝠回声定位后速度和位置变化的更新,但其受回声频率和回声响度影响,具体方式如下:
1)声波频率定义:BA在位置和速度更新前,会随机自身的回声频率f,其表达式如下:
式中fmax,min为其回声频率的最值,β∈[0,1]是一个从均匀分布中抽取的随机向量。
2)速度更新:蝙蝠会根据自身当前速度和全局蝙蝠位置来更新下一阶段自身位置:
式中t为迭代次数,X*为全局最佳蝙蝠位置。
3)位置更新:蝙蝠基于自身速度实现下一阶段位置更新:
4)随机飞行:BA对于局部搜索部分,一旦在当前的最佳解决方案中选择了一个解决方案,就会使用局部随机游走为每个蝙蝠生成一个新的解决方案,提高模型多样性:
式中ε∈[−1,1]是一个随机数,A为蝙蝠所有响度的均值
5)响度和脉冲频率更新:当位置更新完后,蝙蝠会比较自身位置向量(适应度),选择优势向量进行飞行和位置更新,同时更新自身的响度和脉冲频率:
式中α和γ为常数项。
2 优化方式
前篇对BP神经网络原理讲解(BP神经网络原理及Matlab代码复现-CSDN博客),从BP神经网络原理讲解中可以发现预测值主要受权值和阈值调整修正完成。因此结合上述BA原理介绍,可以将BP神经网络权值和阈值作为蝙蝠种群位置,每一个种群位置对应BP神经网络的预测值,将这个预测值作为适应度进行比较,更新自身响度和脉冲频率,通过回声定位更新自身位置,寻求更优的蝙蝠位置个体。
3 MATLAB代码
3.1 伪代码
3.2 BA主函数代码
%% 具体迭代过程
while t <= maxT
for i = 1:sizep
bata = rand();
Q(i)=Qmin+(Qmax-Qmin)*bata;% eq(1)
popv(i,:)=popv(i,:)+(pop(i,:)-bestS)*Q(i);% eq(2)速度
Stemp = pop(i,:)+popv(i,:);% eq(3)
% 脉冲率
if rand>r(i)
Stemp=bestS-1+2*rand(1,dim);
end
fitTemp = SYD(Stemp,net);
net.trainParam.showWindow = 0;
if (fitTemp<=pfitness(i))&&(rand()<A(i))
pop(i,:) = Stemp;
pfitness(i) = fitTemp;
A(i) = Af*A(i);
r(i) = r0*(1-exp(-Rf*t));
end
if fitTemp <= bestMin
bestMin = fitTemp;
bestS = Stemp;
end
end
bestArchive(t) = bestMin;
t = t +1;
end
end
3.3 BA-BP
单输出回归预测模型、多输出预测回归模型、分类模型、时间序列: