天天看點

粒子群算法(三)局部版本

在全局的标準粒子群算法中,每個粒子速度的更新是根據兩個因素變化的。這兩個因素是:

1.粒子自己曆史最優值 pi。

2.粒子群體的全局最優值 pg。

如果改變粒子速度更新公式,讓每個粒子速度的更新根據以下兩個因素進行:A.粒子自己曆史最優值pi。B.粒子鄰域内粒子的最優值pnk。其餘保持跟全局的标準粒子群算法一樣,這個算法就變為局部的粒子群算法。

一般一個粒子i的鄰域随着疊代次數的增加而逐漸增加,開始第一次疊代,它的鄰域為0,随着疊代次數鄰域線性變大,最後鄰域擴充到整個粒子群,這時就變成全局的粒子群算法了。經過實踐證明:全局的粒子群算法收斂速度快,但是容易陷入局部最優。局部的粒子群算法收斂速度慢,但是很難陷入局部最優。現在的粒子群算法大都在收斂速度與擺脫局部最優這兩個方面下功夫。其實這兩個方面是沖突的,這就要看如何更好的折中了。

根據選取鄰域的方式不同,局部的粒子群算法有很多不同的實作方法。

第一種方法:按照粒子的編号取粒子的鄰域,取法有四種:1,環形取法 2,随機環形取法 3,輪形取法 4,随機輪形取法。

     1  環形

粒子群算法(三)局部版本

2 随機環形

粒子群算法(三)局部版本

     3 輪形

粒子群算法(三)局部版本

4随機輪形

粒子群算法(三)局部版本

對環形取法的一點說明:以粒子1為例,當鄰域是0的時候,鄰域是它本身,當鄰域是1時,鄰域為2,8;當鄰域是2時,鄰域是2,3,7,8;......,以此類推,一直到鄰域為4,這個時候鄰域擴充到整個粒子群體。

據文獻介紹(國外的文獻),采用輪形拓撲結構,PSO的效果很好。

第二種方法:按照粒子的歐式距離取粒子的鄰域

在第一種方法中,按照粒子的編号來得到粒子的鄰域,但是這些粒子其實可能在實際位置上并不相鄰,于是Suganthan提出基于空間距離的劃分方案,在疊代中計算每一個粒子與群中其他粒子的距離。記錄任何2個粒子間的最大距離為dm。對每一粒子按照||xa-xb||/dm計算一個比值。其中||xa-xb||是目前粒子a到b的距離。而選擇門檻值frac根據疊代次數而變化。當另一粒子b滿足||xa-xb||/dm<frac時,認為b成為目前粒子的鄰域。

這種辦法經過實驗,取得較好的應用效果,但是由于要計算所有粒子之間的距離,計算量大,且需要很大的存儲空間,是以該方法一般不經常使用。

繼續閱讀