粒子群演算法基本原理與程式設計

2021-09-09 08:50:35 字數 2158 閱讀 6759

第三篇為《粒子群演算法基本原理與程式設計》,粒子群演算法,我覺得是最簡單又是最富有魅力最具有自然哲學的乙個演算法。

粒子群演算法(pso)是進化計算的乙個重要分支,它是由eberhart和kennedy於2023年提出的一種全域性搜尋演算法,同時它也是一種模擬自然界生物活動以及群體智慧型的隨機搜尋演算法。

自然界中鳥群、魚群的覓食等行為實際上屬於群體智慧型行為,這個過程本身就是乙個尋找最優化的過程,通過模擬這種群體智慧型行為才有了粒子群演算法的誕生。

之所以我如此喜歡粒子群演算法,是因為eberhart與kennedy在設計粒子群演算法,即pso的時候,除了考慮模擬生物的群體活動之外,更重要的是融入了個體認知社會影響這些社會心理學的理論。這聽上去十分簡單,但就是這簡單背後充滿了智慧型,它結合了動物群體的行為特性以及人類社會的認知特性。

在寫的過程中又發現了一些優秀的部落格,先直接把這些部落格放上來吧,如下:

1、[algorithm] 群體智慧型優化演算法之粒子群優化演算法

2、標準粒子群演算法(pso)

3、優化演算法——粒子群演算法(pso):

有了這麼多優秀的部落格,加上自己本身也很懶,hhhh,有點不太想接著寫了,不過為了複習還是簡單的進行捋一捋。

粒子群優化演算法(pso)要求每個個體(粒子)在進化的過程中維護兩個向量:

(1)速度向量:

(2)位置向量:

其中i表示粒子編號,d是求解問題的維數。粒子的速度決定了其運動的方向和速率,而位置則體現了粒子所代表的解在解空間中的位置,是評估該解質量的基礎

粒子群演算法同時還要求各個粒子各自維護乙個自身歷史最優位置向量,可以用pbest表示,在粒子進化的過程中如果達到了更優的位置,就會把pbest進行更新。群體還維護乙個全域性最優向量,記為gbest,代表所有粒子中最優的那乙個。這個全域性最優向量使得粒子向該全域性最優區域收斂。

粒子群演算法具體步驟如下:

step 1初始化所有粒子,初始化他們的速度和位置,並且將個體的歷史最優 pbest 設為當前位置,而群體中最優的個體作為當前的 gbest;

step 2在每一輪的進化中,計算各個粒子的適應度函式值;

step 3如果該粒子當前的適應度函式值比其歷史最優值要好,那麼歷史最優將會被當前位置所替代;

step 4如果該粒子的個體最優會比全域性最優要好,那麼全域性最優就會被該粒子的最優值所替代

step 5對於每個粒子 i 的第 d 維的速度和位置分別按照如下兩個公式進行更新:

step 6判斷是否達到結束條件,如果沒有繼續step2,否則輸出 gbest並結束。

上述公式中,

需要注意的是,在更新過程中,pso要求採用乙個vmax來限制速度的範圍,vmax的每一維vmax(d)一般可以取相應維的10%~20%。

該程式設計用來求解函式:

在區間[-10,10]上的最大值:

#include#include#include#include#define n 50	//迭代次數

#define t 10 //粒子群個數

#define x 2 //緯度

#define w 0.5 //權重

#define c1 2 //

#define c2 2 //

//粒子群引數

struct psonum[t];

//全域性最優

double gbest[x];

//所求函式值

double **alue;

//隨機函式

double randoms()

//初始化

void init() }}

//評價

void assement()

} }if(gtemp < **alue)

**alue = gtemp;

}void main()

printf("最優解為%lf\n",**alue);

}

跳蚤演算法 基本原理。

跳蚤演算法 基本原理。一 演算法的誕生及設計初衷。傳統教材中取得x個0 to n之間不重複隨機數的方法一般是這樣 x個不重複隨機數輸出到a 陣列 for i 1 to x dor int rnd n 1 c 確定r不包含在a 內 loop until c 將r新增到a next 由於r可能與a 內的...

RSA演算法基本原理

圖為 rsa公開金鑰演算法的發明人,從左到右ron rivest,adi shamir,leonard adleman.攝於1978年 素數是這樣的整數,它除了能表示為它自己和1的乘積以外,不能表示為任何其它兩個整數的乘積。例如,15 3 5,所以15不是素數 又如,12 6 2 4 3,所以12也...

mysql的基本原理 Mysql 基本原理

mysql 基本原理 mysql是一種關聯式資料庫管理系統,關聯式資料庫將資料儲存在不同的表中,而不是將所有資料放在乙個大倉庫內,這樣就增加了速度並提高了靈活性 ysql是資料庫登入命令 uroot預設超級使用者登入 p 預設沒密碼 中寫密碼 mysqladmin uroot password 12...