我在matlab中使用求解器fmincon,我想添加一个非线性约束,使得要优化的变量具有固定数量的非零元素。此数字等于25并固定,如下面的函数所示。
因此,我将非线性约束设置如下:
nonlcon = @limitSizeBasket;
function [c,ceq] = limitSizeBasket(x,maskTop,maskBottom)
%This function limit the size of the basket
c = sum(any(x(1,:),1)) - 25;
ceq = [];
end
x = fmincon(@(x)fun(x,scoreTop,scoreBottom),x0,A,b,Aeq,beq,lb,ub,@(x)nonlcon(x,maskTop,maskBottom),options)';
不幸的是,x的结果值似乎根本不考虑这个约束,因为所有x都是非零的。这里我有x是70个元素的向量,我将非零元素的数量限制为最多25个。我定义约束的方式是否存在问题,或者问题来自其他问题?