如何在Gurobi C ++模型中更改目标价值系数

我建立了一个要使用一组不同的目标函数系数来多次求解的MIP模型(我意识到热启动并不是很有用,我只是在尝试避免模型构建时间)。

我通过将每个变量的obj系数设置为0.0来构建可重用模型。

我现在想将所有变量的目标系数添加到值std::vector中,然后优化模型并将所有目标系数再次设置为0。

我目前正在这样做:

auto vars = model.getVars();

auto cols = model.get(GRB_IntAttr_NumVars);

for (int i =0; i < cols; ++i) {
        std::cout << vars[i].get(GRB_StringAttr_VarName) << "\n";
        vars[i].set(GRB_DoubleAttr_Obj,obj_val[i]);
    }


//after doing stuff with the rebuilt-model setting all obj coeffs to 0

for (int i =0; i < cols; ++i) {
        vars[i].set(GRB_DoubleAttr_Obj,0.0);
    }
delete[] vars;

是否有更快,更优雅的方法来做到这一点?

qingtouwohao2 回答:如何在Gurobi C ++模型中更改目标价值系数

要重置目标,您可以使用setObjective()并只需将0作为线性表达式即可。

您还可以使用array set methods在一次通话中传递所有目标系数。这应该是最快的方法,并且可以在代码中保存一个for循环。

如果在设置新目标时仍要遍历所有变量,为什么还要一开始就将其重置为0?

您还应该检查multi-objective feature是否可以作为您的选择。

本文链接:https://www.f2er.com/2783424.html

大家都在问