not enough input arguments

3 views (last 30 days)
aaliyan javaid
aaliyan javaid on 8 Apr 2021
Commented: aaliyan javaid on 9 Apr 2021
i am trying to run the built in matlab function for particle swram i have defined the objective function spearately na then called that function here is the code
function f = objective(p1,q1,p2,n,m)
f = (p1 * q1 + p2 * n * m );
end
objfcn = @objective;
nvar = 5;
lb = [-5 -5];
ub = [5 5];
options = optimoptions('particleswarm','swarmsize',100);
f = particleswarm(objective,nvar,lb,ub,options);
kindly help thanks

Accepted Answer

Cris LaPierre
Cris LaPierre on 8 Apr 2021
You have not set up your objective function correctly, and then you are also not passing it correctly to particleswarm.
  • Write the objective function to accept a row vector of length nvars and return a scalar value.
This meains a single input variable, where each column corresponds to the values of each variable. You can split that vector into specific variables inside the objective function if you want, as I do below.
Also, your 'fun' input to particleswarm should be either objfcn or @objective.
nvar = 5;
lb = [-5 -5];
ub = [5 5];
opts = optimoptions('particleswarm','swarmsize',100);
f = particleswarm(@objective,nvar,lb,ub,opts);
function f = objective(params)
p1=params(1);
q1=params(2);
p2=params(3);
n=params(4);
m=params(5);
f = (p1 * q1 + p2 * n * m );
end
Note that this will run now, but it did not find a solution before it was terminated.
  1 Comment
aaliyan javaid
aaliyan javaid on 9 Apr 2021
thanks alot for the help

Sign in to comment.

More Answers (0)

Tags

Community Treasure Hunt

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

Start Hunting!