Not Enough Input Arguments using GA

I'm trying to minimize a function using GA with some of the variables as integers, with a few linear inequalities, linear equalities, and a bunch of nonlinear inequalities, keep getting the error:
Not enough input arguments.
Error in project>nonlinear (line 30)
h=x(1);
Error in project (line 13)
[x, fval, exitflag] = ga(@zfun,10,A,b,Aeq,beq,lb,ub,nonlinear,intcon,options)
Here's my full code:
clc; clear; %1=h 2=ds 3=db 4=n 5=s 6=Ss 7=L 8=d 9=c 10=dv
A=[0 0 1.4 0 -1 0 0 0 0 0; 0 0 0 0 0 0 0 0.9 0 -1; 0.72 0 0 0 0 0 0 0 0 -1;
0 0 0 0 0 1 0 0 0 -0.7; -1 1 0.5 0 0 0 0 1 0 0; 0 0 0 0 0 0 1 0 0 0; 0 0 0 0 0 0 0 0 1 0];
%bar spacing; bar spacing; bar spacing; define dv; define dv; max Ss;
%define d
b=[0; 0; 0; 0; -75; 0; 0];
lb=[0 0 0 0 30 0 0 0 0 0];
ub=[inf inf inf inf inf 600 inf inf inf inf];
intcon=[1 2 3 4 5 6 7 9];
options=[];
[x, fval, exitflag] = ga(@zfun,10,A,b,[],[],lb,ub,nonlinear,intcon,options)
function z = zfun(x)
h=x(1);
ds=x(2);
db=x(3);
n=x(4);
s=x(5);
Ss=x(6);
L=x(7);
d=x(8);
c=x(9);
dv=x(10);
z= 16000*h + 500*0.000007854*db^2 +500*0.007854*ds^2*(2*h/1000+8)/Ss;
end
function [c] = nonlinear(x)
h=x(1);
ds=x(2);
db=x(3);
n=x(4);
s=x(5);
Ss=x(6);
L=x(7);
d=x(8);
c=x(9);
dv=x(10);
c(1) = 3000*h + 187.5 - 267*n*d*db^2 + 0.5714*n^2*db^4; %Mr>Mf
c(2) = 21.909*h - 0.7854*db^2; %Asmin
c(3) = 16*h - 0.7854*db^2; %Asmin for Ag
c(4) = 0.0021397*n*db^2/d - 0.5; %a/d
c(5) = 1164*h + 72.75 - 762.653*ds^2*dv/Ss - 5126.68*dv; %Vs+Vc>Vfdv
c(6) = 5126.68*dv + 762.653*ds^2*x(11)/Ss - 39000*dv; %max Vr
c(7) = 6.573*Ss - 1.5708*ds^2; %min Av
c(8) = Ss - 0.239*ds^2; %max Ss
c(9) = (h-d)^0.66666/n^0.333333 - 4.96063; %crack control
c(10) = n*db + (n-1)*s + 2*ds - 7850; %bar spacing req
end
Thanks in advance.
EDIT: Learned I can't use intcon with equality constraints, updated my code but still have same error.

답변 (1개)

Walter Roberson
Walter Roberson 2019년 4월 7일

0 개 추천

Your call to ga needs to use @nonlinear rather than nonlinear

댓글 수: 4

Thanks for the reply; my error changed to:
Error using ga (line 393)
Too many output arguments.
Error in project (line 12)
[x, fval, exitflag] = ga(@zfun,10,A,b,[],[],lb,ub,@nonlinear,intcon,options)
Caused by:
Failure in initial user-supplied nonlinear constraint function evaluation.
Also, I made an edit to the name of the lines of nonlinear in-case it was colliding with the fact that I also have a variable named c
Thanks for any additional help in advance!
Walter Roberson
Walter Roberson 2019년 4월 7일
The nonlinear constraints function must return two outputs, one for the nonlinear inequalities, and one for the nonlinear equalities. If you do not have any nonlinear equality constraints, return [] for the second output.
So I changed the line to
function [con, coneq] = nonlinear(h,ds,db,n,s,Ss,~,d,~,dv)
and added this into the function:
coneq=[];
Now however, my error becomes
Error using ga (line 393)
Not enough input arguments.
Error in project (line 12)
[x, fval, exitflag] = ga(@zfun,10,A,b,[],[],lb,ub,@nonlinear,intcon,options)
Caused by:
Failure in initial user-supplied nonlinear constraint function evaluation.
I can see in the line of ga its reffering to that there are 2 more inputs, called 'output' and 'Iterate' but I'm not sure what they're supposed to be or if there needs to be something in there.
Thanks in advance for a reply!
Walter Roberson
Walter Roberson 2019년 4월 7일
Your non-linear constraints function needs a number of additional inputs.

댓글을 달려면 로그인하십시오.

카테고리

도움말 센터File Exchange에서 Surrogate Optimization에 대해 자세히 알아보기

질문:

2019년 4월 6일

댓글:

2019년 4월 7일

Community Treasure Hunt

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

Start Hunting!

Translated by