cplex java api ifThen структура

Я пытаюсь смоделировать ограничение в cplex, которое имеет структуру IF-THEN. В 2d-массиве (m x m + n) я хочу, чтобы sum_ofRows (m строк) было 1, тогда sum_ofColumns (m columns) должно быть 0. В cplex java api структура IF-THEN принимает в качестве аргументов два ограничения cplex.ifThen (Iloconstraint arg0, Iloonstraint arg2). 1) как я могу создать ограничение, не добавляя его в модель, то есть не использовать cplex.addEq (1, variable), а сохранить его где-нибудь в качестве ограничения? 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]);
                    }

person highlander    schedule 03.08.2014    source источник


Ответы (1)


Похоже, у вас есть правильный ответ. Раньше я использовал ограничения, не добавляя их к модели, и все работало так же, как вы написали в своем коде.

person Delfic    schedule 04.05.2015