侯 森 李才發(fā)
(1.中國人民解放軍信息工程大學(xué),河南 鄭州450002;2.中國人民解放軍75842部隊,廣東 廣州510880)
粒 子 群 優(yōu) 化 算 法 (Particle Swarm Optimization,PSO)是一種基于群體智能理論的全局優(yōu)化算法,粒子群中的粒子代表著優(yōu)化問題的可能解,每個粒子根據(jù)它自身存儲的歷史最優(yōu)點和它鄰居粒子記錄的歷史最優(yōu)點來調(diào)整自己的運動速率和方向“飛”向全局最優(yōu)解[1,2]。近年來,國內(nèi)外學(xué)者進(jìn)行了大量的粒子群優(yōu)化算法相關(guān)研究,這些研究工作主要集中在兩個方向上:一是改進(jìn)粒子速率的更新方式,從而提高算法的收斂速度或者保持粒子群的多樣性。如文獻(xiàn)[3]中引入了慣性權(quán)重,文獻(xiàn)[4]中提出了基于動態(tài)速率的算法。二是研究不同的樣本,選擇學(xué)習(xí)策略,從而使粒子能夠快速收斂到接近最優(yōu)解的區(qū)域內(nèi)。這一類典型的方法包括廣義自適應(yīng)粒子群法[5],基于異構(gòu)分簇的粒子群優(yōu)化算法[6]等。
大量的研究工作極大地豐富了粒子群算法的應(yīng)用領(lǐng)域。但是這些研究工作大都是專注于提升粒子群算法某一方面的性能,目前仍然缺乏能夠在各個領(lǐng)域普遍適用的算法。此外,粒子群算法因其可能出現(xiàn)早熟收斂,所以容易陷入局部最優(yōu)點。改進(jìn)PSO的關(guān)鍵在于如何選擇合適的收斂速度,過快的收斂速度容易導(dǎo)致算法陷入局部最優(yōu)點,而過慢的收斂速度又將極大地影響算法的效率。
本文從種群粒子位置更新過程的相關(guān)性角度出發(fā),提出了一種基于進(jìn)化的自適應(yīng)卡爾曼修正粒子群優(yōu)化算法。該算法在每次迭代過程中根據(jù)卡爾曼濾波修正機(jī)制調(diào)整算法最優(yōu)點的位置,提升算法在搜索空間中的搜索效率和收斂速度。同時作者使用了一種基于子梯度計算的方法自適應(yīng)地調(diào)整算法的系數(shù),從而提高算法的收斂率。此外,為了克服早熟收斂,作者采取了基于自然選擇的達(dá)爾文進(jìn)化機(jī)制,通過多個子群的自然進(jìn)化,增強粒子群的多樣性,從而使算法免于陷入局部最優(yōu)點。
每個粒子的速度和位置更新策略分別為:
由于算法的簡潔和高效,PSO自被提出以來就受到了眾多學(xué)者的關(guān)注和研究。近年來國內(nèi)外學(xué)者提出了許多PSO改進(jìn)算法,其中比較有代表性的研究有:Clerc and Kennedy引入了慣性權(quán)重ω來控制粒子的運動速率[3],它通過前一狀態(tài)速率的加權(quán)乘積來防止當(dāng)前速率過度激增,并將速度更新公式改寫成了如下形式:
慣性權(quán)重ω對于算法的收斂非常重要,慣性權(quán)重既可以是靜態(tài)的,也可以采用動態(tài)的。在算法初期搜索階段,粒子被賦予較大的速度有助于提高搜索效率加快收斂;在算法后期收斂階段,粒子被賦予較小的速度則能夠避免陷入局部最優(yōu)點。文獻(xiàn)[7]采取了一種非線性的慣性權(quán)重方式:
其中ω1和ω2分別代表慣性權(quán)重的初始值和最終值。慣性權(quán)重在初始階段具有較大的值,隨著迭代次數(shù)k的增加慣性權(quán)重快速減小,從而使得慣性權(quán)重在算法不同的階段發(fā)揮不同的作用。公式(4)所定義的慣性權(quán)重能夠較好地改善算法性能,但是這種形式的慣性權(quán)重并不能模擬所有優(yōu)化問題的情況,例如對于多峰類型的優(yōu)化函數(shù),這種形式的慣性權(quán)重就不能很好地發(fā)揮作用。
目前,絕大多數(shù)的PSO改進(jìn)算法都是基于速度更新公式的改進(jìn),通過控制慣性權(quán)重或者加速系數(shù)等方式使得PSO算法在不同階段具有不同的變化趨勢,從而實現(xiàn)快速收斂和避免陷入局部極值點。然而基于位置更新公式的改進(jìn)尚未有人嘗試,位置更新公式同樣提供給我們了許多信息,位置的變化趨勢更多地體現(xiàn)了種群的相關(guān)特性,因而將有助于算法的快速收斂。本文提出了一種基于進(jìn)化的自適應(yīng)卡爾曼修正粒子群優(yōu)化算法。該算法在每次迭代過程中根據(jù)卡爾曼濾波修正機(jī)制調(diào)整算法最優(yōu)點的位置,這樣的調(diào)整能夠顯著地提升算法在搜索空間中的搜索效率和收斂速度。同時作者使用了一種基于子梯度計算的方法來自適應(yīng)地調(diào)整算法的系數(shù),以此來實現(xiàn)提高算法收斂率。此外,為了克服早熟收斂,作者采取了基于自然選擇的達(dá)爾文進(jìn)化機(jī)制,通過多個子群的自然進(jìn)化,避免使算法陷入局部極值點。
粒子群算法在對種群中每個粒子的位置進(jìn)行迭代更新后,會計算它們的適應(yīng)度,然后通過適應(yīng)度的數(shù)值判斷粒子的優(yōu)劣。如果粒子當(dāng)前位置的適應(yīng)度好于歷史全局最優(yōu)點,則新的位置代替原來的全局最優(yōu)點。這種簡單比較的方式雖然有效,但是并沒有充分考慮到全局最優(yōu)點更新過程中的相關(guān)性。由于群體智能的社會認(rèn)知特性,粒子群在向全局最優(yōu)點收斂過程中的運動并不是隨機(jī)的,因而我們可以利用其中的相關(guān)性來修正粒子群全局最優(yōu)點的更新過程。
本文采用一種類似非線性濾波的卡爾曼修正機(jī)制 (Kalman Correction)在每次位置更新后對全局最優(yōu)點進(jìn)行調(diào)整,從而提高算法搜索效率。假設(shè)粒子群的適應(yīng)度函數(shù)為。第k次迭代后,粒子i在位置的適應(yīng)度值如下:
經(jīng)過k次迭代后,粒子群中當(dāng)前位置適應(yīng)度最優(yōu)的點為xg,歷史全局最優(yōu)點位置為pg。我們定義兩者之間的估算誤差為。
通過上式所示卡爾曼修正機(jī)制,算法可以根據(jù)全局最優(yōu)點的歷次更新,擬合出近似最優(yōu)點的非線性更新軌跡。最優(yōu)點適應(yīng)度的觀察噪聲為零,而最優(yōu)點的激勵噪聲可以看做是零均值的協(xié)方差為Q的高斯白噪聲。假設(shè)我們給定噪聲協(xié)方差初始值,根據(jù)Sage-Husa自適應(yīng)算法[8],噪聲統(tǒng)計特性的更新方程為:
其中d為權(quán)重系數(shù)。
我們在每次迭代后計算出修正的當(dāng)前最優(yōu)點,然后同種群歷史全局最優(yōu)點進(jìn)行適應(yīng)度的比較,如果修正后的當(dāng)前最優(yōu)點x_tempg(k)優(yōu)于歷史全局最優(yōu)點 pg(k),則用 x_tempg(k)代替 pg(k)。
雖然卡爾曼修正機(jī)制能夠有效地提升算法在解空間中的搜索速度,但是算法仍會受到慣性權(quán)重ω和加速系數(shù)的制約。根據(jù)PSO算法的原理,當(dāng)初始化階段算法從遠(yuǎn)離全局最優(yōu)點的任意位置開始搜索時,如果我們能夠給予粒子較大的速度則有利于算法快速收斂;當(dāng)粒子群逐漸匯聚到最優(yōu)點附近區(qū)域時,如果我們適度降低粒子的速度,則能夠避免粒子跳過最優(yōu)點,提高算法收斂率。因而我們考慮根據(jù)粒子到最優(yōu)點距離的不同,自適應(yīng)地調(diào)整算法的相關(guān)系數(shù),賦予粒子不同的搜索速度,這樣將有效地提高我們算法的準(zhǔn)確性和收斂率。本文設(shè)計了一種基于子梯度的自適應(yīng)系數(shù)更新方案,根據(jù)粒子到最優(yōu)點的距離動態(tài)地更新算法系數(shù)。
慣性權(quán)重ω以及加速系數(shù)c1、c2對PSO算法的性能非常重要,根據(jù)粒子到最優(yōu)點距離的不同我們可以賦予粒子不同的參數(shù)。當(dāng)粒子遠(yuǎn)離全局最優(yōu)點時,我們可以設(shè)置較大的參數(shù),提高運動速度從而加快收斂;當(dāng)粒子越來越靠近全局最優(yōu)點的時候,我們可以選擇較小的參數(shù),避免算法在最優(yōu)點附近震蕩,跳過最優(yōu)點。假設(shè)粒子i與全局最優(yōu)點的距離為Dig,優(yōu)化的目標(biāo)是選取合適的參數(shù)使得此距離最小。
受子梯度方法的啟發(fā),我們用下列形式更新慣性權(quán)重ω以及加速系數(shù)c1、c2:
其中 αi是步幅,gwi(k)、gc1i(k)、gc2i(k)分別是慣性權(quán)重ω以及加速系數(shù)c1、c2在公式(8)中的子梯度。
根據(jù)Polyak步幅方程,步幅αi可以寫作:
通過公式(10)~(16),我們可以根據(jù)粒子到最優(yōu)點的距離自適應(yīng)地調(diào)整粒子的參數(shù)。
通過采取上述卡爾曼修正和子梯度系數(shù)更新機(jī)制,雖然我們可以提高粒子群算法的搜索速度和收斂效率,但是算法仍然容易陷入局部最優(yōu)點。正如硬幣的雙面一樣,快速收斂和避免陷入局部最優(yōu)點是粒子群算法固有的悖論。提高搜索速度難免增加早熟收斂的可能性,已有的許多算法通過增加粒子群多樣性來調(diào)和兩者之間的矛盾。受文獻(xiàn)[7]的啟發(fā),我們采取基于自然選擇的達(dá)爾文進(jìn)化機(jī)制提高算法的全局搜索能力。
首先,我們將整個粒子群劃分為無數(shù)個動態(tài)子群,各子群通過獨立地繁殖、選擇和淘汰等自然操作,逐步向全局最優(yōu)進(jìn)化,通過搜索多樣性,能夠有效地避免陷入局部極值點。子群可以動態(tài)的增長或者消亡。一個子群可以找到更好的適應(yīng)度值從而延長壽命,同時也可以增加新的粒子來加快搜索速度;在連續(xù)若干迭代步驟中,如果一個子群沒有得到更優(yōu)的適應(yīng)度值,那么將縮短它的壽命,并且刪除子群中性能較差的粒子,當(dāng)子群中的粒子數(shù)量減少到一定閾值時,該子群將被銷毀。
達(dá)爾文進(jìn)化機(jī)制為每個粒子群中設(shè)置一個搜索計數(shù)器SC,記錄適應(yīng)度值沒有變化的次數(shù),如果SC超過最大門限SCcmax,則刪掉適應(yīng)度值最差的粒子。初始SC設(shè)置為0,每次刪除粒子后,SC值不復(fù)位,而是按照公式(17)重新設(shè)置。
綜上所述,AKDPSO算法的實現(xiàn)步驟可概括如下。
(1)輸入:粒子群,粒子數(shù)N及空間維數(shù)D。
(2)輸出:全局最優(yōu)點pg與最佳適應(yīng)度值。
(3)初始化:設(shè)定最大迭代代數(shù)tmax搜索計數(shù)器最大門限SCcmax,粒子的初始位置xi(0)和初始速度pi(0),粒子群初始最優(yōu)位置pg(0),初始慣性權(quán)重 ω(0)以及加速系數(shù) c1(0)、c2(0)。
(4)劃分若干初始子群,估計每個粒子的適應(yīng)度,設(shè)置粒子當(dāng)前位置為其極值pi(0),設(shè)置初始全局最佳粒子的位置為全局極值pg(0)。
(5)Repeat
for每個粒子群 do
for每個粒子 do
①根據(jù)式(13)-(15)更新系數(shù)子梯度:
根據(jù)式(10)-(12)自適應(yīng)更新慣性權(quán)重ω和加速系數(shù):
②應(yīng)用式(2)與(3)實現(xiàn)粒子位置與速度的更新
③對狀態(tài)更新后的粒子適應(yīng)度值進(jìn)行評估,如果優(yōu)于當(dāng)前的自身最優(yōu)值,則將pi(k)設(shè)置為該粒子的位置,并且更新自身最優(yōu)值。
end for
④如果存在粒子的最優(yōu)值好于當(dāng)前全局最優(yōu)值,則將pg(k)設(shè)置為該粒子的位置,且更新全局最優(yōu)點。
⑤根據(jù)式(6)-(8)定義的卡爾曼修正機(jī)制調(diào)整全局最優(yōu)點的位置
如果修正的最優(yōu)點適應(yīng)度好于當(dāng)前記錄的全局最優(yōu)值,則用修正值更新全局最優(yōu)點。
⑥if粒子群的全局最優(yōu)點得到了改進(jìn) do
獎勵粒子群:增加粒子;延長粒子群壽命
endif
elseif do
懲罰粒子群:縮短粒子群壽命;刪除計數(shù)器SC超過SCcmax的粒子。
endif end for
for每個粒子群 do
⑦如果粒子群壽命或者粒子群中粒子數(shù)量少于門限,刪除該粒子群,按照式(17)重置搜索計數(shù)器。
⑧如果粒子群中沒有粒子被刪除,并且粒子群數(shù)量不超過其最大數(shù)目N,則按概率衍生后代,產(chǎn)生新的子群。
end for
until當(dāng)達(dá)到最大迭代次數(shù)或者整個粒子群適應(yīng)度不再發(fā)生顯著變化,停止迭代。
return全局最優(yōu)點pg與最佳適應(yīng)度值。
上述算法能夠有效提高搜索速度和收斂率,同時繼承了達(dá)爾文進(jìn)化的優(yōu)點,降低了粒子群陷入局部極值的可能。
我們選取了六個典型函數(shù)來測試AK-DPSO算法的性能,它們的表達(dá)式如下表所示。
表1 六個典型函數(shù)
其中f*為全局極值。同時我們選取PSO、HPSO、DPSO、APSO、FO-PSO 五種算法與本文提出的AK-DPSO算法進(jìn)行比較,將上述6個函數(shù)表達(dá)式作為適應(yīng)度函數(shù)。各PSO算法的初始參數(shù)設(shè)置如表2所示,其中粒子數(shù)N=50,空間維數(shù)D為20,最大迭代次數(shù) tmax=1000。
表2 各PSO算法的參數(shù)設(shè)置
為了減少統(tǒng)計誤差,對每個函數(shù)進(jìn)行了30次測試,然后取其平均值進(jìn)行比較。通過表3可以看出,無論是在單峰函數(shù) f1、f2、f3上,還是在多峰函數(shù)f4、f5、f6上,基于進(jìn)化的自適應(yīng)卡爾曼修正粒子群優(yōu)化算法的測試結(jié)果均要好于現(xiàn)有的PSO及其優(yōu)化算法。
表3 不同粒子群優(yōu)化算法對6個測試函數(shù)的搜索結(jié)果比較
我們用最優(yōu)解方差函數(shù)來評價算法的穩(wěn)定性,定義如下:
當(dāng)∣fi-favg∣>1 時,fmax取值為 max(∣fi-favg∣),否則取1。如表4所示,AK-DPSO算法的最優(yōu)值方差小于其他五種算法,因此AK-DPSO算法搜索到的最優(yōu)解最穩(wěn)定。
表4 測試函數(shù)的最優(yōu)值方差比較
圖 1(a)~(f)為 APSO、HPSO、DPSO 與本文提出AK-DPSO算法對典型測試函數(shù)優(yōu)化過程中,種群收斂性能的對比。圖1中的縱坐標(biāo)表示適應(yīng)度的對數(shù)值,橫坐標(biāo)為迭代次數(shù)。
通過上圖可以看出,本文提出的AK-DPSO算法比APSO、HPSO和DPSO算法收斂速度更快,并且能夠跳出局部最優(yōu)值,從而提升了算法的全局搜索能力,有效地避免了早熟收斂問題。
綜上所述,與現(xiàn)有的幾種PSO算法相比較,AK-DPSO算法收斂速度、穩(wěn)定性以及搜索精度都得到了明顯提高,展示出更令人滿意的整體優(yōu)化性能。
作者對比了AK-DPSO算法和上文五種對比算法在1000次迭代次數(shù)內(nèi)對上文六個函數(shù)的平均計算時間,以比較幾種算法的復(fù)雜度。同時作者還比較了粒子群規(guī)模與算法復(fù)雜度的關(guān)系,實驗結(jié)果如圖2所示。
AK-DPSO算法復(fù)雜度略高于其他算法,其主要原因是AK-DPSO算法由于使用了粒子的位置和速度參數(shù)進(jìn)行動態(tài)調(diào)整,粒子每次迭代都將增加O(2(N-1)D+N)的計算復(fù)雜度。AK-DPSO增加了計算復(fù)雜度,但是獲得了較高的搜索精度、較快的收斂速度和較好的穩(wěn)定性。
為了避免陷入局部極值點和快速收斂,本文從種群粒子位置更新過程的相關(guān)性角度出發(fā),提出了一種基于進(jìn)化的自適應(yīng)卡爾曼修正粒子群優(yōu)化算法,在此基礎(chǔ)上給出了AK-DPSO算法。該算法在每次迭代過程中根據(jù)卡爾曼濾波修正機(jī)制調(diào)整算法最優(yōu)點的位置,提升算法在搜索空間中的搜索效率和收斂速度;同時作者使用了一種基于子梯度計算方法自適應(yīng)地調(diào)整算法的系數(shù),采取了基于自然選擇的達(dá)爾文進(jìn)化機(jī)制,避免使算法陷入局部極值點。相比于現(xiàn)有的主要粒子群優(yōu)化算法,本文的AK-DPSO算法的搜索精度、收斂速度和穩(wěn)定性都有了顯著提高,全局尋優(yōu)能力得到了極大提升。