Да, вы можете запросить слабины, используя предложенную вами стратегию.Пример iloadmipex5.cpp
, который включается при установке CPLEX, показывает, как использовать обратный вызов, вырезанный пользователем.Как и в этом примере, звучит так, как будто вы хотите передать IloRangeArray
обратному вызову, а не IloRange
.
Например, ваш обратный вызов может выглядеть следующим образом:
ILOUSERCUTCALLBACK1(MyCallback, IloRangeArray, constraints) {
for (IloInt i = 0; i < constraints.getSize(); ++i) {
IloRange& con = constraints[i];
IloNum const slack = getSlack(con);
cout << "Slack for " << con << " = " << slack << endl;
}
}
И вы бы добавили обратный вызов к вашей модели, вот так:
IloModel model(env);
IloRangeArray constraints(env);
// Add constraints to the array with constraints.add(...);
// Also, make sure that you have added the constraints to the model.
model.add(constraints);
IloCplex cplex(model);
cplex.use(MyCallback(env, constraints));