如何解决使用MATLAB中的优化变量进行不平等索引
让变量A
和B
为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
的索引输入。有没有解决的办法?还是我想这是错误的方式?
谢谢!
解决方法
您需要同时使用函数句柄,目标函数和约束函数:
objfun = @(var) sum(var);
constraint = @(var) sum(A(var>=B)) >= c;
实际上,对于目标函数objfun
,您也可以使用objfun = @sum
。这是一个功能句柄。您可以将其视为指向某个函数的指针或引用。可以直接使用与一个输入一起使用的功能(与@
一起使用)。优化器调用该函数,并将优化变量用作输入。
现在,如果您有多个输入,则需要创建一个函数,在其中定义除一个以外的所有输入。为此,您创建一个匿名函数句柄,在其中告诉句柄将哪些变量放置在@(var) sum(A(var>=B)) >= c
处。变量var
是不断变化的输入,而其他变量A
,B
和c
则是在定义时从工作空间中获取的(即,函数句柄不受影响)如果您以后要更改变量甚至删除它们)。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。