У меня есть карта м;
и я могу запустить строки кода, такие как
m[constraint_name] += x_a; or
m[constraint_name] -= x_a;
Однако, когда я хочу добавить ограничение из этой карты в модель, оно всегда терпит неудачу:
model.addConstr (m [cons_name] == 1, cons_name);
Я получаю следующий код ошибки:
Код ошибки = 20001
Не в модели
Спасибо за ваше объяснение проблемы и как я могу ее решить?
Для API gurobi вам нужно вызывать GRBModel.update () между временем создания переменной и временем добавления ограничения, связанного с этой переменной. Можно добавить переменные в выражения, как вы делаете с помощью оператора + = для значений ваших карт, так что вы не получите исключений там.
Вы не должны злоупотреблять методом обновления, так как это дорого. Создание выражений в картах перед обновлением, как вы делаете, является обычной идиомой.