cplex java api ifThen结构

时间:2014-08-03 21:34:55

标签: java if-statement cplex

我正在尝试在具有IF-THEN结构的cplex中建模约束。在二维数组(m x m + n)中,我想如果sum_ofRows(m行)为1,则sum_ofColumns(m列)应为0。在cplex java api中,IF-THEN结构将两个约束作为参数cplex.ifThen(Iloconstraint arg0,Iloonstraint arg2)。 1)如何在不将其添加到模型的情况下创建约束,这意味着不使用cplex.addEq(1,变量),而是将其作为约束存储在某处? 2)我们有一个表达式,然后我们添加相等或不等式检查,它也会自动添加到模型中,我是对的吗?

    for(int i=0; i<m; i++){
                drArrRow[i] =  cplex.linearNumExpr();
                    for(int j=0; j<m;j++){
                        drArrRow[i].addTerm(1, x[i][j]);

                    }
                    cplex.addEq(1, drArrRow[i]);
                }

            //second part "then"
               for(int j=0; j<m; j++){
                   drArrCol[j] =  cplex.linearNumExpr();
                    for(int i=0; i<m;i++){
                        drArrCol[i].addTerm(1, x[i][j]);

                    }
                    cplex.addEq(1, drArrCol[j]);
                }

    //cplex.ifThen(constraint, constraint);
    //Here i got stuck

谢谢!

这是正确答案吗?

            IloLinearNumExpr[] drArrCol= new IloLinearNumExpr[m];
            IloLinearNumExpr[] drArrRow= new IloLinearNumExpr[m];
            IloConstraint[] drColConstr= new IloConstraint[m];
            IloConstraint[] drRowConstr= new IloConstraint[m];
            // first part "if"  
            for(int i=0; i<m; i++){
                drArrRow[i] =  cplex.linearNumExpr();
                    for(int j=0; j<m;j++){
                        drArrRow[i].addTerm(1, x[i][j]);

                    }
                    drColConstr[i] = cplex.eq(1, drArrRow[i]);
                }

            //second part "then"
               for(int j=0; j<m; j++){
                   drArrCol[j] =  cplex.linearNumExpr();
                    for(int i=0; i<m;i++){
                        drArrCol[j].addTerm(1, x[i][j]);

                    }
                    drRowConstr[j] = cplex.eq(1, drArrRow[j]);
                }
             //end of 3 constraint 

               for(int i=0; i<m; i++){
                        cplex.ifThen(drRowConstr[i], drColConstr[i]);
                    }

1 个答案:

答案 0 :(得分:0)

看起来你有正确的答案。我之前使用过约束而没有将它们添加到模型中,它就像你在代码中写的那样工作。