python實現粒子群演算法
粒子群演算法(pso),又可以叫做鳥群演算法,是學者觀察模仿鳥群的行為而發展的一種智慧型搜尋演算法,和遺傳演算法一樣,也是一種群智慧型演算法。
總的來說,粒子群演算法也是一種進化演算法,粒子分布在空間中,粒子在空間中的座標組成的向量可以看做成遺傳演算法中的個體,或者是鳥群中的乙隻鳥兒,初始的粒子群是由隨機分布於空間中的各個粒子的組成的,轉換成數學就是,由很多個列向量組成的矩陣,粒子群就是矩陣,粒子就是矩陣中的列向量。那麼對於粒子群中的每個粒子的屬性是什麼呢?有三個屬性:1,粒子在空間中的位置座標;2,粒子移動的速度;3,粒子的位置座標對應於所求的目標函式的函式值,也就是適應度值。粒子群中的粒子中適應度值最好的那個粒子的座標就是目標函式的解。
那麼粒子是如何進化的呢?上面講了粒子有三個屬性,在遺傳演算法中,個體的進化是根據適應度值來的,而粒子群演算法中粒子的進化是根據粒子群中的其他粒子的位置,以及粒子本身的位置,還有粒子的速度決定的。我們知道粒子在空間中的位置座標決定了粒子所對應的適應度值,粒子的位置座標又取決於這個粒子在上次移動前,粒子的位置座標和粒子的速度。而粒子移動前的位置座標已知,那麼粒子的速度又是什麼決定的呢?我們來看看鳥群中鳥兒的遷徙規律,鳥兒在鳥群中的移動是受兩個因素制約的,第乙個,受這只鳥兒自己在成長過程中形成的經驗制約,可以理解為這只鳥兒自己認為食物所在的位置,對應於粒子中就是,這個粒子在過去的多次的移動過程中,適應度值最好的時候的位置座標,第二個,受鳥群中的首領的位置制約。有了這兩個因素制約,這只鳥兒就可以決定移動的速度的大小和方向了。為了表示這兩個因素的強弱,我們引入兩個常數c1,c2,c1表示第乙個因素的強度,c2表示第二個因素的強度,c1比c2較大時,粒子群收斂慢,c2比c1較大時,粒子群收斂快。下面是粒子的遷移公式
速度遷移公式:
v = w*v +c1*(pbest-pop)+c2*(gbest-pop)
w表示粒子過去的速度所佔的權重,c1,c2表示上面所說的兩個引數,gbest表示粒子過去所達到的最好的適應度值對應的位置,gbest表示粒子群中的首領過去達到過的最好的適應度值對應的位置,pop表示粒子當前的位置
位置遷移公式:
pop = pop+v (預設時間取1)
pop表示粒子當前的位置,v表示粒子的速度
注意:由於粒子群演算法沒有遺傳演算法的交叉、變異等操作,所以粒子群演算法的效率要比遺傳演算法高,但是由於遷移公式本身的關係,我們無法保證粒子在遷移的過程中跑到了邊界的外面,所以要對粒子的速度上限和位置上限進行限制,這樣可以有效的保證演算法的收斂性。
下面是具體的例子:
求解函式f = x1**2+x2**2-x3**2+3*sin(x1*x2*x3)
,在座標範圍x~(-10,10) z~(-10,10) y~(-10,10)
的範圍中的最大值,以及最大值所對應的x1,x2,x3。
分析:粒子的位置即函式的解,也就是說乙個粒子就是由1x3的列向量表示
演算法:
初始化粒子群
迴圈:
粒子群速度遷移
粒子速度限制
粒子群位置遷移
粒子位置限制
更新粒子中最好的位置
直到粒子群遷移次數達到程式設定上限
結果分析
基於numpy(python2.7.9)的粒子群演算法,程式執行結果:
適應度值迭代結果:
分析:
之前同樣的目標函式,使用matlab實現的遺傳演算法,用時3.3秒左右,使用基於numpy的python實現的遺傳演算法,用時1.6秒左右,現在使用基於numpy的python實現的粒子群演算法,用時1.2秒!
粒子群演算法python實現
1 概述 粒子群演算法作為一種優化演算法,在很多領域都有應用。所謂優化,我的理解是對乙個問題求出它足夠好的解,目前的優化演算法有很多,如蟻群演算法 遺傳演算法等。粒子群演算法相對於這些演算法來說,它更簡單,而且有很快的收斂速度。2 演算法描述 舉乙個優化問題的例子,若求 粒子群演算法思想 於實際生活...
粒子群演算法的python實現
粒子群演算法主要是求解路徑最優化這一類的問題,具體內容可以檢視其它資料。第一次接觸粒子群是在 高階人工智慧 這門課上,當時課堂上布置了乙個求解多項式最優解的問題,正好同時也在學習python這門語言,於是在課下實現了求解 也算是第一段個人正式的python 吧,如下 import random c1...
粒子群優化演算法 粒子群演算法
粒子群演算法 particle swarm optimization,pso 屬於進化演算法的一種,該演算法最初是受到飛鳥集群活動的規律性啟發,進而利用群體智慧型建立的乙個簡化模型。粒子群演算法在對動物集群活動行為觀察基礎上,利用群體中的個體對資訊的共享使整個群體的運動在問題求解空間中產生從無序到有...