У меня есть проблема оптимизации, когда у меня есть простая функция объектива и набор ограничений, как указано ниже:
% set some variables for example
params.nbMaxLong = 2;
params.nbMaxShort = 2;
s = [-0.2,0.1,0.5,-0.4,0.2,-0.1];
n = numel(s);
% Objectif function
fun = @(x) -(s * x);
% Initial condition
x0 = ones(n,1)./n .* sign(s)';
% Linear equality constraints
temp = ones(0,n);
temp(s >= 0) = -1;
temp(s < 0) = 1;
% (b) and (c)
% Ax <= b
A = diag(temp);
b = zeros(n,1);
% Linear Inequality constraints
Aeq = [];
beq = [];
% bound
lb = -ones(n,1)/n;
ub = ones(n,1)/n;
% Non-Linar Constraints
function [c,ceq] = maxBasketConst(x,params)
% Non-linear equality constraints
ceq = [sum(x > 0) - params.nbMaxLong;
sum(x <0) - params.nbMaxShort];
% Non-linear inequality constraints
c = [];
end
nonlcon = @(x)maxBasketConst(x,params);
% Optimization
x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon);
Моя проблема связана с нелинейным ограничением, когда я пытаюсь установить ограничение наколичество положительных и отрицательных значений в решении.В принципе, я хотел бы, чтобы решение содержало ровно 2 положительных значения и 2 отрицательных значения, а остальное должно быть равно нулю.
Очевидно, способ, которым я установил ограничение, не дает ожидаемых результатов.Любые предложения о том, как определить такое ограничение.Он не должен быть нелинейным.