Matlab 中的 Gurobi 没有 objective 函数

Gurobi in Matlab without objective function

我在 Matlab 中使用 Gurobi 来确定线性等式和线性不等式系统是否至少有一个解。我没有 minimise/maximise 的 objective 函数。

这是我的代码(我没有贴出矩阵的实际内容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

问:objective函数应该设置什么?如果我像上面那样写 model.obj=[]; 我会得到

Error using gurobi
Incorrect size(model.obj)

如果我删除模型行,我会得到

Error using gurobi
model must contain fields: A, obj, sense, and rhs

This 问题与我的有关,但它没有解释用什么代替 objective 函数。

不幸的是,我没有评论所需的声誉,所以这是一个答案。

您的矩阵 A 是稀疏矩阵很重要,因为 Gurobi 的 MATLAB API 只接受稀疏矩阵:model.A=sparse([Aineq; Aeq])。然后只需从您的代码中删除行 model.obj = [] 即可工作。如果没有 objective 传递给 Gurobi,它会自动使用 0 作为 objective 函数,这样您的模型将根据您的约束最小化 0。在这种情况下,每个可行的解决方案都是最优的并且满足您的约束。或者,您可以使用

手动完成此操作
model.obj = zeros(size(model.A, 2), 1);