CPLEX删除所有约束

问题描述

我正在将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可以更方便地找到所有约束。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...