У меня есть модель MIP ( Gurobi ), которая содержит следующее ограничение:
model.addConstr(rawOutputVar == rawInputVar * edge->getMultiplicator());
rawOutputVar
и rawInputVar
являются непрерывными переменными. edge->getMultiplicator()
возвращает маленький двойник.
После запуска модели я увидел, что ограничение было "проигнорировано". Значение rawInputVar
было установлено на 0, тогда как rawOutputVar
было огромным числом, с edge->getMultiplicator()
, равным 0.0000346
. Таким образом, уравнение стало:
100000000 == 0 * 0.0000346
что явно не так. Однако Гуроби сообщил, что решение является оптимальным . Я заменил уравнение на
model.addConstr(rawOutputVar <= rawInputVar * edge->getMultiplicator());
model.addConstr(rawInputVar * edge->getMultiplicator() <= rawOutputVar);
, что в основном то же самое. Теперь это работает правильно.
Мне интересно, почему моя первая попытка не сработала правильно. Я делаю что-то в корне неправильно?