CPLEX 删除所有约束

CPLEX deleting all constraints

我正在使用 Ilog Cplex 和 Visual C++ 2015 来解决我的复杂问题。如何删除所有约束?以下代码不起作用。

#include <ilconcert/ilomodel.h>
void deleteConstraints(IloModel m)
{
    IloModel::Iterator iter(model);
    while (iter.ok()) {
        if ((*iter).asConstraint().getImpl()) {
            (*iter).asConstraint().end();
        }
        ++iter;
    }
} 

并非模型迭代器找到的每个元素都是约束。例如,迭代器还将生成变量。使用 (*iter).isConstraint() 您可以测试它是否实际指向约束。此外,在迭代模型时修改模型可能不是一个好主意。所以最好先收集所有约束,然后再删除它们:

IloConstraintArray cons(model.getEnv());
for (IloModel::Iterator it(model); it.ok(); ++it) {
  if ( (*iter).isConstraint() )
    cons.add((*iter).asConstraint());
}
model.remove(cons);
cons.endElements();
cons.end();

根据您创建模型的方式,在创建模型时仅跟踪所有约束可能会更容易。

请注意,您还可以使用 IloIterator 的实例来迭代您创建的所有约束。如果您创建的任何约束都提交给模型,那么使用 IloIterator 可能更方便地找到所有约束。