在youtube上依葫蘆畫瓢寫了乙個matlab的粒子群演算法來實現多變數函式的優化,程式最終能輸出迭代後的最優解,並以半對數座標的形式展示出每一代的最優解。
對於不同的問題只需修改costfunction(待優化的函式),nvar(待優化函式的變數個數),varmin和varmax(待優化函式變數的上下界)。種群數量npop和最大迭代次數根據具體情況自行決定是否需要修改。construction coefficients的值的設定根據理論分析得來,一般無需改動。
clc;
clear;
close all;
%% problem definition
costfunction = @(x) sphere(x); %cost function 函式控制代碼相當於間接呼叫函式,遇到具體的問題就將這個損失函式換成自己需要的函式
nvar = 5; %number of unknown(decision) variables 根據自己定義的損失函式自行確定個數
varsize = [1 nvar]; %matrix size of decision size 矩陣規模為1行nvar列
varmin = -10; %lower bound of decison variables 每乙個變數的下界,根據具體的問題自己設定
varmax = 10; %upper bound of decision variables 每乙個變數的上界,根據自己的問題自己設定
maxvelocity = (varmax-varmin)*0.2;
minvelocity = -maxvelocity;
%% parammeters of pso
% construction coefficients
phi1 = 2.05;
phi2 = 2.05;
phi = phi1+phi2;
maxit = 500; %maximum number of iterations 最大迭代次數
npop = 50; %population size(swarm size)
w = chi; %intertia coefficient
wdamp = 1; %damping ratio of intertia
c1 = phi1*chi; %personal coefficient
c2 = phi2*chi; %social coefficient
%% initialization
% particle template
empty_particle.position = ;
empty_particle.velocity = ;
empty_particle.cost = ;
empty_particle.best.position = ;
empty_particle.best.velocity = ;
% create population array
particle = repmat(empty_particle,npop,1); %將結構體複製成npop份構成乙個新的結構體陣列
%initialize global best
globalbest.cost = inf;
% initialize population members
for i=1:npop
% generate random solution
particle(i).position = unifrnd(varmin,varmax,varsize);
% initiallize velocity
particle(i).velocity = zeros(varsize);
% evaluation
particle(i).cost = costfunction(particle(i).position);
% update personal best
particle(i).best.position = particle(i).position;
particle(i).best.cost = particle(i).cost;
% update global best
if particle(i).best.cost < globalbest.cost
globalbest = particle(i).best;
endend% array to hold best cost value on each iteration
bestcosts = zeros(maxit,1);
%% main loop of pso
for it = 1:maxit
for i = 1:npop
% update velocity
particle(i).velocity = w*particle(i).velocity...
+ c1*rand(varsize).*(particle(i).best.position-particle(i).position)...
+ c2*rand(varsize).*(globalbest.position-particle(i).position);
particle(i).velocity = max(particle(i).velocity,minvelocity);
particle(i).velocity = min(particle(i).velocity,maxvelocity);
% update position
particle(i).position = particle(i).position+particle(i).velocity;
particle(i).position = max(particle(i).position,varmin);
particle(i).position = min(particle(i).position,varmax);
% evaluation
particle(i).cost = costfunction(particle(i).position);
% update personal best
if particle(i).cost < particle(i).best.cost
particle(i).best.cost = particle(i).cost;
particle(i).best.position = particle(i).position;
end% update global best
if particle(i).best.cost < globalbest.cost
globalbest = particle(i).best;
endend
% store the best cost value
bestcosts(it) = globalbest.cost;
% display iteration information
disp(['iteration' num2str(it) ': best cost = ' num2str(bestcosts(it))]);
% damping initertia coefficient
w = w*wdamp;
end%% result
figure;
semilogy(bestcosts,'linewidth',2);
xlabel('iterations');
ylabel('bestcost');
matlab實現多目標粒子群優化(MOPSO)
此函式執行多目標粒子群優化 mopso 以最小化連續函式。該實現是可以承受的,計算量較小並且已壓縮 該演算法僅需要乙個檔案 mpso.m 提供了乙個 example.m 指令碼,以幫助使用者使用該實現。值得一提的是,為了便於理解,該 受到了高度評 價。此實現基於coello等人的 2004 使用粒子...
粒子群演算法的matlab實現
2018.7.19 粒子群演算法function xm,fv pso fitness,n,c1,c2,w,m,d 本函式用粒子群演算法實現優化 給定初始化條件 c1 學習因子1 c2 學習因子2 w 慣性權重 m 最大迭代次數 d 搜尋空間維數 n 初始化群體個體數目 xm,fv pso fitne...
粒子群優化演算法 粒子群演算法
粒子群演算法 particle swarm optimization,pso 屬於進化演算法的一種,該演算法最初是受到飛鳥集群活動的規律性啟發,進而利用群體智慧型建立的乙個簡化模型。粒子群演算法在對動物集群活動行為觀察基礎上,利用群體中的個體對資訊的共享使整個群體的運動在問題求解空間中產生從無序到有...