【问题标题】:Functionally constrained optimization using fmincon (in Matlab)?使用 fmincon(在 Matlab 中)进行功能约束优化?
【发布时间】:2015-11-15 04:41:54
【问题描述】:

我想为每个 x 值设置一个约束,0

???由于功能约束“cnstrnt”,未定义函数或变量“x”。

虽然它是一个变量,但fminconcnstrnt 中要求x 的值。 x 代表多个变量。 bkvctr(常量向量)是常量。约束编码的正确方法是什么?

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'.

【问题讨论】:

  • 函数cnstrnt中的f是什么?它是在哪里定义的?
  • f 是一个多项式函数(但给定 x 是线性的),它取决于变量 x 和常量 vctr。 x 的每个值都根据函数 f 进行评估以匹配指定的条件。
  • 如果您完整显示cnstrnt,那么我看不到该函数如何访问ff 定义在哪里?
  • 函数 f 定义在另一个 m 文件中。

标签: matlab optimization functional-programming constraints


【解决方案1】:

变量必须用@(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);

【讨论】:

  • 只添加但不要贡献!
猜你喜欢
  • 1970-01-01
  • 2016-10-11
  • 1970-01-01
  • 2013-12-25
  • 2016-02-21
  • 1970-01-01
  • 1970-01-01
  • 2012-10-25
  • 2022-07-05
相关资源
最近更新 更多