java - CPLEX Java - 获取 IloNumExpr 和数字之间的最小值

标签 java cplex

我尝试使用以下简化代码查找 IloNumExpr 和数字之间的最小值:

import ilog.concert.IloException;
import ilog.concert.IloNumExpr;
import ilog.concert.IloNumVar;
import ilog.cplex.IloCplex;

public class Test {

    public static void main(String[] args) {
        try {
            // Define model
            IloCplex cplex = new IloCplex();

            IloNumExpr objective = cplex.numExpr();
            IloNumVar var = cplex.intVar(0, 10);

            objective = cplex.sum(objective, cplex.prod(var, 10));
            cplex.addMinimize(objective);

            IloNumExpr aux1 = cplex.numExpr();
            IloNumExpr aux2 = cplex.numExpr();
            aux1 = cplex.prod(var, 1);
            aux2 = cplex.min(var, 1);

            if (cplex.solve()) {
                System.out.println("var: " + cplex.getValue(var));
                System.out.println("aux1: " + cplex.getValue(aux1));
                System.out.println("aux2: " + cplex.getValue(aux2));
            }

            cplex.end();
        }
        catch (IloException exc) {
            exc.printStackTrace();
        }
    }
}

但是,当我尝试打印 aux2 的值时,此代码返回错误。输出如下:

Tried aggregator 1 time.
LP Presolve eliminated 0 rows and 1 columns.
All rows and columns eliminated.
Presolve time = 0,00 sec. (0,00 ticks)
var: 0.0
aux1: 0.0
ilog.cplex.IloCplex$UnknownObjectException: CPLEX Error: object is unknown to IloCplex
    at ilog.cplex.CpxNumVar.getVarIndexValue(CpxNumVar.java:289)
    at ilog.cplex.EvalVisitor.visitNumVar(EvalVisitor.java:33)
    at ilog.cplex.CpxNumVar.accept(CpxNumVar.java:57)
    at ilog.cplex.IloCplex.getValue(IloCplex.java:8686)
    at Test.main(Test.java:29)

为什么会发生这种情况?

提前致谢

最佳答案

CPLEX 只能返回属于模型一部分的变量的值。您的变量 aux2 不是模型的一部分,因此 CPLEX 不知道它。 在求解模型之前尝试cplex.add(aux2)。这应该可以解决问题。

关于java - CPLEX Java - 获取 IloNumExpr 和数字之间的最小值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57956237/

相关文章:

python - CPLEX12.9 : Strong branching is not available for mixed-integer problems?

java - 使用赋值运算符设置 cplex java 约束 "+="

cplex - GAMS CPLEX 了解 IIS 报告

java - Android 静默发帖到 Facebook

java - 耶拿 - 对元素进行排序

c++ - CPLEX - 访问解决方案 C++ 时出错

c++ - 使用 MINGW 并链接 CPLEX 库从 Linux 编译 Windows 可执行文件

java - 在文件 log4j 的开头附加日志消息

java - 为什么我在Prometheus仪表盘上看不到Flink指标?

java - 为什么我们不应该将 tomcat 库放在我们的 appln 库中