Ограничение равенства игнорируется в модели MIP
У меня есть модель 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);
что в основном то же самое. Теперь это работает правильно.
Мне интересно, почему моя первая попытка не сработала правильно. Я делаю что-то в корне неправильно?