首页 > 解决方案 > CPLEX 将具有零目标系数的变量设置为正值

问题描述

我需要阻止 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

标签: cplex

解决方案


尝试

cplex.setParam(IloCplex.Param.Advance, 0);

推荐阅读