今天给大家分享非洲秃鹫优化算法,主要从算法原理和代码实战展开。前段时间完成分享任务获取数学建模代码的朋友请后台私聊一下我,我把代码链接发给你(不好意思,前段时间太忙了)需要了解更多算法代码的,可以点击文章左下角的阅读全文,进行获取哦~需要了解智能算法、机器学习、深度学习和信号处理相关理论的可以后台私信哦,下一期分享的内容就是你想了解的内容~
一、算法原理
非洲秃鹫优化算法(African Vulture Optimization alghorithm,AVOA)是模拟非洲秃鹫的觅食和导航行为而提出的元启发式优化算法。
该方法具有以下特点:
•
在优化操作期间创建具有不同随机运动的系数向量 F,并使用此系数向量更改探索和开发阶段。
•
创建不同的相移机制可防止过早收敛,逃避局部优化,并平衡开发和勘探阶段。
•
为优化操作提供新的旋转搜索方程。
•
以两种不同的方式使用次佳解决方案来尽可能多地模拟非洲秃鹫。
•
在探索阶段使用两种不同的机制,以增加所产生解决方案的多样性。
•
在探索阶段提供四种不同的机制,在开发阶段提高了AVOA算法的能力
•
利用基于 LF 的模式,通过短而不同的跳跃使本地搜索更好。
•
在优化操作中使用矢量系数F,r,这对AVOA的开发潜力有重大影响。
•
提供强大高效的算法,执行时间浅,执行时间好,计算复杂度低。
AVOA算法包括以下几个阶段:
初始化种群后,计算种群适应度值,将适应度最佳的作为第一组最佳秃鹰,适应度次之的作为第二组最佳秃鹰,其他解使用式下式向第一组和第二组的最佳解移动。在每次适应度迭代中,将重新计算整个总体。
第一阶段:确定任意一组中的最佳秃鹫
其中L1、L2为搜索操作之前给定的参数,其值介于0和1之间,且两个参 数之和为1。使用轮盘赌轮获得选择最佳解的概率Pi,并为每组选择每个最佳解。
第二阶段:秃鹫的饥饿率
秃鹫经常在寻找食物,如果它们感到饱足的话,它们会有很高的能量,这使得它们可以走更长的距离去寻找食物,但是如果它们饿了,它们就没有足够的能量长时间飞行,在强壮的秃鹫旁边寻找食物,并且在饥饿时变得有攻击性。受其启发使用下式进行数学建模。对于该行为的数学建模,它也被用来从探索阶段转移到利用阶段,这是受秃鹫饱食或饥饿的速度的启发,使用下式进行数学建模。
其中,F表示秃鹫已经吃饱, Iteration_iIterationi 表示当前迭代次数, maxiterationsmaxiterations表示最大迭代次数,z是介于-1到1并且每次迭代都变化的随机数,h 是介于-2到2之间的随机数,rand1是介于0到1之间的随机数。当z值降到0以下时,表示秃鹫饿了,如果z值增加到0,则表示秃鹫吃饱了。秃鹫总数的比例在下降,而且随着每次重复,下降的幅度更大。当∣F∣的值大于1时,秃鹫在不同区域寻找食物,AVOA进入探索阶段;如果∣F∣的值小于1,AVOA进入开发阶段,秃鹫在最佳解的附近寻找食物。
第三阶段:探索
在自然环境中,秃鹫具有较高的视觉能力,具有较高的寻找食物和发现濒死动物的能力。然而,为秃鹫寻找食物可能非常困难。秃鹫长时间仔细查看生活环境,长途跋涉寻找食物。在AVOA中,秃鹰可以检查不同的随机区域,可以基于两种不同的策略,并使用一个名为P1的参数来选择其中的一种策略。这个参数在搜索操作之前必须被取值,并且应该有一个介于0和1之间的值,决定了两种策略的使用方式。为了在探索阶段选择任意一个策略,生成一个介于0和1之间的随机数。若该值大于或等于randP1参数,则使用式( 6 )。但是,如果randP1小于参数采用式( 8 )。在这种情况下,每个秃鹫随机地在与它的饱食度有关的环境中搜索。
第四阶段:开发
如果| F |的值小于1,则AVOA进入开采阶段,同样有两个阶段,每个阶段采用两种不同的策略。每个内部阶段选择每种策略的程度由P2和P3两个参数决定。参数P2用于选择第一阶段中可用的策略,参数P3用于选择第二阶段中可用的策略。在执行搜索操作之前,这两个参数必须在0和1处取值。
开发1:当| F |在1 ~ 0.5之间时,AVOA进入利用阶段的第一阶段。在第一阶段,实施了两种不同的轮换飞行和包围战策略。P2用于确定每个策略的选择,在进行搜索操作之前必须对其进行取值,取值应在0 ~ 1之间。在这个阶段的开始,产生randP2,它是一个介于0和1之间的随机数。如果该数值大于或等于参数P2,则说明围剿战略实施缓慢。但是,如果这个随机数小于参数P2,则执行旋转飞行策略。该过程如式( 9 )所示。
食物竞争:当| F |≥0.5时,秃鹫相对饱满,能量充足。当多个秃鹫聚集在一个食物源时,会引发严重的食物获取冲突。此时,体力旺盛的秃鹫更倾向于不与其他秃鹫共享食物,如下图所示。
另一方面,较弱的秃鹫通过聚集在健康的秃鹫周围并引起小的冲突,试图从健康的秃鹫身上疲劳并获取食物。采用式( 10-11 )对该步骤进行建模。
其中,D ( i )采用式( 7)计算。F为秃鹫饱食率,采用公式( 4 ) 计算。rand4是一个介于0到1之间的随机数。
秃鹫的旋转飞行:秃鹫经常做旋转飞行,用于下图模拟螺旋运动。
螺旋模型已被用来对旋转飞行进行数学建模。该方法在所有秃鹫和两个最好的秃鹫中的一个之间创建一个螺旋方程。旋转飞行用公式( 12 )和( 13 ) 表示。
式( 12 )和式( 13 )中,R ( i )表示当前迭代中两个最好的秃鹰之一的位置矢量,由式( 13 )得到。
开发2:在开发的第二阶段,两只秃鹫的运动在食物源上方积聚了多种类型的秃鹫,并进行了围攻和寻找食物的侵略战争。如果| F |数小于0.5,则执行该阶段的算法。在这个阶段的开始,randP3被产生,它是一个介于0和1之间的随机数。若randP3大于或等于参数P3,则策略为在食物源上方积累多种类型的秃鹫。具体过程如下式所示
式中:BestVuture1 ( i )为当前迭代中第1组的最佳贪婪者BestBestVuture2 ( i )为当前迭代中第2组的最佳贪婪者,F为贪婪者饱和率P ( i )为贪婪者的当前矢量位置。
二、代码实战
function [Best_vulture1_F,Best_vulture1_X,convergence_curve]=AVOA(pop_size,max_iter,lower_bound,upper_bound,variables_no,fobj)
initialize Best_vulture1, Best_vulture2
Best_vulture1_X=zeros(1,variables_no);
Best_vulture1_F=inf;
Best_vulture2_X=zeros(1,variables_no);
Best_vulture2_F=inf;
the first random population of vultures
X=initialization(pop_size,variables_no,upper_bound,lower_bound);
Controlling parameter
p1=0.6;
p2=0.4;
p3=0.6;
alpha=0.8;
betha=0.2;
gamma=2.5;
loop
current_iter=0; % Loop counter
while current_iter < max_iter
for i=1:size(X,1)
Calculate the fitness of the population
current_vulture_X = X(i,:);
current_vulture_F=fobj(current_vulture_X);
Update the first best two vultures if needed
if current_vulture_F<Best_vulture1_F
Best_vulture1_F=current_vulture_F; % Update the first best bulture
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; % Update the second best bulture
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);
P1=(2*rand+1)*(1-(current_iter/max_iter))+a;
Update the location
for i=1:size(X,1)
current_vulture_X = X(i,:); % pick the current vulture back to the population
F=P1*(2*rand()-1);
random_vulture_X=random_select(Best_vulture1_X,Best_vulture2_X,alpha,betha);
if abs(F) >= 1 % Exploration:
current_vulture_X = exploration(current_vulture_X, random_vulture_X, F, p1, upper_bound, lower_bound);
elseif abs(F) < 1 % Exploitation:
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
) = current_vulture_X; % place the current vulture back into the population :
end
current_iter=current_iter+1;
Best_vulture1_F; =
X = boundaryCheck(X, lower_bound, upper_bound);
Iteration %d, best estimation of the global optimum is %4.4f \n ", current_iter,Best_vulture1_F );
end
end
%African Vulture Optimization alghorithm
% Read the following publication first and cite if you use it
% @article{abdollahzadeh2021african,
% title={African Vultures Optimization Algorithm: A New Nature-Inspired Metaheuristic Algorithm for Global Optimization Problems},
% author={Abdollahzadeh, Benyamin and Gharehchopogh, Farhad Soleimanian and Mirjalili, Seyedali},
% journal={Computers \& Industrial Engineering},
% pages={107408},
% year={2021},
% publisher={Elsevier},
% url = {https://www.sciencedirect.com/science/article/pii/S0360835221003120}
% }
clear all
close all
clc
% Population size and stoppoing condition
pop_size=30;
max_iter=100;
% Define your objective function's details here
fobj = @ObjectiveFunction;
variables_no=10;
lower_bound=-100; % can be a vector too
upper_bound=100; % can be a vector too
[Best_vulture1_F,Best_vulture1_X,convergence_curve]=AVOA(pop_size,max_iter,lower_bound,upper_bound,variables_no,fobj);
figure
% Best optimal values for the decision variables
subplot(1,2,1)
parallelcoords(Best_vulture1_X)
xlabel('Decision variables')
ylabel('Best estimated values ')
box on
% Best convergence curve
subplot(1,2,2)
plot(convergence_curve);
title('Convergence curve of AVOA')
xlabel('Current_iteration');
ylabel('Objective value');
box on
实验结果:
后台回复:
AVOA
获取完整代码
部分知识来源于网络,如有侵权请联系作者删除~
今天的分享就到这里了,后续想了解智能算法、机器学习、深度学习和信号处理相关理论的可以后台私信哦~希望大家多多转发点赞加收藏,你们的支持就是我源源不断的创作动力!
作 者 | 华 夏
编 辑 | 华 夏
校 对 | 华 夏