【優化求解】基於非線性收斂方式的灰狼優化演算法matlab原始碼
一、灰狼演算法簡介
1 前言:
灰狼優化演算法(Grey Wolf Optimizer,GWO)由澳大利亞格里菲斯大學學者 Mirjalili 等人於2014年提出來的一種群智慧優化演算法。該演算法受到了灰狼捕食獵物活動的啟發而開發的一種優化搜尋方法,它具有較強的收斂效能、引數少、易實現等特點。近年來受到了學者的廣泛關注,它己被成功地應用到了車間排程、引數優化、影象分類等領域中。
2 演算法原理:
灰狼隸屬於群居生活的犬科動物,且處於食物鏈的頂層。灰狼嚴格遵守著一個社會支配等級關係。如圖:
社會等級第一層:狼群中的頭狼記為, 狼主要負責對捕食、棲息、作息時間等活動作出決策。由於其它的狼需要服從 狼的命令,所以 狼也被稱為支配狼。另外, 狼不一定是狼群中最強的狼,但就管理能力方面來說, 狼一定是最好的。
社會等級第二層: 狼,它服從於 狼,並協助 狼作出決策。在 狼去世或衰老後, 狼將成為 狼的最候選者。雖然 狼服從 狼,但 狼可支配其它社會層級上的狼。
社會等級第三層: 狼,它服從 、 狼,同時支配剩餘層級的狼。 狼一般由幼狼、哨兵狼、狩獵狼、老年狼及護理狼組成。
社會等級第四層: 狼,它通常需要服從其它社會層次上的狼。雖然看上去 狼在狼群中的作用不大,但是如果沒有 狼的存在,狼群會出現內部問題如自相殘殺。
GWO 優化過程包含了灰狼的社會等級分層、跟蹤、包圍和攻擊獵物等步驟,其步驟具體情況如下所示。
1)社會等級分層(Social Hierarchy)當設計 GWO 時,首先需構建灰狼社會等級層次模型。計算種群每個個體的適應度,將狼群中適應度最好的三匹灰狼依次標記為、 、 ,而剩下的灰狼標記為。也就是說,灰狼群體中的社會等級從高往低排列依次為;、 、 及。GWO 的優化過程主要由每代種群中的最好三個解(即、 、 )來指導完成。
2)包圍獵物( Encircling Prey )灰狼捜索獵物時會逐漸地接近獵物幷包圍它,該行為的數學模型如下:
式中:t 為當前迭代次數:。表示hadamard 乘積操作;A 和 C 是協同係數向量;Xp 表示獵物的位置向量; X(t) 表示當前灰狼的位置向量;在整個迭代過程中 a 由2 線性降到 0; r1 和 r2 是 [0,1] 中的隨機向量。
3)狩獵( Hunring)
灰狼具有識別潛在獵物(最優解)位置的能力,搜尋過程主要靠、 、 灰狼的指引來完成。但是很多問題的解空間特徵是未知的,灰狼是無法確定獵物(最優解)的精確位置。為了模擬灰狼(候選解)的搜尋行為,假設、 、 具有較強識別潛在獵物位置的能力。因此,在每次迭代過程中,保留當前種群中的最好三隻灰狼(、 、 ),然後根據它們的位置資訊來更新其它搜尋代理(包括)的位置。該行為的數學模型可表示如下:
式中:、、 分別表示當前種群中、 、 的位置向量;X表示灰狼的位置向量;、、 分別表示當前候選灰狼與最優三條狼之間的距離;當|A|>1時,灰狼之間儘量分散在各區域並搜尋獵物。當|A|<1時,灰狼將集中捜索某個或某些區域的獵物。
從圖中可看出,候選解的位置最終落在被、 、 定義的隨機圓位置內。總的來說,、 、 需首先預測出獵物(潛 在最優解)的大致位置,然後其它候選狼在當前最優蘭只狼的指引下在獵物附近隨機地更新它們的位置。
4)攻擊獵物(Attacking Prey)構建攻擊獵物模型的過程中,根據2)中的公式,a值的減少會引起 A 的值也隨之波動。換句話說,A 是一個在區間[-a,a](備註:原作者的第一篇論文裡這裡是[-2a,2a],後面論文裡糾正為[-a,a])上的隨機向量,其中a在迭代過程中呈線性下降。當 A 在[-1,1]區間上時,則捜索代理(Search Agent)的下一時刻位置可以在當前灰狼與獵物之間的任何位置上。
5)尋找獵物(Search for Prey)灰狼主要依賴、 、 的資訊來尋找獵物。它們開始分散地去搜索獵物位置資訊,然後集中起來攻擊獵物。對於分散模型的建立,通過|A|>1使其捜索代理遠離獵物,這種搜尋方式使 GWO 能進行全域性搜尋。GWO 演算法中的另一個搜尋係數是C。從2)中的公式可知,C向量是在區間範圍[0,2]上的隨機值構成的向量,此係數為獵物提供了隨機權重,以便増加(|C|>1)或減少(|C|<1)。這有助於 GWO 在優化過程中展示出隨機搜尋行為,以避免演算法陷入區域性最優。值得注意的是,C並不是線性下降的,C在迭代過程中是隨機值,該係數有利於演算法跳出區域性,特別是演算法在迭代的後期顯得尤為重要。
二、改進非線性收斂方式的灰狼優化演算法
針對灰狼優化演算法在求解複雜優化問題時過早收斂和易陷入區域性最優的缺點, 提出一種改進型灰狼優化演算法(CGWO)用於求解無約束優化問題.演算法首先利用引入混沌對映策略的反向學習方法初始種群個體, 為演算法全域性尋優奠定基礎; 從平衡全域性和區域性搜尋能力角度考慮, 對收斂因子的遞減形式提出了改進型非線性函式形式; 為避免演算法陷入區域性最優, 對當前最優灰狼個體位置進行Cauchy變異操作.給出了改進的具體實現步驟, 對8個標準測試函式進行模擬實驗, 實驗結果表明, 改進灰狼優化演算法具有更好的求解精度和穩定性.
三、部分程式碼
% Grey Wolf Optimizer function [Alpha_score,Alpha_pos,Convergence_curve]=GWO(SearchAgents_no,Max_iter,lb,ub,dim,fobj) % initialize alpha, beta, and delta_pos Alpha_pos=zeros(1,dim); Alpha_score=inf; %change this to -inf for maximization problems Beta_pos=zeros(1,dim); Beta_score=inf; %change this to -inf for maximization problems Delta_pos=zeros(1,dim); Delta_score=inf; %change this to -inf for maximization problems %Initialize the positions of search agents Positions=initialization(SearchAgents_no,dim,ub,lb); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%TRANSFORM HERE BY EQ1%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Convergence_curve=zeros(1,Max_iter); l=0;% Loop counter %%%%%%%%%%%%%%%%%%%%%%%%%%%%EVALUAGE J HERE F?RST FOR ALL X? EQ2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Main loop STEP 3 while l<Max_iter for i=1:size(Positions,1) % Return back the search agents that go beyond the boundaries of the search space Flag4ub=Positions(i,:)>ub; Flag4lb=Positions(i,:)<lb; Positions(i,:)=(Positions(i,:).*(~(Flag4ub+Flag4lb)))+ub.*Flag4ub+lb.*Flag4lb; % Calculate objective function for each search agent fitness=fobj(Positions(i,:)); % Update Alpha, Beta, and Delta if fitness<Alpha_score Alpha_score=fitness; % Update alpha Alpha_pos=Positions(i,:); end if fitness>Alpha_score && fitness<Beta_score Beta_score=fitness; % Update beta Beta_pos=Positions(i,:); end if fitness>Alpha_score && fitness>Beta_score && fitness<Delta_score Delta_score=fitness; % Update delta Delta_pos=Positions(i,:); end end a=2-l*((2)/Max_iter); % a decreases linearly fron 2 to 0 % Update the Position of search agents including omegas for i=1:size(Positions,1) for j=1:size(Positions,2) r1=rand(); % r1 is a random number in [0,1] r2=rand(); % r2 is a random number in [0,1] A1=2*a*r1-a; % Equation (3.3) C1=2*r2; % Equation (3.4) D_alpha=abs(C1*Alpha_pos(j)-Positions(i,j)); % Equation (3.5)-part 1 X1=Alpha_pos(j)-A1*D_alpha; % Equation (3.6)-part 1 r1=rand(); r2=rand(); A2=2*a*r1-a; % Equation (3.3) C2=2*r2; % Equation (3.4) D_beta=abs(C2*Beta_pos(j)-Positions(i,j)); % Equation (3.5)-part 2 X2=Beta_pos(j)-A2*D_beta; % Equation (3.6)-part 2 r1=rand(); r2=rand(); A3=2*a*r1-a; % Equation (3.3) C3=2*r2; % Equation (3.4) D_delta=abs(C3*Delta_pos(j)-Positions(i,j)); % Equation (3.5)-part 3 X3=Delta_pos(j)-A3*D_delta; % Equation (3.5)-part 3 Positions(i,j)=(X1+X2+X3)/3;% Equation (3.7) end end %%%%%%%%%%%%%%%%%%%%%%%%%%%%EVALUAGE J HERE F?RST FOR ALL X? EQ2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% l=l+1; Convergence_curve(l)=Alpha_score; end
四、模擬結果
係數k kk的取值影響非線性收斂因子a aa,進而影響改進演算法的效能。通過改變非線性調節係數k = { 1 , 1.25 , 1.5 , 1.75 , 2 }五組不同取值進行數值實驗,從穩定性方面分析調節係數k對CGWO演算法效能的影響。
引數設定:種群規模N = 70,最大迭代次數t m a x = 500,獨立執行30次。以F3為例。
k = 1 時的最大值、最小值、平均值及標準差為:
k=1 CGWO:最大值: 1.9788e-12,最小值:1.0312e-15,平均值:1.4892e-13,標準差:3.7775e-13
k = 1.25 時的最大值、最小值、平均值及標準差為:
k=1.25 CGWO:最大值: 1.4261e-13,最小值:4.1941e-18,平均值:1.4483e-14,標準差:2.9773e-14
k = 1.5 時的最大值、最小值、平均值及標準差為:
k=1.5 CGWO:最大值: 3.3684e-14,最小值:2.5503e-17,平均值:7.4339e-15,標準差:1.0077e-14
k = 1.75 時的最大值、最小值、平均值及標準差為:
k=1.75 CGWO:最大值: 6.2523e-14,最小值:1.157e-17,平均值:6.7363e-15,標準差:1.3215e-14
k = 2 時的最大值、最小值、平均值及標準差為:
k=2 CGWO:最大值: 7.2156e-14,最小值:3.1809e-17,平均值:4.5632e-15,標準差:1.2155e-14
綜合分析,k = 2時效能最佳
五、參考文獻及程式碼私信博主
[1] 談發明, 趙俊傑, 王琪.一種改進非線性收斂方式的灰狼優化演算法研究[J]. 微電子學與計算機, 2019, 36(5): 89-95.