我对在某些约束下最小化二次目标函数时可能出现的怪异结果有疑问。我使用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
。
请注意,由于目标函数是二次函数,因此在代数上我无法得到负数。
我的问题:这个负数是否表示确定在代码中存在一些错误?还是这个数字接近零,可能是由于Matlab进行了舍入步骤造成的?
让我强调,我很确定自己已正确编码alpha,Q,C
。为了再次确认这一点,我计算出
包含x
的数千个随机值,并且始终为正。