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);
我在 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);