目录
0 引言
非洲秃鹫算法(African vultures optimization algorithm,AVOA)是由Benyamin Abdollahzadeh等人于2021年基于非洲秃鹫的领导者-追随者模型捕食提出的群智能算法,AVOA通过非洲秃鹫在不同饥饿程度时候捕食行为来平衡算法全局搜索性能和局部开发性能。
1 数学模型
AVOA主要对非洲秃鹫在饱腹时全局搜索和饥饿时的局部开发能力进行数学建模,具体模型如下:
1)定义领导者-跟随者:在初始种群形成后,计算所有解的适应度,选择最优方案作为第一组的最佳秃鹰,第二优方案作为第二组的最佳秃鹰,具体如下:
式中L1和L2在搜索操作前测量的参数,值在0和1之间,两个参数的和为1。p为轮盘赌选择最佳解决方案的概率,F为适应度。
2)定义秃鹫的饥饿率:秃鹫饥饿率是其捕食行为影响因素,也是算法探索阶段向开发阶段转换的参数,当其饱食时,秃鹰能够飞行更远寻找食物,而饥饿时能量减少,限制了它们的飞行能力。在饥饿时,秃鹰更积极地寻找食物,常常与更强壮的秃鹰一起觅食。去饥饿率定义如下:
式中F表示秃鹫饥饿程度,iteration表示当前迭代次数,maxiterations最大迭代表示总迭代次数,z表示−1和1之间的随机数,h是−2和2之间的随机数,rand1的随机值介于0到1之间。
3) 探索阶段:当|F|值大于1时,秃鹫在不同区域寻找食物,秃鹫具有较高的视觉能力和寻找食物和发现贫穷的死亡动物的能力。故在算法中该阶段采用俩种策略来模拟,一种随机搜索,一种跟随较好秃鹫搜索,具体模型如下:
式中P(i+1)为秃鹫位置更新,i为迭代次数,P1为策略选择参数,D为秃鹫直接位置,X = 2×rand,rand为0到1随机数,P(i)为当前秃鹫位置,ub,lb为问题维度边界。
4)开发阶段(旋转飞行和围城作战策略):如果|F|值小于1,AVOA进入开发阶段,秃鹫在附近寻找食物。,当|F|值在0.5-1时,秃鹫相对饱足,有足够的能量。许多秃鹫聚集在一种食物来源上时,就会导致严重的食物获取冲突。在这种时候,身体强壮的秃鹫更不愿意与其他秃鹫分享食物,该阶段中也分为两种策略,即旋转飞行和围城作战策略,具体如下:
之中P2为旋转飞行和围城作战策略选择参数,d为当前秃鹫和最佳秃鹫的直接距离,S1,S2为正弦和余弦的函数向量,rand(i)为0到1的随机数。
5)开发阶段(围攻和激烈争斗):当|F|小于0.5,秃鹫会非常饥饿,秃鹫的食物源上聚集了几种类型的秃鹫,并展开了围攻和争夺食物的侵略斗争,俩种策略模拟如下:
式中P3为秃鹫在非常饥饿围攻和激烈争斗转换参数,A1,A2为第一最佳和第二最佳秃鹫争夺猎物的运动参数,levy为飞行策略,uv为服从正态分布的飞行策略因子,β为常数1.5,Γ为阶乘。
2 优化方式
前篇对支持向量机(支持向量机原理及Matlab代码-CSDN博客)原理讲解,从支持向量机模型运算过程中,可以了解到模型高维映射核函数参数g和处罚因子c对模型预测结果影响最为重要。因此结合上述AVOA原理介绍,可以将支持向量机的超参数作为非洲秃鹫种群位置,每一个种群位置对应支持向量机的预测值,将这个预测值作为适应度更新第一最佳适应度和第二最佳适应度的秃鹫,进而采用领导者和跟随者秃鹫模型进行捕食行为,更新最佳秃鹫位置向量。。
3 MATLAB代码
3.1 伪代码
3.2 AVOA主函数代码
% 初始化最佳的秃鹫1,秃鹫2
Best_vulture1_X=zeros(1,variables_no);
Best_vulture1_F=inf;
Best_vulture2_X=zeros(1,variables_no);
Best_vulture2_F=inf;
%初始化第一个秃鹫随机种群
X=initialization(pop_size,variables_no,upper_bound,lower_bound);
%% 控制参数
p1=0.6;
p2=0.4;
p3=0.6;
alpha=0.8;
betha=0.2;
gamma=2.5;
%% 第一阶段:确定任何群体中最好的秃鹫
current_iter=0;
while current_iter < max_iter
for i=1:size(X,1)
% 计算种群的适应度
current_vulture_X = X(i,:);
current_vulture_F=SYD(current_vulture_X,net);
net.trainParam.showWindow = 0;
% 更新前两个最佳秃鹰
if current_vulture_F<Best_vulture1_F
Best_vulture1_F=current_vulture_F; % 第一
Best_vulture1_X=current_vulture_X;
end
if current_vulture_F>Best_vulture1_F && current_vulture_F<Best_vulture2_F
Best_vulture2_F=current_vulture_F; % 第二
Best_vulture2_X=current_vulture_X;
end
end
%% 第二阶段:秃鹫的饥饿率
a=unifrnd(-2,2,1,1)*((sin((pi/2)*(current_iter/max_iter))^gamma)+cos((pi/2)*(current_iter/max_iter))-1);% eq(3)
P1=(2*rand+1)*(1-(current_iter/max_iter))+a;% eq(4)
% 更新位置
for i=1:size(X,1)
current_vulture_X = X(i,:); % 将当前的秃鹫挑回种群
F=P1*(2*rand()-1);
random_vulture_X=random_select(Best_vulture1_X,Best_vulture2_X,alpha,betha);
%% 第三阶段:探索
if abs(F) >= 1 % 探索
current_vulture_X = exploration(current_vulture_X, random_vulture_X, F, p1, upper_bound, lower_bound);
%% 第四阶段:开发
elseif abs(F) < 1 % 开发
current_vulture_X = exploitation(current_vulture_X, Best_vulture1_X, Best_vulture2_X, random_vulture_X, F, p2, p3, variables_no, upper_bound, lower_bound);
end
X(i,:) = current_vulture_X; % 将目前的秃鹫放回种群
end
current_iter=current_iter+1;
convergence_curve(current_iter)=Best_vulture1_F;
X = boundaryCheck(X, lower_bound, upper_bound);
end
3.3 AVOA-SVR,AVOA-SVM
回归模型、分类模型:(非洲秃鹫算法优化支持向量机-CSDN博客)
标签:秃鹫,vulture,bound,current,AVOA,Best,MATLAB From: https://blog.csdn.net/2403_88401503/article/details/143868646