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