非洲禿鷲優化算法MATLAB實戰
今天給大家分享非洲禿鷲優化算法,主要從算法原理和代碼實戰展開。前段時間完成分享任務獲取數學建模代碼的朋友請后臺私聊一下我,我把代碼鏈接發給你(不好意思,前段時間太忙了)需要了解更多算法代碼的,可以點擊文章左下角的閱讀全文,進行獲取哦~需要了解智能算法、機器學習、深度學習和信號處理相關理論的可以后臺私信哦,下一期分享的內容就是你想了解的內容~
一、算法原理
非洲禿鷲優化算法(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;
%Initialize 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;
%%Main 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
X(i,:) = current_vulture_X; % place the current vulture back into the population end
current_iter=current_iter+1; convergence_curve(current_iter)=Best_vulture1_F;
X = boundaryCheck(X, lower_bound, upper_bound);
fprintf("In 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 allclc
% Population size and stoppoing condition pop_size=30; max_iter=100;
% Define your objective function's details herefobj = @ObjectiveFunction;variables_no=10;lower_bound=-100; % can be a vector tooupper_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 curvesubplot(1,2,2)plot(convergence_curve);title('Convergence curve of AVOA')xlabel('Current_iteration');ylabel('Objective value');box on
實驗結果:
后臺回復:
AVOA
獲取完整代碼
部分知識來源于網絡,如有侵權請聯系作者刪除~
今天的分享就到這里了,后續想了解智能算法、機器學習、深度學習和信號處理相關理論的可以后臺私信哦~希望大家多多轉發點贊加收藏,你們的支持就是我源源不斷的創作動力!
作 者 | 華 夏
編 輯 | 華 夏
校 對 | 華 夏
文章來源:matlab學習之家
工程師必備
- 項目客服
- 培訓客服
- 平臺客服
TOP




















