蝙蝠算法
蝙蝠算法是根据蝙蝠的回声定位特性开发的优化算法。下面为蝙蝠算法的几个基本规则。
- 蝙蝠通过回声定位可以感觉到距离,它们在食物/猎物和背景屏障之间也有差异。
- 蝙蝠的速度由(Vi)和蝙蝠的位置表示为(Xi),具有频率Fmin、变化波长λ和寻找食物的响度A0。
- 响度A0也作为Amin常量值。
文章考虑了各种参数,在Matlab中对BAT函数进行编码。
在勘探开发和遗传算子的一般背景下,我们可以分析标准BA主要组成部分的作用。从本质上说,频率调整本质上就像是突变,因为它主要起局部开发作用。然而,如果突变足够大,它也可以导致全局搜索。某些选择是通过施加相对恒定的选择压力来执行的,该选择压力由于使用到目前为止发现的当前最佳解决方案而相对恒定。与遗传算法相比,该算法没有明显的交叉,但变异因响度和脉冲发射的不同而不同。另一方面,响度和脉冲发射率的变化也可以提供自动变焦能力,因为随着搜索接近全局最优值,利用变得密集。这实质上是自动将探索阶段切换到开发阶段。
下面是利用BAT算法对基准函数进行优化得到的图形和曲线。
上图是基准函数的参数空间和目标空间曲线,左边的图形表示基准函数的参数空间,右边的图形表示同一基准函数的目标空间,该曲线显示了优化过程中目标函数的最小值,最佳适应值接近3。
下面为BA算法的MATLAB源代码。
// An highlighted block
% function [best,fmin,N_iter]=bat(para)
clc
clear
close% 算法迭代参数设置
% tol=10^(-5); % 算法结束误差
N_iter=100; % 算法运行次数
d=10; % 问题维度
n=20; % 种群数量
A=1; % 初始音量[1,2]
r=0.5; % 初始脉冲率[0,1]
alpha=0.9;
gamma=0.9;% 确定频率变化范围
Qmin=0;
Qmax=2;% 数据初始化
Q=zeros(n,1); % 频率值
v=zeros(n,d); % 速度值% 初始化种群
for i=1:nSol(i,:)=randn(1,d);Fitness(i)=Fun(Sol(i,:));
end% 找到当前最优解
[fmin,I]=min(Fitness);
best=Sol(I,:);% 开始迭代
% while (fmin>tol)
for t=1:N_iterfor i=1:nQ(i)=Qmin+(Qmax-Qmin)*rand;v(i,:)=v(i,:)+(Sol(i,:)-best)*Q(i);S(i,:)=Sol(i,:)+v(i,:);if rand>rS(i,:)=best+0.01*randn(1,d);end% 评估新解的适应度值Fnew=Fun(S(i,:));if Fnew<=Fitness(i) & rand<ASol(i,:)=S(i,:);Fitness(i)=Fnew;end% 更新当前最优解if Fnew<=fminbest=S(i,:);fmin=Fnew;end% 更新音量和脉冲发生率A=alpha*A;r=r*(1-exp(-gamma*t));end% N_iter=N_iter+n;yy(t)=fmin;
end% 输出、显示结果
% disp(['迭代次数:',num2str(N_iter)]);
disp(['最优解:',num2str(best),' 最优值:',num2str(fmin)]);
plot(yy)
// An highlighted block% 目标函数
function val=Fun(x)
% z=(1-u(1))^2+100*(u(2)-u(1)^2)^2+(1-u(3))^2;
n = size(x,2);
val = 0;
for i = 1:nval = val + x(i).^2;
end