PSO Coding Class Error

조회 수: 2 (최근 30일)
Ali Ali
Ali Ali 2018년 3월 4일
답변: Gnana Prasuna 2021년 11월 17일
Hi,
I Generating a PSO Coding and having some obstacles.. please, see below coding for main.m and particle.m (class) and CostFunction.m (function). I appreciate if someone can help me with the error shown below.
main.m
%% Initialization
% Parameters nPop = 50; MaxIt = 50; w = 1; c1 = 2; c2 = 2;
% Initialize Global Best globalbest = inf;
% Generate Particle Template sample_particle = particle();
% Create Population Array particle(nPop) = particle();
% 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(particle(i).VarSize).*(particle(i).bestPosition - particle(i).position) ...
+ c2*rand(particle(i).VarSize).*(particle(i).globalbest - particle(i).position);
% Update Position
particle(i).position = particle(i).position + particle(i).velocity;
% Evaluation
particle(i) = CostFunction(particle(i).position);
% Update Personal Best
if particle(i).cost < particle(i).bestCost
particle(i).Best.Position = particle(i).position;
particle.Best.Cost = particle.Cost;
% Update Global Best
if particle(i).Best.Cost < globalbest.cost
globalbest.cost = particle.Best;
l
end
end
end
% Store the Best Cost Value
BestCosts(it) = globalbest;
%%Plotting the swarm
clf
plot(BestCosts, 'x') % drawing swarm movements
axis([-10 10 -10 10]);
pause(.1)
% Display Iteration Information
disp(['Iteration' num2str(it) ': Best Cost = ' num2str(BestCosts(it))]);
end
particle.m
classdef particle
properties
% Parameters
VarMin = -10;
VarMax = 10;
nVar = 1; % Number of Variables
VarSize = [1 nVar];
% Template
position = [];
velocity = [];
cost = [];
bestPosition = [];
bestCost = [];
% Initialize Global Best
globalbest = inf;
end
methods
function [ obj ] = particle( varargin )
% Generate Random Solution
obj.position = rand(obj.VarMin, obj.VarMax, obj.VarSize);
% Initialize Velocity
obj.velocity = zeros(obj.VarSize);
% Evaluation
obj.cost = CostFunction(obj.position);
% Update the Personal Best
obj.bestPosition = obj.position;
obj.bestCost = obj.cost;
% Update Global Best
if obj.bestCost < obj.globalbest
obj.globalbest = obj.bestCost;
end
end
end
end
CostFunction.m
function z = CostFunction(x)
z = (x.^2);
end
and the error that I got..
Error using main (line 17) Invalid default value for property 'VarSize' in class 'particle': Undefined function or variable 'nVar'.

답변 (2개)

younes youyou
younes youyou 2019년 12월 16일
Do you have idea how can update two variable ?

Gnana Prasuna
Gnana Prasuna 2021년 11월 17일
Error in pso1 (line 31)
if particle(i).Best.Cost < GlobalBest.Cost
I'm getting this error when ever I do other optimization techniques which is not sphere eg. for leon, easom etc

카테고리

Help CenterFile Exchange에서 Particle Swarm에 대해 자세히 알아보기

태그

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by