Как изменить коэффициент объективного значения в модели Gurobi C ++ - PullRequest
0 голосов
/ 12 января 2020

Я построил модель 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;

Есть ли более быстрый и элегантный способ сделать это?

1 Ответ

1 голос
/ 12 января 2020

Для сброса цели вы можете использовать setObjective () и просто передать 0 в качестве линейного выражения.

Вы также можете передать все объективные коэффициенты за один вызов, используя методы набора массивов . Это должен быть самый быстрый способ сделать это и сохранить один для l oop в вашем коде.

Если вы все равно просматриваете все переменные при установке новой цели, зачем вам вообще пытаться сбросить ее на 0 во-первых?

Вам также следует проверить, может ли многоцелевая функция быть подходящей для вас.

...