智能算法
遺傳算法
- 物競天擇,設計染色體編碼,根據適應值函數進行染色體選擇、交叉和變異操作,優化求解
人工神經網絡算法
- 模仿生物神經元,透過神經元的信息傳遞、訓練學習、聯想,優化求解
模擬退火算法
- 模模仿金屬物質退火過程。
歷史
- 由Kennedy和Eberhart於1995年提出
- 羣體迭代,粒子在解空間追隨最優的粒子進行搜索.
- 粒子羣算法: 簡單易行、收斂速度快、設置參數少。
- 已成爲優化方法領域的熱點。
基本思想
- 粒子羣算法的思想源於對鳥羣捕食行爲的研究。
- 模擬鳥集羣飛行覓食的行爲,鳥之間通過集體的協作使羣體達到最優目的,是一種基於Swarm Intelligence的優化方法。
設定
- 設想這樣一個場景:一羣鳥在隨機搜索食物
- 已知:
- 在這塊區域裏只有一塊食物;
- 所有的鳥都不知道食物在哪裏;
- 但它們能感受到當前的位置離食物還有多遠.
- 那麼:找到食物的最優策略是什麼呢?
- 搜尋目前離食物最近的鳥的周圍區域
- 根據自己飛行的經驗判斷食物的所在
- PSO正是從這種模型中得到了啓發。
算法介紹
- 每個尋優的問題解都被想像成一隻鳥,稱爲“粒子”。所有粒子都在一個D維空間進行搜索。
- 所有的粒子都由一個fitness function 確定適應值以判斷目前的位置好壞。
- 每一個粒子必須賦予記憶功能,能記住所搜尋到的最佳位置。
- 每一個粒子還有一個速度以決定飛行的距離和方向。這個速度根據它本身的飛行經驗以及同伴的飛行經驗進行動態調整。
定義以及迭代
定義
- D維空間中,有N個粒子
- 粒子i位置:,將xi代入適應函數求適應值;粒子i速度:
- 粒子i個體經歷過的最好位置:
- 種羣所經歷過的最好位置:
- 通常,在第d(1≤d≤D)維的位置變化範圍限定在
- 速度變化範圍限定在內(即在迭代中若超出了邊界值,則該維的速度或位置被限制爲該維最大速度或邊界位置)
迭代
- 粒子i的第d維速度更新公式:(速度不僅和自己找到的最優位置有關,還和全局最優位置有關)
- 粒子i的第d維位置更新公式:
- –第k次迭代粒子i飛行速度矢量的第d維分量
- –第k次迭代粒子i位置矢量的第d維分量
- –加速度常數,調節學習最大步長(這個不可過大或過小)
- –兩個隨機函數,取值範圍[0,1],以增加搜索隨機性。
- –慣性權重,非負數,調節對解空間的搜索範圍。
粒子速度更新公式包含三部分:
- 第一部分爲粒子先前的速度
- 第二部分爲“認知”部分,表示粒子本身的思考,可理解爲粒子i當前位置與自己最好位置之間的距離。
- 第三部分爲“社會”部分,表示粒子間的信息共享與合作,可理解爲粒子i當前位置與羣體最好位置之間的距離。
算法流程
- Initial:
初始化粒子羣體(羣體規模爲n),包括隨機位置和速度。 - Evaluation:
根據fitness function ,評價每個粒子的適應度。 - Find the Pbest:
對每個粒子,將其當前適應值與其個體歷史最佳位置(pbest)對應的適應值做比較,如果當前的適應值更高,則將用當前位置更新歷史最佳位置pbest。 - Find the Gbest:
對每個粒子,將其當前適應值與全局最佳位置(gbest)對應的適應值做比較,如果當前的適應值更高,則將用當前粒子的位置更新全局最佳位置gbest。 - Update the Velocity:
根據公式更新每個粒子的速度與位置。 - 如未滿足結束條件,則返回步驟2,通常算法達到最大迭代次數或者最佳適應度值的增量小於某個給定的閾值時算法停止。
- PPT17頁的演示非常的清晰。
關於構成要素的解讀
- 羣體大小m
- m很小時:容易陷入局部最優解
- m很大時:PSO優化能力好,但是計算量大
- 當羣體增長到一定水平,再增加m將會不起作用
- 權重因子(慣性因子,及學習因子)
- 粒子速度的更新主要由三部分構成:
- 前次迭代中自身的速度:,
- :基本的粒子羣算法
- :失去粒子本身對速度的記憶。
- 自我認知部分:
- :無私型粒子羣算法,迅速陷入羣體多樣性,容易陷入局部最優解無法跳出
- 社會經驗部分:
- :自我認知型粒子羣算法,完全沒有信息社會的共享,收斂速度慢(和普通的爬山法無異)
- 都不爲0,稱爲完全型粒子羣算法,完全型粒子羣算法更容易保持收斂速度和搜索效果的均衡,是較好的選擇.。
- 前次迭代中自身的速度:,
- 粒子速度的更新主要由三部分構成:
- 最大速度
- 作用:
- 在於維護算法的探索能力與開發能力的平衡。
- 較大時,探索能力增強,但粒子容易飛過最優解。
- 較小時,開發能力增強,但容易陷入局部最優解。
- 一般設爲每維變量變化範圍的
- 在於維護算法的探索能力與開發能力的平衡。
- 作用:
- 領域拓撲結構
- 粒子羣算法的鄰域拓撲結構包括兩種:
- 一種是將羣體內所有個體都作爲粒子的鄰域,
- 另一種是隻將羣體中的部分個體作爲粒子的鄰域。
- 鄰域拓撲結構決定羣體歷史最優位置。
- 由此,將粒子羣算法分爲:全局粒子羣算法和局部粒子羣算法。
- 全局粒子羣算法
- 粒子自己歷史最優值
- 粒子羣體的全局最優值
- 局部粒子羣算法
- 粒子自己歷史最優值
- 粒子鄰域內粒子的最優值
- 鄰域隨迭代次數的增加線性變大,最後鄰域擴展到整個粒子羣。
- 經過實踐證明:全局版本的粒子羣算法收斂速度快,但是容易陷入局部最優。局部版本的粒子羣算法收斂速度慢,但是很難陷入局部最優。現在的粒子羣算法大都在收斂速度與擺脫局部最優這兩個方面下功夫。其實這兩個方面是矛盾的。看如何更好的折中了。
- 粒子羣算法的鄰域拓撲結構包括兩種:
- 停止準則
- 最大迭代步數
- 可接受的滿意解
- 粒子空間的初始化
- 較好地選擇粒子的初始化空間,將大大縮短收斂時間.初始化空間根據具體問題的不同而不同,也就是說,這是問題依賴的
- 從上面的介紹可以看到,粒子羣算法與其他現代優化方法相比的一個明顯特色就是所需調整的參數很少.相對來說,慣性因子和鄰域定義較爲重要.這些爲數不多的關鍵參數的設置卻對算法的精度和效率有着顯著影響