У меня есть что-то вроде этого:
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;
Других решений пока нет …