人工智能——微粒群优化算法
粒子群優化算法(Particle Swarm optimization,PSO)又翻譯為粒子群算法、微粒群算法、或微粒群優化算法。是通過模擬鳥群覓食行為而發展起來的一種基于群體協作的隨機搜索算法。通常認為它是群集智能 (Swarm intelligence, SI) 的一種。它可以被納入多主體優化系統(Multiagent Optimization System, MAOS)。粒子群優化算法是由Eberhart博士和kennedy博士發明。
場景假設
一群鳥隨機的尋找食物,在這個區域里面只有一塊食物,所有的鳥,都不知道食物在哪里,但他們都知道當前的位置距離食物還有多遠,那么尋找到食物的最優策略是什么?
最簡單有效的就是搜尋目前離食物最近的鳥的周圍區域。
鳥群在整個搜尋的過程中,通過相互傳遞各自的信息,讓其他的鳥知道自己的位置,通過這樣的協作,來判斷自己找到的是不是最優解,同時也將最優解的信息傳遞給整個鳥群,最終,整個鳥群都能聚集在食物源周圍,即找到了最優解。
PSO中,每個優化問題的解都是搜索空間中的一只鳥。我們稱之為“粒子”。所有的粒子都有一個由被優化的函數決定的適應值(fitness value),每個粒子還有一個速度決定他們飛翔的方向和距離。然后粒子們就追隨當前的最優粒子在解空間中搜索。
基本原理
PSO初始化為一群隨機粒子,然后通過迭代找到最優解。在每一次迭代中,粒子通過跟蹤兩個“極值”來更新自己。第一個就是粒子本身所找到的最優解,這個解稱為個體極值。另個一是整個種群目前找到的最優解,這個解稱為全局極值。
算法定義
在n維連續搜索空間,對粒子群中的第i(1,2,3,…,m)進行定義。
xi(k)=[x1ix2i...xni]T:表示搜索空間中粒子的當前位置x^i(k) = [x^i_1 \ x^i_2 \ ... \ x^i_n]^T:表示搜索空間中粒子的當前位置 xi(k)=[x1i??x2i??...?xni?]T:表示搜索空間中粒子的當前位置
pi(k)=[p1ip2i...pni]T:表示粒子至今所獲得具有最優適應度fpi(k)的位置p^i(k) = [p^i_1 \ p^i_2 \ ... \ p^i_n]^T:表示粒子至今所獲得具有最優適應度f^i_p(k)的位置 pi(k)=[p1i??p2i??...?pni?]T:表示粒子至今所獲得具有最優適應度fpi?(k)的位置
vi(k)=[v1iv2i...vni]T:表示該粒子的搜索方向v^i(k) = [v^i_1 \ v^i_2 \ ... \ v^i_n]^T:表示該粒子的搜索方向 vi(k)=[v1i??v2i??...?vni?]T:表示該粒子的搜索方向
如果每個粒子經歷過的最優位置(pbest)記作
pi(k)=[p1ip2i...pni]Tp^i(k) = [p^i_1 \ p^i_2 \ ... \ p^i_n]^T pi(k)=[p1i??p2i??...?pni?]T
群體經歷過的最優位置(gbest)記作
pg(k)=[p1gp2g...png]Tp^g(k) = [p^g_1 \ p^g_2 \ ... \ p^g_n]^T pg(k)=[p1g??p2g??...?png?]T
這樣可以得到基本的POS算法為:
vji(k+1)=ω(k)vji(k)+φ1rand(0,a1)(pji(k)?xji(k))+φ2rand(0,a2)(pjg(k)?xji(k))xji(k+1)=xji(k)+vji(k+1)i=1,2,?,m;j=1,2,?,n;\begin{aligned} v^i_j(k+1)&=\omega(k)v^i_j(k)+\varphi_1rand(0,a_1)(p^i_j(k)- x^i_j(k))+\varphi_2rand(0,a_2)(p^g_j(k)-x^i_j(k)) \\ x^i_j(k+1)&=x^i_j(k)+v^i_j(k+1) \\ i&=1,2,\cdots,m; \\ j&=1,2,\cdots,n; \end{aligned} vji?(k+1)xji?(k+1)ij?=ω(k)vji?(k)+φ1?rand(0,a1?)(pji?(k)?xji?(k))+φ2?rand(0,a2?)(pjg?(k)?xji?(k))=xji?(k)+vji?(k+1)=1,2,?,m;=1,2,?,n;?
其中ω是慣性權重因子φ1,φ2是加速度常數,均為非負值。
rand(0,a1)和 rand(0,a2)為[0,a1]、[0,a2]范圍內的具有均勻分布的隨機數,a1與a2為相應的控制參數。
ω(k)vji(k)\omega(k)v^i_j(k) ω(k)vji?(k)
- 第一部分:是粒子在前一刻的速度;
φ1rand(0,a1)(pji(k)?xji(k))\varphi_1rand(0,a_1)(p^i_j(k)-x^i_j(k)) φ1?rand(0,a1?)(pji?(k)?xji?(k))
- 第二部分:為個體“認知”分量,表示粒子本身的思考,將現有的位置和曾經經歷過的最優位置相比。
φ2rand(0,a2)(pjg(k)?xji(k))\varphi_2rand(0,a_2)(p^g_j(k)-x^i_j(k)) φ2?rand(0,a2?)(pjg?(k)?xji?(k))
- 第三部分:是群體“社會”分量,表示粒子間的信息共享和互相合作。
- φ1,φ2分別為控制個體認知分量和群體社會分量的相對貢獻的學習率。
- 隨機系數增加了搜索方向的隨機性和算法的多樣性。
PSO模型
- φ1 > 0, φ2 > 0; 為PSO全模型
- φ1 > 0, φ2 = 0; 為PSO認知模型
- φ1 = 0, φ2 > 0; 為PSO社會模型
- φ1 = 0, φ2 > 0 && g ≠ i; 為PSO無私模型
算法執行過程
算法流程圖
總結
以上是生活随笔為你收集整理的人工智能——微粒群优化算法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 了解Go编译处理(一)—— go too
- 下一篇: 多年iOS开发经验总结