量化軟件下載:赫茲量化中種群優(yōu)化算法---灰狼優(yōu)化器
1. 概述
灰狼算法是 2014 年開發(fā)出的一種元啟發(fā)式隨機群體智能算法。 它的思路是基于灰狼群狩獵模型。 狼群內(nèi)有四種類型階層:阿爾法、貝塔、德爾塔、和歐米茄。 阿爾法階層在群體決策和管理方面擁有最大的“權(quán)重”。 接下來是貝塔和德爾塔階層,它們服從阿爾法截倉,并擁有對狼群內(nèi)其余階層成員的壓制。 歐米茄階層的狼總是服從其余的統(tǒng)治階層狼。
在狼的階層數(shù)學(xué)模型中,阿爾法階層狼被認為是狼群中的主導(dǎo)狼,它的命令應(yīng)該由狼群成員執(zhí)行。 貝塔階層的從屬狼協(xié)助阿爾法階層制定決策,被認為是阿爾法角色的最佳候選。 德爾塔階層狼應(yīng)該服從阿爾法和貝塔階層,但它們支配著歐米茄階層。 歐米茄階層狼被認為是狼群的替罪羊,也是重要性最低下的個體。 它們只允許在最后才能進食。 阿爾法階層被認為是最有利的解。
第二和第三最佳解分別是貝塔和德爾塔階層。 歐米茄階層則認為是解的殘料。 假設(shè)最適者的狼(阿爾法、貝塔、和德爾塔),即最接近獵物的狼,然后接近的是其余的狼。 每次接近后,就能判定誰是這個階段的阿爾法、貝塔和德爾塔,然后狼群再次重新排列。 編隊持續(xù)進行,直至狼群聚集在一起,這將是以最小距離進行攻擊的最優(yōu)方向。
在算法過程中,執(zhí)行 3 個主要階段,其中狼群搜索獵物、包圍、和攻擊獵物。 搜索揭示出阿爾法、貝塔和德爾塔 — 最接近獵物的狼。 而其余的,服從占主導(dǎo)地位的指揮,也許會開始包圍獵物,或繼續(xù)隨機移動,以便尋找最佳選項。
2 條所述情況。 算法說明
圖 1 示意性地展示狼群的階層結(jié)構(gòu)。阿爾法階層起著主導(dǎo)作用。

編輯切換為居中
圖例 1. 狼群中的社會階層
數(shù)學(xué)模型和算法社會階層:
優(yōu)等解是由阿爾法(α)狼形成的。
二等解由貝塔(β)狼形成。
三等解由德爾塔(δ)狼形成。
其它可能的解,由歐米茄伏(ω)狼形成。
包圍獵物:當(dāng)已經(jīng)有最佳解的阿爾法、貝塔、和德爾塔在場時,進一步的行動取決于歐米茄。

編輯切換為居中
圖例 2. 狩獵階段:搜索、包圍、攻擊。
算法的所有迭代都表現(xiàn)為三個階段:搜索、包圍、和狩獵。 該算法的規(guī)范版本具有引入的a 計算比率,以提高算法的收斂性。 該比率在每次迭代時遞減,直至為零。 只要比率超過 1,狼群的初始化就會持續(xù)進行。 在這個階段,獵物的位置是完全未知的,所以狼群應(yīng)該是隨機分布的。
在“搜索”階段之后,判定適應(yīng)度函數(shù)的值,然后才有可能進入“包圍”階段。 在此階段,a 比率大于 1。 這意味著阿爾法、貝塔和德爾塔正在遠離它們之前的位置,從而可以優(yōu)調(diào)估算獵物的位置。 當(dāng) a 比率等于 1 時,“攻擊”階段開始,而比率在迭代結(jié)束前趨于 0。 這導(dǎo)致狼群接近獵物,表明已經(jīng)找到了最佳位置。 雖然,如果在這個階段,其中某只狼找到了更好的解,那么獵物的位置和狼群的層次結(jié)構(gòu)將會更新,但比例仍然趨于 0。 變化的過程由非線性函數(shù)表示。 這些階段示意如圖例 2 所示。
歐米茄階層的狼,其行為在所有世代都是不變的,包括遵循當(dāng)前占主導(dǎo)地位的個體位置之間的幾何中心。 在圖例 3 中,阿爾法、貝塔和德爾塔在隨機方向上偏離它們之前的位置,半徑由系數(shù)給出,歐米茄移動到它們之間的中心,但在半徑內(nèi)有一定程度偏離它的概率。 半徑?jīng)Q定了 a比率,正如我們記得的那樣,它的變化導(dǎo)致半徑成比例地減小。

編輯切換為居中
圖例 3. 歐米茄相對阿爾法、貝塔和德爾塔的的運動圖
GWO 算法的偽代碼如下:
1) 隨機初始化灰狼種群。 2) 計算種群每只個體成員的體質(zhì)狀況。 3) 狼群領(lǐng)導(dǎo)者: -α = 具有最佳體質(zhì)值的成員 -β = 第二等強大的成員(就體質(zhì)值而言) -δ = 第三等強大的成員(就體質(zhì)值而言) 根據(jù) α、β、δ 方程更新所有歐米茄狼的位置 4) 計算種群中每個成員的體質(zhì)。 5) 重復(fù)步驟 3。
我們繼續(xù)討論算法代碼。 我對原始版本所做的唯一補充就是能夠設(shè)置狼群中主導(dǎo)狼的數(shù)量。 現(xiàn)在,您可以設(shè)置任意數(shù)量的主導(dǎo)者,最多可達整個狼群。 對于特定任務(wù)這可能很實用。
如往常一樣,我們從算法的基本單元 — 狼開始,這是問題的解。 這是一個包含坐標數(shù)組和獵物值(適應(yīng)度函數(shù))的結(jié)構(gòu)。 對于主導(dǎo)者和次等成員,結(jié)構(gòu)是相同的。 這簡化了算法,并允許我們在循環(huán)操作中使用相同的結(jié)構(gòu)。 甚至,在所有迭代過程中,狼的角色會多次變化。 角色由排序后在數(shù)組中的位置唯一確定。 主導(dǎo)者位于數(shù)組的開頭。
//—————————————————————————————————————————————————————————————————————————————— struct S_Wolf { ?double c []; //coordinates ?double p; ? ?//prey }; //——————————————————————————————————————————————————————————————————————————————
狼群由一個緊湊且易于理解的類代表。 在此,我們聲明要優(yōu)化的參數(shù)范圍和步長,最佳生產(chǎn)位置,最佳解的值,和輔助函數(shù)。
//—————————————————————————————————————————————————————————————————————————————— class C_AO_GWO //wolfpack { ?//============================================================================ ?public: double rangeMax ?[]; //maximum search range ?public: double rangeMin ?[]; //manimum search range ?public: double rangeStep []; //step search ?public: S_Wolf wolves ? ?[]; //wolves of the pack ?public: double cB ? ? ? ?[]; //best prey coordinates ?public: double pB; ? ? ? ? ? //best prey ?public: void InitPack (const int ? ?coordinatesP, ? //number of opt. parameters ? ? ? ? ? ? ? ? ? ? ? ? const int ? ?wolvesNumberP, ?//wolves number ? ? ? ? ? ? ? ? ? ? ? ? const int ? ?alphaNumberP, ? //alpha beta delta number ? ? ? ? ? ? ? ? ? ? ? ? const int ? ?epochCountP); ? //epochs number ?public: void TasksForWolves ? ? ?(int epochNow); ?public: void RevisionAlphaStatus ();