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