Я решаю проблему в Java с помощью библиотеки CPLEX. Я использую класс «Модель» для создания объекта CPLEX и добавления к нему переменных, целевой функции и нескольких ограничений. Это базовая c модель, и я называю ограничения «базовыми c ограничениями».
Я использую алгоритм, который в основном добавляет ограничение в «Модель» и решает его итеративно, пока не исчезнут соответствующие ограничения. можно добавить. Я называю эти ограничения «наложенными ограничениями».
Чтобы создать копию той же модели (как с базовыми c, так и с наложенными ограничениями), я использую приведенный ниже код.
private Model duplicate(Model M) throws IloException {
Model M2 = new Model(Q,k,dep,dLoc,N,cus,cLoc,D,lD,eps); \\create cplex object, variables, basic constraints, objective function
ArrayList<IloRange> constraints = M.getImposedConstraints(); \\list of imposed constraints
IloCopyManager copymanager = new IloCopyManager(M.getCplex());
Iterator iter = (Iterator) M.getCplex().rangeIterator();
while (iter.hasNext()) {
IloRange c = (IloRange) iter.next();
M2.imposeConstraint((IloRange)c.makeCopy(copymanager));
}
return M2;
}
Однако модель не копируется должным образом. Наложенные ограничения не совпадают (я думаю, это может быть потому, что ссылки на переменные, кажется, меняются?), И поэтому результат при решении моделей M и M2 не тот. Кажется, что проблема не с основными c ограничениями, но определенно с наложенными ограничениями. Почему это происходит и как это исправить? Любая помощь приветствуется, спасибо!