PSO Coding Class Error
    조회 수: 8 (최근 30일)
  
       이전 댓글 표시
    
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'.
댓글 수: 0
답변 (2개)
  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
댓글 수: 0
참고 항목
카테고리
				Help Center 및 File Exchange에서 Particle Swarm에 대해 자세히 알아보기
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!


