在Matlab中是否有替代方法或功能可用于“分类”优化工具箱

时间:2019-02-20 15:03:03

标签: matlab optimization

有一个optimvar maniuplatedVariable,需要将其约束为降序排列。

sorted = issorted(manipulatedVariable,'descend') == 1;
prob.Constraints.sorted = sorted;
"Error using issorted. Undefined function 'issorted' for input arguments of type 'optim.problemdef.OptimizationVariable'."

是否存在“已分类”的替代功能来实现此约束? 谢谢

2 个答案:

答案 0 :(得分:0)

欢迎使用SX! 我有一个类似的问题,但是变量以的顺序排列。我使用了线性不等式约束,只要您使用的优化程序接受线性不等式约束,您就可以轻松调整它。

lengthOfVar = length(initialValues);
% Inequality Constraint: Second slot after first slot etc.
A = [diag(ones(lengthOfVar,1), 0) - diag(ones(lengthOfVar-1,1), 1), zeros(lengthOfVar)];
A(lengthOfVar, lengthOfVar) = -1;
b = -ones(lengthOfVar, 1);

然后,将Ab传递给优化器,如下所示:

x = fmincon(objFun, x0, A, b)

答案 1 :(得分:0)

我实现了一个简单但不完善的解决方案,该解决方案在matlab论坛上向我建议。

prob.Constraints.sorted = ( A(2:end)<= A(1:end-1) );

问题是小于或等于比较器。在极端情况下(问题很严重),最终数组彼此相等(满足约束)。可以,但是对于我的问题而言并不理想。