我正在寻找一种在从模型中删除并重新添加修改后的可提取对象后操作 iloextract 对象的方法

I'm looking for a way to manipulate iloextractable object after having removed from a model and re-add the modified one

本文关键字:方法 修改 添加 提取 iloextract 操作 取对象 对象 一种 寻找 模型      更新时间:2023-10-16

我有一个类似的东西:

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);

我想从模型中删除可提取的内容,修改这个,然后将修改后的内容再次添加到模型中。此代码不起作用。。。最后一条指令引发异常。我能做什么?谢谢

为此,最好使用IloExpIloConstraint,并且不要忘记在更改后提取新模型。例如,

  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;