粒子群優化演算法(pso)是一種進化計算技術(evolutionary computation),1995 年由eberhart 博士和kennedy 博士提出,源於對鳥群捕食的行為研究 。該演算法最初是受到飛鳥集群活動的規律性啟發,進而利用群體智慧型建立的乙個簡化模型。粒子群演算法在對動物集群活動行為觀察基礎上,利用群體中的個體對資訊的共享使整個群體的運動在問題求解空間中產生從無序到有序的演化過程,從而獲得最優解。
正如簡介所描述的那樣,粒子群演算法是模擬群體智慧型所建立起來的一種優化演算法,像後面我向大家介紹的蟻群演算法也屬於這類演算法,粒子群演算法可以用鳥類在乙個空間內隨機覓食為例,所有的鳥都不知道食物具體在**,但是他們知道大概距離多遠,最簡單有效的方法就是搜尋目前離食物最近的鳥的周圍區域。
所以,粒子群演算法就是把鳥看成乙個個粒子,並且他們擁有位置和速度這兩個屬性,然後根據自身已經找到的離食物最近的解和參考整個共享於整個集群中找到的最近的解去改變自己的飛行方向,最後我們會發現,整個集群大致向同乙個地方聚集。而這個地方是離食物最近的區域,條件好的話就會找到食物。這就是粒子群演算法,很好理解。
所以,我們需要乙個pbest來記錄個體搜尋到的最優解,用gbest來記錄整個群體在一次迭代中搜尋到的最優解。速度和粒子位置的更新公式如下:
v[i] = w * v[i] + c1 * rand() * (pbest[i] - present[i]) + c2 * rand() * (gbest - present[i])
present[i] = present[i] + v[i]
其中v[i]代表第i個粒子的速度,w代表慣性權值,c1和c2表示學習引數,rand()表示在0-1之間的隨機數,pbest[i]代表第i個粒子搜尋到的最優值,gbest代表整個集群搜尋到的最優值,present[i]代表第i個粒子的當前位置。
我這裡打了乙個求解y=-x*(x-1)在[-2,2]
#include #include #include #include using namespace std;
const int n=2;
class psotest
}float max(float a,float b)
//粒子群演算法
void pso(int max)
fitnessfunction();
//更新個體極值和群體極值
for(int j=0;jgbest) gbest=pbest[j];
coutts->pso(200);
return 0;
}
在實驗時候,會出現極值很難收斂的問題,所以我們這裡講權重因子w線性的從1.2降到0.8,可以看到,比固定不變,收斂速度要好的很多。
粒子群優化演算法 粒子群演算法
粒子群演算法 particle swarm optimization,pso 屬於進化演算法的一種,該演算法最初是受到飛鳥集群活動的規律性啟發,進而利用群體智慧型建立的乙個簡化模型。粒子群演算法在對動物集群活動行為觀察基礎上,利用群體中的個體對資訊的共享使整個群體的運動在問題求解空間中產生從無序到有...
粒子群演算法
如前所述,pso模擬鳥群的捕食行為。設想這樣乙個場景 一群鳥在隨機搜尋食物。在這個區域裡只有一塊食物。所有的鳥都不知道食物在那裡。但是他們知道當前的位置離食物還有多遠。那麼找到食物的最優策略是什麼呢。最簡單有效的就是搜尋目前離食物最近的鳥的周圍區域。pso從這種模型中得到啟示並用於解決優化問題。ps...
粒子群演算法
一 粒子群演算法的歷史 粒子群演算法源於複雜適應系統 complex adaptive system,cas cas理論於1994年正式提出,cas中的成員稱為主體。比如研究鳥群系統,每個鳥在這個系統中就稱為主體。主體有適應性,它能夠與環境及其他的主體進行交流,並且根據交流的過程 學習 或 積累經驗...