我正在寻找一种在从模型中删除并重新添加修改后的可提取对象后操作 iloextract 对象的方法
I'm looking for a way to manipulate iloextractable object after having removed from a model and re-add the modified one
我有一个类似的东西:
IloExtractable extractable(env);
...
extractable = model.add( x + y <= 4);
...
model.remove(extractable);
IloExpr soft_expr(extractable.asConstraint());
IloNumVar v = IloNumVar(env, 0.0, +IloInfinity,ILOFLOAT);
soft_expr += v;
model.add(soft_expr);
我想从模型中删除可提取的内容,修改这个,然后将修改后的内容再次添加到模型中。此代码不起作用。。。最后一条指令引发异常。我能做什么?谢谢
为此,最好使用IloExp
和IloConstraint
,并且不要忘记在更改后提取新模型。例如,
IloExpr con = x[0] + x[1];
IloConstraint cons = con == 3 ;
model.add( cons );
cplex.solve();
IloNumArray vals(env);
cplex.getValues(vals, x);
cplex.exportModel("./model1.lp"); // to check out
cplex.out() << "Solution status " << cplex.getStatus() << endl;
cplex.out() << "Objective value " << cplex.getObjValue() << endl;
cplex.out() << "Solution is: " << vals << endl;
//--------------------------//
model.remove( cons );
IloNumVar v = IloNumVar(env, 0.0, +IloInfinity,ILOFLOAT);
cons = con + v == 3; // your new constraint
model.add( cons );
cplex.extract(model);
cplex.solve();
cplex.getValues(vals, x);
cplex.exportModel("./model2.lp");
cplex.out() << "Solution status " << cplex.getStatus() << endl;
cplex.out() << "Objective value " << cplex.getObjValue() << endl;
cplex.out() << "Solution is: " << vals << endl;
相关文章:
- 有没有一种优雅的方法可以使用向量修改器并获得新的向量,而不是更改原始向量
- const 方法使用引用修改对象
- 在不编写显式 setter 的情况下修改私有类数据成员的便捷方法是什么?模板有用吗?
- c++ 是否提供了一种使整个结构常量(不可修改)的方法?
- 如何修改类及其方法,让我调用另一个类的必要方法?
- 我可以制作一个对象方法,如果单独调用,它将自行修改,但如果在复制初始化期间调用,则会返回一个新对象?
- 如何仅通过类方法修改类公共数据成员
- 如何在 c++ 中修改运行时的方法?
- DPDK:修改捕获的数据包标头的最有效方法
- 如何转换一个类方法以修改另一个类的私有元素?
- 调用方法,该方法修改字段,而使用该字段的另一个方法正在执行
- 避免使用大量全局变量或使其易于访问和修改的最佳方法
- 在不使用public方法的情况下修改类private外部类
- 修改Boost多索引项的非索引字段的最佳方法:modify vs mutable
- 使用C 修改Java方法/字节码
- 为什么方法应该返回新实例,而不是修改实例本身
- const静态方法修改值
- 修改类方法中的私有类变量
- 我无法通过类 Artist 的公共方法修改任何私有字段。我尝试在函数名称之前添加引用(&),但崩溃了
- write方法修改输入参数