<>BAS原理
天牛须搜索算法(beetle antennae search,BAS)算法是2017年提出的一种
基于天牛觅食原理的适用于多目标函数优化的新技术,其生物原理为:当天牛觅食时,其并不知道食物在哪里,而是根据食物气味的强弱来觅食。天牛有两只长触角,如果左边触角收到的气味强度比右边大,那下一步天牛就会向左边飞,反之则向右飞。依据这一简单原理天牛就可以有效找到食物。与遗传算法、粒子群算法等类似,BAS
不需要知道函数的具体形式以及梯度信息,就可以自动实现寻优过程,且其个体仅为一个,寻优速度显著提高。
算法步骤如下:
(1)创建天牛须朝向的随机向量且做归一化处理
式中: rand()为随机函数; ||rands()||表示空间维度。
(2)创建天牛左右须空间坐标
(3)根据适应度函数判断左右须气味强度,即f(x_l)和f(x_r)的强度, 函数f()为适应度函数。
(4)迭代更新天牛的位置
式中:
表示在第 i次迭代时的步长因子;sign()为符号函数。
核心代码
dir=rands(k,1); dir=dir/(eps+norm(dir)); %须的方向 xleft=x+dir*d0/2; % 须的坐标 xright=
x-dir*d0/2; % 须的坐标 x=x-step*dir*sign(fleft-fright); % 下一次迭代位置
完整代码
%% 用天牛须算法来优化BP的权值和阈值,样本60个,其中每个样本具有401个特征值;NIR为样本的光谱数据,octane为60*1的辛烷值数据 %%
清空环境变量 clear; close; clc tic %% 加载数据 load spectra_data.mat % 随机产生训练集和测试集 temp=
randperm(size(NIR,1)); %训练集——50个样本 P=NIR(temp(1:50),:)'; T=octane(temp(1:50),:)'
; %测试集——10个样本 P_test=NIR(temp(51:end),:)'; T_test=octane(temp(51:end),:)'; N=
size(P_test,2); M=size(P,2); %% 归一化 [P, ps_input] = mapminmax(P,0,1);%
p_train归一化处理,范围为[0,1],默认情况下为[-1,1] P_test = mapminmax('apply',P_test,ps_input);%
对P_test采用相同的映射[T, ps_output] = mapminmax(T,0,1); %% inputnum=size(P,1);
outputnum=size(T,1); hiddennum=9;%初始隐含层神经元个数 %% 创建网络 net=newff(P,T,hiddennum);
net.trainParam.epochs = 1000; net.trainParam.goal = 1e-3; net.trainParam.lr =
0.01; %% 天牛须算法初始化 eta=0.8; c=5;%步长与初始距离之间的关系 step=30;%初始步长 n=100;%迭代次数 k=
inputnum*hiddennum+outputnum*hiddennum+hiddennum+outputnum; x=rands(k,1); bestX=
x; bestY=fitness(bestX,inputnum,hiddennum,outputnum,net,P,T); fbest_store=bestY;
x_store=[0;x;bestY]; display(['0:','xbest=[',num2str(bestX'),'],fbest=',num2str
(bestY)]) %% 迭代部分 for i=1:n d0=step/c; dir=rands(k,1); dir=dir/(eps+norm(dir));
xleft=x+dir*d0/2; fleft=fitness(xleft,inputnum,hiddennum,outputnum,net,P,T);
xright=x-dir*d0/2; fright=fitness(xright,inputnum,hiddennum,outputnum,net,P,T);
x=x-step*dir*sign(fleft-fright); y=fitness(x,inputnum,hiddennum,outputnum,net,P,
T); if y<bestY bestX=x; bestY=y; end if y<0.001 bestX=x; bestY=y; end x_store=
cat(2,x_store,[i;x;y]); fbest_store=[fbest_store;bestY]; step=step*eta; display(
[num2str(i),':xbest=[',num2str(bestX'),'],fbest=',num2str(bestY)]) end %% 可视化
figure(1) %plot(x_store(1,:),x_store(end,:),'r-o') hold on, plot(x_store(1,:),
fbest_store,'b-.') xlabel('Iteration') ylabel('BestFit') toc
* 运算量小,收敛非常快具有全局寻优能力
* 代码好理解核心代码较短,容易实现
参考文献:
[1] JIANG X Y,LI S. BAS: beetle antennae search algorithm for optimization
problems [ J ]. arXiv preprint arXiv: 1710.10724,2017.
[2] JIANG X Y,LI S. Beetle antennae search without parameter tuning( BAS-WPT)
for multi-objective optimization[J]. arXiv preprint arXiv: 1711. 02395,2017.
[3] 王甜甜, 刘强. 基于BAS-BP模型的风暴潮灾害损失预测[J]. 海洋环境科学, 2018, 37(3):457-463.