如何更改古罗比C++模型中的目标值系数

How to change the Objective Value Coefficients in Gurobi C++ Model

本文关键字:目标值 模型 何更改 罗比 C++      更新时间:2023-10-16

我构建了一个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;

有没有更快、更优雅的方法可以做到这一点?

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

您还可以使用数组集方法在一次调用中传递所有目标系数。这应该是执行此操作的最快方法,并在代码中保存一个 for 循环。

如果您在设置新目标时无论如何都要遍历所有变量,为什么还要首先将其重置为 0?

您还应该检查多目标功能是否可以成为您的选项。