Я ищу способ манипулировать iloextractable объект после удаления из модели и повторно добавить модифицированный

У меня есть что-то вроде этого:

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

Я хотел бы удалить извлекаемый из модели, изменить этот и снова добавить в модель измененный.
Этот код не работает … Последняя инструкция вызывает исключение.
Что я мог сделать?
Благодарю.

1

Решение

Лучше использовать 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;
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]