1原理:
根據鳥類尋食的仿生學,結合個體的最優解和群體的最優解不斷地迭代來尋找區域的最優解。
在n維的目標空間中,有m個粒子組成乙個群體,
第i個粒子的位置表示為:
每個位置對應乙個潛在解,把
代入適應函式中即可得到對應的適應值。
粒子個體經過的最好的位置為:
整個群體的最優位置為:
粒子i的速度為:
粒子群位置根據以下公式進行跟新:
pso的引數選取:
粒子數m,個數越多越容易找到全域性最優解,但程式耗時長。
慣性因子w,越大越容易找到全域性最優解,但可能對區域性的搜尋能力不好
加速常數c1和c2,選取無特定規則,一般都選為1.
2程式實現
本程式可以求解乙個一維上的最優解,多維可以仿照實現。
**:
clc,clear注:執行時間(i5,8g,win7,64位),1s左右%%%define the function
fitness=inline('
(2.1*(1-x+2*x.^2).*exp(-x.^2/2))+sin(x)+x
','x');
%%e0=0.001
;max_num=50
;particlesize=30
;c1=0.5
;c2=1
;w=0.3
;vc=0.5
;vmax=0.6
;x=-5+10*rand(particlesize,1
);v=1*rand(particlesize,1
);%%f=fitness(x);
personalbest_x=x;
personalbest_f=f;
[groupbest_f i]=max(personalbest_f);
groupbest_x=x(i);
for j=1
:max_num
v=w*v+c1*rand*(personalbest_x-x)+c2*rand*(groupbest_x*ones(particlesize,1)-x);
for kk=1
:particlesize
if v(kk)>vmax
v(kk)=vmax;
else
if v(kk)
v(kk)=-vmax;
endend
endx=x+vc*v;
f=fitness(x);
for kk=1
:particlesize
if f(kk)>personalbest_f(kk)
personalbest_f(kk)=f(kk);
personalbest_x(kk)=x(kk);
endend
[groupbest_f i]=max(personalbest_f);
groupbest_x=x(i);
ddd(j)=groupbest_f;
end str=num2str(groupbest_f)
%%subplot(
2,1,1
) x_0=-5:0.01:5
; f_0=fitness(x_0);
plot(x_0,f_0,'r
','linewidth
',2);
hold on
plot(groupbest_x,groupbest_f,'b+
','linewidth
',6);
legend(
'所求函式
','最優解位置');
subplot(
2,1,2
)plot(
1:max_num,ddd,'
linewidth
',2);
legend(
'最優解的變化');
xlabel(
'迭代次數');
ylabel(str);
程式輸出:
粒子群演算法(PSO)介紹及matlab實現
pso模擬鳥群的捕食行為。設想這樣乙個場景 一群鳥在隨機搜尋食物。在這個區域裡只有一塊食物。所有的鳥都不知道食物在那裡。但是他們知道當前的位置離食物還有多遠。那麼找到食物的最優策略是什麼呢。最簡單有效的就是搜尋目前離食物最近的鳥的周圍區域。由於每個鳥都不知道食物在 但是卻知道距離多遠,所以每次可以知...
粒子群(pso)演算法
一 粒子群演算法的概念 粒子群優化演算法 pso particle swarm optimization 是一種進化計算技術 evolutionary computation 源於對鳥群捕食的行為研究。粒子群優化演算法的基本思想 是通過群體中個體之間的協作和資訊共享來尋找最優解 pso的優勢 在於簡...
粒子群演算法 PSO
1995年美國社會心理學家kennedy和電氣工程師eberhart共同提出粒子群優化演算法 particle swarm optimization,pso pso演算法的基本思想利用生物學家heppner的生物群體模型,模擬鳥類覓食過程。鳥類飛行過程相互交流,當乙個鳥飛向棲息地時,其他鳥兒也會跟著...