吳永紅,曾志高,鄧 彬
(湖南工業大學 計算機學院,湖南 株洲 412007)
粒子群算法是一種經典的元啟發式算法[1],該算法由C.Reynolds 于1987 年對鳥類覓食行為進行模擬研究時得出,他提出如下模擬鳥群個體簡單行為的3個規則:
1)防止鳥群發生碰撞,即減少與其他粒子產生碰撞;
2)鳥群個體保持速度相近,即速度與鄰近粒子盡可能相近;
3)鳥群個體朝中心靠攏,即朝粒子群中心盡可能聚攏。
其后,J.Kennedy 等基于C.Reynolds 的研究結論,在1995 年經過進一步研究提出了一種粒子群優化(particle swarm optimization,PSO)算法。該算法對之前的算法進行了參數簡化,算法原理更為簡單,易于實現[2],因此得到許多研究人員的關注,并且被應用于處理各種優化問題。例如:張鑫等[3]提出了一種自適應簡化粒子群優化算法,按照一定規律引入分布的鎖定因子,從而粒子位置的慣性權重可以通過鎖定因子自適應配置,導致算法收斂速度得到了有效提高,但是仍然存在魯棒性較弱、收斂精度較低等缺陷;王永貴等[4]為了增加種群的多樣性,在算法中引入了動態分裂算子,以此避免陷入局部最優解,然后通過采用指數衰減的慣性權重,平衡粒子的局部以及全局的搜索;杜美君等[5]提出了一種基于相似度動態調整慣性權重的方法,它將更小的慣性權重值賦予靠近目前最優粒子的個體,但是算法收斂速度較慢,當處理復雜函數問題時,耗時較長。PSO 算法也存在很多的局限,在迭代時粒子群體多樣性不斷降低,導致算法容易陷入局部最優解、收斂速度后期變慢或者出現早熟收斂等問題。上述研究者的改進算法對增強種群多樣性有很大幫助,同時有助于平衡算法局部搜索能力與全局搜索能力,在一定程度上提高了PSO 算法的尋優精度,也加快了算法的收斂速度。
以上各算法主要針對粒子群算法在迭代過程中種群多樣性降低、收斂速度較慢和尋優精度較低等問題[6-10]而提出改進方案,但是沒有對算法的慣性權重和學習因子進行動態調整,有可能導致算法出現早熟收斂現象。針對這一問題,本文提出一種自適應的調整慣性權重和學習因子的粒子群算法,利用慣性權重和學習因子的動態改進調整,以期提高算法的性能。對比實驗結果顯示,改進算法具有較強的尋優能力和收斂性。
在粒子群優化算法中,所有粒子組成一個種群,每個個體可以被看作一個具有位置和速度的粒子,待求解問題的候選解用粒子位置表示。種群開始初始化,且各粒子被隨機給予一個位置和速度,不同個體分別代表不同的隨機解,在不斷迭代后最終得到粒子最優解。隨著粒子位置與速度的不斷更新,局部最優解和全局最優解隨之更新。在迭代期間,各個粒子用跟蹤個體極值與全局極值的方式完成更新。pbest(i, t)表示到第i 個粒子第t 次迭代期間所發現的粒子最優位置,pbest則表示群體迄今為止所發現的最優位置,分別用式(1)與式(2)來表示粒子更新后的速度和位置。
基本粒子群算法的速度和位置更新公式如下:

式中:w 表示慣性權重;
vi(t+1)代表第i 個粒子當前迭代速度;
xi(t)為第i 個粒子的位置;
r1、r2為介于[0, 1]區間內的隨機數;
c1、c2為非負的學習因子。
慣性權重是重要的進化參數,它決定的是粒子先前飛行速度對當前飛行速度的影響程度。當慣性權重較小時,整體的局部搜索能力較強,全局搜索能力較弱;慣性權重較大時,整體的局部搜索能力較弱,全局搜索能力較強。因而,為優化算法尋優能力與算法性能,并平衡粒子的局部搜索與全局搜索能力,采用調整慣性權重值的方式來完成。算法在搜索速度與搜索精度上能否適當平衡,取決于能否找到適當的慣性權重值,這也成為業內學者們的一個重要研究方向。
基本粒子群算法仍然有很多缺陷,如算法經常產生早熟收斂現象,環境的變化會影響算法性能,經常會受到全局極值和個體極值的影響而陷入局部最優等。針對以上問題,本文對算法的慣性權重和學習因子進行了動態改進調整,以提升算法的尋優能力和收斂性。
粒子群算法的速度迭代公式中有如下3 個重要參數:慣性權重w 和學習因子c1、c2。慣性權重w 影響著粒子先前的飛行速度對于當前的飛行速度的影響程度,慣性權重的選取對于平衡算法的全局搜索能力和局部搜索能力有著重要意義。在迭代過程中,要考慮算法的全局性和局部性,要采取合適的慣性權重來進行搜索。本文利用改進后的冪指函數算子,將其加入到慣性權重中,以總的迭代次數為基礎,在搜索時讓每個粒子擴大搜索空間,以此增大種群多樣性。因此,本文采用改進慣性權重值的策略。對比實驗結果表明,動態調整后的慣性權重能提高算法搜索性能,有效改善收斂狀況,隨著算法不斷迭代,慣性權重值動態改變,表達式為

式中:g 為當前迭代次數;
a、b、d 為參數;
gmax為迭代次數的最大值。
作為算法運行中的重要式子,c1是粒子具有自我學習總結能力的體現,代表的是個體自我認知;學習因子c2是粒子具有向表現更好的粒子學習的本領體現,代表的是粒子的社會認知。需要設置恰當的c1、c2以便于粒子進行搜尋。初期要關注個體自我認識的能力,后期則應注重個體獲取社會信息的能力。本文設置如下學習因子:

式(4)(5)中e1、e2、f1、f2為參數。
改進后新的粒子速度和位置迭代公式跟原始算法相同。
與基本粒子群算法相比較,對基于慣性權重和學習因子動態調整的粒子群算法的速度公式作出調整時,實現了算法隨著迭代次數變化而動態變化,其全局搜索能力有效提高,粒子的收斂性也得到了加強。然而,當遇到一些復雜的多峰值函數曲線的尋優問題時,基于慣性權重和學習因子動態調整的粒子群算法,依然存在許多問題,收斂速度以及精度仍達不到要求等。如當受到局部陰影的作用時,光伏陣列的輸出曲線將會變得錯綜變幻,由于多峰值的產生,大大增加了整體尋優的難度,也可能使基本粒子群算法和改進粒子群算法顯示早熟跡象,而導致產生局部極值。
基于慣性權重和學習因子動態調整的粒子群算法的步驟具體描述如下:
Step 1 對粒子群初始化,產生各個粒子的位置和速度,并進行子種群劃分,最大迭代次數gmax,種群規模Spop等。
Step 2 設置模型,初始化后存放粒子的速度、位置和適應度值,然后在種群中挑選出具有最佳適應度值以及對應最佳位置的粒子。
Step 3 更新慣性權重w 與學習因子c1、c2。
Step 4 對各個粒子分別評價,并更新粒子的位置、速度。
Step 5 隨著粒子位置不斷更新,分別計算粒子的適應度值,找出每個粒子所能得到的個體最優值pbest,當每找到一個新的pbest 時,再與之前的最優值進行比較,將更優值更新為全局最優值pbest,經過粒子的不斷更新迭代,最終更新得到全局最優解pbest。
Step 6 判斷算法能否達到終止標準,若達到,則輸出最優值;若沒達到,則返回步驟3。
根據上述改進粒子群算法的流程,繪制如圖1 所示流程圖。

圖1 改進粒子群算法的流程圖Fig.1 Flow chart of the improved particle swarm optimization
為了驗證本研究中所提出的改進的粒子群算法是否有效可行, 實驗組使用了6 個典型測試函數來進行測試,并且與基本粒子群算法進行比較。仿真實驗的運行環境為Matlab2016a, 64 位 Windows10的操作系統,硬件參數為 Intel(R) Core(TM) i5-4300U CPU @ 1.09GHz 處理器、內存是為 GB。定義6 個測試函數如下:

函數在(0, 0)處存在唯一極大值,且在周圍分布著許多局部極值。
函數在(0, 0)處取得極大值0。

函數在(0, 0)處取得極小值0。

函數在(0, 0)處存在最小值 0。

函數在(1, 3)處取得極小值0。

函數在(0, 0)處有極小值0。
設置基本粒子群算法的運行參數如下:c1取值為1.5,c2取值為1.7,種群規模Spop取值為20,種群維數為10,實驗共運行20 次,每次運行迭代500 次,求其平均值。設置的改進粒子群算法的參數基本粒子群算法的相同。
為了對改進的粒子群算法的尋優效果進行測試,對基本粒子群算法和改進粒子群算法各運行20 次,得到各自的平均值,所得測試結果如表1 所示,表中IPSO 代表改進的粒子群算法。其中,最優值是得到的所有解值集合中最好的值,最差值是得到的所有解值集合中最差的值,最優點為20 次最優值位置的平均值。由表1 可知,除了函數f5以外,IPSO 均找到了最優值;所有測試值中,改進粒子群算法的標準差更小,優化結果比基本算法更優。

表1 兩種算法的結果比較Table 1 Comparison of the results of the two algorithms
基本算法和改進算法的收斂曲線如圖2 所示。



圖2 基本粒子群算法與改進粒子群算法在不同函數下的收斂曲線Fig.2 Comparison of convergence curves between the standard and improved particle swarm optimization algorithms under different functions
由圖2 中各個函數的收斂曲線可以得知,隨著迭代次數的增加,粒子群逐漸向最優值聚集,改進算法得到的收斂曲線比基本算法得到的收斂曲線更快接近水平方向,說明改進的算法收斂速度增強,改進的PSO 算法的收斂性更好。
針對粒子群算法收斂性不太好、在尋優過程中易陷入局部極值等問題,提出了一種基于慣性權重和學習因子動態調整的粒子群算法,由運行對比實驗結果可得,改進的粒子群算法的收斂性有效提高,性能比基本粒子群算法更優。以后的研究方向將會利用本文改進的粒子群算法去優化支持向量機參數,使支持向量機的求解更加高效。