У меня есть вопрос относительно потенциально странного результата, который я получаю при минимизации квадратичной целевой функции при некоторых ограничениях.Я использую Matlab и Gurobi.
Я не могу опубликовать свою актуальную проблему оптимизации, потому что она слишком длинная и сложная.Я хотел бы получить от вас некоторые общие мысли о следующем.
Целевая функция имеет вид
При реализации алгоритма оптимизации в Gurobi я делаю классический
%1) Set constraints Aineq*x<=bineq and Aeq*x=beq
model.A=[Aineqother; Aeqother];
model.sense=[repmat('<', size(Aineqother,1),1); repmat('=', size(Aeqother,1),1)];
model.rhs=[bineqother; beqother];
%2) Set the variable type for each element of the unknown vector x
model.vtype=type;
%3) Set the lower bound and the upper bound for each element of the unknown vector x
model.lb=total_lb;
model.ub=total_ub;
%4) Set the objective function (WITHOUT CONSIDERING ALPHA)
model.Q=Q;
model.obj=c;
%5) Run the optimisation problem
result=gurobi(model,params);
%6) ADD BACK ALPHA
final_result=result.objval+alpha;
Вопрос
Полученный мной final_result
равен отрицательным и равен -1.6653e-13
.
Обратите внимание, что алгебраически я не могу получить отрицательное число, потому что целевая функция является квадратичной.
Отсюда мой вопрос: означает ли это отрицательное число, что наверняка есть какая-то ошибка в коде?Или такое число настолько близко к нулю, что может быть из-за какого-то шага округления, сделанного Матлабом?
Позвольте мне подчеркнуть, что я почти уверен, что я правильно закодировал alpha,Q,C
.Чтобы проверить это дважды, я вычислил
для тысяч случайных значений x
, и оно всегда получается положительным.