【问题标题】:Inequality indexing using optimization variables in MATLAB在 MATLAB 中使用优化变量进行不等式索引
【发布时间】:2020-10-08 20:16:07
【问题描述】:

让变量AB 成为n x 1 双精度数和c 标量。我的目标是将A 中的值与优化变量x 大于B 的索引相对应。我在下面写了这个:

x = optimvar('x',n); % Creates optimization variable 
objfun = sum(x); % Creates objective function
constraint = sum(A(x>=B))>=c; % Constraint based on logical indexing

上面代码中的第三行返回错误消息,因为优化变量与不等式索引不兼容。具体来说,x>=B 不能作为索引输入到A。有没有解决的办法?还是我想错了?

谢谢!

【问题讨论】:

  • 在优化模型中,我们通常使用二元决策变量对此进行建模。

标签: matlab optimization syntax


【解决方案1】:

您需要对目标函数和约束函数都使用函数句柄:

objfun = @(var) sum(var); 
constraint = @(var) sum(A(var>=B)) >= c;

其实对于目标函数objfun,你也可以使用objfun = @sum。这是一个函数句柄。您可以将其视为对某个函数的指针或引用。可以直接使用与一个输入一起工作的函数(使用@)。优化器调用函数并使用优化变量作为输入。

现在,如果您有多个输入,则需要创建一个函数,在其中定义除一个之外的所有输入。为此,您创建了一个匿名函数句柄,您可以在其中告诉句柄哪些变量放置在哪里:@(var) sum(A(var>=B)) >= c。变量var 是变化的输入,其他变量ABc 取自工作区的定义点(即,如果您稍后甚至更改变量,函数句柄不受影响删除它们)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-25
    • 2016-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多