1、粒子群優化算法(Partical Swarm Optimization PSO),粒子群中的每一個粒子都代表一個問題的可能解,
通過粒子個體的簡單行為,群體內的信息交互實現問題求解的智能性。
2、粒子群算法最早是由Eberhart和Kennedy於1995年提出,它的基本概念源於對鳥群覓食行為的研究。設想這樣一個場景:一群鳥在隨機搜尋食物,在這個區域里只有一塊食物,所有的鳥都不知道食物在哪里,但是它們知道當前的位置離食物還有多遠。最簡單有效的策略?尋找鳥群中離食物最近的個體來進行搜素。PSO算法就從這種生物種群行為特性中得到啟發並用於求解優化問題。
用一種粒子來模擬上述的鳥類個體,每個粒子可視為N維搜索空間中的一個搜索個體,粒子的當前位置即為對應優化問題的一個候選解,粒子的飛行過程即為該個體的搜索過程.粒子的飛行速度可根據粒子歷史最優位置和種群歷史最優位置進行動態調整.粒子僅具有兩個屬性:速度和位置,速度代表移動的快慢,位置代表移動的方向。每個粒子單獨搜尋的最優解叫做個體極值,粒子群中最優的個體極值作為當前全局最優解。不斷迭代,更新速度和位置。最終得到滿足終止條件的最優解。
3、算法流程如下:
1、初始化
首先,我們設置最大迭代次數,目標函數的自變量個數,粒子的最大速度,位置信息為整個搜索空間,我們在速度區間和搜索空間上隨機初始化速度和位置,設置粒子群規模為M,每個粒子隨機初始化一個飛翔速度。
2、 個體極值與全局最優解
定義適應度函數,個體極值為每個粒子找到的最優解,從這些最優解找到一個全局值,叫做本次全局最優解。與歷史全局最優比較,進行更新。
3、 更新速度和位置的公式
4、 終止條件
(1)達到設定迭代次數;(2)代數之間的差值滿足最小界限
以上就是最基本的一個標准PSO算法流程。和其它群智能算法一樣,PSO算法在優化過程中,種群的多樣性和算法的收斂速度之間始終存在着矛盾.對標准PSO算法的改進,無論是參數的選取、小生境技術的采用或是其他技術與PSO的融合,其目的都是希望在加強算法局部搜索能力的同時,保持種群的多樣性,防止算法在快速收斂的同時出現早熟收斂。
4、
首先總結一下PSO算法的一些優點:(1)它是一類不確定算法。不確定性體現了自然界生物的生物機制,並且在求解某些特定問題方面優於確定性算法。(2)是一類概率型的全局優化算法。非確定算法的優點在於算法能有更多機會求解全局最優解。(3)不依賴於優化問題本身的嚴格數學性質。(4)是一種基於多個智能體的仿生優化算法。粒子群算法中的各個智能體之間通過相互協作來更好的適應環境,表現出與環境交互的能力.(5)具有本質並行性。包括內在並行性和內含並行性。(6)具有突出性。粒子群算法總目標的完成是在多個智能體個體行為的運動過程中突現出來的。(7)具有自組織和進化性以及記憶功能,所有粒子都保存優解的相關知識。(8)都具有穩健性。穩健性是指在不同條件和環境下算法的實用性和有效性,但是現在粒子群算法的數學理論基礎還不夠牢固,算法的收斂性還需要討論。
從中可以看出PSO具有很大的發展價值和發展空間,算法能夠用於多個領域並創造價值,在群智能算法中具有重要的地位,同時也能夠在相關產業創造價值,發揮作用。下面結合相關產業具體分析一下。
計算智能的算法,往往結合大數據平台,包括GPU運算,並行計算,HPC,多模式結合等手段,來完成更加復雜多變的業務需求。
下面具體分析在產業中的作用(1)模式識別和圖像處理。PSO算法已在圖像分割、圖像配准、圖像融合、圖像識別、圖像壓縮和圖像合成等方面發揮作用。(2)神經網絡訓練。PSO算法可完成人工神經網絡中的連接權值的訓練、結構設計、學習規則調整、特征選擇、連接權值的初始化和規則提取等。但是速度沒有梯度下降優化的好,需要較大的計算資源。一般都算不動。(3)電力系統設計,例如:日本的Fuji電力公司的研究人員將電力企業某個著名的RPVC(Reactive Power and Voltage Control)問題簡化為函數的最小值問題,並使用改進的PSO算法進行優化求解。(4)半導體器件綜合,半導體器件綜合是在給定的搜索空間內根據期望得到的器件特性來得到相應的設計參數。(5)還有其他的一些相關產業。包括自動目標檢測、生物信號識別、決策調度、系統識別以及游戲訓練等方面也取得了一定的研究成果。
5、
clc clear close all E=0.000001; maxnum=800;%最大迭代次數 narvs=2;%目標函數的自變量個數 particlesize=50;%粒子群規模 c1=2;%每個粒子的個體學習因子,加速度常數 c2=2;%每個粒子的社會學習因子,加速度常數 w=0.6;%慣性因子 vmax=5;%粒子的最大飛翔速度 v=2*rand(particlesize,narvs);%粒子飛翔速度 x=-300+600*rand(particlesize,narvs);%粒子所在位置 %定義適應度函數 fitness=inline('(x(1)^2+x(2)^2)/10000','x'); for i=1:particlesize f(i)=fitness(x(i,:)); end personalbest_x=x; personalbest_faval=f; [globalbest_faval,i]=min(personalbest_faval); globalbest_x=personalbest_x(i,:); k=1; while (k<=maxnum) for i=1:particlesize f(i)=fitness(x(i,:)); if f(i)<personalbest_faval(i) personalbest_faval(i)=f(i); personalbest_x(i,:)=x(i,:); end end [globalbest_faval,i]=min(personalbest_faval); globalbest_x=personalbest_x(i,:); for i=1:particlesize v(i,:)=w*v(i,:)+c1*rand*(personalbest_x(i,:)-x(i,:))... +c2*rand*(globalbest_x-x(i,:)); for j=1:narvs if v(i,j)>vmax v(i,j)=vmax; elseif v(i,j)<-vmax v(i,j)=-vmax; end end x(i,:)=x(i,:)+v(i,:); end ff(k)=globalbest_faval; if globalbest_faval<E break end % figure(1) % for i= 1:particlesize % plot(x(i,1),x(i,2),'*') % end k=k+1; end xbest=globalbest_x; figure(2) set(gcf,'color','white'); plot(1:length(ff),ff)
原文:https://blog.csdn.net/weixin_40679412/article/details/80571854