目录
0 引言
为了提高BA算法的全局搜索能力和局部开发性能,Redouane Boudjemaa等人于2020年提出改进的蝙蝠算法(FLLBA)。该算法主要提出了分数阶Levy飞行蝙蝠算法,提高BA算法全局性能,同时引入DE等算子提高算法局部能力。
1 数学模型
FLFBA是在BA基础上引入分数阶、DE算子和分数阶飞行策略,综合提高BA性能,其数学模型如下:
1)BA的数学模型:见主页上篇。
2)定义分数阶微积分:采用分数阶采用黎曼-刘维尔分数阶导数
式中Γ(x)是伽马函数,m−1≤α < m,右边是按点方向定义在(0,+∞)上。
3)改进蝙蝠初始速度更新:基于对分数阶定义,速度项是根据分数阶微分公式计算,其数学模型如下:
式中Sk是用方程(17)递归计算得到的,o是在整数1和整数10之间随机选择的分数阶导数的阶数。
4) 定义飞行levy策略:研究发现,不同的动物和昆虫在寻找猎物或成群飞行时,遵循着Levy的飞行行为更有利算法随机性能,其数学模型如下:
式中ζ是一个随机的步长,u,v为飞行因子,满足正态分布,β为常数项,Γ为阶乘函数,式(18)飞行策略改进蝙蝠位置更新。
5)DE策略改进:为了克服BA在局部最优值上的陷阱,提出了一个基于DE的改进版本来提高局部和全局层次上有更好的搜索能力,最值更新其速度:
式中其中x(t,q)是从总体中随机选择的解,ξ1和ξ2是[0,1]范围内的学习因子。ξinit为初始值、T为最大迭代次数,t实际迭代次数,V为分数阶改进后速度更新。
6)分数阶和飞行策略混合改进:尽管BA具有简单性和灵活性的优势,但仍然缺乏逃避局部最优的机制。因此提出微分进化和极限飞行的创新蝙蝠算法,更新蝙蝠回声定位后的位置。
式中Ai为第i个相关响度值,A¯为响度向量的平均值。
7)更新下一轮种群:基于改进策略和基础BA得到种群位置进行对比适应度函数,得到下一轮迭代的位置向量。
2 模型性能可视化图
FLFBA-BP和BA-BP的预测模型性能可视化图如下:数据集来源UCI回归数据集。
1)精度指标:
2)寻优指标:
3 MATLAB代码
3.1 伪代码
3.2 主函数代码
for iteration = 1 : M
% 迭代参数
freq = rand(pop,dim).* (freqMax-freqMin)+freqMin;%Eq(2)
w = (wMax-wMin)*(M-iteration)/(1.0*M)+wMin; %惯性重量
xsi1 = 1+((xsi_init-1)*((M-iteration)/M)^n);%Eq(23)学习因子
xsi2 = 1-xsi1;%Eq(23)
meanA = mean(A);
meanP = mean(pX);
for i = 1 : pop
if rand < 0.5 %0.5
q1 = randi([1 pop]);
q2 = randi([1 pop]);
X1 = pX(q1,:);
X2 = pX(q2,:);
newX=fm_BA(pX(i,:),X1,X2); % Eq(24-25)
fnew= SYD(newX',net);
net.trainParam.showCommandLine = 0;
[pX(i,:),pFit(i)]=select_fit(pX(i,:),newX,fnew,pFit(i));
% Levy飞行轨迹
u=randn(1,dim)*sigma;
VV=randn(1,dim);
step=u./abs(VV).^(1/beta);
stepsize = 0.01*step.*randn(1,dim); %Eq(26)
x(i,:)=pX(i,:)+stepsize.*abs(meanP-x(i,:));%Eq(26)
else % 使用分数导数
t1 = randi([1 10]);
q = randi([1 pop]);
while q== i
q = randi([1 pop]);
end
% 速度项是根据分数阶微分公式计算
Vh = reshape(Vhist(:,i,:),10,dim);
vout = fra_dif(alfa,Vh,t1); %Eq(27)速度项
% DE改进提高随机性
v(i,:) = w.* vout + freq(i,:) .* xsi1 .*(bestX-x(i,:))+...
freq(i,:).* xsi2 .*(pX(i,:)-x(q,:)); %Eq(22)
v(i,:) = Bounds(v(i,:),vLb,vUb);
x(i,:) = x(i,:) + v(i,:);
end
% 局部搜索和Levy飞行结合
if rand > r(i)
% 另外一种Levy飞行轨迹
u=randn(1,dim)*sigma;
VV=randn(1,dim);
step=u./abs(VV).^(1/beta);
stepsize = 0.01*step;
rA = stepsize .*randn(1,dim).*(abs(A(i)-meanA)+realmin);%Eq(31)
x(i,:) = bestX .* (1+rA); %Eq(32)
end
x(i,:) = Bounds(x(i,:),lb,ub);
fit(i) = SYD(x(i,:)',net);
net.trainParam.showCommandLine = 0;
end
% 更新个人最优适应度值和全局最优个体
for i = 1 : pop
if fit(i) < pFit(i)
pFit(i) = fit(i);
pX(i,:) = x(i,:);
end
if(pFit(i)< fMin &&rand <A(i))
fMin = pFit(i);
bestX = pX(i,:);
A(i) = A(i)*alpha;%Eq(6)
r(i) = r0(i)*(1-exp(-gama*iteration));%Eq(7)
end
end
Vhist(2:10,:,:) = Vhist(1:9,:,:);
Vhist(1,:,:) = v;
fbest = fMin;
FunMin(iteration) = fMin;
end
3.3 FLFBA-BP
单输出回归预测模型、多输出回归预测模型、分类模型和时间序列模型的代码:
(改进的蝙蝠算法优化BP神经网络(FLFBA-BP)-CSDN博客)
3.4 引用文献
Boudjemaa R, Oliva D, Ouaar F. Fractional Lévy flight bat algorithm for global optimisation[J]. International Journal of Bio-Inspired Computation, 2020, 15(2): 100-112.