目录
0 引言
蚁狮算法(Ant Lion Optimizer,ALO)是由Seyedali Mirjalili于2015年提出的自然启发算法,ALO算法模拟了自然界中蚁狮的狩猎机制。采用了蚂蚁随机行走、蚂蚁掉入陷阱、诱捕蚂蚁、精英策略和重铸陷阱等五个主要步骤,在不同问题中皆可体现问题寻优可行解、局部和全局解。
1 数学模型
ALO模型通过模拟上述策略进行问题寻优,其数学模型分别见下式:
1)蚂蚁随机行走:蚂蚁在自然界中寻找食物时在是随机移动的,所以我们选择了一个随机行走来模拟蚂蚁的运动,在实际问题角度中,该随走是具有边界化,故其数学模型如下:
式中X为蚂蚁随机行走的位置;αi为第i个变量的随机游走的最小值,di是第i个变量中随机游走的最大值;ct i和dt i是第t次迭代时第i次变量的最小值和最大值。下图为蚂蚁3次随机行走趋势图。
2)蚁狮中蚂蚁随机行走影响:蚂蚁的随机行走会受到蚁狮陷阱的影响。为了对这一假设进行数学模型,提出了以下方程式:
式中Antlion为蚁狮的位置,ct是在t次迭代最小的所有变量,dt表示在t次迭代包括最大变量。
3)蚁狮构建陷阱:为了模拟蚁狮的狩猎能力,使用了轮盘赌策略。如图3所示,假设每只蚂蚁只能被一只蚁狮捕食,在优化过程中,需要利用轮盘赌概率模拟蚁狮适应度,适应度越好的蚁狮捕食蚂蚁概率越大。
4)自适应机制:当蚁狮意识到一只蚂蚁在陷阱里时,它们就会向坑的中心向外喷射沙子防止试图逃跑的被困蚂蚁。因此蚂蚁随机行走范围会逐渐缩小,用下列自适应机制模拟此现象:
式中其中I是一个比值(I=10^w*t/T,w为定义当前迭代的常数,当 t > 0.1*T, w = 2,w = 3 当 t > 0.5*T,当 t > 0.75*T, w = 4当t > 0.9*T,w = 5 ,当t > 0.95*T,w = 6),ct是第t次迭代中所有变量的最小值,dt表示第t次迭代中所有变量的最大值。
5)捕食猎物后,蚁狮重建陷阱:为了模拟蚁狮捕猎过程,我们假设当蚂蚁适应度比蚁狮小的时候,就会捕猎。此时蚁狮就会更新自身位置进行重新捕猎适应度进一步蚁狮。
6)精英策略:精英主义是进化算法的一个重要特征,在每次迭代过程中,将适应度最好蚁狮作为精英蚁狮参与下次迭代,同时下次迭代蚂蚁产生也有精英蚁狮周围位置随机行走生成,其数学模型见下式:
其中Rt A为第t次迭代时轮盘赌策略选择的蚁狮的随机行走的位置值,Rt E为第t次迭代时精英蚁狮的随机行走的位置值,Ant ti表示第i蚂蚁在第t次迭代时的位置。
2 优化支持向量机
前篇对支持向量机(支持向量机原理及matlab代码讲解(分类SVM和回归SVR)CSDN博客)原理讲解,从支持向量机模型运算过程中,可以了解到模型高维映射核函数参数g和处罚因子c对模型预测结果影响最为重要。因此结合上述ALO原理介绍,可以将支持向量机参数c和g作为蚁狮和蚂蚁种群,每一个种群对应支持向量机的预测值,将这个预测值作为适应度进行上述蚁狮的活动。
3 Matlab代码
3.1 伪代码
3.2 ALO主函数代码
%%参数
% Current_iter 当前迭代
% Max_iter 最大迭代
% RouletteWheelSelection 轮盘赌策略
% sorted_antlion_fitness 蚁狮适应度排列
% Random_walk_around_antlion 随机行走函数构建
% dim 问题维度
% lb,ub 问题维度边界
% Sorted_antlions % 蚁狮位置排列
% Elite_antlion_position %精英蚁狮位置
% SYD 适应度函数
while Current_iter<Max_iter+1
% 此 for 循环模拟蚂蚁随机行走
for i=1:size(ant_position,1)
% 根据蚁狮的体能选择蚁狮(体能陷阱大小)
Rolette_index=RouletteWheelSelection(1./sorted_antlion_fitness);
if Rolette_index==-1
Rolette_index=1;
end
% RA 是通过轮盘在选定的蚁穴周围随机行走
RA=Random_walk_around_antlion(dim,Max_iter,lb,ub, Sorted_antlions(Rolette_index,:),Current_iter);
% RE 是随机行走最好的蚁狮
[RE]=Random_walk_around_antlion(dim,Max_iter,lb,ub, Elite_antlion_position(1,:),Current_iter);
ant_position(i,:)= (RA(Current_iter,:)+RE(Current_iter,:))/2; % Equation (2.13)
end
for i=1:size(ant_position,1)
% 边界检查
Flag4ub=ant_position(i,:)>ub;
Flag4lb=ant_position(i,:)<lb;
ant_position(i,:)=(ant_position(i,:).*(~(Flag4ub+Flag4lb)))+ub.*Flag4ub+lb.*Flag4lb;
ants_fitness(1,i)=SYD(ant_position(i,:),net);
end
% 根据蚂蚁的情况更新蚁群的位置和体能
double_population=[Sorted_antlions;ant_position];
double_fitness=[sorted_antlion_fitness ants_fitness];
[double_fitness_sorted I]=sort(double_fitness);
double_sorted_population=double_population(I,:);
antlions_fitness=double_fitness_sorted(1:N);
Sorted_antlions=double_sorted_population(1:N,:);
% 如果有蚂蚁比精英更合适,就更新精英的位置
if antlions_fitness(1)<Elite_antlion_fitness
Elite_antlion_position=Sorted_antlions(1,:);
Elite_antlion_fitness=antlions_fitness(1);
end
% 让精英留在人群中
Sorted_antlions(1,:)=Elite_antlion_position;
antlions_fitness(1)=Elite_antlion_fitness;
% 更新收敛曲线
Convergence_curve(Current_iter)=Elite_antlion_fitness;
Current_iter=Current_iter+1;
end
3.3 ALO-SVM
1)回归模型:回归模型:蚁狮算法优化支持向量机模型(ALO-SVR)
2)分类模型:分类模型:蚁狮算法优化支持向量机模型(ALO-SVM)
4 视频讲解
B站搜索:‘ 不想学习的陈成 ’