标准粒子群算法(PSO)
第2章 標準粒子群算法(PSO)
2.1 粒子群算法思想的起源
粒子群優化(Particle Swarm Optimization, PSO)算法是Kennedy和Eberhart受人工生命研究結果的啟發、通過模擬鳥群覓食過程中的遷徙和群聚行為而提出的一種基于群體智能的全局隨機搜索算法,自然界中各種生物體均具有一定的群體行為,而人工生命的主要研究領域之一是探索自然界生物的群體行為,從而在計算機上構建其群體模型。自然界中的鳥群和魚群的群體行為一直是科學家的研究興趣,生物學家Craig Reynolds在1987年提出了一個非常有影響的鳥群聚集模型,在他的仿真中,每一個個體遵循:
(1) 避免與鄰域個體相沖撞;
(2) 匹配鄰域個體的速度;
(3) 飛向鳥群中心,且整個群體飛向目標。
仿真中僅利用上面三條簡單的規則,就可以非常接近的模擬出鳥群飛行的現象。1995年,美國社會心理學家James Kennedy和電氣工程師Russell Eberhart共同提出了粒子群算法,其基本思想是受對鳥類群體行為進行建模與仿真的研究結果的啟發。他們的模型和仿真算法主要對Frank Heppner的模型進行了修正,以使粒子飛向解空間并在最好解處降落。Kennedy在他的書中描述了粒子群算法思想的起源。
2.2 算法原理
PSO從這種模型中得到啟示并用于解決優化問題。PSO 中,每個優化問題的潛在解都是搜索空間中的一只鳥,稱之為粒子。所有的粒子都有一個由被優化的函數決定的適值( fitness value) ,每個粒子還有一個速度決定它們飛翔的方向和距離。然后粒子們就追隨當前的最優粒子在解空間中搜索。
PSO初始化為一群隨機粒子(隨機解),然后通過迭代找到最優解。在每一次迭代中,粒子通過跟蹤兩個極值來更新自己;第一個就是粒子本身所找到的最優解,這個解稱為個體極值;另一個極值是整個種群目前找到的最優解,這個極值是全局極值。另外也可以不用整個種群而只是用其中一部分作為粒子的鄰居,那么在所有鄰居中的極值就是局部極值。
假設在一個維的目標搜索空間中,有個粒子組成一個群落,其中第個粒子表示為一個維的向量
,。
第個粒子的“飛行 ”速度也是一個維的向量,記為
,。
第個粒子迄今為止搜索到的最優位置稱為個體極值,記為
,。
整個粒子群迄今為止搜索到的最優位置為全局極值,記為
在找到這兩個最優值時,粒子根據如下的公式(2-1)和( 2-2)來更新自己的速度和位置:
(2-1)
(2-2)
其中:和為學習因子,也稱加速常數(acceleration constant),w為慣性因子,和為[0,1]范圍內的均勻隨機數。式(2-1)右邊由三部分組成,第一部分為“慣性(inertia)”或“動量(momentum)”部分,反映了粒子的運動“習慣(habit)”,代表粒子有維持自己先前速度的趨勢;第二部分為“認知(cognition)”部分,反映了粒子對自身歷史經驗的記憶(memory)或回憶(remembrance),代表粒子有向自身歷史最佳位置逼近的趨勢;第三部分為“社會(social)”部分,反映了粒子間協同合作與知識共享的群體歷史經驗,代表粒子有向群體或鄰域歷史最佳位置逼近的趨勢, ,是粒子的速度,,是常數,由用戶設定用來限制粒子的速度。和是介于之間的隨機數。
2.3 標準粒子群算法流程
算法的流程如下:
Step1:初始化粒子群,包括群體規模,每個粒子的位置和速度
Step2:計算每個粒子的適應度值;
Step3: 對每個粒子,用它的適應度值和個體極值比較,如果 ,則用替換掉;
Step4: 對每個粒子,用它的適應度值和全局極值比較,如果則用替;
Step5: 根據公式(2-1),(2-2)更新粒子的速度和位置 ;
Step6: 如果滿足結束條件(誤差足夠好或到達最大循環次數)退出,否則返回Step2。
圖2-1. PSO算法流程圖
2.4 特點
1、式(2-1)中第1部分可理解為粒子先前的速度或慣性;第2部份可理解為粒子的“認知”行為,表示粒子本身的思考能力;第3部分可理解為粒子的“社會”行為,表示粒子之間的信息共享與相互合作。公式(2-2) 表示了粒子在求解空間中,由于相互影響導致的運動位置調整。整個求解過程中,加速因子和和最大速度共同維護粒子對全局和局部搜索能力的平衡。
2、粒子群優化算法初期,其解群隨進化代數表現了更強的隨機性,正是由于其產生了下一代解群的較大的隨機性,以及每代所有解的“信息”的共享性和各個解的“自我素質”的提高。
3、PSO 的一個優勢就是采用實數編碼,不需要像遺傳算法一樣采用二進制編碼(或者采用針對實數的遺傳操作) 。例如對于問題求解, 粒子可以直接編碼為 ,而適應度函數就是 。
4、粒子具有“記憶”的特性,它們通過“自我”學習和向“他人”學習,使其下一代解有針對性的從“先輩”那里繼承更多的信息,從而能在較短的時間內找到最優解。
5、與遺傳算法相比,粒子群優化算法的信息共享機制是很不同的:在遺傳算法中,染色體互相共享信息,所以整個種群的移動是比較均勻的向最優區域移動;在粒子群優化算法中,信息流動是單向的,即只有將信息給其他的粒子,這使得整個搜索更新過程跟隨當前解。
2.5 慣性權重線性遞減的粒子群算法(PSO-W)
探索是偏離原來的尋優軌跡去尋找一個更好的解,探索能力是一個算法的全局搜索能力。開發是利用一個好的解,繼續原來的尋優軌跡去搜索更好的解,它是算法的局部搜索能力。如何確定局部搜索能力和全局搜索能力的比例,對一個問題的求解過程很重要。1998年,Yuhui Shi[9]提出了帶有慣性權重的改進粒子群算法。其進化過程為:
(2-3)
(2-4)
在式(2-1)中,第一部分表示粒子先前的速度,用于保證算法的全局收斂性能;第二部分、第三部分則是使算法具有局部收斂能力。可以看出,式(2-3)中慣性權重表示在多大程度上保留原來的速度。較大,全局收斂能力強,局部收斂能力弱;較小,局部收斂能力強,全局收斂能力弱。
當時,式(2-3)與式(2-1)完全一樣,表明帶慣性權重的粒子群算法是基本粒子群算法的擴展。實驗結果表明,在之間時,PSO算法有更快的收斂速度,而當時,算法則易陷入局部極值。
由于較大的權重因子有利于跳出局部最小點,便于全局搜索,而較小的慣性因子則有利于對當前的搜索區域進行精確局部搜索,以利于算法收斂,因此針對PSO算法容易早熟以及算法后期易在全局最優解附近產生振蕩現象,可以采用線性變化的權重,讓慣性權重從最大值線性減小到最小值。隨算法迭代次數的變化公式為:
(2-5)
其中,,分別表示的最大值和最小值,t表示當前迭代步數,表示最大迭代步數,通常取,.
2.6 帶收縮因子的粒子群算法(PSO-X)
學習因子cl和c2決定了微粒本身經驗信息和其他微粒的經驗信息對微粒運行軌跡的影響,反映了微粒群之間的信息交流。設置c1較大的值,會使微粒過多地在局部范圍內徘徊,而較大的c2的值,則又會促使微粒過早收斂到局部最小值。微粒有效地控制微粒的飛行速度,使算法達到全局探測與局部開采兩者間的有效平衡,Clerc構造了引入收縮因子的PSO模型,采用了壓縮因子,這種調整方法通過合適選取參數,可確保PSO算法的收斂性,并可取消對速度的邊界限制。速度公式如下:
(2-6)
其中稱為收縮因子,,,且。
2.7測試仿真函數
用2個單峰函數和2個多峰函數來測試以上三種算法,求函數的最小值,
1.單峰函數-Sphere Model
函數表達式
全局最優值
函數維數為2時的模型為:
Sphere Model Schwefel’s Problem2.22
2.單峰函數 Schwefel’s Problem2.22
函數表達式
全局最優值
3.病態函數Generalized Rosenbrock
函數表達式
全局最優值
Generalized Rosenbrock Generalized Rastrigin
4.多峰函數Generalized Rastrigin 函數
函數表達式
全局最優值
2.8測試結果
初始條件為粒子群數目為20,每個粒子維數為20,迭代1000次
圖2-2單峰函數Sphere Model 測試結果
圖2-3單峰函數Schwefel’s Problem2.22 測試結果
圖2-4病態函數Generalized Rosenbrock 測試結果
圖2-5多峰函數Generalized Rastrigin測試結果
表2-1 基本粒子群算法、慣性權重線減粒子群算法,帶收縮因子粒子群算法輸出結果
|
函數 |
PSO |
PS0-W |
PSO-X |
||
|
單峰 函數 |
最優值 |
0.0021(好解) |
2.56E-05(好解) |
2.45E-04(好解) |
|
|
均值 |
0.0233 |
0.0084 |
0.0041 |
||
|
最優值 |
0.1129(差解) |
0.0754(好解) |
0.0849(好解) |
||
|
均值 |
0.3304 |
0.1275 |
0.1011 |
||
|
病態函數 |
最優值 |
8.5907(差解) |
7.7378(差解) |
8.2623(差解) |
|
|
均值 |
9.9060 |
8.4721 |
8.5427 |
||
|
多峰函數 |
最優值 |
1.2151(差解) |
1.2344(差解) |
0.8977(差解) |
|
|
均值 |
3.4962 |
1.678 |
1.209 |
2.9測試結論
從上圖2-2~2-5及表一我們可以知道,以上三種粒子群算法,只對于單峰函數且非病態方程才能取得最優解,迭代次數越多,種群數目越多,得到的精度就會越高,但同時也會延長運算的時間,所以迭代次數和種群數需設置好,并且相對來說慣性權重線性遞減的粒子群算法找到的解是最好的。
然而對于多峰函數以及病態方程,以上三種粒子群算法無法取得最好的解,無論是增加迭代次數還是種群數目,精度都不會有太大的改變,這就是基本粒子群一個最大的缺點,即容易陷入局部最優解的位置,算法容易早熟,對多峰函數或病態函數無法找到最優解,所以我們可以得出慣性權重線減粒子群算法,帶收縮因子粒子群算法改進的效果意義不大,算法沒有本質上的改變,精度也無法提高很多。
由于在我們實際生活中,大部份的優化問題都是多峰函數或病態函數,為了克服基本粒子群算法的缺陷,我研究了以下四種改進的粒子群算法:基于混沌思想改進的粒子群算法、基于遺傳思想改進的混合粒子群算法、基于免疫記憶和濃度機制改進的混合粒子群算法.
總結
以上是生活随笔為你收集整理的标准粒子群算法(PSO)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: CVE-2009-3459
- 下一篇: 这是中建电商吗?“新蛋帮”一枝独大