Labfans是一个针对大学生、工程师和科研工作者的技术社区。 | 论坛首页 | 联系我们(Contact Us) |
![]() |
|
![]() |
#1 |
初级会员
注册日期: 2009-05-13
帖子: 1
声望力: 0 ![]() |
![]()
myfun9.m是目标函数文件,如下:
function y=myfun9(x) fai0=asin(x(4)*sin(x(6))/x(3)); fai1=asin(x(4)*sin(x(5)+x(6))/x(3)); beta1=asin(x(2)*sin(x(5))); sm=x(1)*(1-cos(x(5))+(1-sqrt(1-x(2)^2*(sin(x(5)))^2))/x(2)); sg=x(4)*(sin(fai1+x(5)+x(6))/sin(fai1)-sin(fai0+x(6))/sin(fai0)); w=sm/sg; m_min=x(4)*sin(x(5)+x(6)+fai1)*cos(beta1)/(x(1)*sin(x(5)+beta1)*cos(fai1)); pm_max=3200; p0_max=pm_max/m_min; y=p0_max-w; (其中x(1)—x(6)为目标变量) mycon9.m是约束函数文件,如下: function [c,ce]=mycon9(x) ce=[]; c=[sin(10/180*pi)-x(4)*sin(x(5)+x(6))/x(3);... 0.5-x(2)*sin(x(5));... x(2)*sin(x(5))-sqrt(2)/2;... 0.5*x(1)*(1-cos(x(5))+(1-sqrt(1-x(2)^2*(sin(x(5)))^2))/x(2))-x(1);... sqrt(2*x(1)*x(4)*cos(x(6))-x(1)^2-x(4)^2)-5-5;... sin(80/180*pi)-x(4)*sin(x(6))/x(3);... x(4)*sin(x(6))/x(3)-1;... 500-x(1)*(1-cos(x(5))+(1-sqrt(1-x(2)^2*(sin(x(5)))^2))/x(2));... abs(x(4)*sin(x(5)+x(6))/x(3))-1;... abs(x(4)*sin(x(6))/x(3))-1]; (10个约束条件) 在matlab7.1命令行输入: >> xm=[250;0.7;300;150;60/180*pi;90/180*pi]; >> xM=[300;0.9;400;250;80/180*pi;110/180*pi]; >> [x,fval]=ga(@myfun9,6,[],[],[],[],xm,xM,@mycon9) 结果出现: ??? Error using ==> gads\private\aluform Constraint function must return real value. Error in ==> gads\private\gacon at 103 [Iterate,A,L,U,nineqcstr,neqcstr,ncstr,IndIneqcstr,IndEqcstr,msg,EXITFLAG] = ... Error in ==> ga at 251 [x,fval,exitFlag,output,population,scores] = gacon(FUN,GenomeLength,Aineq,Bineq,Aeq,Beq,LB,UB,nonlcon,options); 问题出在哪?? 附上错误行: % Make A, L, U as L <= A*X <= U >> 103[Iterate,A,L,U,nineqcstr,neqcstr,ncstr,IndIneqcstr,IndEqcstr,msg,EXITFLAG] = ... aluform(Iterate.x,Aineq,Bineq,Aeq,Beq,LB,UB,GenomeLength,subtype,verbosity, ... constr,X,conFcnArg); if EXITFLAG < 0 FVAL = []; X( ![]() REASON = msg; OUTPUT.message = msg; if verbosity > 0 fprintf('%s\n',msg) end return; else options.InitialPopulation(1, ![]() end >> 249 % If constraints/bounds then call constraint solver if ~isempty(nonlcon) >> 251 [x,fval,exitFlag,output,population,scores] = gacon(FUN,GenomeLength,Aineq,Bineq,Aeq,Beq,LB,UB,nonlcon,options); % If Aeq or Aineq is not empty, then problem has linear constraints. elseif ~isempty(Aeq) || ~isempty(Aineq) [x,fval,exitFlag,output,population,scores] = galincon(FUN,GenomeLength,Aineq,Bineq,Aeq,Beq,LB,UB,options); % This condition satisfies bound constraints elseif (isempty(Aeq) && isempty(Aineq) && isempty(Bineq) && isempty(Beq)) && ( ~isempty(LB) || ~isempty(UB) ) [x,fval,exitFlag,output,population,scores] = galincon(FUN,GenomeLength,Aineq,Bineq,Aeq,Beq,LB,UB,options); % Unconstrained problem elseif (isempty(Aeq) && isempty(Aineq) && isempty(Bineq) && isempty(Beq) && isempty(LB) && isempty(UB)) [x,fval,exitFlag,output,population,scores] = gaunc(FUN,GenomeLength,options); % Try nonlinear constrained solver else try [x,fval,exitFlag,output,population,scores] = gacon(FUN,GenomeLength,Aineq,Bineq,Aeq,Beq,LB,UB,nonlcon,options); catch error('gads:GA:entryPoint','%s','Invalid input to GA'); end end |
![]() |
![]() |