粒子群最佳化

粒子群最佳化（Particle Swarm Optimization, PSO），又稱粒子群演演算法、微粒群演算法，是由 J. Kennedy 和 R. C. Eberhart 等於 1995 年開發的一種演化計算技術，來源於對一個簡化社會模型的模擬。其中 “群（swarm）” 來源於微粒群符合 M. M. Millonas 在開發應用於人工生命（artificial life）的模型時所提出的群體智慧的 5 個基本原則。“粒子（particle）” 是一個折衷的選擇，因為既需要將群體中的成員描述為沒有質量、沒有體積的，同時也需要描述它的速度和加速狀態。

PSO 演算法最初是為了圖形化地模擬鳥群優美而不可預測的運動。而透過對動物社會行為的觀察，發現在群體中對資訊的社會共享提供一個演化的優勢，並以此作為開發演算法的基礎。透過加入近鄰的速度匹配、並考慮了多維搜尋和根據距離的加速，形成了 PSO 的最初版本。之後引入了慣性權重 w 來更好的控制開發（exploitation）和探索（exploration），形成了標準版本。為了提高粒群演算法的效能和實用性，中山大學、（英國）格拉斯哥大學等又開發了自適應（Adaptive PSO）版本和離散（discrete）版本。

PSO 演算法屬於一種萬能啟發式演演算法，能夠在沒有得知太多問題資訊的情況下，有效的搜尋具有龐大解空間的問題並找到候選解，但同時不保證其找到的最佳解為真實的最佳解。

演算法原理

PSO 演算法是基於群體的，根據對環境的適應度將群體中的個體移動到好的區域。然而它不對個體使用演化運算元，而是將每個個體看作是 D 維搜尋空間中的一個沒有體積的微粒（點），在搜尋空間中以一定的速度飛行，這個速度根據它本身的飛行經驗和同伴的飛行經驗來動態調整。第 i 個微粒表示為 Xi =(xi1, xi2, …, xiD) ，它經歷過的最好位置（有最好的適應值）記為 Pi = (pi1, pi2, …, piD)，也稱為 pbest。在群體所有微粒經歷過的最好位置的索引號用符號 g 表示，即 Pg，也稱為 gbest 。微粒 i 的速度用 Vi = (vi1, vi2, …, viD) 表示。對每一代，它的第 d+1 維（1 ≤ d+1 ≤ D）根據如下方程進行變化：

vid+1 = w∙vid+c1∙rand ∙(pid-xid)+c2∙Rand ∙(pgd-xid) (1a)

xid+1 = xid+vid+1				 (1b)

其中 w 為慣性權重（inertia weight），c1 和 c2 為加速常數（acceleration constants），rand 和 Rand 為兩個在 0,1 範圍裡變化的隨機值。

此外，微粒的速度 Vi 被一個最大速度 Vmax 所限制。如果當前對微粒的加速導致它的在某維的速度 vid 超過該維的最大速度 vmax,d，則該維的速度被限制為該維最大速度 vmax,d。

對公式（1a），第一部分為微粒先前行為的慣性，第二部分為 “認知（cognition）” 部分，表示微粒本身的思考；第三部分為 “社會（social）” 部分，表示微粒間的資訊共享與相互合作。

“認知” 部分可以由 Thorndike 的效應法則（law of effect）所解釋，即一個得到加強的隨機行為在將來更有可能出現。這裡的行為即 “認知”，並假設獲得正確的知識是得到加強的，這樣的一個模型假定微粒被激勵著去減小誤差。

“社會” 部分可以由 Bandura 的替代強化（vicarious reinforcement）所解釋。根據該理論的預期，當觀察者觀察到一個模型在加強某一行為時，將增加它實行該行為的機率。即微粒本身的認知將被其它微粒所模仿。

PSO 演算法使用如下心理學假設：在尋求一致的認知過程中，個體往往記住自身的信念，並同時考慮同事們的信念。當其察覺同事的信念較好的時候，將進行適應性地調整。

標準 PSO 的演算法流程如下：

初始化一群微粒（群體規模為 m ），包括隨機的位置和速度；
評價每個微粒的適應度；
對每個微粒，將它的適應值和它經歷過的最好位置 pbest 的作比較，如果較好，則將其作為當前的最好位置 pbest；
對每個微粒，將它的適應值和全域性所經歷最好位置 gbest 的作比較，如果較好，則重新設定 gbest 的索引號；
根據方程（1）變化微粒的速度和位置；
如未達到結束條件（通常為足夠好的適應值或達到一個預設最大代數 Gmax ），回到（2）。

演算法引數

PSO 引數包括：群體規模 m ，慣性權重 w ，加速常數 c1 和 c2 ，最大速度 Vmax，最大代數 Gmax。

Vmax 決定在當前位置與最好位置之間的區域的解析度（或精度）。如果 Vmax 太高，微粒可能會飛過好解，如果 Vmax 太小，微粒不能進行足夠的探索，導致陷入區域性優值。該限制有三個目的：防止計算溢位；實現人工學習和態度轉變；決定問題空間搜尋的粒度。

慣性權重 w 使微粒保持運動的慣性，使其有擴充套件搜尋空間的趨勢，有能力探索新的區域。

加速常數 c1 和 c2 代表將每個微粒推向 pbest 和 gbest 位置的統計加速項的權重。低的值允許微粒在被拉回來之前可以在目標區域外徘徊，而高的值導致微粒突然的衝向或者越過目標區域。

如果沒有後兩部分，即 c1 = c2 = 0，微粒將一直以當前的速度飛行，直到到達邊界。由於它只能搜尋有限的區域，將很難找到好的解。

如果沒有第一部分，即 w = 0，則速度只取決於微粒當前的位置和它們歷史最好位置 pbest 和 gbest ，速度本身沒有記憶性。假設一個微粒位於全域性最好位置，它將保持靜止。而其它微粒則飛向它本身最好位置 pbest 和全域性最好位置 gbest 的加權中心。在這種條件下，微粒群將統計的收縮到當前的全域性最好位置，更像一個區域性演算法。

在加上第一部分後，微粒有擴充套件搜尋空間的趨勢，即第一部分有全域性搜尋的能力。這也使得 w 的作用為針對不同的搜尋問題，調整演算法全域性和區域性搜尋能力的平衡。

如果沒有第二部分，即 c1 = 0，則微粒沒有認知能力，也就是 “只有社會（social-only）” 的模型。在微粒的相互作用下，有能力到達新的搜尋空間。它的收斂速度比標準版本更快，但是對複雜問題，比標準版本更容易陷入區域性優值點。

如果沒有第三部分，即 c2 = 0，則微粒之間沒有社會資訊共享，也就是 “只有認知（cognition-only）” 的模型。因為個體間沒有互動，一個規模為 m 的群體等價於 m 個單個微粒的執行。因而得到解的機率非常小。

2.1 收斂性

收斂性的數學證明幫助了 PSO 的發展和應用，但此類分析具有很大的侷限性。為 PSO 加入正交學習後，演算法的全域性收斂、收斂精度及穩健可靠性都得到了提高。

近年來，為了提升 PSO 求解大規模高維最佳化問題的能力，競爭學習 PSO（Competitive Swarm Optimizer，CSO）和層次學習（Level-based Swarm Optimizer，LLSO）等相繼被提出，被從理論和數值實驗驗證了演算法平衡全域性探索和區域性開發的能力。 此外，在分散式多智慧體的共識最佳化場景中，基於內外部學習機制的 PSO 演算法（Multi-Agent Swarm Optimization With Adaptive Internal and External Learning，MASOIE）也被提出，並在理論上證明了該方法的共識收斂性。

2.2 離散化

傳統的 PSO 演算法一般用於求解連續空間的最佳化問題。有多種方法可以嘗試將 PSO 應用於求解離散空間的組合最佳化問題，例如採用二進位制編碼的二進位制 PSO，以及將速度和位置更新公式在帶機率的集合空間中重定義的集合型 PSO（set-based PSO）。