粒子群演算法(PSO)介紹及matlab實現

2021-08-03 16:59:08 字數 2843 閱讀 8739

pso模擬鳥群的捕食行為。設想這樣乙個場景:一群鳥在隨機搜尋食物。在這個區域裡只有一塊食物。所有的鳥都不知道食物在那裡。但是他們知道當前的位置離食物還有多遠。那麼找到食物的最優策略是什麼呢。最簡單有效的就是搜尋目前離食物最近的鳥的周圍區域。

由於每個鳥都不知道食物在**,但是卻知道距離多遠,所以每次可以知道整個鳥群哪只鳥距離目標最近,當然最近的距離也知道,這個時候這只鳥可以對整個群體發「訊號」,然後整個鳥群就向著這只鳥方向飛行,多次迭代之後,整個鳥群就已經接近目標了

這裡的目標比較泛華,可以理解為求乙個方程組在一定範圍內的極值等等

基本思想:

2.根據適應度演算法計算粒子適應度值

3.根據粒子計算的適應度值尋找粒子當前搜尋到的最優位置與整個粒子群當前的最優位置

下面就利用粒子群來對乙個方程組在給定範圍內求最小值,以加深對粒子群演算法的理解,當然該演算法用處很多,遠遠不止這乙個。

方程組:0.4 * (x - 5)^2 + 0.3 * (y - 6)^2 - 0.2 ;    x,y的範圍:[-100,100], 這個時候目標就是求最小值了

d=2;%維數 一般是自變數個數 此時速度與位置都用兩個變數表示

w = 1;

np=12;%種群規模 d的五倍到十倍

%學習因子c1 c2 範圍在0-4

c1 = 1.5;

c2 = 1.5;

gen_max=1000;%最大進化代數

bounds_p=ones(d,2);%定義位置的取值邊界

bounds_p(:,1)=-100;%取值下界

bounds_p(:,2)=100;% 取值上界

bounds_v=ones(d,2);%定義速度的取值邊界

bounds_v(:,1)=-100;%取值下界

bounds_v(:,2)=100;% 取值上界

x=ones(np,1)*bounds_p(:,1)'+(ones(np,1)*(bounds_p(:,2)'-bounds_p(:,1)')) .*(rand(np,d));%初始種群位置資訊,使位置都位於最大值與最小值間,最後形成np行2列的矩陣

v=ones(np,1)*bounds_v(:,1)'+(ones(np,1)*(bounds_v(:,2)'-bounds_v(:,1)')) .*(rand(np,d));%初始種群速度資訊,使位置都位於最大值與最小值間,最後形成np行2列的矩陣

count=1;%進化代數

cost=zeros(np,1);%存放個體的適應值,初始化為np行一列的零矩陣

cost(1)=fitnessrevisemodel(x(1,:));%計算第乙個個體適應值

fitness_zbest=cost(1);%存放全域性最優值,假設第乙個個體便是最優值

zbest=x(1,:);%存放全域性對應最優值的解

for i2=2:np %計算初始種群中的最優值和最優值對應的解

cost(i2)=fitnessrevisemodel(x(i2,:));

if(cost(i2)<= fitness_zbest)

fitness_zbest=cost(i2);

zbest=x(i2,:);

endendgbest = x; %存放個體最優值,因為此時個體僅僅產生了一次,所以就取當前這一次為最優值

fitness_gbest = cost; %存放個體最優適應值,因為此時個體僅僅產生了一次,所以就取當前這一次為最優適應值

%粒子群演算法

while(count100)) = 100; %如果第i2個個體的速度(用一行兩列矩陣表示,這一行任一列大於100均要改變)大於最大速度100,即改為100

v(i2, find(v(i2, :) < -100)) = -100; %如果第i2個個體的速度(用一行兩列矩陣表示,這一行任一列小於-100均要改變)小於最小速度100,即改為-100

%位置更新

x(i2, :) = x(i2, :) + v(i2, :); %速度更新公式

x(i2, find(x(i2, :) > 100)) = 100;

x(i2, find(x(i2, :) < -100)) = -100;

%自適應變異(避免演算法陷入區域性最優)

if rand > 0.8

k = ceil(2 * rand);

x(i2, k) = rand;

end%因為上述的x的第i2個個體更新,所以第i2個個體適應值也要更新

cost(i2) = fitnessrevisemodel(x(i2, :));

%如果個體適應值小於即優於原來該最優個體適應值

if cost(i2) < fitness_gbest(i2)

gbest(i2, :) = x(i2, :); %更新該個體最優值

fitness_gbest(i2) = cost(i2); %更新個體最優適應值

end%如果個體適應值比總體最優適應值小,更新

if cost(i2) < fitness_zbest

zbest = cost(i2, :); %存放新的全域性最優值

fitness_zbest = cost(i2); %存放新的全域性最優適應值

endend

yy(count) = fitness_zbest; %記錄每一次迭代後的新的全域性最優適應值,理論上迭代結束後,最後一次的yy(count)即為所求值

count = count + 1;

endyy

粒子群(pso)演算法

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

粒子群演算法 PSO

1995年美國社會心理學家kennedy和電氣工程師eberhart共同提出粒子群優化演算法 particle swarm optimization,pso pso演算法的基本思想利用生物學家heppner的生物群體模型,模擬鳥類覓食過程。鳥類飛行過程相互交流,當乙個鳥飛向棲息地時,其他鳥兒也會跟著...

粒子群優化演算法 PSO

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