我正在Matlab中使用Gurobi来确定一个线性等式和线性不等式系统是否至少具有一个解。我没有最小化/最大化的目标功能。
这是我的代码(我尚未发布矩阵Aineq, Aeq, bineq, beq
的实际内容)
clear model;
model.A=[Aineq; Aeq];
model.obj=[];
model.sense=[repmat('<', size(Aineq,1),1); repmat('=', size(Aeq,1),1)];
model.rhs=full([bineq; beq]);
params.outputflag = 0;
result=gurobi(model, params);
if isfield(result,'x')
exists=1;
else
exists=0;
end
问题:我应该将什么设置为目标函数?如果我如上所述写model.obj=[];
,我将得到
Error using gurobi
Incorrect size(model.obj)
如果删除模型行,我将得到
Error using gurobi
model must contain fields: A, obj, sense, and rhs
This这个问题与我的问题有关,但没有说明用什么代替目标函数。
答案 0 :(得分:1)
不幸的是,我没有所需的声誉来发表评论,所以这是一个答案。
矩阵A是稀疏矩阵很重要,因为Gurobi的MATLAB API仅接受稀疏矩阵:double
。然后,只需从代码中删除行operator T&&()
就可以了。如果没有将任何目标传递给Gurobi,它将自动使用0作为目标函数,因此您的模型将根据您的约束最小化0。在这种情况下,每个可行的解决方案都是最佳的,并且可以满足您的约束。或者,您可以手动完成此操作
model.A=sparse([Aineq; Aeq])