我需要阻止CPLEX这样做,并且不知道如何做。
该模型在迭代过程中多次求解。在每次迭代中,目标都会改变。因此,我检查了上一次迭代的模型和解,发现 x 当时具有负系数,并设置为正值。我得出结论,此行为必须与CPLEX的一些热启动有关。
如何预防?
我宁愿不将具有正系数的变量添加到目标,因为有很多。
以下是Java中的示例:
IloCplex cplex = new IloCplex();
/* Variables */
IloNumVar x = cplex.intVar(0, Integer.MAX_VALUE, "x");
/* Objectiv */
IloLinearNumExpr objExpr = cplex.linearNumExpr();
objExpr.addTerm(1.0, x);
IloObjective objective = cplex.addMaximize();
objective.setExpr(objExpr);
/* Constraints */
IloLinearNumExpr expr = cplex.linearNumExpr();
expr.addTerm(1.0, x);
cplex.addLe(expr, 2.5);
System.out.println(cplex.getModel().toString());
cplex.solve();
System.out.println("x = " + cplex.getValue(x) + "\n"); // x = 2.0
objective.clearExpr();
IloLinearNumExpr newObjexpr = cplex.linearNumExpr();
objective.setExpr(newObjexpr);
System.out.println(cplex.getModel().toString());
cplex.solve();
System.out.println("x = " + cplex.getValue(x) + "\n"); // x = 2.0
答案 0 :(得分:2)
尝试
cplex.setParam(IloCplex.Param.Advance, 0);