1.算法描述
灰狼優(yōu)化算法(GWO),靈感來(lái)自于灰狼.GWO算法模擬了自然界灰狼的領(lǐng)導(dǎo)層級(jí)和狩獵機(jī)制.四種類(lèi)型的灰狼,如 α,β,δ,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算法中,狩獵過(guò)程由 翔脱,α奴拦,β 和 δ 引導(dǎo). w 狼跟隨這三只狼。
在狩獵過(guò)程中届吁,將灰狼圍捕獵物的行為定義如下:
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í),灰狼通過(guò)攻擊來(lái)完成狩獵過(guò)程.為了模擬逼近獵物, a 的值被逐漸減小,因此 A 的波動(dòng)范圍也隨之減小.換句話說(shuō),在迭代過(guò)程中,當(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)化過(guò)程中避免陷入局部最優(yōu).另外,與 A 不同, C 是非線性減小的.這樣,從最初的迭代到最終的迭代中,它都提供了決策空間中的全局搜索.在算法陷入了局部最優(yōu)并且不易跳出時(shí), C 的隨機(jī)性在避免局部最優(yōu)方面發(fā)揮了非常重要的作用,尤其是在最后需要獲得全局最優(yōu)解的迭代中.
2.仿真效果預(yù)覽
matlab2022a仿真結(jié)果如下:
3.MATLAB核心程序
...........................................................
Iters = 1000; ????????%最大迭代次數(shù)
Num ??= 50; ??????????
%初始化種群的個(gè)體(可以在這里限定位置和速度的范圍)
xpos ?= Lmin + (Lmax-Lmin)*rand(Num,dim);
xpos0 = xpos;
Alpx ?= zeros(1,dim);
Alps ?= 1000; ?
btx ??= zeros(1,dim);
bts ??= 1000; ??
dltx ?= zeros(1,dim);
dlts ?= 1000;
Pbest = zeros(1,Iters);
for t=1:Iters
t
for i=1:Num ???
if t > 1
r1 ?????= rand;
r2 ?????= rand;
A0 ?????= 2*a*r1-a;%公式5
C0 ?????= 2*r2; ???%公式6
dd ?????= abs(C0*xpos(i,:)-xpos0(i,:));
xpos(i,:) = xpos(i,:) - A0*dd; ???
end
Yi ???????= func_F1_10(xpos(i,:),sel);
if Yi<Alps
Alps = Yi;
Alpx = xpos(i,:);
end
if Yi>Alps && Yi<bts
bts = Yi;
btx = xpos(i,:);
end
if Yi>Alps && Yi>bts && Yi<dlts
dlts = Yi;
dltx = xpos(i,:);
end
end
a=2*(1-(t/Iters)); ?
for i=1:Num
for j=1:dim ??????
r1 ?????= rand;
r2 ?????= rand;
A1 ?????= 2*a*r1-a;%公式5
C1 ?????= 2*r2; ???%公式6
D_alpha = abs(C1*Alpx(j)-xpos(i,j));%公式7
X1 ?????= Alpx(j)-A1*D_alpha; ??????%公式10
r1 ?????= rand;
r2 ?????= rand;
A2 ?????= 2*a*r1-a; %公式5
C2 ?????= 2*r2; %公式6
D_beta ?= abs(C2*btx(j)-xpos(i,j)); %公式8
X2 ?????= btx(j)-A2*D_beta; %公式11 ???
r1 ?????= rand;
r2 ?????= rand;
A3 ?????= 2*a*r1-a; %公式5
C3 ?????= 2*r2; %公式6
D_delta = abs(C3*dltx(j)-xpos(i,j)); %公式9
X3 ?????= dltx(j)-A3*D_delta; %公式12 ??????????
xpos(i,j) = (X1+X2+X3)/3;%公式13
end
end
Pbest(t) = func_F1_10(Alpx,sel);
end
02_060m