微粒群算法(一、简介)
一、建模思想
微粒群算法(粒子群算法)是從20世紀90年代初發展起來的一種群體智能算法。基本思想是模擬鳥群和魚群的群體行為來構造隨機優化算法。
美國的社會心理學家Kennedy和電氣工程師Eberhart早期在對鳥群的群體行為進行研究時發現。雖然每一個個體具有非常簡單的行為規則,但群體的行為非常復雜。比如鳥群在覓食或尋找棲息地的時候使用簡單的規則確定自己的飛行方向和飛行速度。建立仿真模型時就采用了以下的三條簡單規則:
(1)飛離最近的個體,避免碰撞;
(2)飛向目標;
(3)飛向群體中心。
從這幾點看來,鳥類尋找棲息地和對一個特定問題求解很類似。尋找棲息地的過程就是尋找最優解的過程。已經找到棲息地的鳥會引導它周圍的鳥飛向棲息地。一只鳥就是一個粒子。對一個優化問題來說,一只鳥的位置就是一個解,那建立仿真模型的關鍵就是微粒能夠飛向解空間并且在最好解的位置降落。
Pi ---- 當前最好位置
Pg ---- 全局最好位置
S個微粒Xi
比如在一個空間當中S個微粒Xi,它們的初始位置以及飛行速度都是隨機的。最優解在某一個位置,在飛行過程當中,每一個微粒都有它自己所經歷過的最好位置Pi,所有的這些微粒又有一個全局最好位置Pg。微粒的飛行是有一定記憶特性的,它會向著Pi和Pg飛行。在飛行的過程中又會產生新的Pi和Pg,直到找到最優解。
二、基本微粒群算法
2.1 算法原理
不失一般性,我們使所要求的最優解問題為:
對于這個最優化問題,微粒群算法的求解模型是這樣的:
初始化S個微粒 {X1,X2,…….,Xs}。設:
Xi = { Xi1,Xi2,…….Xin }為微粒i的當前位置
Vi = { Vi1,Vi2,…….,Vin }為微粒i的當前速度
Pi = { Pi1,Pi2,…….,Pin }為微粒i的當前最好速度
(Pi是迭代過程中產生的,指的是微粒i所經歷過的具有最好適應值的位置,也稱個體最好位置。)
迭代公式為:
定義Pg(t)為全局最好位置:
有以上的基本定義,基本微粒群算法的描述為:
從(3)可以看出,C1是調節微粒飛向自身最好位置的步長,C2是調節微粒飛向全局最好位置的步長。為了在進化過程中,微粒能夠留在搜索空間,一般要給Vi一個限定范圍:
-Vmax <= Vi <= Vmax
-Xmax <= Xi <= Xmax
Vmax = kXmax , 0 <= k <=1.0
以上是基本微粒群算法的基本模型。下面是算法流程。
2.2 算法流程
(1)初始化
i. 設定種群規模S
ii. 在 [ -Xmax , Xmax ]產生均勻分布Xi
iii. 在 [ -Vmax , Vmax ]產生均勻分布Vi
iv. 令Pi = Xi
(2)計算每個微粒的適應值f( Xi )
(3)求取Pi
(4)求取Pg
(5)對速度和位置進行進化
(6)判斷是否達到結束條件,否就返回步驟(2)
2.3 算法分析
從上面的算法流程可以看出,基本微粒群算法相對來說比較簡單,計算量較小,那么基本微粒群算法的效果怎么樣,能否達到問題優化目的。下面我們做一個算法分析:
把(3)式化簡為: Vi(t+1) = G1 + G2 + G3 (5)
其中 G1 = Vi(t)
G2 = C1r1[ Pi(t) - Xi(t) ]
G3 = C2r2[ Pi(t) - Xi(t) ]
那么,G1是微粒先前的速度,G2稱為認知部分,考慮微粒自身的經驗,表示微粒對本身的思考。G3稱為“社會”部分,表示微粒對社會信息的共享。
那么,我們可以看出,G1是微粒原先的速度項,G2,G3是對速度的修正。
如果沒有 Vi(t+1) = G1, 微粒保持原來的速度不變,一只飛向搜索的邊界。
如果包含認知部分Vi(t+1) = G1 + G2,則進化的性能變差,主要是因為信息缺乏交流,即沒有社會信息共享,微粒之間沒有交互,使得一個規模為S的群體等價于運行了S個單個微粒。因而得到最優解的可能性很小。
如果只包含社會部分,即 Vi(t+1) = G1 + G3,這樣微粒在相互作用下有能力達到新的搜索空間,但對與復雜的問題容易陷入局部最優點,這一點已經由Eberhart進行了證明。
如果不要速度項,只保留認知部分和社會部分,即Vi(t+1) = G2 + G3,那么這時微粒的速度將取決于歷史最優位置與群體最優位置,從而導致速度無記憶性。假如有一個微粒處在了整體最優位置,它將停止進化,其它的微粒向著這個最優位置飛去,并在這個位置的周圍搜索,這說明沒有第一項的話,算法有很強的局部搜索能力。
通過以上分析,我們可以發現G2,G3使得微粒群算法具有局部收斂能力,G1則保證算法的全局收斂能力,這一點也是比遺傳算法好的地方。
三、改進微粒群算法
前邊是整個基本微粒群算法的基本原理、算法流程、算法分析。基本微粒群算法有很多優點,比如,算法簡單,計算量小,全局搜索能力強等。但人們在利用基本微粒群算法,求解最優化問題時,也發現了基本微粒群算法的一些缺點:比如前邊提到了基本微粒群算法第一部分保證全局搜索能力,第二、三部分保證局部搜索能力。對于不同的問題,如何確定局部搜索能力和全局搜索能力的比例關系,對求解過程非常重要。于是有人提出了帶慣性權重的改進微粒群算法:
Vi(t+1) = wVi(t) + C1r1[ Pi(t) - Xi(t) ] + C2r2[ Pi(t) - Xi(t) ]
Xi(t+1)= Xi(t)+ V(t+1)
w稱為慣性權重,取值范圍一般在 [0.9 ,1.2]計算時收斂速度較快。
慣性權重類似于模擬褪火算法中的溫度,較大的w有較好的全局收斂能力,單容易在最優解處發生震蕩,而較小的w有較強的局部收斂能力。從這一點看,隨著迭代次數的增加,w應不但減少,以而使算法在初期具有較強的全局收斂能力,晚期具有較強的局部收斂能力。
一種典型的遞減方法是線性遞減方法:
w(t) = 0.9 – 0.5*t/maxNumber (6)
maxNumber為最大截止代數,t為迭代次數,這種方法對于4個測試函數測試效果很好。
四、備注
PSO算法常有如下n種重要的控制參數:
(1)微粒群的規模S
(2)認知學習系數C1
(3)社會學習系數C2
(4)控制微粒飛行的速度Vmax
(5)慣性權重系數w
五、應用實例
總結
以上是生活随笔為你收集整理的微粒群算法(一、简介)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 在linux系统如何获得窗口句柄,编写控
- 下一篇: 多元统计分析基于r课后答案_应用多元统计