1.算法仿真效果
matlab2022a仿真結(jié)果如下:
2.算法涉及理論知識(shí)概要
灰狼優(yōu)化算法(GWO),靈感來(lái)自于灰狼.GWO算法模擬了自然界灰狼的領(lǐng)導(dǎo)層級(jí)和狩獵機(jī)制.四種類型的灰狼,如 α,β,δ,w 被用來(lái)模擬領(lǐng)導(dǎo)階層自晰。此外罚随,還實(shí)現(xiàn)了狩獵的三個(gè)主要步驟:尋找獵物、包圍獵物和攻擊獵物扎阶。
為了在設(shè)計(jì)GWO算法時(shí)對(duì)灰狼的社會(huì)等級(jí)進(jìn)行數(shù)學(xué)建模,我們將最適解作為α .因此,第二和第三個(gè)最佳解決方案分別被命名為 β 和 δ .剩下的候選解被假定為 w .在GWO算法中,狩獵過程由 秘蛔,α然痊,β 和 δ 引導(dǎo). w 狼跟隨這三只狼唉匾。
在狩獵過程中旦委,將灰狼圍捕獵物的行為定義如下:
D=|C?Xp(t)?X(t)| (1)
X(t+1)=Xp(t)?A?D (2)
式(1)表示個(gè)體與獵物間的距離,式(2)是灰狼的位置更新公式.其中, t 是目前的迭代代數(shù), A 和 C 是系數(shù)向量, Xp 和 X 分別是獵物的位置向量和灰狼的位置向量. A 和 C 的公式如下:
A=2a?r1?a (3)
C=2?r2 (4)
其中, a 是收斂因子,隨著迭代次數(shù)從2線性減小到0, r1 和 r2 的模取[0,1]之間的隨機(jī)數(shù).
2.2 狩獵
灰狼能夠識(shí)別獵物的位置并包圍它們.當(dāng)灰狼識(shí)別出獵物的位置后, β 和 δ 在 α 的帶領(lǐng)下指導(dǎo)狼群包圍獵物.灰狼個(gè)體跟蹤獵物位置的數(shù)學(xué)模型描述如下:
Dα=|C1?Xα?X|
Dβ=|C2?Xβ?X| (5)
Dδ=|C3?Xδ?X|
其中, Dα , Dβ和 Dδ 分別表示 α,β 和 δ 與其他個(gè)體間的距離; Xα,Xβ 和 Xδ 分別代表 α,β 和 δ 當(dāng)前位置; C1,C2,C3 是隨機(jī)向量, X 是當(dāng)前灰狼的位置尉间。
X1=Xα?A1?(Dα)
X2=Xβ?A2?(Dβ) (6)
X3=Xδ?A3?(Dδ)
X(t+1)=X1+X2+X33 (7)
式(6)分別定義了狼群中 w 個(gè)體朝向 α,β 和 δ 前進(jìn)的步長(zhǎng)和方向,式(7)定義了ω的最終位置权纤。
2.3 攻擊獵物
當(dāng)獵物停止移動(dòng)時(shí),灰狼通過攻擊來(lái)完成狩獵過程.為了模擬逼近獵物, a 的值被逐漸減小,因此 A 的波動(dòng)范圍也隨之減小.換句話說,在迭代過程中,當(dāng) a 的值從2線性下降到0時(shí),其對(duì)應(yīng)的 A 的值也在區(qū)間 [?a,a] 內(nèi)變化.如圖3所 示,當(dāng) A 的值位于區(qū)間內(nèi)時(shí),灰狼的下一位置可以位于其當(dāng)前位置和獵物位置之間的任意位置.當(dāng) |A|<1 時(shí),狼群向獵物發(fā)起攻擊(陷入局部最優(yōu)).當(dāng) |A|>1 時(shí),灰狼與獵物分離,希望找到更合適的獵物(全局最優(yōu)).
GWO算法還有另一個(gè)組件 C 來(lái)幫助發(fā)現(xiàn)新的解決方案.由式(4)可知, C 是[0,2]之 間 的隨機(jī)值. C 表示狼所在的位置對(duì)獵物影響的隨機(jī)權(quán)重, C>1 表示影響權(quán)重大,反之,表示影響權(quán)重小.這有助于GWO算法更隨機(jī)地表現(xiàn)并支持探索,同時(shí)可在優(yōu)化過程中避免陷入局部最優(yōu).另外,與 A 不同, C 是非線性減小的.這樣,從最初的迭代到最終的迭代中,它都提供了決策空間中的全局搜索.在算法陷入了局部最優(yōu)并且不易跳出時(shí), C 的隨機(jī)性在避免局部最優(yōu)方面發(fā)揮了非常重要的作用,尤其是在最后需要獲得全局最優(yōu)解的迭代中.
3.MATLAB核心程序
%a=2-2*((i)/Max_iter); % 對(duì)每一次迭代,計(jì)算相應(yīng)的a值乌妒,a decreases linearly fron 2 to 0
a=2-2*((1/(exp(1)-1))*(exp(i/Max_iter)-1));
% 包圍獵物,位置更新
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; % 計(jì)算系數(shù)A外邓,Equation (3.3)
C1=2*r2; ????% 計(jì)算系數(shù)C撤蚊,Equation (3.4)
% Alpha狼位置更新
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)
% Beta狼位置更新
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; % 計(jì)算系數(shù)A,Equation (3.3)
C3=2*r2; ????%計(jì)算系數(shù)C损话, Equation (3.4)
% Delta狼位置更新
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
for t=1:20 %次數(shù)
%1生成
cxl=rand(SearchAgents_no,dim);
end
for j=1:dim
cxl(j)=4*cxl(j)*(1-cxl(j)); ???????%logic混沌方程
end
end
l=l+1; ???
Convergence_curve(l)=Alpha_score;
end