Effacer les filtres
Effacer les filtres

why do i have so many errors when trying to use particle swarm optimisation in matlab?

3 vues (au cours des 30 derniers jours)
his is my code for the objective function
function y = T(x,c)
% this is the objective function
if x(1)^2-x(2)+1 <= 0
y = x(1)^2 + x(2)^2;
elseif x(1)^2-x(2)+1 > 0
if c == 1
y = x(1)^2 + x(2)^2 + (1/2)*(x(1)^2-x(2)+1)^2;
elseif c == 10
y = x(1)^2 + x(2)^2 + (10/2)*(x(1)^2-x(2)+1)^2;
elseif c == 100
y = x(1)^2 + x(2)^2 + (100/2)*(x(1)^2-x(2)+1)^2;
end
end
And here is my script file in trying to obtain optimal values near global optimum by following the example in this link https://uk.mathworks.com/help/gads/optimize-using-particle-swarm-optimization.html
fun = @T;
n = 2;
rng default
[x,fval,exitflag] = particleswarm(fun,n)
lb = [-50;-50];
ub = -lb;
[x,fval,exitflag] = particleswarm(fun,n,lb,ub)
options = optimoptions('particleswarm','SwarmSize',100);
[x,fval,exitflag] = particleswarm(fun,n,lb,ub,options)
options.HybridFCn= @fmincon;
[x,fval,exitflag] = particleswarm(fun,n,lb,ub,options)
after executing the file i get these errors
Error using particleswarm>makeState (line 700)
Failure in initial objective function evaluation. PARTICLESWARM cannot
continue.
Error in particleswarm>pswcore (line 170)
state = makeState(nvars,lbMatrix,ubMatrix,objFcn,options);
Error in particleswarm (line 152)
[x,fval,exitFlag,output] =
pswcore(objFcn,nvars,lbRow,ubRow,output,options);
Error in question_7b (line 5)
[x,fval,exitflag] = particleswarm(fun,n)
Caused by:
Not enough input arguments.
  1 commentaire
Adam
Adam le 16 Déc 2016
Just for info, that is only 1 error being reported, it is just giving you the callstack that leads to the error.

Connectez-vous pour commenter.

Réponse acceptée

José-Luis
José-Luis le 16 Déc 2016
T, and consequently fun expect two arguments. From the documentation of particle swarm:
"Objective function, specified as a function handle. The objective function should accept a row vector of length nvars and return a scalar value."
The function you pass should only have one argument...
  3 commentaires
Maurice Moh
Maurice Moh le 16 Déc 2016
Hi thanks so much for the tip i have implemented the changes and now i have received another error and
No public property HybridFCn exists for class
optim.options.Particleswarm.
Error in question_7b (line 11)
options.HybridFCn= @fmincon;
Appreciate the help in advance.
Alan Weiss
Alan Weiss le 16 Déc 2016
Looks like a typo to me. The correct capitalization is HybridFcn, not HybridFCn.
Alan Weiss
MATLAB mathematical toolbox documentation

Connectez-vous pour commenter.

Plus de réponses (1)

nazli melek
nazli melek le 28 Déc 2017
Thanks José-Luis for your help. I faced the same problem and it is solved now

Community Treasure Hunt

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

Start Hunting!

Translated by