大自然是我們的老師,生物的進化過程、群體智慧型活動為我們設計乙個又乙個優化演算法提供了靈感的源泉。粒子群優化演算法(pso)就是仿生演算法的乙個著名代表。它是一種群體智慧型的隨機搜尋演算法。
粒子群演算法的兩個重要公式分別是速度更新公式和位置更新公式。每個粒子在進化的過程中需要維護兩個向量,乙個是速度向量v=[v1,v2,....vn],乙個是位置向量x=[x1,x2,.....xn],其中n代表問題的維數。粒子的速度是向量,決定了粒子運動的方向和速率,而粒子的位置體現了所代表的解在空間中的位置,是評估該解質量的基礎。演算法還要求每個粒子維護自身的乙個歷史最優位置向量,用pbest表示,群體還要維護乙個全域性的最優位置,記為gbest,gbest從pbest中選出,是pbest中最優的那個。這個全域性最優向量和pbest引導粒子向最優或者區域性最優收斂。粒子群優化演算法和遺傳演算法相比,沒有了選擇運算元、交配運算元和變異運算元,僅僅通過速度更新公式和位置更新公式不斷的進化得到最優解,演算法相對簡單,執行效率高。
簡要步驟如下:
(1)初始化所有的個體,初始化速度和位置,並將個體的pbest設定為當前位置,而群體中最優的個體當作當前的gbest。
(2)在每一代進化中,計算各個粒子的適應度函式,適應度一般與目標函式相關。
(3)比較粒子的當前與歷史適應度,如果當前更好則更新pbest,如果歷史更好則不更新pbest。
(4)同樣的,在pbest中選出乙個待比較的gbest與歷史gbest相比較,若當前gbest更好則更新,反之則保持。
(5)對每個粒子按照如下公式更新其速度和位置向量
v(t+1) = w * v(t) + c1*rand*(pbest - xi) + c2*rand*(gbest - xi);
x(t+1) = x(t) + v(t);
w為慣性係數,一般初始化為0.9,隨著迭代次數增加逐漸線性降低至0.4;rand為0~1之間的隨機數;c1,c2為加速係數也成為學習因子,一般取c1=c2=2;同時在實際問題中還要對速度向量v和位置向量x進行限制,限制在可行域內。
偽**如下:
procedure pso
for each particle i
initialize v and x for each particle i
evaluate practice i and set pbest = x
endgbest = pbest(min(f(pbest)))
while not stop
for i = 1 to n
update the v and x
evaluate
if fit(xi) < fit(pbest)
pbest = xi
if fit(pbest) < fit(gbest)
gbest = pbest
endend
下面給出乙個例子,
min (x1-1)^2 + (x2+4)^2
s.t: x1^2+x2^2 < 4
% draw pictureclose all;
clear
clctic;
theta = 0 : pi/200 : 2*pi;
a = 2*cos(theta);
b = 2*sin(theta);
plot(a,b,'k');
grid on;
hold on;
plot(1,-4,'r*')
% initial index
w = 0.9;
c1 = 2;
c2 = 2;
popsize = 5;
% max step
max_step = 20;
%initial population
x1=rand(popsize,1)*4-2;
temp=sqrt(4-x1.^2);
x2 = 2.*temp.*rand(popsize,1) - temp;
plot(x1,x2,'o');
%initial pbest & gbest & velocity
pbest1 = rand(popsize,1)*4-2;
pbest2 = 2 .* sqrt(4-x1.^2) .* rand(popsize,1) - sqrt(4-x1.^2);
v1 = rand(popsize,1);
v2 = rand(popsize,1);
gbest1 = pbest1;
gbest2 = pbest2;
% count variable
count = 0;
y = (x1-1).*(x1-1)+(x2+4).*(x2+4);
f = (pbest1 - 1).^2 + (pbest2 + 4).^2;
pro_f = y;
while count < max_step
count=count+1;
w = max(w - (count/max_step)*w,0.4);
% update x1 & x2 & velocity
v1 = w .* v1 + c1.*rand(popsize,1).*(pbest1 - x1) + c2 .* rand(popsize,1).*(gbest1 - x1);
v2 = w .* v2 + c1.*rand(popsize,1).*(pbest2 - x2) + c2 .* rand(popsize,1).*(gbest2 - x2);
x1 = max(-2,min(x1 + v1 , 2));
bound = sqrt(4-x1.^2);
x2 = max(-bound , min(x2 + v2 , bound));
% computing cost function
f = (x1 - 1).^2 + (x2 + 4).^2;
% find pbest1 & pbest2
for i = 1:1:popsize
if(f(i) < pro_f)
pbest1(i) = x1(i);
pbest2(i) = x2(i);
endend
pro_f = f;
% update gbest
num = find(f==min(f));
gbest1 = pbest1(num(1));
gbest2 = pbest2(num(1));
repmat(gbest1,popsize,1);
repmat(gbest2,popsize,1);
plot(pbest1,pbest2,'+','markeredgecolor','m');
plot(gbest1,gbest2,'s','markeredgecolor','b');
hold on;
pause(0.1);
% judge stop condition
% if abs(pro_f - f) < 0.001
% break;
% else
% pro_f = f;
% end
endx = gbest1;
y = gbest2;
plot(x,y,'*','markeredgecolor','r');
[x,y]
min(f)
toc;
粒子群優化演算法 粒子群演算法
粒子群演算法 particle swarm optimization,pso 屬於進化演算法的一種,該演算法最初是受到飛鳥集群活動的規律性啟發,進而利用群體智慧型建立的乙個簡化模型。粒子群演算法在對動物集群活動行為觀察基礎上,利用群體中的個體對資訊的共享使整個群體的運動在問題求解空間中產生從無序到有...
粒子群優化演算法
粒子群優化演算法 1.概念 粒子群優化演算法 pso 是一種進化計算技術。源於對鳥群捕食的行為研究。粒子群優化演算法的基本思想 是通過群體中個體之間的協作和資訊共享來尋找最優解 pso的優勢 在於簡單容易實現並且沒有許多引數的調節。目前已被廣泛應用於函式優化 神經網路訓練 模糊系統控制以及其他遺傳演...
粒子群優化演算法
與ga演算法比較 粒子群優化 clc,clear all x 0 0.01 4 y hanshu x figure plot x,y hold on w 1 慣性因子 c1 2 c2 2 maxgen 30 迭代次數 sizepop 5 粒子個數 vmax 1 vmin 1 速度限制 popmax ...