粒子群優化演算法
阿新 • • 發佈:2018-11-08
粒子群優化演算法是模仿生物社會系統而設計的,更確切的說,是由簡單個體組成的群體與環境以及個體之間的互動行為,是一種基於群智慧方法的進化計算技術。
粒子群演算法源於鳥群捕食行為的模擬。一群鳥在一個固定的區域裡隨機搜尋區域裡唯一的一塊食物,所有的鳥都不知到食物在哪裡,但是他們知道自己當前所處的位置離食物還有多遠,那麼找到食物的最優策略是什麼呢?最簡單的方法就是搜尋離食物最近的鳥的周圍區域。
粒子群演算法從這種模型中得到啟示並用於解決優個問題。在粒子群演算法中,每個優化問題的解都是搜尋空間中的一隻鳥,我們稱之為“粒子”。所有的粒子都有一個適應值,這個適應值根據被優化的函式來確定。每個粒子還有一個速度決定它們飛行的方向和距離,這個速度根據它自己的飛行經驗和同伴的飛行經驗進行動態調整。
粒子群演算法初始化為一群隨機粒子(隨機解),然後通過迭代得到最優解。在每一次迭代過程中,粒子通過兩種經驗呢來更新自己。自己的飛行經驗就是粒子經歷過的最好位置(有最好的適應值),即本身所找到的最優解,這個解叫做個體極值。同伴的飛行經驗是群體所有粒子經過的最好位置,即整個種群目前找到的最優解,這個解叫做全域性極值。另外也可以不用整個群體,而只用其中一部分作為粒子的鄰居,那麼在所有鄰居中的極值就是區域性極值。
利用粒子群演算法計算下列函式在區間【-400,400】的最大值:
clear all; close all; n=1500;m=100; c1=2;c2=2; vmax=[10,10]; alpha=0.5; w=1; x=800*rand(m,2)-400; v=zeros(m,2); f1=inline('-0.5+((sin(sqrt(x(:,1).^2+x(:,2).^2))).^2-0.5)./((1+0.01.*(x(:,1).^2+x(:,2).^2)).^2)','x'); p=x;j=1; [ft,it]=min(f1(x)); pg=x(it,:); while i<=n ftemp=f1(x); vt=w*v+c1*rand*(p-x)+c2*rand([pg(1)-x(:,1),pg(2)-x(:,2)]); v=[(vt(:,1)<vmax(1)).*vt(:,1)+vt(:,1)+(vt(:,1)>=vmax(1))*vmax(1),(vt(:,2)<vmax(2)).*vt(:,2)+(vt(:,2)>=vmax(2))*vmax(2)]; x=x+alpha*v; iit=find(f1(x)-ftemp<0); [ftemp,it]=min(f1(x)); pgtemp=x(it,:); pg=(ft<ftemp)*pg+(ft>ftemp)*pgtemp; p(iit,:)=x(iit,:); i=i+1; end x=pg,f=ftemp
執行程式,輸出如下:
x =
1.0e-008*-0.00854074563935 0.746613355488466
f =
-1
求得函式最大值為-1.