使用 fmincon 进行功能约束优化(在 Matlab 中)?
Functionally constrained optimization using fmincon (in Matlab)?
我想为每个 x 值设置一个约束,0<=f(x,vctr)<=100。结果是:
??? Undefined function or variable 'x' due to functional constraint "cnstrnt".
虽然它是一个变量,但是fmincon
在cnstrnt
中要求x
的值。 x
代表多个变量。 b
、k
和 vctr
(常数向量)是常数。对约束进行编码的正确方法是什么?
function [ h ] = f(x,vctr)
g=@(x) (vctr(1,6).*x.^5+vctr(1,5).*x.^4+vctr(1,4).*x.^3+ ...
vctr(1,3).*x.^2+vctr(1,2).*x.^1+vctr(1,1));
h=fzero( @(x)(g(x)-y),0);
end
function [ cc,ceq ] = cnstrnt(x,b,vctr)
for k=1:length(b)*2
cc(k)=f(x(k),vctr)-100;
cc(k+1)=-f(x(k),vctr);
end
ceq=[];
end
[result,FVAL,EXITFLAG,OUTPUT,LAMBDA,GRAD,HESSIAN]= fmincon(@(x)obj(x,b,c,L,vctr) ,x0,A,B,Aeq,beq,[],ub,cnstrnt(x,b,vctr),opts);
??? Undefined function or variable 'x'.
变量必须用@(x)
声明为@(x)cnstrnt(x,b,vctr)
。然后 fmincon
可以识别变量并与常量区分开来。
[result,FVAL,EXITFLAG,OUTPUT,LAMBDA,GRAD,HESSIAN]= fmincon(@(x)obj(x,b,c,L,vctr) ,x0,A,B,Aeq,beq,[],ub,@(x)cnstrnt(x,b,vctr),opts);
我想为每个 x 值设置一个约束,0<=f(x,vctr)<=100。结果是:
??? Undefined function or variable 'x' due to functional constraint "cnstrnt".
虽然它是一个变量,但是fmincon
在cnstrnt
中要求x
的值。 x
代表多个变量。 b
、k
和 vctr
(常数向量)是常数。对约束进行编码的正确方法是什么?
function [ h ] = f(x,vctr)
g=@(x) (vctr(1,6).*x.^5+vctr(1,5).*x.^4+vctr(1,4).*x.^3+ ...
vctr(1,3).*x.^2+vctr(1,2).*x.^1+vctr(1,1));
h=fzero( @(x)(g(x)-y),0);
end
function [ cc,ceq ] = cnstrnt(x,b,vctr)
for k=1:length(b)*2
cc(k)=f(x(k),vctr)-100;
cc(k+1)=-f(x(k),vctr);
end
ceq=[];
end
[result,FVAL,EXITFLAG,OUTPUT,LAMBDA,GRAD,HESSIAN]= fmincon(@(x)obj(x,b,c,L,vctr) ,x0,A,B,Aeq,beq,[],ub,cnstrnt(x,b,vctr),opts);
??? Undefined function or variable 'x'.
变量必须用@(x)
声明为@(x)cnstrnt(x,b,vctr)
。然后 fmincon
可以识别变量并与常量区分开来。
[result,FVAL,EXITFLAG,OUTPUT,LAMBDA,GRAD,HESSIAN]= fmincon(@(x)obj(x,b,c,L,vctr) ,x0,A,B,Aeq,beq,[],ub,@(x)cnstrnt(x,b,vctr),opts);