《MATLAB智能算法30個案例分析》之粒子群算法篇


      粒子群算法最先從觀察鳥的捕食行為出發得到的仿生算法,它的原始算法用於求解無約束的多變量優化問題,如二元函數在給定區域內的極值問題,后來被擴展到求解TSP問題,動態優化問題和多目標優化問題。

      粒子群算法的基本思想如下。一只鳥出去捕食,它當然是希望找到食物最多的位置。假設這只鳥每隔一段時間(比如1分鍾),它就記下自己當前的位置和該位置的食物多少,除此之外,它還能夠記錄下自己經過的最佳位置(即食物量最多的位置)和鳥群中其他鳥經過的所有位置中的最佳位置。下面的問題是,如何調整鳥的路線,使之能盡快到達食物最多的位置?采用的策略如下:鳥會向着它自己經過的最佳位置和鳥群中其他鳥尋找到的最佳位置飛去,即它的速度會隨自身和其它鳥的移動經驗進行動態調整。另外,考慮到它還要保持一定的當前飛行方向,加上朝着最佳位置的移動,就給出鳥相應的速度和位置的更新公式。

     下面換成粒子群算法的術語:鳥對應於粒子,鳥群對應於粒子群,鳥的數量對應於種群規模,食物量對應於適應度值,鳥自己經過的最佳位置對應於個體極值,鳥群中其他鳥經過的所有位置中的最佳位置對應於群體極值。

      剩下的一個問題,剛開始時,鳥即粒子的位置和速度如何設置?隨機技術解決,即在可行區域內隨機鳥的位置,速度也給一個隨機值。另外一個細節問題是,鳥不能飛出可行區域以及要為速度設置一個最大值。

      原始的粒子群算法用於求解二元多峰值函數的極值問題(詳見chapter 13),取得了很好的效果。下面說一下書中給出的粒子群算法的幾個變形和解決的問題。

      第一個問題:旅行商(TSP)問題(詳見chapter 15)。旅行商問題的最終解顯然應該是一個序列,而原始粒子群算法的速度更新算法顯然沒有辦法直接挪用過來,借鑒遺傳算法的交叉和變異操作對當前的粒子進行更新,達到粒子向個體極值和群體極值移動的目的。

      第二個問題:多目標優化問題(詳見chapter 10)。由於目標比較多,常常會出現下列情況,一個特定的解改變后,對一個目標改善了不少,而對另一個目標卻變差了,那么這兩個解很難區分孰好孰壞,稱這樣的解為非劣解。用粒子群算法求解多目標優化問題和原始的算法相比,區別在於個體極值和群體極值的優化,如果一個解相對另一個解並不全面占優,那么就可以隨機選擇其中一個。

      第三個問題:動態尋優問題(詳見chapter 16)。所謂動態尋優問題,以鳥群捕食為例,如果某個位置的食物量隨時間的變化而變化,就稱為動態尋優問題。粒子群用於動態尋優問題,要判斷當前的環境是否變化,如果發生了變化,那么初始設置的鳥群的適應度函數就應該隨之改變。不同的檢測環境變化的方法對應不同的算法,比如書中代碼給出的敏感粒子方法,以及延伸閱讀中的監測全局最優位置和引入蒸發系數使粒子逐漸忘記自身記憶的方法(從教材的敘述來看,這種方法對於復雜的環境適應性較差)。

     關於粒子群算法的改進。前面已經提到過,粒子依據個體極值位置和群體極值位置來進行相應的移動,那么,能不能不考慮兩個極值只給出一個極值呢?可以。采用的技術叫做正交技術,基本想法是利用很少的計算來以兩個極值位置為矩形的區域內尋找一個最佳的或較佳的位置。


免責聲明!

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



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