我在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个 . 我定义约束的方式是否存在问题,或者问题来自于其他问题?