有一个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'."
是否存在“已分类”的替代功能来实现此约束? 谢谢
答案 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);
然后,将A
和b
传递给优化器,如下所示:
x = fmincon(objFun, x0, A, b)
答案 1 :(得分:0)
我实现了一个简单但不完善的解决方案,该解决方案在matlab论坛上向我建议。
prob.Constraints.sorted = ( A(2:end)<= A(1:end-1) );
问题是小于或等于比较器。在极端情况下(问题很严重),最终数组彼此相等(满足约束)。可以,但是对于我的问题而言并不理想。