粒子群算法介紹
優(yōu)化問(wèn)題是工業(yè)設計中經(jīng)常遇到的問(wèn)題,許多問(wèn)題最后都可以歸結為優(yōu)化問(wèn)題. 為了解決各種各樣的優(yōu)化問(wèn)題,人們提出了許多優(yōu)化算法,比較著(zhù)名的有爬山法、遺傳算法等.優(yōu)化問(wèn)題有兩個(gè)主要問(wèn)題:一是要求尋找全局最小點(diǎn),二是要求有較高的收斂速度. 爬山法精度較高,但是易于陷入局部極小. 遺傳算法屬于進(jìn)化算法( Evolutionary Algorithms) 的一種,它通過(guò)模仿自然界的選擇與遺傳的機理來(lái)尋找最優(yōu)解. 遺傳算法有三個(gè)基本算子:選擇、交叉和變異. 但是遺傳算法的編程實(shí)現比較復雜,首先需要對問(wèn)題進(jìn)行編碼,找到最優(yōu)解之后還需要對問(wèn)題進(jìn)行解碼,另外三個(gè)算子的實(shí)現也有許多參數,如交叉率和變異率,并且這些參數的選擇嚴重影響解的品質(zhì),而目前這些參數的選擇大部分是依靠經(jīng)驗.1995 年Eberhart 博士和kennedy 博士提出了一種新的算法;粒子群優(yōu)化(Partical Swarm Optimization -PSO) 算法 . 這種算法以其實(shí)現容易、精度高、收斂快等優(yōu)點(diǎn)引起了學(xué)術(shù)界的重視,并且在解決實(shí)際問(wèn)題中展示了其優(yōu)越性.
粒子群優(yōu)化(Partical Swarm Optimization - PSO) 算法是近年來(lái)發(fā)展起來(lái)的一種新的進(jìn)化算法( Evolu2tionary Algorithm - EA) .PSO 算法屬于進(jìn)化算法的一種,和遺傳算法相似,它也是從隨機解出發(fā),通過(guò)迭代尋找最優(yōu)解,它也是通過(guò)適應度來(lái)評價(jià)解的品質(zhì). 但是它比遺傳算法規則更為簡(jiǎn)單,它沒(méi)有遺傳算法的“交叉”(Crossover) 和“變異”(Mutation) 操作. 它通過(guò)追隨當前搜索到的最優(yōu)值來(lái)尋找全局最優(yōu) .
粒子群算法
1. 引言
粒子群優(yōu)化算法(PSO)是一種進(jìn)化計算技術(shù)(evolutionary computation),有Eberhart博士和kennedy博士發(fā)明。源于對鳥(niǎo)群捕食的行為研究
PSO同遺傳算法類(lèi)似,是一種基于疊代的優(yōu)化工具。系統初始化為一組隨機解,通過(guò)疊代搜尋最優(yōu)值。但是并沒(méi)有遺傳算法用的交叉(crossover)以及變異(mutation)。而是粒子在解空間追隨最優(yōu)的粒子進(jìn)行搜索。詳細的步驟以后的章節介紹
同遺傳算法比較,PSO的優(yōu)勢在于簡(jiǎn)單容易實(shí)現并且沒(méi)有許多參數需要調整。目前已廣泛應用于函數優(yōu)化,神經(jīng)網(wǎng)絡(luò )訓練,模糊系統控制以及其他遺傳算法的應用領(lǐng)域
2. 背景: 人工生命
"人工生命"是來(lái)研究具有某些生命基本特征的人工系統. 人工生命包括兩方面的內容
1. 研究如何利用計算技術(shù)研究生物現象
2. 研究如何利用生物技術(shù)研究計算問(wèn)題
我們現在關(guān)注的是第二部分的內容. 現在已經(jīng)有很多源于生物現象的計算技巧. 例如, 人工神經(jīng)網(wǎng)絡(luò )是簡(jiǎn)化的大腦模型. 遺傳算法是模擬基因進(jìn)化過(guò)程的.
現在我們討論另一種生物系統- 社會(huì )系統. 更確切的是, 在由簡(jiǎn)單個(gè)體組成的群落與環(huán)境以及個(gè)體之間的互動(dòng)行為. 也可稱(chēng)做"群智能"(swarm intelligence). 這些模擬系統利用局部信息從而可能產(chǎn)生不可預測的群體行為
例如floys 和 boids, 他們都用來(lái)模擬魚(yú)群和鳥(niǎo)群的運動(dòng)規律, 主要用于計算機視覺(jué)和計算機輔助設計.
在計算智能(computational intelligence)領(lǐng)域有兩種基于群智能的算法. 蟻群算法(ant colony optimization)和粒子群算法(particle swarm optimization). 前者是對螞蟻群落食物采集過(guò)程的模擬. 已經(jīng)成功運用在很多離散優(yōu)化問(wèn)題上.
粒子群優(yōu)化算法(PSO) 也是起源對簡(jiǎn)單社會(huì )系統的模擬. 最初設想是模擬鳥(niǎo)群覓食的過(guò)程. 但后來(lái)發(fā)現PSO是一種很好的優(yōu)化工具.
3. 算法介紹
如前所述,PSO模擬鳥(niǎo)群的捕食行為。設想這樣一個(gè)場(chǎng)景:一群鳥(niǎo)在隨機搜索食物。在這個(gè)區域里只有一塊食物。所有的鳥(niǎo)都不知道食物在那里。但是他們知道當前的位置離食物還有多遠。那么找到食物的最優(yōu)策略是什么呢。最簡(jiǎn)單有效的就是搜尋目前離食物最近的鳥(niǎo)的周?chē)鷧^域。
PSO從這種模型中得到啟示并用于解決優(yōu)化問(wèn)題。PSO中,每個(gè)優(yōu)化問(wèn)題的解都是搜索空間中的一只鳥(niǎo)。我們稱(chēng)之為“粒子”。所有的例子都有一個(gè)由被優(yōu)化的函數決定的適應值(fitness value),每個(gè)粒子還有一個(gè)速度決定他們飛翔的方向和距離。然后粒子們就追隨當前的最優(yōu)粒子在解空間中搜索
PSO 初始化為一群隨機粒子(隨機解)。然后通過(guò)疊代找到最優(yōu)解。在每一次疊代中,粒子通過(guò)跟蹤兩個(gè)"極值"來(lái)更新自己。第一個(gè)就是粒子本身所找到的最優(yōu)解。這個(gè)解叫做個(gè)體極值pBest. 另一個(gè)極值是整個(gè)種群目前找到的最優(yōu)解。這個(gè)極值是全局極值gBest。另外也可以不用整個(gè)種群而只是用其中一部分最為粒子的鄰居,那么在所有鄰居中的極值就是局部極值。
在找到這兩個(gè)最優(yōu)值時(shí), 粒子根據如下的公式來(lái)更新自己的速度和新的位置
v[] = v[] + c1 * rand() * (pbest[] - present[]) + c2 * rand() * (gbest[] - present[]) (a)
present[] = persent[] + v[] (b)
v[] 是粒子的速度, persent[] 是當前粒子的位置. pbest[] and gbest[] 如前定義 rand () 是介于(0, 1)之間的隨機數. c1, c2 是學(xué)習因子. 通常 c1 = c2 = 2.
程序的偽代碼如下
For each particle
____Initialize particle
END
Do
____For each particle
________Calculate fitness value
________If the fitness value is better than the best fitness value (pBest) in history
____________set current value as the new pBest
____End
____Choose the particle with the best fitness value of all the particles as the gBest
____For each particle
________Calculate particle velocity according equation (a)
________Update particle position according equation (b)
____End
While maximum iterations or minimum error criteria is not attained
在每一維粒子的速度都會(huì )被限制在一個(gè)最大速度Vmax,如果某一維更新后的速度超過(guò)用戶(hù)設定的Vmax,那么這一維的速度就被限定為Vmax
4. 遺傳算法和 PSO 的比較
大多數演化計算技術(shù)都是用同樣的過(guò)程
1. 種群隨機初始化
2. 對種群內的每一個(gè)個(gè)體計算適應值(fitness value).適應值與最優(yōu)解的距離直接有關(guān)
3. 種群根據適應值進(jìn)行復制
4. 如果終止條件滿(mǎn)足的話(huà),就停止,否則轉步驟2
從以上步驟,我們可以看到PSO和GA有很多共同之處。兩者都隨機初始化種群,而且都使用適應值來(lái)評價(jià)系統,而且都根據適應值來(lái)進(jìn)行一定的隨機搜索。兩個(gè)系統都不是保證一定找到最優(yōu)解
但是,PSO 沒(méi)有遺傳操作如交叉(crossover)和變異(mutation). 而是根據自己的速度來(lái)決定搜索。粒子還有一個(gè)重要的特點(diǎn),就是有記憶。
與遺傳算法比較, PSO 的信息共享機制是很不同的. 在遺傳算法中,染色體(chromosomes) 互相共享信息,所以整個(gè)種群的移動(dòng)是比較均勻的向最優(yōu)區域移動(dòng). 在PSO中, 只有g(shù)Best (or lBest) 給出信息給其他的粒子,這是單向的信息流動(dòng). 整個(gè)搜索更新過(guò)程是跟隨當前最優(yōu)解的過(guò)程. 與遺傳算法比較, 在大多數的情況下,所有的粒子可能更快的收斂于最優(yōu)解
5. 人工神經(jīng)網(wǎng)絡(luò ) 和 PSO
人工神經(jīng)網(wǎng)絡(luò )(ANN)是模擬大腦分析過(guò)程的簡(jiǎn)單數學(xué)模型,反向轉播算法是最流行的神經(jīng)網(wǎng)絡(luò )訓練算法。進(jìn)來(lái)也有很多研究開(kāi)始利用演化計算(evolutionary computation)技術(shù)來(lái)研究人工神經(jīng)網(wǎng)絡(luò )的各個(gè)方面。
演化計算可以用來(lái)研究神經(jīng)網(wǎng)絡(luò )的三個(gè)方面:網(wǎng)絡(luò )連接權重,網(wǎng)絡(luò )結構(網(wǎng)絡(luò )拓撲結構,傳遞函數),網(wǎng)絡(luò )學(xué)習算法。
不過(guò)大多數這方面的工作都集中在網(wǎng)絡(luò )連接權重,和網(wǎng)絡(luò )拓撲結構上。在GA中,網(wǎng)絡(luò )權重和/或拓撲結構一般編碼為染色體(Chromosome),適應函數(fitness function)的選擇一般根據研究目的確定。例如在分類(lèi)問(wèn)題中,錯誤分類(lèi)的比率可以用來(lái)作為適應值
演化計算的優(yōu)勢在于可以處理一些傳統方法不能處理的例子例如不可導的節點(diǎn)傳遞函數或者沒(méi)有梯度信息存在。但是缺點(diǎn)在于:在某些問(wèn)題上性能并不是特別好。2. 網(wǎng)絡(luò )權重的編碼而且遺傳算子的選擇有時(shí)比較麻煩
最近已經(jīng)有一些利用PSO來(lái)代替反向傳播算法來(lái)訓練神經(jīng)網(wǎng)絡(luò )的論文。研究表明PSO 是一種很有潛力的神經(jīng)網(wǎng)絡(luò )算法。PSO速度比較快而且可以得到比較好的結果。而且還沒(méi)有遺傳算法碰到的問(wèn)題
這里用一個(gè)簡(jiǎn)單的例子說(shuō)明PSO訓練神經(jīng)網(wǎng)絡(luò )的過(guò)程。這個(gè)例子使用分類(lèi)問(wèn)題的基準函數(Benchmark function)IRIS數據集。(Iris 是一種鳶尾屬植物) 在數據記錄中,每組數據包含Iris花的四種屬性:萼片長(cháng)度,萼片寬度,花瓣長(cháng)度,和花瓣寬度,三種不同的花各有50組數據. 這樣總共有150組數據或模式。
我們用3層的神經(jīng)網(wǎng)絡(luò )來(lái)做分類(lèi)?,F在有四個(gè)輸入和三個(gè)輸出。所以神經(jīng)網(wǎng)絡(luò )的輸入層有4個(gè)節點(diǎn),輸出層有3個(gè)節點(diǎn)我們也可以動(dòng)態(tài)調節隱含層節點(diǎn)的數目,不過(guò)這里我們假定隱含層有6個(gè)節點(diǎn)。我們也可以訓練神經(jīng)網(wǎng)絡(luò )中其他的參數。不過(guò)這里我們只是來(lái)確定網(wǎng)絡(luò )權重。粒子就表示神經(jīng)網(wǎng)絡(luò )的一組權重,應該是4*6+6*3=42個(gè)參數。權重的范圍設定為[-100,100] (這只是一個(gè)例子,在實(shí)際情況中可能需要試驗調整).在完成編碼以后,我們需要確定適應函數。對于分類(lèi)問(wèn)題,我們把所有的數據送入神經(jīng)網(wǎng)絡(luò ),網(wǎng)絡(luò )的權重有粒子的參數決定。然后記錄所有的錯誤分類(lèi)的數目作為那個(gè)粒子的適應值?,F在我們就利用PSO來(lái)訓練神經(jīng)網(wǎng)絡(luò )來(lái)獲得盡可能低的錯誤分類(lèi)數目。PSO本身并沒(méi)有很多的參數需要調整。所以在實(shí)驗中只需要調整隱含層的節點(diǎn)數目和權重的范圍以取得較好的分類(lèi)效果。
6. PSO的參數設置
從上面的例子我們可以看到應用PSO解決優(yōu)化問(wèn)題的過(guò)程中有兩個(gè)重要的步驟: 問(wèn)題解的編碼和適應度函數
PSO的一個(gè)優(yōu)勢就是采用實(shí)數編碼, 不需要像遺傳算法一樣是二進(jìn)制編碼(或者采用針對實(shí)數的遺傳操作.例如對于問(wèn)題 f(x) = x1^2 + x2^2+x3^2 求解, 粒子可以直接編碼為 (x1, x2, x3), 而適應度函數就是f(x). 接著(zhù)我們就可以利用前面的過(guò)程去尋優(yōu).這個(gè)尋優(yōu)過(guò)程是一個(gè)疊代過(guò)程, 中止條件一般為設置為達到最大循環(huán)數或者最小錯誤
PSO中并沒(méi)有許多需要調節的參數,下面列出了這些參數以及經(jīng)驗設置
粒子數: 一般取 20 – 40. 其實(shí)對于大部分的問(wèn)題10個(gè)粒子已經(jīng)足夠可以取得好的結果, 不過(guò)對于比較難的問(wèn)題或者特定類(lèi)別的問(wèn)題, 粒子數可以取到100 或 200
粒子的長(cháng)度: 這是由優(yōu)化問(wèn)題決定, 就是問(wèn)題解的長(cháng)度
粒子的范圍: 由優(yōu)化問(wèn)題決定,每一維可是設定不同的范圍
Vmax: 最大速度,決定粒子在一個(gè)循環(huán)中最大的移動(dòng)距離,通常設定為粒子的范圍寬度,例如上面的例子里,粒子 (x1, x2, x3) x1 屬于 [-10, 10], 那么 Vmax 的大小就是 20
學(xué)習因子: c1 和 c2 通常等于 2. 不過(guò)在文獻中也有其他的取值. 但是一般 c1 等于 c2 并且范圍在0和4之間
中止條件: 最大循環(huán)數以及最小錯誤要求. 例如, 在上面的神經(jīng)網(wǎng)絡(luò )訓練例子中, 最小錯誤可以設定為1個(gè)錯誤分類(lèi), 最大循環(huán)設定為2000, 這個(gè)中止條件由具體的問(wèn)題確定.
全局PSO和局部PSO: 我們介紹了兩種版本的粒子群優(yōu)化算法: 全局版和局部版. 前者速度快不過(guò)有時(shí)會(huì )陷入局部最優(yōu). 后者收斂速度慢一點(diǎn)不過(guò)很難陷入局部最優(yōu). 在實(shí)際應用中, 可以先用全局PSO找到大致的結果,再有局部PSO進(jìn)行搜索.
另外的一個(gè)參數是慣性權重, 由Shi 和Eberhart提出, 有興趣的可以參考他們1998年的論文(題目: A modified particle swarm optimizer)
7.PSO網(wǎng)上資源
粒子群優(yōu)化算法的研究還處于初期階段, 還有很多未知的領(lǐng)域需要研究, 例如關(guān)于粒子群理論的數學(xué)證明
不過(guò)網(wǎng)上已經(jīng)由了很多的關(guān)于粒子群的資源, 下面列出一些:
http://www.particleswarm.net 關(guān)于粒子群理論的各方面資源
http://icdweb.cc.purdue.edu/~hux/PSO.shtml 有一份比較全的文獻列表以及網(wǎng)上論文
http://www.researchindex.com/ 可以搜索到關(guān)于PSO的很多論文及文獻
參考文獻
http://www.engr.iupui.edu/~eberhart/
http://users.erols.com/cathyk/jimk.html
http://www.alife.org
http://www.aridolan.com
http://www.red3d.com/cwr/boids/
http://iridia.ulb.ac.be/~mdorigo/ACO/ACO.html
http://www.engr.iupui.edu/~shi/Coference/psopap4.html
Kennedy, J. and Eberhart, R. C. Particle swarm optimization. Proc. IEEE int‘l conf. on neural networks Vol. IV, pp. 1942-1948. IEEE service center, Piscataway, NJ, 1995.
Eberhart, R. C. and Kennedy, J. A new optimizer using particle swarm theory. Proceedings of the sixth international symposium on micro machine and human science pp. 39-43. IEEE service center, Piscataway, NJ, Nagoya, Japan, 1995.
Eberhart, R. C. and Shi, Y. Particle swarm optimization: developments, applications and resources. Proc. congress on evolutionary computation 2001 IEEE service center, Piscataway, NJ., Seoul, Korea., 2001.
Eberhart, R. C. and Shi, Y. Evolving artificial neural networks. Proc. 1998 Int‘l Conf. on neural networks and brain pp. PL5-PL13. Beijing, P. R. China, 1998.
Eberhart, R. C. and Shi, Y. Comparison between genetic algorithms and particle swarm optimization. Evolutionary programming vii: proc. 7th ann. conf. on evolutionary conf., Springer-Verlag, Berlin, San Diego, CA., 1998.
Shi, Y. and Eberhart, R. C. Parameter selection in particle swarm optimization. Evolutionary Programming VII: Proc. EP 98 pp. 591-600. Springer-Verlag, New York, 1998.
Shi, Y. and Eberhart, R. C. A modified particle swarm optimizer. Proceedings of the IEEE International Conference on Evolutionary Computation pp. 69-73. IEEE Press, Piscataway, NJ, 1998