Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用cplex和java创建两类因变量_Java_Optimization_Linear Programming_Cplex - Fatal编程技术网

用cplex和java创建两类因变量

用cplex和java创建两类因变量,java,optimization,linear-programming,cplex,Java,Optimization,Linear Programming,Cplex,我是新来CPLEX工作的。我的简化优化问题是: objective function: Maximize z1 + z2 + z3 Subject to: c1: x1 - 3 x2 + x3 <= 30 c2: x1 + x2 + x3 >= z1 ... Bounds x1=[0,1] x2=[0,1]

我是新来CPLEX工作的。我的简化优化问题是:

 objective function: 
            Maximize z1 + z2 + z3
 Subject to:   
            c1: x1 - 3 x2 + x3 <= 30
            c2: x1 + x2 + x3 >= z1
            ...
 Bounds
            x1=[0,1]
            x2=[0,1] 
            ...
要对此问题建模,我的代码是:

public static void main(String[] args) {
    try {

        IloCplex cplex = new IloCplex();            
        IloNumVar[] z = cplex.numVarArray(3, 0.0, 1.0);
        IloLinearNumExpr objectiveExpr = cplex.linearNumExpr();

        IloLinearNumExpr constraintExpr1 = cplex.linearNumExpr();
        IloLinearNumExpr constraintExpr3 = cplex.linearNumExpr();
        IloNumVar[] x = cplex.numVarArray(3, 0.0, 1.0);
        for (int i = 1; i < 3; i++){
            objectiveExpr.addTerm(1, z[i]);
        }
        IloObjective obj = cplex.maximize(objectiveExpr);
        cplex.add(obj); 
        constraintExpr1.addTerm(1, x[1]);
        constraintExpr1.addTerm(-3, x[2]);
        constraintExpr1.addTerm(1, x[3]);
        cplex.addLe(constraintExpr1, 30);

        constraintExpr2.addTerm(-1, x[1]);
        constraintExpr2.addTerm(1, x[2]);
        constraintExpr2.addTerm(1, x[3]);
        cplex.addGe(constraintExpr2, z[1]);
        .
        .
        .
    }
    catch (IloException e){
        System.err.println("Concert exception '" + e + "' caught");
    }


}
此代码的生成模型为:

objective function:  
           Maximize x1 + 2 x2 + 3 x3
Subject To:               
           c1: x7 - 3 x8 + x9 <= 30
           c2: - x1 - x7 + x8 + x9 <= 0
Bounds
           0 <= x1 <= 1
           ...
如果它开始从x4而不是x7来建模约束,我可以很容易地区分x和z。

与David不同,我知道CPLEX大约17年了,但我也不明白你的问题是什么。你能解释一下生成的模型与你所期望的有什么不同吗?我们也许可以自己解决这个问题,但如果你能更好地解释,我们中的许多人可能不得不花额外的时间来理解你的问题,这似乎是愚蠢的


我可以建议您使用setName命名变量和约束吗。。。因此,您可以更好地看到生成的模型中发生了什么。

我对CPLEX一无所知,但我认为,要有人帮助您,您必须说明问题所在。你收到错误信息了吗?错误消息是什么?它没有产生预期的结果吗?它产生了什么样的结果?你期望什么?谢谢。我的问题很复杂,所以我只写了一个简化的部分。我没有得到任何错误,但是代码不能正确地建模我的问题,非常感谢。我的问题通过使用setname解决了。谢谢