粒子群優化的matlab實現

2021-09-11 21:32:23 字數 3927 閱讀 8889

在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 屬於進化演算法的一種,該演算法最初是受到飛鳥集群活動的規律性啟發,進而利用群體智慧型建立的乙個簡化模型。粒子群演算法在對動物集群活動行為觀察基礎上,利用群體中的個體對資訊的共享使整個群體的運動在問題求解空間中產生從無序到有...