【发布时间】:2020-07-13 06:56:16
【问题描述】:
我正在使用 CPLEX 库解决 Java 中的问题。我使用“模型”类来创建 CPLEX 对象,并向其添加变量、目标函数和多个约束。这是基本模型,我将约束称为“基本约束”。
我使用的算法基本上是向“模型”添加约束并迭代求解,直到无法添加更多相关约束。我将这些约束称为“强加约束”。
要创建相同模型的副本(具有基本约束和强制约束),我使用下面的代码。
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 时的结果是不一样的。基本约束似乎没有问题,但施加的约束肯定有问题。为什么会发生这种情况,我该如何解决?非常感谢任何帮助,谢谢!
【问题讨论】:
标签: java optimization linear-programming cplex integer-programming