首页 > 解决方案 > MIP 模型中忽略了等式约束

问题描述

我有一个 MIP 模型(Gurobi),其中包含以下约束:

model.addConstr(rawOutputVar == rawInputVar * edge->getMultiplicator());

rawOutputVar并且rawInputVar都是连续变量。edge->getMultiplicator()返回一个小双。

在运行模型时,我看到约束被“忽略”。的值rawInputVar被设置为 0,而是rawOutputVar一个巨大的数字。于是等式变成了:edge->getMultiplicator()0.0000346

100000000 == 0 * 0.0000346

这显然是错误的。然而,Gurobi 报告该解决方案是最优的。我用

model.addConstr(rawOutputVar <= rawInputVar * edge->getMultiplicator());
model.addConstr(rawInputVar * edge->getMultiplicator() <= rawOutputVar);

这基本上是一样的。它现在可以正常工作。

我想知道为什么我的第一次尝试没有正常工作。我在做一些根本错误的事情吗?

标签: c++linear-programminggurobimixed-integer-programming

解决方案


推荐阅读