算法(三)粒子群算法PSO的介紹


一、引言

在講算法之前,先看兩個例子:

例子一:背包問題,一個書包,一堆物品,每個物品都有自己的價值和體積,裝滿書包,使得裝的物品價值最大。

例子二:投資問題,n個項目,第i個項目投資為ci 收益為pi,總投資不得超過C,如何選擇項目總收益最大。

如前所述,PSO模擬鳥群的捕食行為。設想這樣一個場景:一群鳥在隨機搜索食物。在這個區域里只有一塊食物。所有的鳥都不知道食物在那里。但是他們知道當前的位置離食物還有多遠。那么找到食物的最優策略是什么呢。最簡單有效的就是搜尋目前離食物最近的鳥的周圍區域。

二、算法介紹

  在計算智能(computational intelligence)領域有兩種基於群智能的算法.蟻群算法(ant colony optimization)PSO粒子群算法(particle swarm optimization). 粒子群優化算法(PSO)是一種進化計算技術(evolutionary computation)1995 年由Eberhart 博士和kennedy 博士提出,源於對鳥群捕食的行為研究 。該算法最初是受到飛鳥集群活動的規律性啟發,進而利用群體智能建立的一個簡化模型。粒子群算法在對動物集群活動行為觀察基礎上,利用群體中的個體對信息的共享使整個群體的運動在問題求解空間中產生從無序到有序的演化過程,從而獲得最優解。

PSO同遺傳算法類似,是一種基於迭代的優化算法。系統初始化為一組隨機解,通過迭代搜尋最優值。但是它沒有遺傳算法用的交叉(crossover)以及變異(mutation),而是粒子在解空間追隨最優的粒子進行搜索。同遺傳算法比較,PSO的優勢在於簡單容易實現並且沒有許多參數需要調整。目前已廣泛應用於函數優化,神經網絡訓練,模糊系統控制以及其他遺傳算法的應用領域。

PSO從這種模型中得到啟示並用於解決優化問題。PSO中,每個優化問題的解都是搜索空間中的一只鳥。我們稱之為粒子。所有的粒子都有一個由被優化的函數決定的適應值(fitness value),每個粒子還有一個速度決定他們飛翔的方向和距離。然后粒子們就追隨當前的最優粒子在解空間中搜索。

PSO 初始化為一群隨機粒子(隨機解)。然后通過迭代找到最優解。在每一次迭代中,粒子通過跟蹤兩個"極值"來更新自己。第一個就是粒子本身所找到的最優解,這個解叫做個體極值pBest。另一個極值是整個種群目前找到的最優解,這個極值是全局極值gBest。另外也可以不用整個種群而只是用其中一部分作為粒子的鄰居,那么在所有鄰居中的極值就是局部極值。

三、粒子公式

  在找到這兩個最優值時,粒子根據如下的公式來更新自己的速度和新的位置:

v[] = w * v[] + c1 * rand() * (pbest[] - present[]) + c2 * rand() * (gbest[] - present[]) (a)

present[] = present[] + v[] (b)

v[] 是粒子的速度, w是慣性權重,present[] 是當前粒子的位置. pbest[] and gbest[] 如前定義 rand () 是介於(0, 1)之間的隨機數. c1, c2 是學習因子通常 c1 = c2 = 2.

四、實數編碼

  不需要像遺傳算法一樣是二進制編碼(或者采用針對實數的遺傳操作.例如對於問題 f(x) = x1^2 + x2^2+x3^2 求解粒子可以直接編碼為 (x1, x2, x3), 適應度函數就是f(x). 接着我們就可以利用前面的過程去尋優.這個尋優過程是一個疊代過程中止條件一般為設置為達到最大循環數或者最小錯誤

PSO中並沒有許多需要調節的參數,下面列出了這些參數以及經驗設置

粒子數一般取 20 – 40. 其實對於大部分的問題10個粒子已經足夠可以取得好的結果不過對於比較難的問題或者特定類別的問題粒子數可以取到100 或 200

粒子的長度這是由優化問題決定就是問題解的長度

粒子的范圍由優化問題決定,每一維可以設定不同的范圍

Vmax: 最大速度,決定粒子在一個循環中最大的移動距離,通常設定為粒子的范圍寬度,例如上面的例子里,粒子 (x1, x2, x3) x1 屬於 [-10, 10], 那么 Vmax 的大小就是 20

學習因子: c1 和 c2 通常等於 2. 不過在文獻中也有其他的取值但是一般 c1 等於 c2 並且范圍在04之間

中止條件最大循環數以及最小錯誤要求例如在上面的神經網絡訓練例子中最小錯誤可以設定為1個錯誤分類最大循環設定為2000, 這個中止條件由具體的問題確定.

全局PSO和局部PSO: 我們介紹了兩種版本的粒子群優化算法全局版和局部版前者速度快不過有時會陷入局部最優后者收斂速度慢一點不過很難陷入局部最優在實際應用中可以先用全局PSO找到大致的結果,再用局部PSO進行搜索.

五、慣性權重

  另外的一個參數是慣性權重, Shi Eberhart指出(A modified particle swarm optimizer,1998):當Vmax很小時(對schafferf6函數,Vmax<=2),使用接近於1的慣性權重;Vmax不是很小時(對schafferf6函數,Vmax>=3),使用權重w=0.8較好.如果沒有Vmax的信息,使用0.8作為權重也是一種很好的選擇.慣性權重w很小時偏重於發揮粒子群算法的局部搜索能力;慣性權重很大時將會偏重於發揮粒子群算法的全局搜索能力。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM