粒子群演算法簡單實現

2021-09-12 16:39:28 字數 1816 閱讀 2174

pso演算法相關定義

pso中的每個粒子p包含兩個向量: x, v

o位置向量x:粒子在解空間中的當前位置: x[x1, x2, ..., xdim]

o速度向量v:粒子在解空間中的飛行速度: v[v1, v2, ..., vdim]

pbest :粒子自身的歷史最優位置

gbest :群體全域性最優向量

粒子速度與位置更新:

p.v=omega*p.v+c1*r1*(p.pbest-p.x)+c2*r2*(gbest-p.x);

p.x=p.x+p.v;

其中omega為慣性權重,c1,c2為學習因子,r1,r2為[0, 1]上的隨機數

演算法流程:

例項測試:

// 測試例項1

// f=x1*x1+x2*x2+x3*x3, 求fmin

// n=40, g=500

// -10<=x<=-4

#include#include#include#include#include#includeusing namespace std;

const int dim=3;

const int n=40;

const int g=500;

const int low=-10, high=-4, wid=high-low;;

const double inf=99999.9;

double omega=0.729;

double c1=1.49445, c2=c1;

vectorgbest;

// 定義粒子

struct ppp[n];

// 比較函式

bool cmp(struct pp a, struct pp b)

}// 初始化

void init()

p[i].pbest=p[i].x;

p[i].value=inf;

p[i].value=min(f(p[i]), p[i].value);

}sort(p, p+n, cmp);

gbest=p[0].pbest;

}// 執行

void run()

if (temp

gbest=p[j].pbest;

}sort(p, p+n, cmp);

}for (int i=0; i

printf("x%d = %.2f\n", i+1, gbest[i]);

}// 測試

int main()

/**********輸出**********/

x1 = -4.00

x2 = -4.00

x3 = -4.00

//例項測試2

// f=sinx1+cosx2-cos(2*x3),求fmin

// -10<=x<=-4

// 目標函式(適應度函式)

double f(struct pp &p)

/**********輸出**********/

x1 = -7.85

x2 = -9.42

x3 = -6.28

或x1 = -7.85

x2 = -9.42

x3 = -9.42

對於cos(2*x3)來說週期為pie=3.14,因此兩組輸出等價

粒子群優化演算法 粒子群演算法

粒子群演算法 particle swarm optimization,pso 屬於進化演算法的一種,該演算法最初是受到飛鳥集群活動的規律性啟發,進而利用群體智慧型建立的乙個簡化模型。粒子群演算法在對動物集群活動行為觀察基礎上,利用群體中的個體對資訊的共享使整個群體的運動在問題求解空間中產生從無序到有...

簡單聊聊粒子群演算法

粒子群優化演算法 該演算法最早由kennedy和eberhart在1995年提出 particle swarm optimization 靈感 於對鳥類捕食問題的研究。粒子的概念 適應度函式值評價粒子 沒有選擇交叉變異三個運算元 乙個是個體的極值,乙個是群體的極值。粒子通過個體極值和群體極值更新自身...

粒子群演算法python實現

1 概述 粒子群演算法作為一種優化演算法,在很多領域都有應用。所謂優化,我的理解是對乙個問題求出它足夠好的解,目前的優化演算法有很多,如蟻群演算法 遺傳演算法等。粒子群演算法相對於這些演算法來說,它更簡單,而且有很快的收斂速度。2 演算法描述 舉乙個優化問題的例子,若求 粒子群演算法思想 於實際生活...