粒子群优化算法python实现
文章目錄
- 前言
- 一、粒子群優(yōu)化算法是什么?
- 二、算法流程
- 三、算法的python實(shí)現(xiàn)
- 實(shí)驗(yàn)結(jié)果
前言
首先簡單介紹粒子群優(yōu)化算法,粒子群優(yōu)化算法的python實(shí)現(xiàn)(含代碼)
一、粒子群優(yōu)化算法是什么?
粒子群優(yōu)化算法(Particle Swarm Optimization, PSO)作為進(jìn)化計(jì)算的一個分支,是由Eberhart和Kennedy于1995年提出的一種全局搜索算法,同時它也是一種模擬自然界的生物活動以及群體智能的隨即搜索算法。
粒子群優(yōu)化算法起源于鳥群覓食的過程,一個核心機(jī)制是每只小鳥各自覓食,并記住一個離食物最近的位置,通過和其他的小鳥交流,得到整個鳥群已知的最佳位置,引導(dǎo)鳥群朝著這個方向繼續(xù)搜索。
還有兩個關(guān)鍵設(shè)置:粒子歷史最優(yōu)位置(pBest向量)、群體歷史最優(yōu)位置(gBest向量)。
這里pBest向量是一組向量,它包含了每個粒子的歷史最優(yōu)位置,gBest向量為pBest向量中適應(yīng)值最高的向量,即全局最優(yōu)。
說明:算法中一般取要優(yōu)化的目標(biāo)函數(shù)作為適應(yīng)值函數(shù),評估適應(yīng)值的大小,然后更新pBest向量和gBest向量。
二、算法流程
(1)初始化所有個體(粒子),初始化它們的速度和位置,并且將個體的歷史最優(yōu)位置pBest設(shè)為當(dāng)前位置,而群體中最優(yōu)的個體作為當(dāng)前的gBest。
(2)在每一代的進(jìn)化中,計(jì)算各個粒子的適應(yīng)度函數(shù)值。
(3)如果該粒子當(dāng)前的適應(yīng)度函數(shù)值比其歷史最優(yōu)值要好,那么歷史最優(yōu)將會被當(dāng)前位置所代替。
(4)如果該粒子的歷史最優(yōu)比全局最優(yōu)要好,那么全局最優(yōu)將會被該粒子的歷史最優(yōu)所替代。
(5)對每個粒子i的第d維的速度和位置分別按照下列公式進(jìn)行更新。這兩個公式在二維空間中的關(guān)系如下圖。
ω是慣量權(quán)重,一般初始化為0.9,隨著迭代過程線性遞減到0.4 ; c1和c2是加速系數(shù)(也稱學(xué)習(xí)因子),傳統(tǒng)上取固定值2.0 ; rand1d是和rand2d是兩個[0,1]之間的隨機(jī)數(shù)。另外,設(shè)置一個Vmax限制速度的范圍,Vmax的每一維Vmaxd一般取相應(yīng)維的取值范圍的10%~20%。更新后檢查位置是否在問題空間內(nèi)。
這里ω做一個線性遞減是因?yàn)?#xff0c;在算法一開始,群體沒有一個方向做指導(dǎo),所以需要一個任意性,進(jìn)行搜索;而隨著算法的迭代,群體已經(jīng)有了一個指導(dǎo)方向,就不再需要很大的任意性,而是受個體歷史最優(yōu)和群體歷史最優(yōu)的影響越來越大。
(6)如果還沒有到達(dá)結(jié)束條件,轉(zhuǎn)到(2),否則輸出gBest并結(jié)束。
下圖為算法的流程圖。
三、算法的python實(shí)現(xiàn)
本算法以優(yōu)化目標(biāo)函數(shù):
為例,使用粒子群優(yōu)化算法進(jìn)行求解。
運(yùn)行環(huán)境:python3.6,jupyter notebook
實(shí)驗(yàn)結(jié)果
當(dāng)種群數(shù)設(shè)置為100時
當(dāng)種群數(shù)設(shè)置為30時
總結(jié)
以上是生活随笔為你收集整理的粒子群优化算法python实现的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 管理信息系统数据库设计标准(草稿)
- 下一篇: C/C++中善用大括号