粒子群算法
文章目錄
- 前言
- 一、算法描述
- 二、算法公式
- 三、算法流程
- 舉個例子
- 總結
前言
粒子群算法是通過模擬鳥群覓食行為而發展起來的一種基于群體協作的隨機搜索算法,通常認為它是群集智能 (Swarm intelligence, SI) 的一種。它可以被納入多主體優化系統(Multiagent Optimization System, MAOS)。粒子群優化算法是由Eberhart博士和kennedy博士發明。(百度百科)
一、算法描述
以鳥群尋找食物為例,鳥群的鳥是可以共享信息的,類似于每只鳥都會向大家公布自己的找到的最好的進食地點。每只鳥都有自己的速度矢量,每一次遍歷,每只鳥都向鳥群公布自己找到的最合適的進食地點。每只鳥通過整個鳥群找到的最優地點和自己找到的最優地點,決定下次自己飛行的方向。也就是說,如果某只鳥找到了一個最優地點,下次尋找的方向可能就會偏向這個最優地點的附近。
二、算法公式
速度更新公式:
V(t+1)=w * V(t) + r1 * c1 * (pbest-X(t)) + r2 * c2 * (gbest - X(t) )位置更新公式:
X(t+1)=X(t)+V(t+1)V(t+1)和 X(t+1)表示t+1時刻的速度和位置,V(t)和X(t)表示t時刻的速度和位置,pbest是個體的最優位置,屬于局部最優解,gbest是群體的最優位置,也稱全局最優解。
V,X,w,pbest,gbest均是多維向量。V是速度矢量,X是位置坐標,w是慣性權重,也就是上一時刻對下一時刻速度的影響。
r1,r2是在(0,1)之間的隨機數;
c1,c2是學習因子,一般取2。
根據公式理解粒子群算法的基本思想,下一個時刻速度受個體最優解和群體最優解影響,這個很容易理解,就是在較優解附近尋找更優解,慢慢找出全局最優解。這里有一個風險,如果鳥群太少,或者初始化速度和位置不夠廣泛,很容易陷入局部最優解而出不來。
三、算法流程
1、初始化
初始化慣性權重w;
設定常數:遍歷次數cycle,學習因子c1,c2,群體個數n;
隨機生成速度矢量V,位置坐標X;
2、運行
a.計算第i只個體下一時刻的解f_i(X_i)
b.如果f_i(X_i)<pbest_i,pbest_i=f(X_i)
c.如果f_i(X_i)<gbest,gbest=f_i(X_i)
d.重復運行2,直至計算出所有個體的個體最優解,和群體最優解。
3、更新
根據更新公式更新每個個體的速度和位置;
若cycle==0或者群體最優解保持不變,結束,輸出群體最優解;
否則,返回2;
舉個例子
求函數 f=sin(x)+cos(y)+z^2在范圍x,y,z屬于[-3,4]的最小值:
函數參數有3個,所以粒子群算法的速度和位置向量都是三維的,對應x,y,z的坐標,速度矢量表示x,y,z坐標系方向的改變大小,位置向量就是坐標系的坐標。確定好這些變量,就可以初始化速度和位置,在設定粒子群算法的常數,就可以了。
實際操作中,隨機函數取值范圍不合理,還是很容易陷入局部最優解的,慢慢調參就是了。
總結
不知道是因為前面寫蟻群算法有了些經驗還是什么,實現這個粒子群算法比蟻群算法簡單多了,感覺粒子群算法比較好理解,畢竟更新公式就是以前學的向量的加減法。
總結
- 上一篇: 开源WebMail客户端Intouch2
- 下一篇: 大数据安全概述