
正文
粒子群优化算法—Matlab
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
PSO算法
clc;
clear ;
close ;
%% Problem DefinitionCostFunction = @(x) sphere(x); % Cost FunctionnVar = 5; % Dimension of Decision VariablesVarSize = [1,nVar]; % Matrix Size of Decision VariablesVarMin = -10; % Lower Bound of Decision Variables
VarMax = 10; % Upper Bound of Decision Variables%% Parameters of PSOMaxIt = 1000; % Maximum Number of IterationsnPop = 50; % Population Size w = 1; % Inertia Coefficient
wdamp = 0.81; % Damping Ratio of Inertia Coefficient
c1 = 2; % Personal Acceleration Coefficient
c2 = 2; % Social Acceleration Coefficient%% Initialization% The Patticle Template
empty_partical.Position = [];
empty_partical.Velocity = [];
empty_partical.Cost = [];
empty_partical.Best.Position = [];
empty_partical.Best.Cost = [];% Create Population Array
particle = repmat(empty_partical,nPop,1);% Initialize Global Best
GlobalBest.Cost = inf;% Iniitialize Population Members
for i=1:nPop % Generate Random Solution
particle(i).Position = unifrnd(VarMin,VarMax,VarSize); % Initialize Velocity
particle(i).Velocity = zeros(VarSize); % Evaluation
particle(i).Cost = CostFunction(particle(i).Position); % Update the 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
BestCosts = zeros(MaxIt,1);%% Main Loop of PSOfor 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);
% Update Position
particle(i).Position = particle(i).Position + particle(i).Velocity; % Evaluation
particle(i).Cost = CostFunction( particle(i).Position); % Update Personal Best
if particle(i).Cost < particle(i).Best.Cost 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;
end end end % Store the Best Cost Value
BestCosts(it) = GlobalBest.Cost; % Display Iteration Information
disp(['Iteration ' num2str(it) ': Best Cost = ' num2str(BestCosts(it))]); % Damping Inertia Coefficient
w = w * wdamp;end%% Resultsfigure;
plot(BestCosts,'LineWidth',2);
semilogy(BestCosts,'LineWidth',2);
xlabel('Iterations');
ylabel('Best Cost');
grid on;
测试函数
function z = sphere(x)
%% 目标函数
z = sum(x.^2);
end





