粒子群優化演算法(PSO)簡介以及其C 風格框架

2021-06-28 21:47:23 字數 2497 閱讀 6182

粒子群優化(particle swarm optimization, pso)演算法 是由 kennedy, j.和 eberhart, r. (1995) 提出的一種群智慧型計算方法,與更著名且經典的遺傳演算法類似,同為進化演算法。

乙個系統裡面有若干個粒子,每個粒子代表乙個問題的候選解,而這些粒子在系統的控制下根據一定的方法進行迭代更新(進化),直到最後系統會輸出全域性最優解。更詳細地,在演算法的執行過程中,這些維護中的粒子以一定的策略在解空間進行搜尋,並且把搜尋結果放入目標函式進行衡量,如果結果更優則會被記錄下來,以用於進一步的進化。達到一定的條件(確定的迭代次數或一定程度的目標值),演算法就會停止,並輸出此時獲得的最優解。

值得一提的是,pso 所獲得的解並不是理論上的最優解。因為對於諸多所謂的 np-hard 問題(就是說使用確定性演算法時間複雜度會非常高,高到不能接受)情況下,實際並不需要理論最優解,而只需要乙個滿足一定條件,符合工程需求的次最優解就能解決問題。而 pso 所獲得的正是這樣的乙個次最優解。

下面具體看看演算法。pso 核心公式有兩個:速度更新公式與位置更新公式。

在公式(1)中,vid( t+1) 表示第 i 個粒子的第 d 維在 (t+1)時刻的速度值,pid 為 第 i 個粒子第 d 維時刻的個體最優, pgd 為當前種群內的全域性最優, xid 則為該粒子當前的位置。除此, c1, c2 表示兩個引數,被稱為個體學習因子與全域性(環境)學習因子,r1, r2 為隨機數,在0-1之間。

公式(2)更好理解,乙個速度 vid 與當前位置 xid 相加,獲得新的位置 xid。

pso是模擬鳥群的演算法,有一堆哲學上的說明與數學上的證明,這裡都不說。只要記住上面兩個公式,慢慢就會全方位理解 pso 的設計思想。

演算法的具體步驟如下

初始化一群粒子,隨機初始位置與速度

for t 個迴圈

for 每個粒子

用(1)更新速度,用(2)更新位置

衡量適應度

如果此時適應度值比記錄的個體最優適應度值更好,將個體最優值設定為此時的適應度值

與 6 一樣檢查全域性最優適應度值

輸出最全域性最優解

接下來將使用c++ stl 給出粒子群演算法 oo 框架

首先,由於每一次的目標函式都不一樣,但我們假設所有目標函式都可以表示為一系列浮點數輸入,乙個浮點數輸出的形式。因此建立乙個 class-type function

class fitnessfunction_t;

class eggholder_function: public fitnessfunction_t

double operator() (const vector& pos)

};

建立乙個solution物件,儲存最後的最優解

//儲存最終結果,解與值

class solution

};

建立粒子物件,儲存乙個粒子的當前解,個體最優解,以及速度

//粒子類

class particle

static void *thread_go2(void * p)

public:

int population_size;

vectorparticles; //粒子群

//構造引數很多,可以寫成外部配置檔案

swarm(int population_size, int dimension,int max_time,

fitnessfunction_t* fitnessfunction,bool findmax,

float par_pos_scale, float limit_p, float limit_v):

max_time(max_time),

findmax(findmax),

fitnessfunction(fitnessfunction),

population_size(population_size),

gb_position(dimension,0),

limit_p(limit_p),

limit_v(limit_v)

{c1 = 0.8;

c2 = 2.2;

limit_p = 512;

limit_v = 10;

particle par(dimension,par_pos_scale);

gb_position = par.position;

gb_value = (*fitnessfunction)(gb_position);

par.pb_value = (*fitnessfunction)(gb_position);

particles.push_back(par);

for(int i = 1; iauthors: yamille del valle, ganesh kumar venayagamoorthy et. al.

粒子群優化演算法 PSO

粒子群優化演算法 pso particle swarm optimization 是一種進化計算技術 evolutionary computation 源於對鳥群捕食的行為研究。粒子群優化演算法的基本思想 是通過群體中個體之間的協作和資訊共享來尋找最優解 pso的優勢 在於簡單容易實現並且沒有許多引...

粒子群優化演算法 PSO

粒子群優化演算法 pso particle swarm optimization 是一種進化計算技術 evolutionary computation 源於對鳥群捕食的行為研究。粒子群優化演算法的基本思想 是通過群體中個體之間的協作和資訊共享來尋找最優解 pso的優勢 在於簡單容易實現並且沒有許多引...

粒子群優化演算法 PSO

粒子群優化演算法 pso particle swarm optimization 是一種進化計算技術 evolutionary computation 源於對鳥群捕食的行為研究。粒子群優化演算法的基本思想 是通過群體中個體之間的協作和資訊共享來尋找最優解 pso的優勢 在於簡單容易實現並且沒有許多引...