粒子群優化

粒子群優化（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個單個微粒的運行。因而得到解的幾率非常小。

**收斂性**
收斂性的數學證明幫助了 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）也被提出，並在理論上證明了該方法的共識收斂性。

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

**外部鏈接**
 DMOZ Particle Swarm People date=20170317103534 - PSO源代碼鏈接 date=20210415022817 - Parameter Estimation of a Pressure Swing Adsorption Model for Air Separation Using Multi-objective Optimisation and Support Vector Regression ModelYang Liu 2013- Automatic calibration of  a rapid flood spreading model using  multiobjective optimisations date=20160913132014 -Yang Liu 2013- https://web.archive.org/web/20160507233728/http://userweb.eng.gla.ac.uk/yun.li/ga_demo/（格拉斯哥大學的交互式群體演化在線學習課件 EA_demo，可以幫助讀者更好地理解進化及粒群算法，允許用戶直接在網頁上一代一代地手動運行，以看進化算法是怎樣一步一步操作的，亦可在背景中批次運行，以觀察算法的收斂和個體是否跳出局部最優）

**參考文獻 ==