【優(yōu)化求解】基于柯西變異和自適應(yīng)權(quán)重優(yōu)化的蝴蝶算法求解單目標優(yōu)化問題matlab代碼
【優(yōu)化求解】基于柯西變異和自適應(yīng)權(quán)重優(yōu)化的蝴蝶算法求解單目標優(yōu)化問題matlab代碼
TT_Matlab
每天分享一點Matlab資料,一起成長進步。需要定制程序添加qq1575304183
1 簡介
針對基本蝴蝶優(yōu)化算法( Butterfly Optimization Algorithm , BOA )存在的收斂精度較低、容易陷入局部最優(yōu) 解的問題,提出柯西變異和自適應(yīng)權(quán)重優(yōu)化的蝴蝶算法( Cauchy variation and adaptive Weight Butterfly Optimiza tion Algorithm , CWBOA )。通過在全局位置更新處引入柯西分布函數(shù)進行變異,在局部位置更新處引入自適應(yīng)權(quán) 重因子,改進了蝴蝶算法的局部搜索能力;并且引入動態(tài)切換概率 p 來權(quán)衡全局探索與局部開發(fā)過程的比重。改進 的算法通過對多個單峰、多峰和固定測試維度的函數(shù)進行求解,結(jié)果表明, CWBOA 對大多數(shù)測試函數(shù)有更好的求 解精度、速度和穩(wěn)定性。
Sankalap Arora 和 Satvir Singh 兩位學者,通過觀察 蝴蝶覓食行為而受到啟發(fā),提出了一種新的群智能優(yōu)化 算法 — —蝴蝶優(yōu)化算法( Butterfly Optimization Algo rithm ) [6] 。該算法的主要思想是模擬蝴蝶的覓食和求偶 行為實現(xiàn)對目標問題的求解。蝴蝶的行為可以描述為 它們向食物源位置的合作運動。蝴蝶接收、感知和分析 空氣中的氣味以確定食物源或配對伴侶的潛在方向。 BOA 算法模擬此行為在搜索空間中尋找最優(yōu)解。與現(xiàn) 有的一些元啟發(fā)式算法相比,基本 BOA 操作簡單、調(diào)整 的參數(shù)少、魯棒性好,并在工程實踐的初步應(yīng)用中取得 了良好的效果。
基本的蝴蝶優(yōu)化算法存在著依賴初始種群、收斂精 度低和易陷入局部最優(yōu)等問題,針對這些問題本文提出 了一種多策略改進的蝴蝶優(yōu)化算法。利用柯西分布函 數(shù)對蝴蝶的全局位置更新進行變異,提升算法的全局搜 索能力,在蝴蝶算法的局部位置更新處引入自適應(yīng)慣性 權(quán)重因子,改進了算法的局部開采能力,并且使用動態(tài) 切換概率來平衡局部搜索和全局搜索的比重,提高了尋 優(yōu)性能。通過 14 個基準測試函數(shù)測試,結(jié)果表明改進 算法具有更高的收斂精度和魯棒性。
在自然界之中,蝴蝶可以使用它們的各種感官如: 嗅覺、視覺、味覺、觸覺和聽覺去尋找食物和求偶,這些 感覺能夠幫助它們遷徙、躲避狩獵者以及幫助它們找到 合適的地方產(chǎn)卵。在所有的感覺中最重要的是嗅覺,嗅 覺能夠幫助蝴蝶尋找食物(花蜜),即使在很遠的地方也 不例外。為了能夠找到食物,蝴蝶使用感覺受體用于嗅 覺,這些受體分散在蝴蝶的身體部位,如觸角、腿和手掌 等。這些受體實際上是蝴蝶身體表面的神經(jīng)細胞,被稱 為化學感受器。這些化學感受器引導(dǎo)蝴蝶找到最佳的 交配伙伴,以便繼續(xù)強大的遺傳系統(tǒng)。雄性蝴蝶能夠通 過信息素來識別雌性,這是雌性蝴蝶發(fā)出的氣味分泌物 引起特異性反應(yīng)。 蝴蝶會產(chǎn)生一些強度與其適應(yīng)性相關(guān)的香味,即當 蝴蝶從一個位置移動到另一個位置時,它的適應(yīng)性會相 應(yīng)地變化,香味會在遠處傳播,其他蝴蝶個體能夠感知 它,這就是蝴蝶個體如何與其他蝴蝶共享個體信息,形 成一個群體的社會知識網(wǎng)絡(luò)。當一只蝴蝶能夠聞到來 自其他的蝴蝶分泌的香味的時候,它將會朝著香味最濃 的方向移動,該階段在算法中被稱為全局搜索。在另一 種情況下,當蝴蝶不能從周圍感知香味時它將隨機移 動,這一階段是局部搜索階段。 針對上述行為,提出如下假設(shè): ( 1 )所有的蝴蝶都應(yīng)該散發(fā)一些香味,使蝴蝶能夠 相互吸引。 ( 2 )每只蝴蝶都會隨機移動或向發(fā)出最多香味的蝴 蝶移動。 ( 3 )蝴蝶的刺激強度受目標函數(shù)的影響或決定。 ( 4 )全局搜索和局部搜索使用切換概率 p 來控制, 受到物理接近度以及風、雨、雷、電等各種其他自然因素, 局部搜索和全局搜索中的切換概率 p 具有重要意義。
2 部分代碼
%% 清除環(huán)境變量 clear clc %% 參數(shù)設(shè)置 N = 30 ; % 種群規(guī)模 Function_name = ’F23’ ; % 從F1到F23的測試函數(shù)的名稱(本文中的表1、2、3) Max_iteration = 500 ; % 最大迭代次數(shù) cnt_max = 30 ; % 加載所選基準函數(shù)的詳細信息 [ lb , ub , dim , fobj ] = Get_Functions_details ( Function_name ); Curve_BOA = zeros ( 1 , Max_iteration ); Curve_WOA = zeros ( 1 , Max_iteration ); Curve_FPA = zeros ( 1 , Max_iteration ); Curve_CWBOA = zeros ( 1 , Max_iteration ); for cnt = 1 : cnt_max % 初始化種群位置 X = initialization ( N , dim , ub , lb ); [ BOA_Best_score ( cnt ), BOA_Best_pos ( cnt , :), BOA_Curve ] = BOA ( X , N , Max_iteration , lb , ub , dim , fobj ); [ WOA_Best_score ( cnt ), WOA_Best_pos ( cnt , :), WOA_Curve ] = WOA ( X , N , Max_iteration , lb , ub , dim , fobj ); [ FPA_Best_score ( cnt ), FPA_Best_pos ( cnt , :), FPA_Curve ] = FPA ( X , N , Max_iteration , lb , ub , dim , fobj ); [ CWBOA_Best_score ( cnt ), CWBOA_Best_pos ( cnt , :), CWBOA_Curve ] = CWBOA ( X , N , Max_iteration , lb , ub , dim , fobj ); Curve_BOA = Curve_BOA + BOA_Curve ; Curve_WOA = Curve_WOA + WOA_Curve ; Curve_FPA = Curve_FPA + FPA_Curve ; Curve_CWBOA = Curve_CWBOA + CWBOA_Curve ; end Curve_BOA = Curve_BOA / cnt_max ; Curve_WOA = Curve_WOA / cnt_max ; Curve_FPA = Curve_FPA / cnt_max ; Curve_CWBOA = Curve_CWBOA / cnt_max ; std_BOA = std ( BOA_Best_score ); std_WOA = std ( WOA_Best_score ); std_FPA = std ( FPA_Best_score ); std_CWBOA = std ( CWBOA_Best_score ); best_BOA = max ( BOA_Best_score ); best_WOA = max ( WOA_Best_score ); best_FPA = max ( FPA_Best_score ); best_CWBOA = max ( CWBOA_Best_score ); worst_BOA = min ( BOA_Best_score ); worst_WOA = min ( WOA_Best_score ); worst_FPA = min ( FPA_Best_score ); worst_CWBOA = min ( CWBOA_Best_score ); mean_BOA = mean ( BOA_Best_score ); mean_WOA = mean ( WOA_Best_score ); mean_FPA = mean ( FPA_Best_score ); mean_CWBOA = mean ( CWBOA_Best_score ); %% 畫圖 % 1、畫出所選基準函數(shù)的三維立體圖形 % figure; % func_plot(Function_name); % title(Function_name) % xlabel(’x_1’); % ylabel(’x_2’); % zlabel([Function_name,’( x_1 , x_2 )’]) % 2、畫出目標函數(shù)值變化曲線圖 figure ; t = 1 : Max_iteration ; semilogy ( t , Curve_BOA , ’k^-’ , t , Curve_WOA , ’bo-’ , t , Curve_FPA , ’mv-’ , t , Curve_CWBOA , ’rd-’ , ... ’linewidth’ , 1.5 , ’MarkerSize’ , 8 , ’MarkerIndices’ , 1 : 50 : Max_iteration ); title ( Function_name ) xlabel ( ’Iteration’ ); ylabel ( ’Fitness’ ); axis fill grid on box on legend ( ’BOA’ , ’WOA’ , ’FPA’ , ’CWBOA’ ); %% 顯示結(jié)果 disp ([ ’函數(shù):’ , num2str ( Function_name )]); disp ([ ’BOA:最大值: ’ , num2str ( best_BOA ), ’,最小值:’ , num2str ( worst_BOA ), ’,平均值:’ , num2str ( mean_BOA ), ’,標準差:’ , num2str ( std_BOA )]); disp ([ ’WOA:最大值: ’ , num2str ( best_WOA ), ’,最小值:’ , num2str ( worst_WOA ), ’,平均值:’ , num2str ( mean_WOA ), ’,標準差:’ , num2str ( std_WOA )]); disp ([ ’FPA:最大值: ’ , num2str ( best_FPA ), ’,最小值:’ , num2str ( worst_FPA ), ’,平均值:’ , num2str ( mean_FPA ), ’,標準差:’ , num2str ( std_FPA )]); disp ([ ’CWBOA:最大值: ’ , num2str ( best_CWBOA ), ’,最小值:’ , num2str ( worst_CWBOA ), ’,平均值:’ , num2str ( mean_CWBOA ), ’,標準差:’ , num2str ( std_CWBOA )]);
3 仿真結(jié)果
4 參考文獻
[1]高文欣等. "柯西變異和自適應(yīng)權(quán)重優(yōu)化的蝴蝶算法." 計算機工程與應(yīng)用 56.15(2020):8.
微信掃一掃贊賞作者
贊賞
發(fā)送給作者
人贊賞
長按二維碼向我轉(zhuǎn)賬
受蘋果公司新規(guī)定影響,微信 iOS 版的贊賞功能被關(guān)閉,可通過二維碼轉(zhuǎn)賬支持公眾號。
-
Origin(Pro):學習版的窗口限制【數(shù)據(jù)繪圖】 2020-08-07
-
如何卸載Aspen Plus并再重新安裝,這篇文章告訴你! 2020-05-29
-
OriginPro:學習版申請及過期激活方法【數(shù)據(jù)繪圖】 2020-08-06
-
CAD視口的邊框線看不到也選不中是怎么回事,怎么解決? 2020-06-04
-
教程 | Origin從DSC計算焓和比熱容 2020-08-31
-
Aspen Plus安裝過程中RMS License證書安裝失敗的解決方法,親測有效! 2021-10-15
-
CAD外部參照無法綁定怎么辦? 2020-06-03
-
CAD中如何將布局連帶視口中的內(nèi)容復(fù)制到另一張圖中? 2020-07-03
