基本粒子群優化演算法(PSO)的matlab實現
阿新 • • 發佈:2019-01-01
粒子群優化演算法是一種模擬鳥群社會行為的群體搜素演算法。它分為全域性最佳粒子優化和區域性最佳粒子優化,對於全域性最佳PSO,或者叫做gbest PSO,每個粒子的鄰域都是整個群,其演算法虛擬碼如下:
從執行結果可以看出,程式執行時間約為3秒,找到的sphere函式的最小值點接近0,在座標原點附近,符合預期結果。建立並初始化一個n維的粒子群 repeat for 每個粒子i=1,2,…n do //設定個體最佳位置 if f(i)<y then y=f(i); end //設定全域性最佳位置 if y<Y then Y=y; end end for 每個粒子i=1,2,…n do 用速度方程更新速度 用位置方程更新位置 end until 滿足終止條件 gbest PSO的matlab實現程式碼如下: tic %該函式表示計時開始 %------初始格式化-------------------------------------------------- clear all; clc; format long; %------給定初始化條件---------------------------------------------- c1=1.4962; %加速常數即學習因子1 c2=1.4962; %加速常數即學習因子2 w=0.7298; %慣性權重 MaxDT=10000; %最大迭代次數 D=10; %搜尋空間維數(測試函式sphere中未知數個數) N=40; %初始化群體個體數目 eps=10^(-7); %設定精度(在已知最小值時候用) %------初始化種群的個體(可以在這裡限定位置和速度的範圍)------------ for i=1:N for j=1:D x(i,j)=randn; %產生一個服從正態分佈的隨機數作為初始化位置 v(i,j)=randn; %產生一個服從正態分佈的隨機數作為初始化速度 end end %------先計算各個粒子的適應度,並初始化個體最優位置y和全域性最優位置Pg-------- for i=1:N p(i)=sphere(x(i,:),D);%計算適應度,測試函式為sphere y(i,:)=x(i,:); %初始化個體最優位置y為在時間步t=0時的粒子位置 end Pg=x(1,:); %Pg為全域性最優位置 for i=2:N if sphere(x(i,:),D)<sphere(Pg,D) Pg=x(i,:);%更新全域性最優位置 end end %------進入主要迴圈,按照公式依次迭代,直到滿足精度要求------------ for t=1:MaxDT for i=1:N v(i,:)=w*v(i,:)+c1*rand*(y(i,:)-x(i,:))+c2*rand*(Pg-x(i,:)); x(i,:)=x(i,:)+v(i,:); if sphere(x(i,:),D)<p(i) p(i)=sphere(x(i,:),D);%更新適應度 y(i,:)=x(i,:);%更新個體最佳位置 end if p(i)<sphere(Pg,D) Pg=y(i,:);%更新群體最佳位置 end end Pbest(t)=sphere(Pg,D);%儲存每一代的群體最佳位置 end toc %該函式表示計時結束 %------最後給出計算結果 disp('*************************************************************') disp('函式的全域性最優位置為:') for i=1:D fprintf('x(%d)=%s\n',i,Pg(i)); end fprintf('最後得到的優化極值為:%s\n',sphere(Pg,D)); disp('*************************************************************') sphere函式如下: %適應度函式源程式(sphere.m) %引數x為變數名,引數D為維數 function result=sphere(x,D) sum=0; for i=1:D sum=sum+x(i)^2; end result=sum; 程式執行結果: Elapsed time is 2.943799 seconds. ************************************************************* 函式的全域性最優位置為: x(1)=6.654911e-009 x(2)=5.739281e-009 x(3)=-3.207077e-009 x(4)=-1.107863e-011 x(5)=9.756758e-009 x(6)=6.682152e-009 x(7)=-2.828295e-010 x(8)=2.533800e-009 x(9)=3.868910e-009 x(10)=1.740554e-009 最後得到的優化極值為:2.518562e-016 *************************************************************